正如在放大地图时保持InfoWindow在视图中的问题中所指出的,v3 API似乎发生了变化,当InfoWindows可见时,会影响默认行为。
谷歌在自己的地图网站上的默认行为(http://goo.gl/maps/8ymit)通过不同的缩放处理来解释这一点。如果当前选定的标记在视口中可见,则缩放的"中心"似乎设置为标记位置;否则,它默认为地图的中心(或者在双击或鼠标滚轮滚动的情况下为鼠标的位置)。
如何复制谷歌地图网站的行为?我知道如何获得当前选定标记的位置,并判断它是否可见。然而,我没有幸运地将缩放活动的"中心"与设置地图的中心分开设置。
这个解决方案涉及很多数学问题。以下是概要:
- 计算当前缩放级别下当前地图视口的两条边之间显示的物理距离(通常以米为单位)
- 确定距离标记最近边缘的像素距离
- 确定在新缩放级别下当前地图的两条边之间显示的距离
- 使用步骤2中的像素距离,计算新的地图中心应该是什么,以使标记保持在相同的相对位置
- 设置地图缩放级别和中心点
资源
- 在像素坐标和LatLng坐标之间转换
- 球形几何图形库