2008-11-27 5 views
8

Je souhaite transférer un nombre x de géolocalisations à l'API Google Maps et les centrer autour de ces emplacements et définir le niveau de zoom approprié pour que tous les emplacements soient visibles Sur la carte. C'est à dire. montre tous les marqueurs qui sont actuellement sur la carte.Les cartes Google sont centrées autour des géo-locs et effectuent un zoom avant approprié

Est-ce possible avec ce que l'API Google Maps offre par défaut ou dois-je résoudre pour construire moi-même?

Répondre

3

Il y a plusieurs façons de le faire mais c'est assez facile si vous utilisez l'API V2. Voir ce post for an example, this group post ou this post.

+0

Notez que le premier lien mentionne que getBoundsZoomLevel() est en situation irrégulière - ce ne l'est plus. J'ai implémenté quelque chose de similaire pour un de mes projets, ça marche bien - sauf que je voudrais savoir sur GBounds.extend() alors! –

9

je fitBounds (API V3) pour chaque point:

  1. Déclarez la variable.

    var bounds = new google.maps.LatLngBounds(); 
    
  2. Traverser chaque marqueur avec boucle FOR

    for (i = 0; i < markers.length; i++) { 
        var latlng = new google.maps.LatLng(markers[i].lat, markers[i].lng); 
        bounds.extend(latlng); 
    } 
    
  3. Enfin appellent

    map.fitBounds(bounds); 
    
+0

cet exemple n'est pas vraiment clair – Francesco

+2

@camelCase: dépend de votre compétence, +1 exactement ce que je cherchais – Moak

+0

@Moak vous pouvez ajouter maxZoom à l'objet de la carte pour éviter le zoom trop près! – joetsuihk

1

Idée de Gray est grande, mais ne fonctionne pas comme il est. Je devais travailler un hack pour une zoomToMarkers API V3:

function zoomToMarkers(map, markers) 
{ 
    if(markers[0]) // make sure at least one marker is there 
    { 
     // Get LatLng of the first marker 
     var tempmark =markers[0].getPosition(); 

     // LatLngBounds needs two LatLng objects to be constructed 
     var bounds = new google.maps.LatLngBounds(tempmark,tempmark); 

     // loop thru all markers and extend the LatLngBounds object 
     for (var i = 0; i < markers.length; i++) 
     { 
      bounds.extend(markers[i].getPosition()); 
     } 

     // Set the map viewport 
     map.fitBounds(bounds); 
    } 

} 
+0

Merci beaucoup! –

Questions connexes