सहिष्णुता के साथ QGIS (GEOS) में बहुभुज को भंग करें


11

मेरे पास एक बहुभुज वेक्टर परत है जो बाढ़ में डूबे हुए क्षेत्र का प्रतिनिधित्व करती है। परत को इस तरह से उत्पादित किया गया है कि कुछ क्षेत्र कई छोटे स्पर्श वाले बहुभुजों से बने होते हैं (नीचे स्क्रीनशॉट देखें, "मूल डेटा" लेबल)।

मैं उन बहुविवाह को भंग करना चाहूंगा जहां वे छूते हैं। यदि मैं QGIS के fTools में विघटित जियोप्रोसेसिंग टूल का उपयोग करता हूं, जो GEOS लाइब्रेरी का उपयोग करता है, तो मुझे कुछ अप्रत्याशित परिणाम मिलते हैं (देखें "QGIS fTools के साथ भंग")। ऐसा लगता है कि GEOS यह निर्धारित करने में एक सीमा का उपयोग नहीं करता है कि क्या पॉलीगॉन छू रहे हैं, जैसा कि इन मुद्दों में बताया गया है:

http://trac.osgeo.org/qgis/ticket/3126

http://trac.osgeo.org/qgis/ticket/3184

http://hub.qgis.org/issues/2806

आर्कजीआईएस में समान दृष्टिकोण अपेक्षित परिणाम देता है (देखें "आर्कजीआईएस 10.1 के साथ भंग")।

जाहिरा तौर पर यह एक बग के बजाय GEOS का "फीचर" है। क्या अपेक्षित परिणाम उत्पन्न करने के लिए मेरे पास डेटा को ठीक करने का कोई तरीका है? परिशुद्धता का मामूली नुकसान (कुछ सेमी?) मेरे लिए स्वीकार्य हो सकता है। आदर्श रूप से समाधान कुछ ऐसा होगा जिसे मैं QGIS प्लगइन में लिख सकता हूं, एक पूर्व-प्रसंस्करण कदम के रूप में।

संबंधित प्रश्न (कोई जवाब नहीं): QGIS में जियोप्रोसेसिंग टूल की सहिष्णुता मूल्य कैसे सेट करें?

नमूना डेटा को एक आकृति के रूप में लिंक करें: https://www.dropbox.com/s/c8ns7wwfv289ad0/sample/zip

बहुभुज भंग करें v.dissolve


एक वर्कअराउंड पहले विकसित होना और फिर fTools- भंग किए गए बहुभुज को छोटा करना होगा (पहले एक सकारात्मक और फिर एक नकारात्मक बफर के साथ बफरिंग)।
जेक

मैंने यह कोशिश की, लेकिन मैं अन्य समस्याओं (जैसे i.stack.imgur.com/LnFJy.png ) को समाप्त करता हूं । यहाँ, नीले क्षेत्र को तब बनाया जाता है जब मैं बफर / भंग / नकारात्मक-बफर, जहां यह नहीं होना चाहिए। यह मूल समस्या से बहुत बेहतर नहीं है। मैं नहीं देख सकता कि मैं मूल "तेज" कोने को कैसे पुनर्प्राप्त कर सकता हूं।
स्नोरफालोर्पगस

जवाबों:


14

इस मामले में, ऐसा लगता है कि आपको पहले टोपोलॉजी को ठीक करके भंग करने वाले उपकरण की मदद करने की आवश्यकता है। यहां आप GRASS में यह कैसे कर सकते हैं।

जब आप आकृति को लोड करते हैं, तो यह है कि GRASS इसे कैसे देखता है:

प्रत्येक क्रॉस एक क्षेत्र को चिह्नित करता है। आप देख सकते हैं कि सीमा रेखाओं पर कुछ क्रॉस हैं: ये स्लिवर पॉलीगॉन हैं जो सीमा रेखाओं के बीच थोड़ी सी ऑफसेट के कारण होते हैं।

  1. असली बहुभुजों के बीच अंतराल द्वारा गठित स्लिवर बहुभुज निकालें:

    v.clean input=sample output=tempA --o tool=rmarea thresh=0.001
  2. सीमा रेखाओं को काटें:

    v.clean input=tempA output=tempB --o tool=snap thresh=0.001
  3. नए चौराहों पर सीमा रेखाएं तोड़ें:

    v.clean input=tempB output=tempA --o tool=break thresh=0.001
  4. अब डुप्लिकेट सीमा रेखाएं निकालें:

    v.clean input=tempA output=tempB --o tool=rmdupl thresh=0.001
  5. बहुभुजों को भंग करें

    v.dissolve input=tempB output=cleaned --o column=ID

