7

我有一个集群标记,它定义了一个包含一组标记的边界矩形。集群有一个中心(纬度,经度),一个标记计数和一个纬度和经度跨度来计算边界。

Google Maps API (JS) 有一个名为“getBoundsZoomLevel(bounds)”的函数,但我在适用于 Android 的 Google Maps SDK 中找不到等效方法。如何估计给定边界的缩放级别(尤其是在具有不同分辨率/密度的不同设备上)?

我计划用户可以触摸集群标记,地图视图将以该集群的中心和边界为中心。

有没有人可以工作的代码片段或对我的一些建议?

在此先感谢 问候托尔斯滕。

4

3 回答 3

11

谢谢你的回答索尔克。同时,我找到了一个我稍微调整过的解决方案,它可以工作。该方法计算一组地理点的边界,计算这些点的跨度,最后使用 zoomToSpan 和 animateTo 放大和居中给定区域:

 public static void zoomInBounds(final MapView view, final GeoPoint.. bounds) {

    int minLat = Integer.MAX_VALUE;
    int minLong = Integer.MAX_VALUE;
    int maxLat = Integer.MIN_VALUE;
    int maxLong = Integer.MIN_VALUE;

    for (GeoPoint point : bounds) {
        minLat = Math.min(point.getLatitudeE6(), minLat);
        minLong = Math.min(point.getLongitudeE6(), minLong);
        maxLat = Math.max(point.getLatitudeE6(), maxLat);
        maxLong = Math.max(point.getLongitudeE6(), maxLong);
    }

    final MapController controller = view.getController();
    controller.zoomToSpan(
                       Math.abs(minLat - maxLat), Math.abs(minLong - maxLong));
    controller.animateTo(new GeoPoint((maxLat + minLat) / 2,
        (maxLong + minLong) / 2));
}
于 2011-03-02T06:44:41.153 回答
3

现在您可以使用.newLatLngBounds()方法缩放到边界:

map.animateCamera(CameraUpdateFactory.newLatLngBounds(place.getViewport(), 10)); // 10 is padding

它将移动并缩放到给定的范围,因此它们都在屏幕上可见(例如,城市或国家的不同缩放)。它与位置搜索完美配合。

于 2015-12-01T06:52:04.830 回答
0

我没有尝试过,但也许它对你有用。假设你有一个矩形 (x1,y1)-(x2,y2)

    MapController c = mapView.getController();
    c.setCenter(new GeoPoint((x1+x2)/2,(y1+y2)/2));
    c.zoomToSpan(x2, y2);
于 2011-03-01T13:06:04.907 回答