Google Maps API:计算折线的中心/缩放

Nic*_*ard 26 google-maps overlay polyline

我有一个从用户数据动态生成的叠加层,所以我需要知道如何找到该叠加层的中心.

目前,我只使用叠加层中的第一个坐标,但这实际上并不代表叠加层的中心.因此,当我加载地图时,它不会在叠加层上居中.

有没有人有一个很好的方法可以通过计算中心而不是硬编码来将地图集中在叠加层上?

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
    };
Run Code Online (Sandbox Code Playgroud)

tux*_*21b 86

如果你有一个坐标列表,你可以循环它们并将它们添加到LatLngBounds对象.以下是V3 API的示例,但V2中的概念类似:

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

之后,您可以通过以下方式获得中心:

bounds.getCenter();
Run Code Online (Sandbox Code Playgroud)

或者,您可以map.fitBounds()直接调用,这将使地图围绕边界的中心居中并调整缩放,以便整个边界完全适合视图端口.

map.fitBounds(bounds);
Run Code Online (Sandbox Code Playgroud)


And*_*son 12

基于@ 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);
Run Code Online (Sandbox Code Playgroud)