PostGIS का उपयोग कर आसन्न बहुभुजों को सरल बनाना?


24

मुझे एक समस्या का सामना करना पड़ा जो बहुभुज के सेट को समीप करती है। यदि मैं प्रत्येक बहुभुज को अलग से डगलस-प्यूकर एल्गोरिथ्म (जो कई खुले स्रोत उपकरण द्वारा उपयोग किया जाता है) के साथ सरल करता है, जिसके परिणामस्वरूप बहुभुज आमतौर पर आसन्न नहीं होते हैं। यह समस्या मौजूद है, उदाहरण के लिए, जब देशों / प्रांतों की सीमाओं को सरल बनाया जाता है।

क्या किसी के पास इसका उपयोग करने के लिए कोई उपाय है PostGIS?

जवाबों:


19

एक टोपोलॉजिकल वेक्टर मॉडल आपको प्रदान करेगा जो आपको चाहिए। गैर-टोपोलॉजिकल स्टोरेज (जैसे शेपफाइल) में, जियोमेट्रीज के बीच एक सिंगल एज को दो बार स्टोर किया जाता है। एक टोपोलॉजिकल वेक्टर में, क्षेत्रों को लाइनों से अलग से संग्रहीत किया जाता है, इसलिए टोपोलॉजी को प्रभावित किए बिना समायोजन किया जा सकता है। मुझे एक अच्छा आरेख नहीं मिला, इसलिए मैंने यह सरल उदाहरण बनाया, जहां ए, बी और सी क्षेत्रों को लाइनों के चौराहों (1-4 को जोड़ने) से गणना की जाती है जो उन्हें अलग करती हैं। एक टोपोलॉजिकल वेक्टर का उदाहरण

इस मॉडल का उपयोग आर्कइन्फो द्वारा कवरेज के रूप में, GRASS में अपने डिफ़ॉल्ट वेक्टर मॉडल के रूप में किया जाता है , और इसका प्रयोग PostGIS में प्रयोगात्मक PostGIS टोपोलॉजी टूल के साथ किया जा सकता है । शायद एक सरल समाधान आपके डेटा को लाइनवर्क में परिवर्तित कर रहा है, निरर्थक अलगाव को हटा रहा है, और फिर सरलीकरण के बाद अपने बहुभुज को फिर से बना रहा है।


15

आप अपने बहुभुजों को लाइनों में बदलना चाहते हैं, उन पंक्तियों को सरल कवरेज किनारा बनाते हैं, उन किनारों को सरल बनाते हैं, फिर उन्हें फिर से बहुभुज में बनाते हैं, और अंत में पुराने बहुभुजों की विशेषताओं को फिर से जोड़ने के लिए बिंदु-इन-बहुभुज का उपयोग करते हैं। एक नए।

CREATE TABLE rings AS SELECT (ST_DumpRings(polys)).geom AS rings FROM polytable;
CREATE TABLE simplerings AS SELECT ST_Union(rings) AS simplerings FROM rings;
CREATE TABLE newpolycollection AS SELECT ST_Polygonize(ST_Simplify(simplerings, 10.0)) AS geom FROM simplerings;
CREATE TABLE newpolysnoattributes AS SELECT (ST_Dump(geom)).geom FROM newpolycollection;
CREATE TABLE newpolytable AS SELECT new.geom, old.attr FROM newpolysnoattributes new, polytable old WHERE ST_Contains(new.geom, ST_PointOnSurface(old.polys));

उपरोक्त में त्रुटियां हैं, लेकिन मूल अवधारणा वहां है। यदि आप चाहें तो आप यह सब एक क्वेरी में कर सकते हैं।


2

इस समस्या से बचने के लिए, आपको टोपोलॉजिकल बाधाओं का उपयोग करके अपना डेटा मॉडल करना चाहिए। http://mapshaper.org/ करता है।


-1

आपको टेसलेट करने की आवश्यकता है। ज्यामिति बनाने के पुराने ARC / INFO सिद्धांत में, दो आसन्न ज्यामिति एक पॉलीलाइन द्वारा बनाई गई हैं और इस पॉलीलाइन को साझा किया है। इसलिए जब आप सामान्यीकृत होते हैं, तो यह दोनों सीमाओं को सामान्य करता है क्योंकि यह एक ही पॉलीलाइन को संदर्भित करता है।

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