Подходящие границы для нескольких полигонов Google Maps

Я пытаюсь расширить границы карты для нескольких полигонов, но кажется, что это расширяет границы только для последнего полигона в цикле. Любые предложения о том, где я ошибаюсь?

 function FitBounds(){
    for (var i=0; i < shapes2.length; i++){
        var paths = shapes2[i].getPaths();
        var bounds= new google.maps.LatLngBounds();
        paths.forEach(function(path){
           var ar = path.getArray();
           for(var i=0, l = ar.length; i <l; i++){
              bounds.extend(ar[i]);
           }
        })
    }
    map.fitBounds(bounds)
 }

person Matt Polers    schedule 14.12.2016    source источник


Ответы (2)


Создайте границы вне цикла.

function FitBounds(){
    var bounds= new google.maps.LatLngBounds();
    for (var i=0; i < shapes2.length; i++){
        var paths = shapes2[i].getPaths();
        paths.forEach(function(path){
           var ar = path.getArray();
           for(var i=0, l = ar.length; i <l; i++){
              bounds.extend(ar[i]);
           }
        })
    }
    map.fitBounds(bounds)
 }
person geocodezip    schedule 14.12.2016

К вашему сведению, для других людей, попавших сюда, есть вспомогательные методы в библиотеке карт Google, упрощающие получение границ набора фигур:

function FitBounds(){
    var bounds = shapes2.reduce((boundsAccumulator, shape) => 
      boundsAccumulator.union(shape.getBounds()), new google.maps.LatLngBounds())
    
    map.fitBounds(bounds)
 }

или если вы не являетесь поклонником сокращения

function FitBounds(){
    var bounds = new google.maps.LatLngBounds()
    
    shapes2.forEach(shape) => bounds.union(shape.getBounds()))
    
    map.fitBounds(bounds)
 }
person DanLatimer    schedule 01.04.2021