API GoogleMaps: calcul du Centre / Zoom de Polyline

j'ai une superposition qui est généré dynamiquement à partir des données de l'utilisateur, donc j'ai besoin de savoir comment trouver le centre de la superposition.

actuellement, je n'utilise que les premières coordonnées de la superposition, mais cela ne représente vraiment pas le centre de la superposition. Par conséquent, lorsque je charge la carte, elle n'est pas centrée sur la superposition.

Est-ce que quelqu'un a une bonne méthode pour centrer la carte sur la superposition, en calculant le Centre, pas en le codant dur?

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
    };
25
demandé sur Nic Hubbard 2010-07-23 21:46:54

2 réponses

si vous avez une liste de coordonnées, vous pouvez les passer en boucle et les ajouter à un LatLngBounds objet. Voici un exemple pour L'API V3, mais le concept de V2 est similaire:

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

Après cela, vous pouvez obtenir le centre avec:

bounds.getCenter();

ou alternativement, vous pouvez appeler map.fitBounds() directement, qui va centrer la carte autour du centre des bornes et ajuster le zoom, de sorte que l'ensemble des bornes s'adapte exactement dans le port de vue.

map.fitBounds(bounds);
80
répondu tux21b 2017-05-06 19:59:09

basé sur @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);
10
répondu Anderson 2013-08-21 08:21:35