Google Maps API v3:我可以在fitBounds之后设置Zoom吗?

我有一组点,我想在嵌入式谷歌地图(API v3)上绘制。我希望边界能够容纳所有点,除非缩放级别太低(即缩小太多)。我的方法如下:

var bounds = new google.maps.LatLngBounds();

// extend bounds with each point

gmap.fitBounds(bounds); 
gmap.setZoom( Math.max(6, gmap.getZoom()) );

这不起作用。最后一行“gmap.setZoom()”如果在fitBounds之后直接调用,则不会更改地图的缩放级别。

有没有办法在不将边界应用于地图的情况下获取边界的缩放级别?解决这个问题的其他想法?


答案 1

编辑:请参阅下面的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); 
});

根据您的需求进行修改。


答案 2

我在我的一个应用程序中解决了类似的问题。我对你对问题的描述有点困惑,但我认为你有和我一样的目标......

在我的应用程序中,我想绘制一个或多个标记,并确保地图显示所有标记。问题是,如果我完全依赖于fitBounds方法,那么当有一个点时,缩放级别将被最大化 - 这是不好的。

解决方案是在有很多点时使用fitBounds,在只有一个点时使用setCenter+setZoom。

if (pointCount > 1) {
  map.fitBounds(mapBounds);
}
else if (pointCount == 1) {
  map.setCenter(mapBounds.getCenter());
  map.setZoom(14);
}