解释我的问题并不容易,但我会尝试。
我有一个Android谷歌地图,除此之外,我总是在它的中心放置一个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)
如果您需要澄清,请告诉我
答案 0 :(得分:2)
您需要从两点计算LatLngBounds
:
第二个计算如下:
LatLng other = new LatLng(2 * center.latitude - position.latitude, 2 * center.longitude - position.longitude);
有关一般解决方案,请参阅LatLngBoundsUtils.fromCenterAndPositions。
答案 1 :(得分:1)
使用googleMap.getProjection().getVisibleRegion()
获取屏幕的所有四个角,因为LatLng
值会形成梯形。计算梯形与通过中心和标记绘制的线相交的位置。比例因子是(从中心到标记的距离/从中心到交叉点的距离)。现在只需使用相对于中心的比例因子来缩放梯形。这是一个新的可见区域。
您也可以使用getVisibleRegion().latLngBounds
来简化计算,但请注意,返回的矩形的某些区域实际上是不可见的。