谷歌地图在LatLng Bounds之间放大

时间:2016-07-08 10:31:08

标签: android google-maps zoom bounds markers

我在地图上有两个标记,应该同时显示。

这是通过以下方式实现的:

 final LatLngBounds.Builder builder = new LatLngBounds.Builder();
    for (Marker markerTemp : markers) {
        builder.include(markerTemp.getPosition());
    }

这很好用。但是,当标记彼此接近时,地图会非常缩小。 这是它发生的方式: 1-我选择两个彼此靠近的位置(变焦很好) 2-我选择两个相距很远的位置(变焦很好) 3-我选择两个彼此靠近的位置(变焦保持不变,标记重叠)。

我查了很多链接,包括:

(1)https://stackoverflow.com/questions/34247347/initialize-google-map-to-zoom-to-bounds(2) bounds google maps

(3)Setting max zoom level in google maps android api v2(4) Android map v2 zoom to show all the markers

(5)Adjusting google map (api v2) zoom level in android (6) Set a max zoom level on LatLngBounds builder

(7)android Zoom-to-Fit All Markers on Google Map v2

3 个答案:

答案 0 :(得分:2)

听起来您使用的功能仅在必要时缩小,但不能尽可能放大。您是否可以发布用于为相机设置动画的部件?

如果您只是使用

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

它应该有用。并确保调用它并且不要将其包装在检查边界是否已经可见的检查中。

答案 1 :(得分:2)

不使用地图填充完整解决此问题。此函数将获取所有latlng对象并将返回一个Pair,其中first将是pair.first将是center,而pair.second将是缩放级别。

public Pair<LatLng, Integer> getCenterWithZoomLevel(LatLng... l) {
    float max = 0;

    if (l == null || l.length == 0) {
        return null;
    }
    LatLngBounds.Builder b = new LatLngBounds.Builder();
    for (int count = 0; count < l.length; count++) {
        if (l[count] == null) {
            continue;
        }
        b.include(l[count]);
    }

    LatLng center = b.build().getCenter();

    float distance = 0;
    for (int count = 0; count < l.length; count++) {
        if (l[count] == null) {
            continue;
        }
        distance = distance(center, l[count]);
        if (distance > max) {
            max = distance;
        }
    }

    double scale = max / 1000;
    int zoom = ((int) (16 - Math.log(scale) / Math.log(2)));
    return new Pair<LatLng, Integer>(center, zoom);
}

你可以像下面这样使用它

  

Pair pair = getCenterWithZoomLevel(l1,l2,l3 ..);   mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(pair.first,pair.second));

答案 2 :(得分:0)

您可以通过以下功能获得两个位置之间的距离,并根据该位置找到缩放级别。

找到两个位置之间的直接距离的方法

location1.distanceTo(location2);

现在要计算半径,请使用以下内容。 dummy_radius将是价值的一半

double circleRad = dummy_radius*1000;//multiply by 1000 to make units in KM

private int getZoomLevel(double radius){
            double scale = radius / 500;
            return ((int) (16 - Math.log(scale) / Math.log(2)));
}

float zoomLevel = getZoomLevel(circleRad);
mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLon, zoomLevel));