2010-06-14 8 views

उत्तर

11

अन्य समाधान: Google-Maps-Point-in-Polygonhttp://alienryderflex.com/polygon/

मैं एक नई विधि contains बहुभुज को जोड़ा गया

एक जावास्क्रिप्ट Google मानचित्र v3 e बहुभुज वर्ग के लिए XTension पता लगाने के लिए किया जाए या नहीं एक बिंदु यह भीतर रहता है ...

+0

कुछ अजीब कारणों से यह काम करता है लेकिन मैं कभी भी Google के स्थान को प्राप्त करने में सक्षम नहीं था () काम करने के लिए काम ..... – WildBill

+0

@WildBill - आपको काम करने के लिए ज्यामिति पुस्तकालय की आवश्यकता होगी। उदाहरण:? सेंसर = झूठी और पुस्तकालय = ड्राइंग, ज्यामिति – jjwdesign

+0

मैंने Google से ज्यामिति पुस्तकालय जोड़ा लेकिन यह अभी भी मेरे लिए काम नहीं करता है – AllJs

4

मैं इस एल्गोरिथ्म इस्तेमाल किया पता लगाने के लिए उस बिंदु बहुभुज के अंदर है:

// Add a function contains(point) to the Google Maps API v.3 

google.maps.Polygon.prototype.contains = function(point) { 
    var j=0; 
    var oddNodes = false; 
    var x = point.lng(); 
    var y = point.lat(); 

    var paths = this.getPath(); 

    for (var i=0; i < paths.getLength(); i++) { 
    j++; 
    if (j == paths.getLength()) {j = 0;} 
    if (((paths.getAt(i).lat() < y) && (paths.getAt(j).lat() >= y)) 
    || ((paths.getAt(j).lat() < y) && (paths.getAt(i).lat() >= y))) { 
     if (paths.getAt(i).lng() + (y - paths.getAt(i).lat()) 
    /(paths.getAt(j).lat()-paths.getAt(i).lat()) 
     * (paths.getAt(j).lng() - paths.getAt(i).lng())<x) { 
     oddNodes = !oddNodes 
     } 
    } 
    } 
    return oddNodes; 
} 

google.maps.Polyline.prototype.contains = google.maps.Polygon.prototype.contains; 
+0

बहुत अच्छा, यह काम करता है। बस 'var x = point.getPosition()। Lng(); 'और' var y = point.getPosition(); lat(); ' –

5

गूगल ज्यामिति पुस्तकालय के भीतर अपनी खुद कार्यान्वयन, जो मैं जाँच नहीं की है प्रदान करता है, लेकिन शायद बढ़त मामलों में विचार-विमर्श किया को शामिल किया गया अन्य जवाब

शामिल स्थान विधि described here देखें। ध्यान दें कि आप import the geometry library explicitly, as it is not in the base map API

21

को आप गूगल मानचित्र V3 में यह उपयोग कर सकते हैं: -

google.maps.geometry.poly.containsLocation(google.maps.LatLng(latitude, longitude),polygons); 

बहुभुज एक वस्तु polygoncomplete के बाद समारोह से लौट आए है।

var polygons=null; 
google.maps.event.addDomListener(drawingManager, "polygoncomplete", function(polygon) { 
     polygons=polygon; 
}); 

संदर्भ https://developers.google.com/maps/documentation/javascript/reference

2

हर विधि यहाँ वर्णित द्वारा एक ही रास्ता या किसी अन्य रूप में विफल रहता है।

आंद्रेई मैं और Natim द्वारा दिए गए तरीकों नहीं Geodesic किनारों के साथ बहुभुज पर विचार करते हैं। ये विधियां यह भी महसूस करने में विफल रही हैं कि Google मानचित्र में एक गैर-भौगोलिक किनारा केवल मर्केटर प्रक्षेपण के भीतर ही है। इन विधियों का मानना ​​है कि शिखर एक बराबर दूरी लेट/लॉन ग्रिड पर झूठ बोलते हैं जहां एक डिग्री अक्षांश एक डिग्री के रेखांश के बराबर होता है। इस त्रुटि के परिणामस्वरूप, ये विधियां पॉलीगॉन के बाहर एक बिंदु इंगित करेंगी, जबकि कुछ मामलों के लिए अंदर प्रदर्शित किया जा रहा है। यह लंबे समय तक गैर-लंबवत/गैर-क्षैतिज किनारों के लिए आसानी से मनाया जाता है। इस समस्या को हल करने के लिए, सभी बिंदुओं को पहले अक्षांश, रेखांश से एक्स, वाई मर्केटर प्रक्षेपण में निर्देशांक से परिवर्तित किया जाना चाहिए। Here is the method to convert the coordinates from lat/lon to x/y in Mercator. (सटीकता की कमी) Rhumb line navigation can be used as a basis for an alternative method. Google मानचित्र प्रयोगात्मक संस्करण 3.10 इस विधि को लागू करता है।

