2012-01-09 19 views
7

Używam Google Maps i usługi Google Geokodowanie dla mojej aplikacji usług lokalizacyjnych. Używam usługi Google Geokodowania do tłumaczenia adresu na pozycję lat/lng. Mój problem polega na tym, jak automatycznie znaleźć odpowiedni zoom dla określonego adresu, np. Maps.google.com.Automatyczne wyszukiwanie odpowiedniego powiększenia dla wyniku geokodowania

Na przykład, gdy przeszukuję ulicę na maps.google.com (np. Cisitu Baru, Bandung), pokaże ona ulicę przy mniejszym powiększeniu. Gdy przeszukuję region (np. Bandung), wyświetli on większy zoom. I większy zoom dla prowincji (np. Jawa Barat/West Java) i tak dalej.

Próbowałem zarówno

var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({ 
    'address': someAddress 
}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     console.dir(results); 
     //cut 
     map.panToBounds(results[0].geometry.bounds); //setting bound 
     //cut 
    } 
}); 

i

//cut 
map.panToBounds(results[0].geometry.viewports); //setting bound 
//cut 

(Szczerze mówiąc, ja nadal nie wiem, jaka jest różnica między bounds i viewport i jakie są ich zastosowania z code.google.com /apis/maps/documentation/javascript/geocoding.html)

, ale oba nadal nie wyświetlają mapy w odpowiednim powiększeniu.

Teraz używam mały kilof jak ten

var tabZoom = { 
    street_address: 15, 
    route: 15, 
    sublocality: 14, 
    locality: 13, 
    country: 10 
}; 
//cut 
map.setCenter(results[0].geometry.location); 
if (tabZoom[results[0].types[0]] != undefined){ 
    map.setZoom(tabZoom[results[0].types[0]]); 
} else { 
    map.zetZoom(10); 
} 
//cut 

Czy istnieje inne rozwiązanie? (Lub czegokolwiek z Google Map API, którego jeszcze nie znam?)

Dzięki!

Odpowiedz

4

użytku GLatLngBounds klasy

przykład:

// map: an instance of GMap2 

// latlng: an array of instances of GLatLng 

var latlngbounds = new GLatLngBounds(); 

for (var i = 0; i < latlng.length; i++) 
{ 
    latlngbounds.extend(latlng[ i ]); 
} 

map.setCenter(latlngbounds.getCenter(), map.getBoundsZoomLevel(latlngbounds)); 

^

Sztuką jest dodanie listy wszystkich punktów, które powinny być widoczne na mapie jednocześnie do obiektu GLatLngBounds. Google Maps API może wykonać resztę matematyki.

lub v3 można wykorzystać LatLngBounds klasę (podobny do GLatLngBounds w v2), link: http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds

na przykład lepiej to sprawdzić: http://unicornless.com/code/google-maps-v3-auto-zoom-and-auto-center

+0

Nie znam interfejsu API v2. Czy możesz opisać to za pomocą API v3? Dzięki. –

+0

w wersji 3 można użyć klasy LatLngBounds http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds –

+2

Po prostu znalazłem metodę "fitBounds" z przykładowego adresu URL. Po prostu robię 'map.fitBounds (results [0] .geometry.bounds);' i działa jak urok. Dzięki! –

3

użytkowania rzutnię geometrii wynikowej. jeśli wynik wyszukiwania nie ma określonych granic, wystąpi błąd z wyświetlaniem geometrii.bounds

zapewnia najlepszy widok dla wyniku.

map.fitBounds (wyniki [0] .geometry.viewport);

Powiązane problemy