आर्क्स के एक सेट से कवरेज + ओवरलैप की गणना करने के लिए एल्गोरिदम


10

मेरे पास एक आकृति है जिसमें एक खेत में उर्वरक फैलाने वाले ट्रक द्वारा यात्रा की गई पथ का प्रतिनिधित्व करने वाले आर्क्स हैं।

मान लीजिए कि मुझे पता है कि प्रसार चौड़ाई 30 मीटर है, अर्थात ट्रक वाहन के 15 मीटर दूर तक उर्वरक फैला सकता है।

मैं पॉलीगोन का एक सेट उत्पन्न करना चाहता हूं, जो दिखाता है:
1) उर्वरक प्राप्त करने वाला कुल क्षेत्र
2) ओवरलैप के क्षेत्र, यानी जहां दो अलग-अलग पास बहुत पास थे, जैसे कि खेत के कुछ हिस्सों को दो बार सही "खुराक" प्राप्त हुई। “खाद का।

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

यदि यह प्रासंगिक है, तो मैं TatukGIS VCL DK का उपयोग कर रहा हूं, लेकिन मैं वास्तव में एक विशिष्ट समाधान के बजाय एक एल्गोरिथ्म की तलाश कर रहा हूं।

चर्चा के जवाब में कुछ स्पष्टीकरण:

1) मैं वेक्टर डेटा पर कोई विशेष मेटाडेटा (जैसे GPS लॉग या प्रसार दर) होने पर भरोसा नहीं कर सकता। मैं उपयोगकर्ता को एक परत चुनने और एक प्रसार चौड़ाई निर्दिष्ट करने की अनुमति देता हूं, फिर रिपोर्ट चलती है।

2) रिपोर्ट का उद्देश्य वास्तव में उपयोगकर्ता को यह दिखाना है कि वाहन ऑपरेटर कितना "कुशल" था, जहां "कुशल" का अर्थ है "सबसे कम ओवरलैप के साथ उच्चतम कवरेज हासिल किया"।

3) मैं रेखापुंज भूमि की तुलना में वेक्टर भूमि में अधिक आरामदायक हूं, इसलिए वेक्टर-आधारित समाधानों को प्राथमिकता दूंगा।

धन्यवाद,

डैरेन।


1
मुझे आश्चर्य है कि अगर यह उन तरीकों के समान होगा जो पूर्वानुमानित तूफानी रास्तों के आधार पर संचयी वर्षा की भविष्यवाणी करते हैं।
Kirk Kendkendall

जवाबों:


3

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

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

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


धन्यवाद। मैं आपके पहले सुझाव की तर्ज पर सोच रहा था - ज्यामिति को खंडों में विभाजित करना और उन्हें बफर करना। मुझे लगता है कि मुझे सेगमेंट के सिरों को भी बफर करने की आवश्यकता होगी, ताकि मुझे कोनों पर गोल किनारे मिलें। उस मामले के बारे में सोचकर, जहां मैं एक समकोण रेखा के साथ शुरू करता हूं - अगर मैं छोरों को बफर नहीं करता हूं, तो मैं कोने के बाहर लापता एक वर्ग के साथ दो अतिव्यापी आयतों के साथ समाप्त करूंगा (पाठ के रूप में व्यक्त करना मुश्किल!)
dbruning

मुझे लगता है कि मुझे सेगमेंट के सिरों को भी बफर करने की आवश्यकता होगी, ताकि मुझे कोनों पर गोल किनारे मिलें। मैं पिछले खंड के बफर के साथ प्रत्येक सेगमेंट के लिए बफर को इंटरसेक्ट करने के बारे में सोच रहा था, और फिर प्रत्येक बफर के "नए" भागों को मास्टर बफर में जमा कर रहा था। पिछले सेगमेंट के साथ ओवरलैप्स को नजरअंदाज करने का विचार है लेकिन पिकअप पुराने सेगमेंट के साथ ओवरलैप होता है।
dbruning

2

कोई समाधान नहीं, लेकिन कुछ इनपुट:

यह समस्या मानचित्र सामान्यीकरण में लाइन कोलेसिनेस डिटेक्शन समस्या के समान लगती है । यह तब होता है जब एक बड़ी शैली को एक पापी लाइन (प्रतीक आत्म-ओवरलैप्स) पर लागू किया जाता है:

यहां छवि विवरण दर्ज करें

