यह निर्धारित करना कि क्या Google मानचित्र में दो बहुभुज अतिव्यापी हैं?


12

मैं गूगल मैप्स और पॉलीगॉन के साथ काम कर रहा हूं, लेकिन मुझे यह सत्यापित करना होगा कि पॉलीगॉन एक-दूसरे को ओवरलैप नहीं कर रहे हैं।

मेरे पास एक फ़ंक्शन है जो TRUE लौटाता है जब एक बिंदु (lat, lng) एक बहुभुज के अंदर होता है, लेकिन यह निर्धारित करने के लिए पर्याप्त नहीं है कि एक बहुभुज का प्रत्येक बिंदु दूसरे बहुभुज के अंदर है या नहीं।

कोई उपाय?


1
मुझे github.com/tparkin/Google-Maps-Point-in-Polygon ढूंढने में लगभग 10 सेकंड लगे । क्या आपने कुछ कोशिश की?
जॉन पॉवेल

4
उन्होंने लिखा "मेरे पास एक फ़ंक्शन है जो एक बिंदु (अक्षांश, लैंग) के बहुभुज के अंदर होने पर TRUE लौटाता है"। मुझे लगता है कि यह एक अच्छा परीक्षण है लेकिन इसका जवाब नहीं है कि क्या पूरा बहुभुज दूसरे के अंदर है।
user30184

1
मैं आपकी परियोजना के लिए जावास्क्रिप्ट टोपोलॉजी सूट पुस्तकालय जोड़ूंगा और इस तरह की तुलना के लिए इसके स्थानिक ऑपरेटरों का लाभ उठाऊंगा। मैंने एक समान प्रश्न पर एक उत्तर प्रदान किया जिसमें दिखाया गया है कि किसी परियोजना में jsts लाइब्रेरी को कैसे शामिल किया जाए और दो बहुभुज ज्यामितीयों पर एक भंग / संघ का प्रदर्शन किया जाए । आपको वह मददगार लग सकता है। यदि मेरे पास एक मौका है तो मैं देखूंगा कि क्या मैं एक उदाहरण ढूंढ सकता हूं या बना सकता हूं जो दो ज्यामितीयों के चौराहे के लिए परीक्षण करता है - बहुभुज, रेखा, या बिंदु कोई फर्क नहीं पड़ेगा, वे या तो प्रतिच्छेद करते हैं या वे नहीं करते हैं। :)
एल्ब्रोसिस

लेटलिंगबाउंड्स क्लास के इंटरसेक्ट मेथड पर एक नज़र डालें
बनी

जवाबों:


8

JSFiddle उदाहरण

मैंने जावास्क्रिप्ट टोपोलॉजी सूट (JSTS) (JSTS) लाइब्रेरी का उपयोग करके अपनी समस्या के समाधान का प्रदर्शन करते हुए JSField बनाया है

explaination

इस दृष्टिकोण के दो चरण हैं। पहला चरण आपके Google ज्यामिति को वेलकमनेट (WKT) ज्यामिति के भावों में परिवर्तित करता है , जो एक व्यापक रूप से समर्थित प्रारूप है। दूसरा चरण JSTS का उपयोग geometry.intersects()दो WKT ज्यामितीयों की JSTS तुलना करने के लिए करता है ।

वास्तव में इसे समझने के लिए आपको डब्ल्यूकेटी की एक बुनियादी समझ होनी चाहिए। क्योंकि आपके Google मानचित्र में बहुभुज ज्यामिति व्यापक रूप से समर्थित प्रारूप नहीं हैं, इसलिए मैं उन्हें तुरंत WKT ज्यामितीय में परिवर्तित कर देता हूं ताकि हम JSTS में उनके साथ काम कर सकें।

आसानी से ऐसा करने के लिए, मैंने विकेट लाइब्रेरी का उपयोग किया । बेशक, आप हमेशा अपनी खुद की Google-Polygon-to-WKT विधि को होम-रोल कर सकते हैं, या आप एक बार में एक बार मेरे द्वारा लिखे गए का उपयोग करने के लिए स्वागत करते हैं , या आप कुछ अन्य समाधान का उपयोग कर सकते हैं जो आप पा सकते हैं। व्यक्तिगत रूप से, इन दिनों मैं सिर्फ विकेट का उपयोग करता हूं, जिसे आप देख सकते हैं, दुष्ट-सरल है:

// Pass in two Google Polygon objects.
// It returns two WellKnownText (WKT) geometry expressions.
// 
function UseWicketToGoFromGooglePolysToWKT( poly1, poly2 )
{
    var wicket = new Wkt.Wkt();

    wicket.fromObject(poly1);
    var wkt1 = wicket.write();

    wicket.fromObject(poly2);
    var wkt2 = wicket.write();

    return [wkt1, wkt2];
}

अगला मांस और आलू है - जेएसटीएस का उपयोग करके दो डब्ल्यूकेटी जियोमेट्री लेते हैं और परीक्षण करते हैं कि वे इंटरसेक्ट करते हैं या नहीं। एक बार फिर, पुस्तकालय पर भरोसा करते हुए, इसमें बहुत कुछ नहीं है:

// Pass in two WKT geometry expressions.
// It performs a JSTS intersects() comparison.
// 
function UseJstsToTestForIntersection( wkt1, wkt2 )
{
    // Instantiate JSTS WKTReader and get two JSTS geometry objects
    var wktReader = new jsts.io.WKTReader();
    var geom1 = wktReader.read(wkt1);
    var geom2 = wktReader.read(wkt2);

    if (geom2.intersects(geom1)) {
      alert('intersection confirmed!');
    } else {
      alert('..no intersection.');
    }
}

मैंने लाइब्रेरी को फिडल में कैसे जोड़ा

उपरोक्त लिंक, और मेरे द्वारा दिखाए गए समाधान में आपकी परियोजना के लिए दो 3 पार्टी लाइब्रेरी जोड़ने की आवश्यकता है - JSTS, और विकेट। उनके संबंधित गित्ब्स से कोड प्राप्त करना और इसे अपनी परियोजना में शामिल करना एक अलग अभ्यास है। लेकिन फिडेल के लिए , मैंने उन पुस्तकालयों से उन्हें एक मौजूदा JSTS उदाहरण में संदर्भित किया, जो मैंने क्रिस्टोफर मैनिंग द्वारा पोस्ट किया गया था , साथ ही विकेट के स्वयं के डेमो पेज से भी जुड़ा था । मूल रूप से मैंने पृष्ठ खोले, "स्रोत देखें" का चयन किया, और दो पुस्तकालयों के लिए प्रासंगिक संदर्भों को जोड़ दिया। ये सटीक पुस्तकालय समापन बिंदु थे जिनका मैंने उपयोग किया था:

http://arthur-e.github.io/Wicket/wicket.js
http://arthur-e.github.io/Wicket/wicket-gmap3.js
http://bl.ocks.org/christophermanning/raw/4450188/javascript.util.min.js
http://bl.ocks.org/christophermanning/raw/4450188/jsts.min.js

इसके अलावा एफडब्ल्यूआईडब्ल्यू, एसओ पर इस थ्रेड में कुछ उपयोगी ओवरलैप है
एलब्रोबिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.