विधि पॉल गिब्स, स्वप्निल udare, और आदि लेस्टर ने उल्लेख किया Geodesic किनारों पर विचार करता है, लेकिन गूगल मैप्स v3.9 के रूप में यह एक ही विधि गैर Geodesic बहुभुज के लिए ऊपर उल्लेख किया है उपयोग करता है। जैसे कि यह ऊपर वर्णित एक ही मुद्दे से भी पीड़ित है।

अद्यतन - Google मानचित्र के साथ समस्या Google मानचित्र v3.10 के वर्तमान प्रयोगात्मक संस्करण में ठीक कर दी गई है।

2

जटिल एल्गोरिदम की कोई आवश्यकता नहीं है, मैं HTML कैनवास की isPointInPath() विधि का उपयोग करके इसे प्राप्त करने में सक्षम था।

http://www.w3schools.com/tags/canvas_ispointinpath.asp

एक कैनवास तत्व बनाएँ। moveTo(), lineTo() विधियों का उपयोग करके एकाधिक अंतराल के साथ बहुभुज बनाएं। सत्यापित करें कि क्या पॉइंट (x, y) बहुभुज के अंदर isPointInPath() विधि का उपयोग कर है।

<canvas id="canvas"></canvas> 

//x,y are coordinate of the point that needs to be tested 
//coordinates contains all endpoint of a polygon in format of x1,y1,x2,y2,x3,y3.... 
function isPointInPolygon(x, y, coordinates) { 
var ctx = canvas.getContext("2d"); 
var coords = coordinates.split(','); 

if (coords != null && coords.length > 4) { 
    ctx.beginPath(); 
    ctx.moveTo(coords[0], coords[1]); 
    for (j = 2; j < coords.length; j++) { 
     ctx.lineTo(coords[j], coords[j + 1]); 
     j++; 
    } 
    ctx.closePath(); 
    if (ctx.isPointInPath(x, y)) 
     return true; 
    else 
     return false; 
} 
return false; 
} 
+0

पोस्टर Google मानचित्र पर बहुभुज के बारे में पूछ रहा था। सभी ब्राउज़र कैनवास का समर्थन नहीं करते हैं और उपर्युक्त विधि मानक एक्स, वाई ग्रिड मानती है। यदि कोई कैनवास पर चित्रित कर रहा है, तो उपरोक्त विधि सही है अन्यथा यह केवल अपमानजनक है। ऊपर वर्णित अन्य विधियां कैनवास पर ड्राइंग के ऊपरी हिस्से के बिना इसकी गणना कर सकती हैं। Google मानचित्र v3.10 के रूप में सबसे अच्छी विधि google.maps.geometry.poly.containsLocation() है क्योंकि यह भूगर्भीय बहुभुज के साथ-साथ मर्केटर बहुभुज को संभालती है। – deAtog

+0

मैं सहमत हूं। यह वास्तव में इस प्रश्न का उत्तर नहीं देता है लेकिन पॉलीगॉन में बिंदु का पता लगाने के लिए एचटीएमएल 5 पर्यावरण में काम कर रहे लोगों की मदद कर सकता है और इस पोस्ट में समाप्त हो सकता है। मैं इस पोस्ट में आया और सभी एल्गोरिदम को लागू करने की कोशिश की लेकिन कुछ भी पूरी तरह से काम नहीं किया। मैंने मूल रूप से कैनवास का उपयोग कर एक फर्श योजना छवि पर एक कस्टम मानचित्र लागू किया। मुझे छवि के विभिन्न हिस्सों पर टूलटिप्स दिखाना था और एचटीएमएल छवि मानचित्र कार्यक्षमता की नकल करना था। –

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