यह दस्तावेज़ पीपी। 176 से 180 (फ्रेंच में ... क्षमा करें) इस तरह के स्व प्रतिच्छेदन भागों का पता लगाने के लिए एक एल्गोरिदम देता है। सिद्धांत, जैसा कि स्कव द्वारा प्रस्तावित किया गया है , एक सेगमेंट के 0, 1 या 2 सर्कल आर्क्स से बने प्रत्येक सेगमेंट के सिंगल साइड बफर का उपयोग करने के लिए है। जेटीएस में इस सिंगल साइड बफर का कार्यान्वयन शामिल है जो उपयोगी हो सकता है।


आप स्वयं चौराहों का पता लगाने के बारे में चिंतित क्यों हैं? और आप "सिंगल साइड" बफ़र्स का प्रस्ताव क्यों करते हैं? न ही समस्या के लिए जर्मे लगता है।
whuber

उद्देश्य यह पता लगाना है कि ट्रक कई बार उर्वरक कहां फैलाता है, वह वह जगह है जहां फैलता हुआ क्षेत्र आत्म-चौराहों है।
जुलिएन

2

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

समय डेटा ट्रैक्टर की प्रगति के एक जीपीएस रिकॉर्ड में उपलब्ध होगा। ढलान (समय बीतने से विभाजित दूरी) हर बिंदु पर गति का अनुमान लगाएंगे। वैकल्पिक रूप से, एक (एक सन्निकटन के रूप में) एक क्षेत्र के इंटीरियर के भीतर एक निरंतर गति और क्षेत्र की सीमा के एक उचित आंतरिक बफर के भीतर एक धीमी गति मान सकता है।

एक रेखापुंज प्रतिनिधित्व इन मुद्दों को संभाल सकता है। ट्रैक्टर के मार्ग को व्यवस्थित करें। यह सभी कोशिकाओं को ट्रैक्टर द्वारा NoData मानों (या शून्य) तक पार नहीं करता है। यदि ट्रैक्टर को एक मानक, निरंतर गति से आगे बढ़ना था, तो यह प्रत्येक डेटा कोशिकाओं में एक स्थिर मान रखने के लिए पर्याप्त होगा। अब, उदाहरण के लिए, यदि ट्रैक्टर इस गति से दुगुनी गति से आगे बढ़ रहा था, (संभवतया) इसकी आवेदन दर को आधा कर दिया जाएगा, और इसे कोशिकाओं में मूल्य को आधा करके दर्शाया जा सकता है।

सामान्य तौर पर, किसी भी सेल में डालने का मूल्य प्रति यूनिट क्षेत्र में आवेदन दर है । यदि ट्रैक्टर समान रूप से y k / sec की गति से यात्रा करते समय प्रत्येक पक्ष पर 15 मीटर प्रति सेकंड में x किलोग्राम का उर्वरक फैला रहा है, तो यह x / y Kg / sec / [m / sec] / (2 *) का प्रसार कर रहा है । 15 मीटर) = x / (30 y ) Kg / m ^ 2 उर्वरक। इस प्रकार, x / (30 y ) प्रत्येक सेल में डालने का मान है। x दिया गया है और y की गणना GPS डेटा से की गई है।

स्व-चौराहों को सिद्धांत में कोई समस्या नहीं है । यदि ट्रेक्टर का मार्ग स्वयं ही पार हो जाता है, तो प्रत्येक बार किसी सेल के पुनरावृत्ति होने पर योगदान जोड़ें। इसे पूरा करने के लिए कुछ विशेष प्रसंस्करण की आवश्यकता हो सकती है, यह निर्भर करता है कि ग्रिड कैसे बनाया जा रहा है और जीआईएस सॉफ्टवेयर की क्षमताओं पर निर्भर करता है।

उस तैयारी को करने के बाद, बाकी तेज और आसान है: इस ग्रिड का एक फोकल योग , 15 मीटर त्रिज्या के साथ एक परिपत्र पड़ोस का उपयोग करके, प्रत्येक सेल में प्रति यूनिट क्षेत्र में फैली संचयी राशि का पता चलता है।


1
+1 ऐसा लगता है कि अगर आपके पास एक उपकरण था जो कर्नेल (ट्रैक्टर का प्रतिनिधित्व करने वाला) को एक पथ के साथ स्थानांतरित करने की अनुमति देता था (प्रत्येक पंक्ति के साथ) यह समस्या अधिक प्रबंधनीय होगी।
किर्क कुएकेन्डल

