1

它是关于 android 和 google maps v2 的。我想设置有界限的最大缩放级别。这是我正在使用的方法:

gMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, width, height, padding));

我发现这个链接给了我一个可能的解决方法 Setting max zoom level in google maps android api v2

这是找到的解决方法

gMap.setOnCameraChangeListener(new OnCameraChangeListener() {
    @Override
    public void onCameraChange(CameraPosition position) {
        if (position.zoom > DEFAULT_ZOOM)
            gMap.animateCamera(CameraUpdateFactory.zoomTo(DEFAULT_ZOOM));
    }
});

但是这个解决方案放大到 first 定义的缩放级别animateCamera,然后缩小直到 DEFAULT_ZOOM if (DEFAULT_ZOOM < position.zoom)。在这种情况下,有两个animateCamera

如何避免这种情况?并且只做一个animateCamera

提前谢谢

4

1 回答 1

2

好的,目前,我唯一的解决方案与此处相关https://stackoverflow.com/a/19343818/1646479

这是解决方法:

private LatLngBounds adjustBoundsForMaxZoomLevel(LatLngBounds bounds) {
  LatLng sw = bounds.southwest;
  LatLng ne = bounds.northeast;
  double deltaLat = Math.abs(sw.latitude - ne.latitude);
  double deltaLon = Math.abs(sw.longitude - ne.longitude);

  final double zoomN = 0.005; // minimum zoom coefficient
  if (deltaLat < zoomN) {
     sw = new LatLng(sw.latitude - (zoomN - deltaLat / 2), sw.longitude);
     ne = new LatLng(ne.latitude + (zoomN - deltaLat / 2), ne.longitude);
     bounds = new LatLngBounds(sw, ne);
  }
  else if (deltaLon < zoomN) {
     sw = new LatLng(sw.latitude, sw.longitude - (zoomN - deltaLon / 2));
     ne = new LatLng(ne.latitude, ne.longitude + (zoomN - deltaLon / 2));
     bounds = new LatLngBounds(sw, ne);
  }

  return bounds;
}

但我正在寻找一种解决方案,将 android 缩放级别(在我的情况下为 16)转换为zoomN.

于 2013-10-17T09:35:14.190 回答