居中/设置地图缩放以覆盖所有可见的标记?

我在地图上设置了多个标记,我可以静态设置缩放级别和中心,但是我想要的是覆盖所有标记,并尽可能地放大以使所有市场都可见

可用的方法如下

setZoom(变焦:数字)

setCenter(经纬度:经纬度)

setCenter都不支持multiple location or Location arrayinput, setZoom也没有任何这种types的function

在这里输入图像说明

您需要使用fitBounds()方法。

 var markers = [];//some array var bounds = new google.maps.LatLngBounds(); for (var i = 0; i < markers.length; i++) { bounds.extend(markers[i].getPosition()); } map.fitBounds(bounds); 

参考 :

用几个有用的技巧来扩展给定的答案:

 var markers = //some array; var bounds = new google.maps.LatLngBounds(); for(i=0;i<markers.length;i++) { bounds.extend(markers[i].getPosition()); } //center the map to a specific spot (city) map.setCenter(center); //center the map to the geometric center of all markers map.setCenter(bounds.getCenter()); map.fitBounds(bounds); //remove one zoom level to ensure no marker is on the edge. map.setZoom(map.getZoom()-1); // set a minimum zoom // if you got only 1 marker or all markers are on the same address map will be zoomed too much. if(map.getZoom()> 15){ map.setZoom(15); } //Alternatively this code can be used to set the zoom for just 1 marker and to skip redrawing. //Note that this will not cover the case if you have 2 markers on the same address. if(count(markers) == 1){ map.setMaxZoom(15); map.fitBounds(bounds); map.setMaxZoom(Null) } 

更新:
本主题的进一步研究表明,fitBounds()是不同步的,最好在调用拟合边界之前先定义一个监听器进行缩放操作。
谢谢@Tim,@ xr280xr,关于这个主题的更多例子: SO:setzoom-after-fitbounds

 google.maps.event.addListenerOnce(map, 'bounds_changed', function(event) { this.setZoom(map.getZoom()-1); if (this.getZoom() > 15) { this.setZoom(15); } }); map.fitBounds(bounds); 

有这个MarkerClusterer客户端实用程序可用于谷歌地图指定在这里谷歌地图开发商文章 ,这里是什么是它的用法:

有很多方法可以做你所要求的:

  • 基于网格的聚类
  • 基于距离的聚类
  • 视口标记pipe理
  • 融合表
  • 标记Clusterer
  • MarkerManager

你可以阅读上面提供的链接。

Marker Clusterer使用基于网格的聚类来聚集希望网格的所有标记。 基于网格的聚类通过将地图划分成一定大小的正方形(大小在每个缩放处变化)然后将标记分组到每个网格正方形中来工作。

在集群之前 在集群之前

聚类后 聚类后

我希望这是你在找什么,这将解决你的问题:)