2012-01-09 17 views
7

के लिए स्वचालित रूप से उचित ज़ूम ढूँढना मैं अपने स्थान सेवा एप्लिकेशन के लिए Google मानचित्र और Google जियोकोडिंग सेवा का उपयोग कर रहा हूं। मैं पते को लैट/एलएनजी स्थिति में अनुवाद के लिए Google जियोकोडिंग सेवा का उपयोग करता हूं। मेरी समस्या यह है कि maps.google.com जैसे किसी निश्चित पते के लिए स्वचालित ज़ूम स्वचालित रूप से कैसे ढूंढें।जियोकोडिंग परिणाम

उदाहरण के लिए, जब मैं maps.google.com (उदा। Cisitu Baru, Bandung) में एक सड़क खोजता हूं, तो यह सड़क को छोटे ज़ूम में दिखाएगा। जब मैं एक क्षेत्र खोजता हूं (उदा। Bandung), तो यह बड़ा ज़ूम दिखाएगा। और प्रांत के लिए एक बड़ा ज़ूम (उदा। Jawa Barat/West Java), और इसी तरह।

मैं कोशिश की है दोनों

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

और

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

(ईमानदारी से, मैं अभी भी क्या code.google.com से bounds और viewport और क्या उनके उपयोग कर रहे हैं के बीच का अंतर नहीं जानता /apis/maps/documentation/javascript/geocoding.html)

लेकिन दोनों अभी भी उचित ज़ूम में मानचित्र प्रदर्शित नहीं करते हैं।

अभी, मैं का उपयोग इस

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 

जैसे एक छोटे हैक वहाँ अन्य समाधान है? (या Google Map API से कुछ भी जो मुझे अभी तक नहीं पता है?)

धन्यवाद!

उत्तर

4

उपयोग GLatLngBounds वर्ग

एक उदाहरण:

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

^

चाल सभी बिंदुओं को एक साथ एक GLatLngBounds वस्तु में मानचित्र पर दृश्यमान होने की जरूरत है कि की सूची में जोड़ने के लिए है। Google मानचित्र API शेष गणित कर सकता है।

या v3 आप LatLngBounds वर्ग (v2 में GLatLngBounds के समान), लिंक का उपयोग कर सकते में: बेहतर इस जाँच से बाहर एक उदाहरण के लिए http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds

: परिणाम ज्यामिति के http://unicornless.com/code/google-maps-v3-auto-zoom-and-auto-center

+0

मैं v2 एपीआई से परिचित नहीं हूं। क्या आप एपीआई v3 का उपयोग कर इसका वर्णन कर सकते हैं? धन्यवाद। V3 में –

+0

आप लैट्लिंगबाउंड क्लास का उपयोग कर सकते हैं http://code.google.com/apis/maps/documentation/javascript/reference.html#LatLngBounds –

+2

अच्छा, मुझे आपके उदाहरण यूआरएल से 'फिटबाउंड' विधि मिली है। मैं बस 'map.fitBounds (परिणाम [0] .geometry.bounds) बनाते हैं; और यह एक आकर्षण की तरह काम करता है। धन्यवाद! –

3

उपयोग व्यूपोर्ट। यदि आपके खोज परिणाम में विशिष्ट सीमाएं नहीं हैं, तो आपको geometry.bounds

व्यूपोर्ट के परिणामस्वरूप आपको परिणाम देखने के लिए सबसे अच्छा दृश्य मिलेगा।

map.fitBounds (परिणाम [0] .geometry.viewport);

संबंधित मुद्दे