获取Android上给定边界的地图缩放级别,如JS Google Maps API:map.getBoundsZoomLevel(bounds)

时间:2011-02-12 16:33:04

标签: android google-maps maps zoom bounds

我有一个聚类标记,用于定义包含一组标记的边界矩形。群集有一个中心(lat,lon),一个标记计数和一个纬度和经度范围来计算边界。

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

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

有人为我提供了工作代码段或一些建议吗?

提前致谢 关心Thorsten。

3 个答案:

答案 0 :(得分:11)

谢谢你的回答Solvek。与此同时,我找到了一个解决方案,我稍微适应了它的工作原理。该方法计算一组地理点的边界,计算这些点的跨度,最后使用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));
}

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

我没试过这个,但也许它会对你有用。想象一下你有一个矩形(x1,y1) - (x2,y2)

    MapController c = mapView.getController();
    c.setCenter(new GeoPoint((x1+x2)/2,(y1+y2)/2));
    c.zoomToSpan(x2, y2);