2008-11-27 9 views
8

Chciałbym przekazać x ilość lokalizacji geograficznych do interfejsu API Map Google i ustawić go w taki sposób w pobliżu tych lokalizacji i ustawić odpowiedni poziom powiększenia, aby wszystkie lokalizacje były widoczne na mapie. To znaczy. pokaż wszystkie znaczniki, które są aktualnie na mapie.Mieć mapy Google w pobliżu lokalizacji geograficznych i odpowiednio powiększać

Czy to możliwe z domyślnym interfejsem API serwisu Mapy Google lub czy muszę je rozwiązać, aby samodzielnie to zrobić?

Odpowiedz

3

Istnieje wiele sposobów na zrobienie tego, ale jest całkiem proste, jeśli używasz API V2. Zobacz: post for an example, this group post lub this post.

+0

Zauważ, że pierwszy związek wspomina, że ​​getBoundsZoomLevel() jest nieudokumentowane - nie jest to już prawdą. Zaimplementowałem coś podobnego do mojego projektu, działa dobrze - z wyjątkiem tego, że chciałbym wiedzieć o GBounds.extend()! –

9

użyłem fitBounds (API V3) dla każdego punktu:

  1. zadeklarować zmienną.

    var bounds = new google.maps.LatLngBounds(); 
    
  2. Przejdź przez każdego markera z pętli FOR

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

    map.fitBounds(bounds); 
    
+0

ten przykład nie jest do końca jasny – Francesco

+2

@camelCase: zależy od twoich umiejętności, +1 dokładnie to, czego szukałem – Moak

+0

@Możesz chcieć dodać maxZoom do obiektu mapy, aby zapobiec zbyt dużemu przybliżeniu! – joetsuihk

1

Idea Graya jest wielki, ale nie działa, jak jest. Musiałem wypracować hack dla 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

Dziękuję bardzo! –