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()
.
对于在2018年看到此问题的人们,Google Maps API v3现在支持第二个padding
参数,该参数指定要在您指定的边界周围包括的填充量。
为避免缩小,只需fitBounds
使用填充即可0
。对于这个例子map.fitBounds(map.getBounds(), 0)
初始化名为 的地图后,我遇到了同样的问题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
调用得太早!fitBounds
tilesloaded
解决方案:
google.maps.event.addListenerOnce(map, 'tilesloaded', function() {
var bounds = //define bounds...
map.fitBounds(bounds);
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5648 次 |
最近记录: |