chr*_*ris 197 javascript google-maps google-maps-api-3 fitbounds
我想在嵌入式Google Map(API v3)上绘制一组点.除非缩放级别太低(即缩小太多),否则我希望能够容纳所有点.我的方法是这样的:
var bounds = new google.maps.LatLngBounds();
// extend bounds with each point
gmap.fitBounds(bounds);
gmap.setZoom( Math.max(6, gmap.getZoom()) );
Run Code Online (Sandbox Code Playgroud)
这不起作用.如果在fitBounds之后直接调用,则最后一行"gmap.setZoom()"不会更改地图的缩放级别.
有没有办法获得边界的缩放级别而不将其应用于地图?解决这个问题的其他想法?
LGT*_*LGT 328
编辑:见Matt Diamond的评论如下.
得到它了!试试这个:
map.fitBounds(bounds);
var listener = google.maps.event.addListener(map, "idle", function() {
if (map.getZoom() > 16) map.setZoom(16);
google.maps.event.removeListener(listener);
});
Run Code Online (Sandbox Code Playgroud)
修改您的需求.
Jim*_*vin 67
我在我的一个应用程序中解决了类似的问题.你对这个问题的描述让我感到有点困惑,但我认为你有同样的目标......
在我的应用程序中,我想绘制一个或多个标记,并确保地图显示所有标记.问题是,如果我完全依赖于fitBounds方法,那么当存在单个点时,缩放级别将被最大化 - 这是不好的.
解决方案是在有多个点时使用fitBounds,在只有一个点时使用setCenter + setZoom.
if (pointCount > 1) {
map.fitBounds(mapBounds);
}
else if (pointCount == 1) {
map.setCenter(mapBounds.getCenter());
map.setZoom(14);
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*man 43
我多次来到这个页面得到答案,虽然所有现有的答案都非常有用,但他们并没有完全解决我的问题.
google.maps.event.addListenerOnce(googleMap, 'zoom_changed', function() {
var oldZoom = googleMap.getZoom();
googleMap.setZoom(oldZoom - 1); //Or whatever
});
Run Code Online (Sandbox Code Playgroud)
基本上我发现'zoom_changed'事件阻止了地图的UI"跳过",这是在我等待"空闲"事件时发生的.
希望这有助于某人!
Rob*_*ton 11
我刚刚通过提前设置maxZoom来修复此问题,然后将其删除.例如:
map.setOptions({ maxZoom: 15 });
map.fitBounds(bounds);
map.setOptions({ maxZoom: null });
Run Code Online (Sandbox Code Playgroud)
请试试这个:
map.fitBounds(bounds);
// CHANGE ZOOM LEVEL AFTER FITBOUNDS
zoomChangeBoundsListener = google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) {
if (this.getZoom()){
this.setZoom(15);
}
});
setTimeout(function(){
google.maps.event.removeListener(zoomChangeBoundsListener)
}, 2000);
Run Code Online (Sandbox Code Playgroud)