@Kirk एक मार्ग या पंक्तियों या कर्नेल के साथ जो कुछ भी है, का पालन करने की कोई आवश्यकता नहीं है। यह महत्वपूर्ण है कि एक फोकल राशि के साथ देखने के बिंदु में परिवर्तन की सराहना करें: समस्या को बिंदुओं के पथ से फैलाने वाली सामग्री में से एक के रूप में देखने के बजाय, इसे एक कंप्यूटिंग के रूप में देखें कि क्षेत्र में हर बिंदु पर कितनी सामग्री जमा होती है। । जाहिर है यह एक ही समाधान के साथ एक ही समस्या है। चलती कर्नेल दृष्टिकोण (और प्रस्तावित बफ़रिंग दृष्टिकोण) पहला दृष्टिकोण लेता है; फोकल राशि, दूसरा। लेकिन फोकल योग टूल उपलब्ध है; एक चलती गिरी गणना नहीं है।
whuber

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

@ डिब्रूिंग इस दृष्टिकोण को ज्ञात गति / प्रसार दर की आवश्यकता नहीं लगती है ; यह सिर्फ उनके लिए अनुमति देता है (+ वास्तविकता का अधिक सटीक मॉडल) यदि आपके पास है। हालाँकि, यह कुछ सेल थ्रॉल्डिंग + काउंटिंग की आवश्यकता के लिए भी जा रहा है जिसे आप चाहते हैं कि मेट्रिक्स प्राप्त करने के लिए (कुल एरिया कवरेज; एरिया-ऑफ-ओवरलैप) सिस्टम से बाहर हो, और वहां सटीकता ट्रेड-ऑफ़ भी मिलाया गया हो।
दान एस।

@ वितरण यदि आप प्रसार दर नहीं जानते हैं, तो आपको एक रिश्तेदार प्रसार दर मिलेगी। यदि आप गति नहीं जानते हैं, तब भी आप जानते हैं (या जानना चाहिए) कि लोग ट्रैक्टर कैसे चलाते हैं और सापेक्ष गति के उचित अनुमानों को प्राप्त करने में सक्षम होना चाहिए। यदि आप निरंतर गति और निरंतर प्रसार दर मान लेते हैं, तब भी आपको उचित जवाब मिलेगा; वे ट्रैक्टर मार्गों के सीधे भागों पर बफर-आधारित उत्तरों से सहमत होंगे; और वे घुमावदार भागों में अधिक यथार्थवादी होने की संभावना है।
whuber

2

मैं StackExchange प्रोटोकॉल पर 100% निश्चित नहीं हूं इसलिए मैं इसे अपने प्रश्न के उत्तर के रूप में पोस्ट कर रहा हूं। यह जवाब मैं वैसे भी का उपयोग कर समाप्त हो गया है।

मूल एल्गोरिथ्म है:
1. परत पर किसी भी ज्यामिति को खंडों में तोड़ो 1/2 फैल चौड़ाई से अधिक नहीं है।
2. प्रत्येक खंड के लिए:
- आकृति के साथ पीछे की ओर देखते हुए "रोलिंग बफर" बनाएं, और पिछले सभी खंडों को बफरिंग करें जहाँ उन खंडों की संचयी लंबाई प्रसार चौड़ाई (बफर त्रिज्या = 1/2 फैल चौड़ाई) से कम है
- बनाएँ बस अगले सेगमेंट का एक "अगला खंड बफर" (बफर त्रिज्या = 1/2 फैल चौड़ाई)
- "नया बफर" प्राप्त करने के लिए "अगले खंड बफर" से "रोलिंग बफर" को घटाएं
- सभी "नए बफर" में शामिल हों बहुभुज एक साथ एक बहुभुज प्रति आकार प्राप्त करने के लिए।

अनिवार्य रूप से यह स्प्रेडर वाहन चालक को ओवरलैप जुर्माना के बिना दायां-कोण (या व्यापक) मोड़ने की अनुमति देता है, लेकिन अगर वे बहुत तेजी से वापस मुड़ते हैं जैसे कि वे "पुराने मैदान" में फैलते हैं, तो हम ओवरलैप प्राप्त करना शुरू करते हैं।

नीले रंग में ओवरलैप

सर्पिल ऐसा लगता है कि मैं इसे चाहता हूं:

कुंडली

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.