2012-01-09 15 views
7

Konum servis uygulamam için Google Haritalar ve Google Geocoding hizmetini kullanıyorum. Adresi lat/lng konumuna çevirmek için Google Geocoding hizmetini kullanıyorum. Sorunum, maps.google.com'un yaptığı gibi belirli bir adres için otomatik olarak uygun bir yakınlaştırmanın nasıl bulunacağıdır. Örneğin, bir caddeyi maps.google.com'da (ör. Cisitu Baru, Bandung) aradığımda, caddeyi daha küçük yakınlaştırmada gösterecektir. Bir bölgeyi aradığımda (ör. Bandung), daha büyük yakınlaştırma gösterir. Ve il için daha büyük bir yakınlaştırma (ör. Jawa Barat/West Java), vb.Coğrafi Kodlama Sonucu için Otomatik Olarak Uygun Zoom Bulma

denedim hem

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 
    } 
}); 

ve Dürüst, hala bounds ve viewport ve ne bunların kullanımları vardır arasındaki fark code.google.com geliyor bilmiyorum

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

(/apis/maps/documentation/javascript/geocoding.html)

Ancak her ikisi de haritayı uygun yakınlaştırmada göstermiyor.

Şu anda, bu

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 

gibi küçük kesmek diğer çözüm var mı kullanıyor? (Ya da henüz bilmediğim Google Harita API'sından bir şey?)

Teşekkürler!

cevap

4

kullanım GLatLngBounds sınıf

bir örnek:

// 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)); 

^

hile eş zamanlı olarak GLatLngBounds nesnesine harita üzerinde görünür olması için gereken tüm noktaların listesini eklemektir. Google Haritalar API'sı, matematiğin geri kalanını yapabilir. Daha iyi bu check out örnek için http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds

: Sonuç geometrisinin http://unicornless.com/code/google-maps-v3-auto-zoom-and-auto-center

+0

v2 API'sini bilmiyorum. API v3'ü kullanarak açıklayabilir misiniz? Teşekkürler. V3'te –

+0

, LatLngBounds sınıfını kullanabilirsiniz http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds –

+2

Nice, örnek URL'nizden "fitBounds" yöntemini öğrendim. Ben sadece map.fitBounds (sonuçlar [0] .geometry.bounds) 'yi yapıyorum ve cazibe gibi çalışıyor. Teşekkürler! –

3

kullanım görünüm

veya (v2 GLatLngBounds benzer) LatLngBounds sınıfını, bağlantıyı kullanabilir v3 içinde

. Arama sonuçlarınızda belirli bir sınırlama yoksa, geometri.bounds

görünümüyle bir hata elde edersiniz.

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