Et voilà:


धन्यवाद @ जेक। यह बहुत स्पष्ट उत्तर है। दुर्भाग्य से जब मैं अपने संपूर्ण डेटासेट (2500km2 को कवर करने की प्रक्रिया) को लागू करने की कोशिश करता हूं, तो मुझे स्नैप टूल "ERROR: G_realloc: Snap.c: 186: 144720024 बाइट्स ऑफ़ मेमोरी को आवंटित करने में असमर्थ" से एक त्रुटि मिलती है। मुझे लगता है कि मैं इसे छोटे विखंडू में तोड़ने जा रहा हूँ। हालांकि यह ठीक होना चाहिए, क्योंकि मैं पहले से ही इसे 0.25km2 वर्गों में तोड़ रहा हूं ताकि चौराहों / स्थानिक अनुक्रमण को तेज किया जा सके (यह नमूना डेटा में "आईडी" फ़ील्ड है)।
स्नोरफॉर्लागैपस

7

GRASS GIS कमांड v.dissolve ( Sextante plugin में -> GRASS Commands -> वेक्टर) का उपयोग करें

अगर मैं जल्दी से आपका उदाहरण प्रस्तुत करूं: यहाँ छवि विवरण दर्ज करें

V.dissolve के साथ परिणाम:

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

व्याख्या

समस्या को समझना आसान है। एक आकृति विज्ञान की कोई टोपोलॉजी नहीं है, अगर दो क्षेत्रों ने एक साझा सीमा साझा की है कि सीमा को दो बार डिजीटाइज़ किया जाएगा और डुप्लिकेट में भी संग्रहीत किया जाएगा।

जब आप आकृति को संपादित करने का प्रयास करते हैं तो आप इसे स्पष्ट रूप से देखते हैं:

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

GRASS GIS (ArcGIS के रूप में) एक सामयिक gis है। जब आप GRASS में शेपफाइल आयात करते हैं, तो परिणामी परत में एक टोपोलॉजी होती है: दो क्षेत्रों के बीच की सामान्य सीमा एक बार मौजूद होती है और साझा की जाती है।

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

इस कारण से, जब आप एक शेपफाइल को भंग करना चाहते हैं ( दो सीमाओं को भंग करें ) तो आप समस्याओं का सामना कर सकते हैं (QGIS, GvSIG, OpenJUMP, या पुराने ArcView 3.x में), देखें आर्कियोलॉजी: अंडरस्टैंडिंग टोपोलॉजी और शेपफाइल्स देखें ।

GRASS में, v.dissolve को समान श्रेणी संख्या वाले क्षेत्रों के बीच सामान्य सीमाओं को भंग करने के लिए डिज़ाइन किया गया है


1
मेरा अनुमान है कि यह एक संख्यात्मक समस्या है, और मुझे आश्चर्य है कि अगर आपके ओपी की ज्यामिति की बहुत अच्छी नकल है, तो क्या यह एक ही संख्यात्मक गुण होगा?
चौ।

@चाउ: v.dissolveएक सहिष्णुता पैरामीटर है, जो ओपी की समस्या का समाधान करता है।
जेक

उस विवरण को उपरोक्त उत्तर में सम्‍मिलित किया जाना चाहिए, स्‍पष्‍ट करने के लिए धन्‍यवाद :)
Chau

मैंने प्रश्न में एक आकृति के रूप में मूल डेटा का लिंक जोड़ा है। जब मैं इसका उपयोग v.dissolveकरता हूं तो यह काम करने लगता है, सिवाय इसके कि यह सुविधाओं के बीच में छोटे वर्ग को "भर" देता है। i.stack.imgur.com/AA59l.png
स्नोरफालोपरागस

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