PostGIS में रिंग सेल्फ-इन्टर्सेन्स


10

यह पिछले प्रश्न का अनुसरण है । आप देखेंगे कि मैं एक नया PostGIS उपयोगकर्ता हूं।

मैंने अपने डेटा में टोपोलॉजी की वैधता को देखा है और लैंडकवर (बहुभुज) डेटासेट में लगभग 1700 टोपोलॉजी मुद्दे खोजे हैं। ये सभी "रिंग सेल्फ सेपरेशन" हैं।

पॉल रामसे (२० पृष्ठ) की इस प्रस्तुति में कुछ उपयोगी जानकारी का उपयोग करते हुए , मैंने अपने डेटा को उसी हिसाब से बफ़र करने का प्रयास किया है:

UPDATE स्कीमा .डेटा SET the_geom = बफर (the_geom, 0.0) WHAIL isvalid (the_geom) = false और isvalid (बफर (the_geom, 0.0)) = true;

लेकिन मुझे प्रतिक्रिया मिल रही है:

सूचना: रिंग सेल्फ-चौराहे पर या उसके पास स्थित बिंदु (संपादित) ERROR: संबंध के लिए नई पंक्ति "sgm_buffer" चेक कांस्टेंट "enforce_geotyp_the_geom" का उल्लंघन करता है

********** त्रुटि **********

त्रुटि: संबंध के लिए नई पंक्ति "sgm_buffer" चेक का उल्लंघन करता है "enforce_geotyp_the_geom" SQL राज्य: 23514

मैंने भी बस कोशिश की है:

अद्यतन csgn.sgm_buffer सेट the_geom = बफर (a_geom, 0.0)

और पाओ:

त्रुटि: संबंध के लिए नई पंक्ति "sgm_buffer" चेक का उल्लंघन करती है "enforce_geotyp_the_geom"

********** त्रुटि **********

त्रुटि: संबंध के लिए नई पंक्ति "sgm_buffer" चेक का उल्लंघन करता है "enforce_geotyp_the_geom" SQL राज्य: 23514

तो क्या मुझे लगता है कि यह बफर तकनीक मेरे मुद्दों पर काम नहीं करेगी? या मुझ से कुछ गलत हो रहा है?

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

चुनें ST_BuildArea (ST_Union ('LINESTRING EMPTY', ST_ExteriorRing ('POLYGON (...))'

तो .... क्या कोई मदद कर सकता है? यह मेरे तंग समयसीमा और PostGIS में सीमित कौशल के साथ एक वास्तविक दुःस्वप्न साबित हो रहा है।


1
"sgm_buffer सीमा 1" रिटर्न से "ज्यामिति_प्रभु (the_geom) का चयन क्या करता है?" इसके अलावा, अन्य प्रश्न में उल्लिखित 40 घंटों के रनटाइम से संबंधित हैं, क्या आपकी मेज पर स्थानिक सूचकांक परिभाषित हैं?
14

आपको ST_Multi()सभी बहुभुजों को बलपूर्वक लेने की आवश्यकता हो सकती है MULTIPOLYGON(यह एक धारणा है)
माइक टी

टिप्पणियों के लिए धन्यवाद - diciu मुझे लगता है कि अनुक्रमित हैं, वे pgAdminIII में दिखाई देने लगते हैं, लेकिन शायद मुझे उन्हें ताज़ा करने की आवश्यकता है? मैं क्वेरी को तेज करने के लिए समाधान खोजने के साथ कर सकता हूं - मुझे नहीं पता कि इसे चलाने के लिए उचित समय क्या होगा? लैंडकवर में लगभग 20 मिलियन फीचर हैं।
ESRIHelp

जवाबों:


12

मुझे लगता है कि क्या हो रहा है कि बफ़र करते समय आपका स्व-प्रतिच्छेदन बहुभुज MULTIPOLYGONS हो जाता है।

आपके पास दो विकल्प हैं:

1 बाधा "enforce_geotyp_the_geom" को हटा दें, आप ऐसा कर सकते हैं कि pgAdmin
2 में पुराने को अपडेट करने के बजाय परिणाम को एक नई तालिका में डाल दें। यह अक्सर चीजों को करने का एक अच्छा तरीका है क्योंकि तब आप अपनी मूल तालिका में कुछ भी नहीं बदलते हैं। क्वेरी कुछ इस तरह दिख सकती है:

CREATE TABLE new_buffered_table as
SELECT ST_Buffer(the_geom,0.0) as the_geom, gid FROM original_table;

निश्चित रूप से आप अपनी नई तालिका में और अधिक फ़ील्ड लाना चाह सकते हैं।

पहले बफ़र ट्रिक आज़माएं। दूसरे दृष्टिकोण में पॉल खुद को बता सकता है कि खाली लिनेस्ट्रिंग का क्या प्रभाव है। मुझे याद नहीं है कि जादू कैसे होता है।


0

मुझे कुछ महीने पहले भी यही समस्या थी। मेरे डेटाबेस में बहुत सारे सेल्फ-चौराहों के साथ पॉलीगॉन थे। मैंने निकल्स एवेन की विधि का उपयोग किया, लेकिन यह काम नहीं किया। मैंने अन्य तरीकों का भी इस्तेमाल किया।

मेरा तरीका यह है कि मैं अपने पॉलीगनों से सेल्फ चौराहे को हटा दूं। यहाँ SQL क्वेरी का उपयोग किया गया है:

     -- Create the new polygons 

SELECT ST_GeomFromText(polygone) as geom

   from (

    SELECT st_astext(ST_MakePolygon(linear)) as polygone

        from (
              SELECT st_astext
                ((ST_dump
                   (st_boundary
                      (ST_MakeValid
                     (ST_Transform
                        (ST_SETSRID
                           (geometry,4326),32631))))).geom) 
                          as linear from tables_name)
        as query2)

  as query1

where ST_area(polygone) > 1

मैंने बहुभुज और आत्म-चौराहे के क्षेत्र की गणना की और मैं केवल ऐसे बहुभुज रखेगा जिनके पास एक क्षेत्र है> 1. 1सहिष्णुता है क्योंकि स्व-प्रतिच्छेदन का क्षेत्र बहुत छोटा है। यह भी ध्यान दें कि यदि आपके पास डिग्री में डेटा है तो SRID का मीटर में परिवर्तन महत्वपूर्ण है।

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