11

लक्ष्य: मैं एक कस्टम खोज (geocode) फ़ंक्शन रखना चाहता हूं और प्रत्येक परिणाम के पर क्लिक करने और उसे मानचित्र पर प्रदर्शित करने में सक्षम होना चाहता हूं।Google मैप्स एपीआई v3 - सीमाओं के साथ जियोकोडर परिणाम समस्या

वांटेड: तदनुसार, यानी नक्शा सीमा/ज़ूम स्तर एडजस्ट "MA, USA" के लिए खोज ज़ूम मुझे पूरे मैसाचुसेट्स राज्य को देखने जाने के लिए चाहिए, जबकि "बोस्टन, एम ए, संयुक्त राज्य अमेरिका" पर ज़ूम चाहिए के लिए खोज बोस्टन क्षेत्र कई परिणामों को सूचीबद्ध करते समय, परिणाम पर क्लिक करते समय भी इसे लागू करना चाहिए।

अंक: मैं फिटबाउंड के साथ ज्यामिति। बाउंड ऑब्जेक्ट का उपयोग कर सकता हूं - लेकिन - कुछ परिणाम जो आप geocoder का उपयोग करते हैं, उस geometry.bounds ऑब्जेक्ट नहीं है।

एक त्वरित उदाहरण: "बोस्टन" के लिए खोज रिटर्न

बोस्टन, एम ए, संयुक्त राज्य अमेरिका
बोस्टन, IN, USA
बोस्टन, KY, संयुक्त राज्य अमेरिका
बोस्टन, GA 31,626, संयुक्त राज्य अमेरिका
बोस्टन, सलेम , वीए 22713, यूएसए
बोस्टन, एनवाई 14025, यूएसए

"बोस्टन, केवाई" और "बोस्टन एनवाई 14025" दोनों में सीमाएं नहीं हैं।

प्रश्न: क्या उचित ज़ूम स्तर पर किसी मानचित्र पर किसी भी geocoder परिणाम प्रदर्शित करने का कोई विश्वसनीय तरीका है?

अभी मैं ऐसा ही कुछ का उपयोग कर रहा है, लेकिन मैं इस बदसूरत खोजने के लिए और यह ज़ूम मुद्दा

if (results[0].geometry.bounds) { 

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

} else { 

    map.setCenter(results[0].geometry.location); 
    // eventually set zoom here to some middle-range value (ugly) 
} 
+0

क्या आपने 'व्यूपोर्ट 'ऑब्जेक्ट का उपयोग करने का प्रयास किया है। – andresf

+1

व्यूपोर्ट ऑब्जेक्ट में मुझे किन मूल्यों की तलाश करनी चाहिए? ऐसा लगता है कि वहां कोई सीमा वापस नहीं आती है। धन्यवाद। – MrUpsidown

उत्तर

15

दाएं। दोनों तरीकों और परीक्षण की कोशिश कर के बाद, यह बाहर आता है कि:

  1. geometry.bounds वस्तु "optionnaly लौटे" के रूप में दस्तावेज़ का कहना है
  2. हम वास्तव में नहीं पता है कि geometry.bounds वस्तु
  3. geometry.bounds पर आधारित है "अनुशंसित व्यूपोर्ट से मेल नहीं खा सकता" और अक्सर
  4. geometry.bounds किसी भी आकार और आकार के वर्ग या आयताकार देता है जबकि व्यूपोर्ट फ़ंक्शंस हमेशा एक ही पहलू अनुपात (लगभग 1.43) के साथ एक आयताकार लौटाता है, जो भी आपके मानचित्र कंटेनर आयाम जहां तक ​​मैंने परीक्षण किया है।

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

San Francisco, CA

समाधान काफी सरल है और विश्वसनीय है।

var resultBounds = new google.maps.LatLngBounds(

    results[0].geometry.viewport.getSouthWest(), 
    results[0].geometry.viewport.getNorthEast() 
); 

map.fitBounds(resultBounds); 
+0

क्या आप जानते हैं कि ये गुण अभी भी हैं? व्यूपोर्ट पर पहलू अनुपात पर पहलू अनुपात? जानकारी का स्रोत भी? –

+0

क्या आप इसका परीक्षण नहीं कर सकते? मुझे नहीं लगता कि मुझे इसके लिए एक पहेली थी। – MrUpsidown

1

व्यूपोर्ट वस्तु जानकारी आप एक सीमा वस्तु बनाने की जरूरत है समाधान नहीं करता है। कुछ इस तरह:

var bounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(results[0].geometry.viewport.southwest.lat, results[0].geometry.viewport.southwest.lng), 
    new google.maps.LatLng(results[0].geometry.viewport.northeast.lat, results[0].geometry.viewport.northeast.lng) 
); 

तो फिर तुम कि नई सीमा वस्तु पर fitBounds उपयोग कर सकते हैं, जैसा कि आप वापस आ सीमा वस्तु के लिए कर रहे हैं। इस तरह:

map.fitBounds(bounds); 
+0

मैं इसे एक मिनट में जांचूंगा, लेकिन, अगर मैं अच्छी तरह से समझता हूं, तो सभी परिणामों में इन 4 व्यूपोर्ट मान होंगे। तो अगर उनके पास है, तो कुछ परिणाम geometry.bounds ऑब्जेक्ट के साथ क्यों आएंगे और कुछ नहीं? अजीब, मुझे लगता है ... – MrUpsidown

+0

मुझे पूरी तरह से यकीन नहीं है, लेकिन यहां Google की व्याख्या http://code.google.com/apis/maps/documentation/geocoding/#Results से ली गई है: "सीमाएं (वैकल्पिक रूप से लौटाई गई) स्टोर करती है बाध्यकारी बॉक्स जो पूरी तरह से लौटा परिणाम शामिल कर सकता है। ध्यान दें कि ये सीमाएं अनुशंसित व्यूपोर्ट से मेल नहीं खाती हैं। (उदाहरण के लिए, सैन फ्रांसिस्को में फ़ारलॉन द्वीप शामिल हैं, जो तकनीकी रूप से शहर का हिस्सा हैं, लेकिन शायद व्यूपोर्ट में वापस नहीं किया जाना चाहिए।) " –

+0

एमएमएचएच ... दिलचस्प! मैं दोनों तरीकों से कोशिश करने जा रहा हूं, मेरे मानचित्र पर कुछ आयत खींचें, यदि कोई हो तो मतभेदों की जांच करें और यहां रिपोर्ट करें। – MrUpsidown

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