अमान्य ज्यामिति चिड़ियाघर


9

अवैध जियोमेट्री से उत्पन्न विचित्र बगों से जूझते हुए कई बार और बार मैं कई घंटे बिता चुका हूं । लक्षण बहुत भिन्न होते हैं, जिनमें शामिल हैं:

  • डेटाबेस मंदी
  • गलत \ Null क्वेरी परिणाम
  • त्रुटियों और चेतावनियों से भरी हुई फाइलों को लॉग करें
  • ज्यामितीय ऑपरेटरों (जैसे चौराहे) के साथ असंगत परिणाम

मैं अवैध जियोमेट्री के प्रकारों को वर्गीकृत करना चाहूंगा, ताकि यहां हर कोई अपने डेटा को साफ करने में मदद कर सके।

कृपया अपने पसंदीदा प्रकार के अमान्य ज्यामिति (प्रति उत्तर एक प्रकार) के साथ उत्तर दें। स्क्रीनशॉट, विवरण और समाधान का स्वागत है - लेकिन अपने उत्तर को छोटा रखने की कोशिश करें।

जवाबों:


6

अवैध भू-खंडों की 8 साल पुरानी सोने की खदान PostGIS isvalid regress परीक्षणों द्वारा प्रदान की जाती है । इनमें से कई प्रतिगमन परीक्षणों को GEOS में ले जाया गया है, उदाहरण के लिए यहाँ और यहाँ , साथ ही परीक्षण के पेड़ में अन्य जेब भी । (क्षमा करें, हाइलाइट करने के लिए बहुत सारे। कुछ को चुनें और उन्हें कल्पना करने के लिए डब्ल्यूटीएस को जेटीएस टेस्ट बिल्डर में पेस्ट करें ।)


3

शून्य-लंबाई खंड

उदाहरण:

SELECT geomFromEWKT('LINESTRING(1 1, 1 1)');

                                    geomfromewkt                                    
------------------------------------------------------------------------------------
 0102000000020000000000000000000840000000000000104000000000000008400000000000001040

समस्याएं: लंबाई अनुपात (शून्य से विभाजन) की गणना करते समय या जब azimuths और त्रिकोणमितीय कार्यों की गणना करने की कोशिश करते समय शून्य लंबाई खंड संग्रहीत किया जा सकता है।

पता लगाने: PostGIS में, शून्य लंबाई खंडों का उपयोग करके पता लगाया जा सकता है isValid()

समाधान: शून्य लंबाई खंडों को अंक के रूप में रखने का प्रयास करें।


3

बहुभुजों का आत्म-परिचय

यहां छवि विवरण दर्ज करें

उदाहरण:

SELECT isValid(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
NOTICE:  Self-intersection at or near point 0.5 0.5
 isvalid 
---------
 f
(1 row)

समस्याएं: गलत गणना, उदाहरण के लिए area():

SELECT area(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
 area 
------
    0
(1 row)

यह कॉलिंग फ़ंक्शन के साथ शून्य विभाजन बग पैदा कर सकता है।

डिटेक्शन: पोस्टजीआईएस में, स्व-प्रतिच्छेदन खंडों का उपयोग करके पता लगाया जा सकता है isValid()

समाधान:MULTIPOLYGON (टिप्पणी देखें) में रूपांतरण ।


वही आकार मान्य के बराबर है:MULTIPOLYGON(((0 0, 0 1, 0.5 0.5, 0 0)),((1 1, 1 0, 0.5 0.5, 1 1)))
माइक टी

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