2012-01-07 14 views
16

पर सर्कल ओवरले के भीतर है या नहीं, मेरे पास मानचित्र के चारों ओर चिह्नित मार्कर हैं, और आपके स्थान को चिह्नित करने वाले मार्कर पर एक त्रिज्या (सर्कल ओवरले) है (जो हर बार आपके द्वारा स्थानांतरित होता है)। क्या कोई तरीका है कि मैं यह देखने के लिए जांच कर सकता हूं कि अन्य मार्कर सर्कल के अंदर आते हैं या नहीं?पता लगाएं कि मार्कर Google मानचित्र (जावास्क्रिप्ट एपीआई वी 3)

अद्यतन

मैं एक दूसरे मार्कर के माध्यम से पाशन, और ज्यामिति पुस्तकालय का उपयोग कर अपने मार्कर और अन्य मार्कर और उसके बाद के बीच की दूरी की गणना के द्वारा इस के आसपास मिल गया एक सरल बयान देखने के लिए कि अगर यह कम से कम 100 है मीटर है।

function checkAllChests() { 
    var Current = 0; 
    $.each(treasureArray, function() { 
     //var thisLocation = treasureArray[Current].getPosition(); 

     var distanceBetween = Math.ceil(google.maps.geometry.spherical.computeDistanceBetween(treasureArray[Current].getPosition(), marker_me.getPosition())); 
     if(distanceBetween < 100) { 
      alert('CAN OPEN THIS CHEST'); 
     } 
     Current++; 
    }); 
} 

मुझे लगता है कि इसके बाद के संस्करण कोड jQuery का उपयोग करती नोट करने के लिए करना चाहते हैं, इसलिए यदि आप jQuery उपयोग नहीं कर रहे यह काम नहीं करेगा।

+0

आप अपना स्वयं का प्रश्न – duncan

उत्तर

45

यहाँ google.maps.Circle वर्ग के लिए एक contains विधि जोड़ने के लिए एक तरीका है। यह पहले बिंदु को बाहर करने के लिए बाउंडिंग बॉक्स का उपयोग करता है यदि यह बाउंडिंग बॉक्स में भी नहीं है। यदि यह सीमांकन बॉक्स में है, तो यह त्रिज्या के साथ केंद्र के लिए बिंदु से दूरी की तुलना करके सच रिटर्न केवल तभी दूरी त्रिज्या की तुलना में कम है।

एक बार जब आप जावास्क्रिप्ट नीचे जोड़ने के लिए, आप कॉल कर सकते हैं शामिल हैं() अपने सर्कल वस्तु पर विधि।

google.maps.Circle.prototype.contains = function(latLng) { 
    return this.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius(); 
} 
+0

के जवाब के रूप समाधान पोस्ट करना चाहिए क्यों न सिर्फ दूरी की गणना और त्रिज्या के साथ तुलना? – zavidovych

+0

सीमाओं की गणना करना बहुत सस्ता गणना है (यह केवल <= and > =) का उपयोग करता है, इसलिए इसे बंद करने वाली मंडलियों पर दूरी की अधिक महंगी गणना करने से पहले किसी भी मंडल को रद्द करने के लिए इसका उपयोग करें (गोलाकार दूरी जटिल है, सरल पाइथागोरियन दूरी अभी भी अपेक्षाकृत महंगा है) – Mark

+0

क्या आपके पास आयताकार के लिए एक समान विधि है? –

-4
google.maps.Circle.prototype.contains = function(latLng) { 
    return this.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius(); 
} 
+5

1. स्पष्टीकरण के बिना कोड न केवल डंप करें। 2. उत्तर देने से पहले, अन्य उत्तरों की जांच करें। यह कोड पहले से ही किसी अन्य उत्तर में मौजूद है। –

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