2010-07-23 17 views
20

की ज़ूम मैं एक उपरिशायी कि गतिशील रूप से उपयोगकर्ता डेटा से उत्पन्न कर रहा है, तो मैं कैसे कि ओवरले के केंद्र खोजने के लिए पता करने की जरूरत।गूगल मैप्स एपीआई: गणना सेंटर/पॉलीलाइन

वर्तमान में, मैं सिर्फ ओवरले से पहले निर्देशांक का उपयोग कर रहा है, लेकिन वास्तव ओवरले के केंद्र का प्रतिनिधित्व नहीं करता। इसलिए जब मैं नक्शा लोड करता हूं, तो यह ओवरले पर केंद्रित नहीं होता है।

किसी को भी, ओवरले नक्शे पर केंद्रित केंद्र की गणना, मुश्किल नहीं है यह कोडिंग द्वारा के लिए एक अच्छा तरीका है?

var latlng = new google.maps.LatLng(38.269239, -122.276010); 
    var myOptions = { 
     zoom: 15,//Calculate this somehow? 
     center: latlng,// Calculate value from array of coordinates? 
     mapTypeId: google.maps.MapTypeId.HYBRID 
    }; 

उत्तर

78

आप निर्देशांक की एक सूची है, तो आप उन पर पाश कर सकते हैं और उन्हें एक LatLngBounds वस्तु में जोड़ें। यहाँ वी 3 एपीआई के लिए एक उदाहरण है, लेकिन V2 में अवधारणा समान है:

var bounds = new google.maps.LatLngBounds(); 
for (var i = 0; i < coordinates.length; i++) { 
    bounds.extend(coordinates[i]); 
} 

उसके बाद, आप के साथ केंद्र प्राप्त कर सकते हैं:

bounds.getCenter(); 

या वैकल्पिक रूप से, आप map.fitBounds() सीधे कॉल कर सकते हैं, जो सीमाओं के केंद्र के चारों ओर मानचित्र को केन्द्रित करेगा और ज़ूम समायोजित करेगा, ताकि पूरी सीमाएं बिल्कुल दृश्य पोर्ट में फिट हो जाएंगी।

map.fitBounds(bounds); 
+0

आप कमाल कर रहे हैं! धन्यवाद, यह काम करता है कि मुझे कैसे चाहिए! –

+0

क्या यह वही विधि ज़ूम की गणना करने के लिए उपयोग की जा सकती है? –

+0

प्रारंभिकरण के दौरान इच्छित किसी भी स्थिति और ज़ूम स्तर का उपयोग करें और 'map.fitBounds (सीमाएं) पर कॉल करें;' बाद में वर्णित। यदि आप कुछ अधिकतम ज़ूम स्तर को लागू करना चाहते हैं, तो आपको अस्थायी रूप से 'zoomChangeBoundsListener' को पंजीकृत करने की आवश्यकता होगी। मुझे बताओ कि आपको इसके लिए एक उदाहरण की आवश्यकता है। – tux21b

2

लैट्लिंगबाउंड्स का getCenter फ़ंक्शन हमेशा पॉलीलाइन के भीतर एक बिंदु प्रदान नहीं करता है। ऐसा लगता है कि इस्तेमाल किया गया एल्गोरिदम सरल है। मैं एक समाधान खोजने की कोशिश कर रहा हूं और यदि कोई पाया गया तो इसे यहां प्रकाशित कर देगा।

10

@ tux21b के आधार पर,

 var bounds = new google.maps.LatLngBounds(); 
     polyline.getPath().forEach(function(e){//can't do polyline.getPath()[i] because it's a MVCArray 
      bounds.extend(e); 
     })   
     _map.fitBounds(bounds); 
संबंधित मुद्दे