谷歌地图API 3缩小了fitBounds

cod*_*odr 8 google-maps-api-3 fitbounds

我遇到了一个调用map.fitBounds似乎缩小的问题.我正在尝试使用backbone.js路由器来保存网址中的地图边界.我希望能够为网址添加书签,然后让地图看起来完全一样.

我注意到map.fitBounds(map.getBounds())在控制台中调用将始终缩小.我想在哪里不改变地图.

这是正常的行为吗?我如何强制执行此操作,以便从一个步骤到另一个步骤看起来相同?

谢谢

Tom*_*mik 12

几次讨论了Google Map API的这个问题.看到:

函数map.fitBounds()将视口设置为包含边界.但是map.getBounds()函数返回视口边界有一些额外的余量(请注意,这是正常行为,没有错误).放大的边界不再适合上一个视口,因此地图缩小.

解决问题的一个简单方法是使用地图中心和缩放级别.见功能map.getCenter(),map.setCenter(),map.getZoom()map.setZoom().

  • 我花了超过 16 个小时才降落到这里。即使这不是错误,也应该为那些试图这样做的人解决一些问题。 (2认同)

Cha*_*Liu 6

对于在2018年看到此问题的人们,Google Maps API v3现在支持第二个padding参数,该参数指定要在您指定的边界周围包括的填充量。

为避免缩小,只需fitBounds使用填充即可0。对于这个例子map.fitBounds(map.getBounds(), 0)

  • 这应该是新接受的答案。 (2认同)

Mig*_*cho 5

初始化名为 的地图后,我遇到了同样的问题map.fitBounds(...)。我遇到的行为是,如果fitBounds在地图初始化后几秒钟调用该方法,那么就没有问题(缩放是适当的)。fitBounds因此,首先我开始在加载地图后调用该方法,这在谷歌地图上转换为地图时idle

google.maps.event.addListener(map, 'idle', function() {
   var bounds = //define bounds...
   map.fitBounds(bounds);
});
Run Code Online (Sandbox Code Playgroud)

这实际上是有效的,但是该idle事件几乎不断地被触发。如果地图发生任何更改(拖动、缩放等...),当此更改停止时,地图将再次适合边界...问题是仅调用该方法一次是行不通的无论是使用布尔值来检查是否已经被调用,或者google.maps.event.addListenerOnce因为地图第一次空闲时它仍然“没有准备好”来安装边界。(根据经验)。

所以我的解决方案fitBounds是在不同的事件上触发。该事件实际上完成了工作(仅调用一次) ,而不是对方法来说idle调用得太早!fitBoundstilesloaded

解决方案:

google.maps.event.addListenerOnce(map, 'tilesloaded', function() {
   var bounds = //define bounds...
   map.fitBounds(bounds);
});
Run Code Online (Sandbox Code Playgroud)