Geom के सुझाव को जोड़ना (एक आर-ट्री जाने का रास्ता है), आगे प्रदर्शन में सुधार करके प्राप्त किया जा सकता है:
1. पॉलीलाइन को सरल बनाएँ - पोलीलाइन में अंकों की संख्या पॉलीलाइन के सामान्य आकार को रखते हुए कम किया जा सकता है। यह कोण थ्रेसहोल्ड का उपयोग करके और प्रत्येक बिंदु को संसाधित करने या the Ramer-Douglas-Peucker algorithm का उपयोग करके किया जा सकता है। आप जो कर रहे हैं उसके आधार पर, आपको ट्रैक करना होगा कि मूल पॉलीलाइन से कौन से बिंदु सरलीकृत पॉलीलाइन के प्रत्येक सेगमेंट के लिए प्रारंभ/समाप्ति बिंदु के रूप में उपयोग किए गए थे (मूल पॉलीलाइन के बिंदुओं के सूचकांक कहीं और संग्रहीत किए जाने की आवश्यकता होगी)।
this example में आप देख सकते हैं कि पॉलीलाइन की संख्याओं को कैसे कम किया जा सकता है। लाल बिंदु उन बिंदुओं को इंगित करते हैं जिन्हें मूल पॉलीलाइन से उपयोग नहीं किया गया था, और हरे रंग के बिंदु उन बिंदुओं को इंगित करते हैं जिन्हें सरलीकृत पॉलीलाइन बनाने के लिए रखा गया था।
2. स्टोर एक आर-ट्री में सरलीकृत पोलीलाइंस, और प्रत्येक पॉलीलाइन के प्रत्येक खंड के बीच चौराहों का निर्धारण (खंडों की सीमा की तुलना गणना को कम करने के प्रदर्शन के लिए फायदेमंद है)। चूंकि यह किया जा रहा है, मूल पॉलीलाइन के सेगमेंट के पुराने सूचकांक प्रत्येक ज्ञात चौराहे से संबंधित जानकारी के रूप में संग्रहीत किए जाते हैं, जिसके साथ पॉलिलाइन्स छेड़छाड़ की जाती है (कुछ प्रकार के पहचानकर्ता का उपयोग किया जा सकता है)। यह अनिवार्य रूप से आपको मूल पोललाइनों में प्रत्येक सेगमेंट की प्रारंभ और अंत सीमा प्रदान करता है जहां चौराहे एक दूसरे के पॉलीलाइन के साथ मौजूद होती है।
3. यह चरण तभी किया जाता है जब छेड़छाड़ स्थान मूल पोलीलाइनों के चौराहे के सटीक स्थान से मेल खाना चाहिए। चरण 2 में प्राप्त चौराहे की जानकारी से डेटा के साथ आपको वापस जाने और मूल गैर-सरलीकृत पॉलिलाइन का उपयोग करने की आवश्यकता होगी। प्रत्येक चौराहे के साथ एक प्रारंभ और अंत सूचकांक होना चाहिए, और इन सूचकांकों का उपयोग यह निर्धारित करने के लिए किया जा सकता है कि कौन सा सूचकांक मूल पॉलीलाइन के विशिष्ट खंडों को संसाधित करने की आवश्यकता है। यह आपको केवल आवश्यक सेगमेंट को संसाधित करने की अनुमति देगा (चौराहे की जानकारी के साथ संग्रहीत प्रारंभ और अंत सूचकांक द्वारा दिया गया)।इसका एक विकल्प बिंदु का उपयोग करना होगा और एक बाउंडिंग बॉक्स को बाहरी रूप से विस्तारित करना होगा, फिर उस बाध्यकारी बॉक्स के साथ छेड़छाड़ करने वाली ओरिएंटल पॉलीलाइनों के सेगमेंट को संसाधित करना होगा (हालांकि इसमें अधिक समय लगेगा)।
4. यह हर दूसरे पॉलीलाइन के खंडों के खिलाफ एक पॉलीलाइन के अंतिम बिंदुओं की जांच करने के लिए एक अतिरिक्त कदम उठाने के बाद से सरलीकरण प्रक्रिया में कुछ endpoint चौराहों नॉक आउट कर सकते हैं आवश्यक हो सकता है। (यह आमतौर पर बहुत तेज है)।
the Bentley-Ottmann algorithm का उपयोग करके इस एल्गोरिदम को और बेहतर किया जा सकता है (यह स्वीप-लाइन एल्गोरिदम जियोम का जिक्र कर रहा था)। यह भी ध्यान रखें कि सरलीकरण एल्गोरिदम का उपयोग किया जाता है और इस तरह के एल्गोरिदम (उदाहरण के लिए कोणीय सहनशीलता) के लिए उपयोग किए जाने वाले पैरामीटर के आधार पर प्रदर्शन और सटीकता के बीच एक व्यापार-बंद हो सकता है (कुछ चौराहे के परिणाम पॉलिलाइन कितने सरल होते हैं) के आधार पर खो सकते हैं।
जाहिर है, वहाँ पुस्तकालय हैं जो व्यवहार्य हो सकते हैं, लेकिन अगर आप उस कंपनी के कारण लाइसेंस शर्तों से सीमित हैं या जिस उत्पाद पर आप काम कर रहे हैं, तो तीसरे पक्ष के पुस्तकालय एक विकल्प नहीं हो सकते हैं। इसके अतिरिक्त, अन्य पुस्तकालय भी प्रदर्शन नहीं कर सकते हैं।
स्रोत
2017-10-24 15:38:01
आप अभी भी बेंटले-ओटमैन का उपयोग कर सकते हैं। –
धन्यवाद बार्ट। क्या आप कृपया समझा सकते हैं? क्या यह चौराहे बिंदु नहीं मिलेगा जो पॉलीलाइन के बिंदुओं को जोड़ रहे हैं? – Sam
हां, जब भी आपको छेड़छाड़ मिलती है, तो आप जांचते हैं कि यह दो सेगमेंट का "असली" चौराहे है, या दो पॉली लाइन से जुड़े दो कनेक्टेड सेगमेंट का बिंदु है। –