क्या यह निर्धारित करने के लिए कोई पोस्टजीआईएस फ़ंक्शन है कि क्या एक लिनेस्ट्रिंग स्वयं को संक्रमित करता है?


16

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

तो क्या जाँच के लिए कोई PostGIS फ़ंक्शन हैं यदि एक linestring आत्म-प्रतिच्छेद कर रहा है? यह पता लगाने के समान होना चाहिए कि क्या कोई बहुभुज जटिल है जिसे मैं मानूंगा


यहाँ एक दूसरा उत्तर था जिसने मुझे PostGIS वार करने में बहुत मदद नहीं की, लेकिन इसमें समस्या के बारे में कुछ उपयोगी जानकारी का लिंक था। ऐसा लगता है कि इसे हटा दिया गया है। क्या किसी के पास वह लिंक है?
जेफ

जवाबों:


14

आप एक आत्म-अन्तर्विभाजक लिनेस्ट्रिंग के साथ परीक्षण कर सकते हैं ST_IsSimple(geom):

SELECT ST_IsSimple('LINESTRING (50 50, 150 150, 50 150, 150 50)');
 st_issimple
-------------
 f
(1 row)

POINT पर स्व-प्रतिच्छेदन (100.0 100.0)

छवि के ऊपर और नीचे कैप्शन JTS TestBuilder से हैं (क्लिक करें "सरल?")

आत्म-चौराहे पर POINT ( 100.0 100.0 )

इसे ST_UnaryUnion(geom)(पोस्टजीआईएस 2.0 के बाद से) के साथ तय किया जा सकता है , जो एक वैध / सरल तीन टुकड़े मल्टीलाइनरिंग देता है:

MULTILINESTRING((50 50, 100 100), 
  (100 100, 150 150, 50 150, 100 100), 
  (100 100, 150 50))

यह पूर्ण है! मुझे पता था कि जवाब इतना आसान होना चाहिए था। आपने कहा कि छवि बनाने के लिए आपने JTS टेस्टबिल्डर का उपयोग किया है। क्या कोई रास्ता है जिसे आप पोस्टगिस में चौराहे के बिंदु / बिंदु पर जाने के लिए जानते हैं?
जेफ

वह चुनौतीपूर्ण विस्तार है। JTS TestBuilder में CheckNoding है, लेकिन यह केवल MULTIPOINT के बजाय प्रति कॉल एक नोड को समन्वित करता है। मैं निश्चित रूप से निश्चित नहीं हूं कि PostGIS के साथ नोडिंग पॉइंट कैसे प्राप्त करें।
माइक टी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.