如何使地图放大并居中于特定的纬度/经度点?

时间:2017-12-09 21:08:10

标签: android

我试图这样做,以便当我启动我的应用程序时,手机将放大并居中到我已经通过一个lat和lang点的ArrayList设置PolyLines的区域。

    @Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    ArrayList<MyPoint> points = Data.getPoints();
    PolylineOptions polylineOptions = new PolylineOptions();
    for (int i = 0; i < points.size(); i++) {
        MyPoint point = points.get(i);
        polylineOptions.add(new LatLng(point.getLat(), point.getLng()));
    }
    Polyline polyline = mMap.addPolyline(polylineOptions);
}

我在genymotion中启动应用程序,然后放大,然后以我设置的lat / lang ArrayList点为中心。 目前,我只是得到一张几乎显示整个地球的地图,我必须手动放大到我设置的折线。

2 个答案:

答案 0 :(得分:4)

您需要相机更新工厂类来创建相机更新并移动地图的相机。 Camera Update Factory Documentation

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
ArrayList<MyPoint> points = Data.getPoints();

int padding = 20; // or prefer padding

LatLngBounds.Builder builder = new LatLngBounds.Builder();

PolylineOptions polylineOptions = new PolylineOptions();

for (int i = 0; i < points.size(); i++) {
    MyPoint point = points.get(i);
    polylineOptions.add(new LatLng(point.getLat(), point.getLng()));
    builder.include(new LatLng(point.getLat(), point.getLng()));
}

Polyline polyline = mMap.addPolyline(polylineOptions);
LatLngBounds bounds = builder.build();
map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, padding));


}

答案 1 :(得分:3)

您需要使用LatLngBounds,然后缩放相机以覆盖所有包含的标记:

LatLngBounds.Builder builder = new LatLngBounds.Builder();

在循环中对所有点/标记使用以下行:(您可以使用用于向polylineOptions添加点的相同循环。)

builder.include(pointLatLng);

最后,(在循环之外) -

LatLngBounds bounds = builder.build();
map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 20));