क्षेत्र पर दृश्यता ग्राफ की गणना


9

मेरे पास कुछ बहुभुज (भूगोल डेटा प्रकार का उपयोग करके संग्रहीत) के साथ एक पोस्टजीआईएस तालिका है। वे एक गोलाकार पृथ्वी पर क्षेत्रों का प्रतिनिधित्व करते हैं।

सभी बहुभुजों के बीच से चुने गए शीर्षकों की प्रत्येक जोड़ी के लिए, मैं यह गणना करना चाहता हूं कि क्या वे दो कोने एक दूसरे के लिए "दृश्यमान" हैं। (वहाँ n * ( n -1) / 2 ऐसी जोड़ियाँ हैं, जहाँ n तालिका में सभी बहुभुजों की कुल विशिष्ट संख्याएँ हैं।) "एक दूसरे को दृश्यमान" करके, मेरा मतलब है कि महान-वृत्त पथ। दो कोने टेबल में किसी भी बहुभुज को नहीं काटते हैं।

उस संगणना को करने का सबसे तेज़ तरीका क्या है, अधिमानतः PostgreSQL / PostGIS में?

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


6
प्रासंगिक अवधारणाएं: दृश्यता रेखांकन और, यदि आप 3 डी के बजाय 2 डी में यह काम करना चाहते हैं, तो ग्नोमोनिक प्रक्षेपण
whuber

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

क्या आप समस्या का चित्रण साझा कर सकते हैं।
Addcolor

आप गोलाकार क्षितिज से परे सब कुछ बाहर कर सकते हैं (किनारे के पास लंबी वस्तुओं के लिए प्लस बिट) जो जल्दी से एक अनुमानित समन्वय सीमा बॉक्स के साथ किया जाता है। अन्यथा मुझे लगता है कि यह मूल रूप से एनपी कठिन है।
एंसरगिस

जवाबों:


1

जो दिखाई नहीं दे रहा है उसे घटाओ। मान लें कि आप समुद्र तट पर एक शिखर पर खड़े हैं, एक पड़ोसी बहुभुज के दो दूरस्थ कोने को देख रहे हैं। फिर आप मान सकते हैं कि इन शीर्षों के पीछे पूरे क्षेत्र में कोई भी शीर्ष इस शीर्ष से अदृश्य है।

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