谷歌地图API:计算折线的中心/缩放

28

我有一个覆盖层,是从用户数据动态生成的,所以我需要知道如何找到该覆盖层的中心点。

目前,我只是使用覆盖层的第一个坐标,但这并不能真正代表覆盖层的中心。因此当我加载地图时,它并没有以覆盖层为中心。

是否有人有一个好的方法来计算覆盖层的中心点,从而使地图以其为中心,而不是硬编码?

var latlng = new google.maps.LatLng(38.269239, -122.276010);
    var myOptions = {
        zoom: 15,//Calculate this somehow?
        center: latlng,// Calculate value from array of coordinates?
        mapTypeId: google.maps.MapTypeId.HYBRID
    };
2个回答

93

如果你有一组坐标,你可以循环遍历它们并将它们添加到LatLngBounds对象中。这里是一个V3 API的例子,但V2中的概念类似:

var bounds = new google.maps.LatLngBounds();
for (var i = 0; i < coordinates.length; i++) {
  bounds.extend(coordinates[i]);
}

然后,您可以使用以下代码获取中心点:

bounds.getCenter();

或者你可以直接调用map.fitBounds(),它将使地图围绕边界中心居中,并调整缩放比例,以便整个边界正好适合于视口。

map.fitBounds(bounds);

这个方法可以用来计算缩放级别吗? - Nic Hubbard
只需在初始化期间使用任何位置和缩放级别,并按照说明后调用 map.fitBounds(bounds);。如果您想强制执行某个最大缩放级别,则需要暂时注册 zoomChangeBoundsListener。如果您也需要示例,请告诉我。 - tux21b
在 API 的 V2 版本中那个还可以,但在 V3 版本中,LatLngBounds 必须按照 SW 和 NE 的顺序接收这两个变量,我们如何知道哪个是哪个? - Andres SK

15

根据 @tux21b 的说法,

      var bounds = new google.maps.LatLngBounds();
      polyline.getPath().forEach(function(e){//can't do polyline.getPath()[i] because it's a MVCArray
          bounds.extend(e);
      })         
      _map.fitBounds(bounds);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接