एल्गोरिथ्म: एक स्रोत पॉलीलाइन को संदर्भ पॉलीलाइन में स्थानांतरित करें (पूरी तरह या शायद आंशिक रूप से)


10

हमारी प्रणाली में, ऐसी आवश्यकताएं हैं जिन्हें हम कुछ स्रोत लाइनों (कम परिशुद्धता के साथ) को संदर्भ लाइनों (उच्च परिशुद्धता के साथ) में स्थानांतरित करना चाहते हैं। निम्नलिखित चित्र सामान्य उपयोग के मामले देते हैं। लाल एक स्रोत रेखा है और नीला एक संदर्भ रेखा है।

लाल एक स्रोत रेखा है और नीला एक संदर्भ रेखा है

इस स्थिति के लिए, स्रोत लाइन को आंशिक रूप से स्थानांतरित किया जाएगा, और परिणाम ग्रीन लाइन शो के रूप में होगा:

1 परिणाम ले जाएँ

ऐसी स्थितियां हैं कि स्रोत लाइन को पूरी तरह से स्थानांतरित करने की आवश्यकता है।

उदाहरण 2

परिणाम:

परिणाम २

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

यह अधिकांश मामलों के लिए काम करता है, लेकिन ऐसे मामले हैं जो इस विधि से काम नहीं करते हैं। विशेष रूप से, जब दोनों में से किसी एक में "C" आकार की तरह होता है या हेड पॉइंट अंतिम बिंदु के बहुत करीब होता है। अगले दो चित्र परिदृश्य देते हैं।

C आकार रेखा की तरह

मेरे एल्गोरिथ्म को लागू करने पर, हमें इसका परिणाम मिलता है:

परिणाम

एक तरह से यह समझ में आता है क्योंकि वर्तमान एल्गोरिथ्म बस अनुमानित अंक और अर्क लाइनों को ढूंढता है।

हमें उम्मीद थी कि यह कुछ इस तरह है:

अपेक्षित परिणाम

तो मुझे ऐसा करने के लिए अधिक मजबूत एल्गोरिथ्म की आवश्यकता है ताकि यह पूर्ववर्ती जैसे विशेष मामलों को भी संभाल सके। मैंने हर बिंदु को एक पंक्ति से दूसरी रेखा पर प्रोजेक्ट करने और दो अनुमानित बिंदुओं को खोजने की कोशिश की है जो अनुमानित रेखा के शीर्ष / अंतिम बिंदु के सबसे करीब है, लेकिन कोई भाग्य नहीं था। फिर भी मुझे ऐसे मामले मिल सकते हैं जो अप्रत्याशित परिणाम देते हैं।

क्या पहले भी ऐसी ही कोई समस्या सामने आई है? यह भी बहुत अच्छा होगा यदि कोई सॉफ्टवेयर है या लाइब्रेरी समान काम कर सकती है। किसी भी उत्तर की सराहना की जाएगी।


1
शायद यह आपकी मदद करेगा जब आप देखेंगे कि कैसे आर्कगिस में टोपोलॉजी जांचती है कि क्या वस्तुएं संयोग हैं: help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#// पैराग्राफ "क्लस्टर प्रोसेसिंग"।
जेन्स

आपके उत्तर के लिए धन्यवाद, @ जेंस। लेकिन मुझे डर है कि मैं क्या चाहता हूं।
mfdev

क्या ये रेखा किसी नेटवर्क का प्रतिनिधित्व करती है? क्या उनके बीच सामयिक संबंध हैं?
जुलिएन

यह एक नेटवर्क और संभवतः कोई सामयिक संबंध नहीं होना चाहिए।
mfdev

जवाबों:


4

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


इसका कुछ इसी तरह का उदाहरण यहां देखा जा सकता है: vividsolutions.com/jcs JCS ज्यामिति के टकराव को स्वचालित करने के लिए एक लंबा रास्ता तय करता है, लेकिन इसमें ज्यामिति के लिए मैन्युअल क्यूए भी शामिल है जिसे यह पूरी तरह से विलय नहीं कर सकता है। vividsolutions.com/… इसे बनाया गया है और क्यूए के लिए अनुमति देता है और मुश्किल ज्यामितीयों के लिए समस्या ट्रैकिंग जोड़ता है।
DPierce

1
सभी टोपोलॉजिकल समाधान प्रोग्रामिंग द्वारा स्वचालित नहीं किए जा सकते हैं और बड़े उद्यमों में इस तरह के समाधान उदाहरण के समान विकसित किए जाते हैं क्योंकि एक उच्च परिवर्तन दर के साथ जटिल परिवहन ज्यामितीयों के साथ टकराव गिरना प्रकृति में बड़ा और चक्रीय हो सकता है।
lewis

2

आपको इस एल्गोरिथ्म के लिए एक स्नैप टॉलरेंस और टर्न टॉलरेंस की आवश्यकता होगी (मुझे लगता है कि आपके पास पहले से ही स्नैप टॉलरेंस है)।

स्रोत बिंदु से संदर्भ रेखा तक सिर बिंदु को प्रोजेक्ट करें। इस अनुमानित बिंदु पर संदर्भ रेखा को तोड़ें।

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

अब अनियंत्रित टुकड़े को लें और मूल संदर्भ लाइन पर अंतिम बिंदु को प्रोजेक्ट करें। पहले की तरह ही प्रक्रिया करें ... यात्रा की दिशा खोजने के लिए स्रोत को अंतिम बिंदु से पहले शीर्ष तक ले जाएं। प्रोजेक्ट एंड पॉइंट पर रेफरेंस लाइन को तोड़ें और यह पता लगाने के लिए कि क्या टर्न टॉलरेंस के भीतर टर्न टॉलरेंस के भीतर से यात्रा की दिशा है, हर एक को ढूंढना होगा। यदि हां, तो एल्गोरिथ्म को सामान्य रूप से लागू करने के लिए संदर्भ लाइन के उस टुकड़े का उपयोग करें।

याद रखें, इस बिंदु पर आप केवल अचेतन टुकड़े का उपयोग कर रहे हैं, इसलिए आप सिर बिंदु परिवर्तन के साथ ओवरलैप नहीं करेंगे।

अंत में, यदि आवश्यक हो तो दो परिणामी लाइन के टुकड़ों को मर्ज करें: हेड पॉइंट प्रोजेक्ट किए गए हेड पॉइंट से अनट्रॉन्स्ड ब्रेक पॉइंट तक और फिर एंड पॉइंट पर अनट्रॉन्डेड ब्रेक पॉइंट से प्रोजेक्टेड एंड पॉइंट में बदल दिया।

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