棘手的 Android 谷歌地图缩放,同时保持中心点

Posted

技术标签:

【中文标题】棘手的 Android 谷歌地图缩放,同时保持中心点【英文标题】:tricky Android Google Map zoom while maintaining center point 【发布时间】:2013-08-21 22:08:33 【问题描述】:

解释我的问题并不容易,但我会尝试。

我有一个 android GoogleMap,在它上面,我始终有一个 ImageView 位于它的中心。如果我拖动/平移地图,图钉将始终位于 GoogleMap 的中心。

现在,我在地图上的某处添加一个标记。我想缩放以使中心点保持在地图的中心,并且标记在地图中可见,并达到最高缩放级别。

问题是如果我只是检查标记是否在地图的边界内,然后继续放大/缩小直到它,这个过程总是会重复自己,即尝试放大并且标记是否变为外面,然后缩小。

问题是我依赖一个 OnCameraChange 监听器,它会在我每次放大或缩小时不断调用自己,因此,放大/缩小的过程将无限期地继续发生

journeyGoogleMap.setOnCameraChangeListener(new OnCameraChangeListener()

   @Override
   public void onCameraChange(final CameraPosition position)
   

基本上,我需要的是一个函数,我可以提供中心 LatLng 和 markerLatLng,它会自动计算 LatLngBounds 确保我的中心在 LatLng 边界的中心内,然后我可以简单地使用

public static CameraUpdate newLatLngBounds (LatLngBounds bounds, int width, int height, int padding)

如下链接所示 https://developers.google.com/maps/documentation/android/reference/com/google/android/gms/maps/CameraUpdateFactory#newLatLngBounds(com.google.android.gms.maps.model.LatLngBounds,int, int,int)

如果您需要更多说明,请告诉我

【问题讨论】:

不确定是否为时已晚,请在此处查看我的答案:***.com/a/30118649/764897 【参考方案1】:

你需要从两点计算LatLngBounds

    您的标记位置和 放置在当前中心的另一侧。

第二个是这样计算的:

LatLng other = new LatLng(2 * center.latitude - position.latitude, 2 * center.longitude - position.longitude);

请参阅LatLngBoundsUtils.fromCenterAndPositions 了解通用解决方案。

【讨论】:

【参考方案2】:

使用googleMap.getProjection().getVisibleRegion() 将屏幕的所有四个角作为LatLng 值形成梯形。计算梯形与通过中心和标记绘制的线相交的位置。比例因子是(从中心到标记的距离/从中心到交叉点的距离)。现在只需使用这个相对于中心的比例因子来缩放梯形。这是新的可见区域。

您也可以使用getVisibleRegion().latLngBounds 来简化计算,但请注意返回的矩形的某些区域实际上是不可见的。

【讨论】:

以上是关于棘手的 Android 谷歌地图缩放,同时保持中心点的主要内容,如果未能解决你的问题,请参考以下文章

谷歌地图 - 缩放时保持中心

Android 谷歌地图 API v2 中心缩放

如何计算适当的谷歌地图缩放级别

使折线水平显示在谷歌地图上并将其缩放到中心坐标

如何在android中根据谷歌地图不同的缩放级别调整谷歌地图标记的大小

页面上的“缩放”元素,同时将放大中心保持在窗口的中心