बहुभुज के लिए रेखापुंज आँकड़ों की गणना कैसे करें?


14

मैं वेक्टर-लेयर के बहुभुज के प्रति रेखांकनों (मल्टी-बैंड) के योगों, औसत आदि की गणना कैसे कर सकता हूं। मुझे बताया गया कि इसे "आंचलिक सांख्यिकी" कहा जाता है। मैंने पहले QGIS के साथ कोशिश की।

ऐसा करने का एक तरीका है, लेकिन यह बहुत धीमा है (वेक्टर को रेखापुंज में परिवर्तित करें, दूसरी वेक्टर-लेयर के साथ प्रतिच्छेद करें, ज्यामिति की गणना करें, निर्यात संख्याएं, स्प्रेडशीट या अन्य प्रोग्राम के साथ आंकड़ों की गणना करें, परिणामों को फिर से आयात करें, हमेशा के लिए लेता है मेरे लिए 350.000 रेखापुंज-बिंदु)।

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

इसे हल करने का यह गलत तरीका लगता है। 2-या अधिक बहुभुज से संबंधित रेखापुंज-बिंदुओं के लिए कोई रास्ता नहीं होगा क्योंकि वे बहुभुज-सीमा द्वारा प्रतिच्छेद किए जाते हैं। मुझे लगता है कि बहुभुज-आधारित आँकड़े इसे संभालने में सक्षम होने चाहिए, इसलिए मैं यह भी मानता हूं कि मुझे अभी तक सही मॉड्यूल नहीं मिला है।

सागा-जीस में वास्तव में कई मॉड्यूल हैं। कृपया मुझे बताएं कि इस एप्लिकेशन के लिए कौन सा सही है।


मैं रूडिवोन्स्टैडेन के समाधान की कोशिश कर रहा हूं, और अंतिम दो कमांड दर्ज करने पर निम्नलिखित त्रुटि संदेश दिखाई देते हैं: >>> zonalstats = qgis.analysis.QgsZonalStatistics (वेक्टरलेयर, रैस्टरफाइल) ट्रेसेबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "<इनपुट>" , लाइन 1, में <मॉड्यूल> विशेषता: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'विश्लेषण' >>> zonalstats.calculateStatistics (कोई नहीं) ट्रेसबैक (सबसे हालिया कॉल अंतिम): फ़ाइल "<इनपुट>", लाइन 1, में <मॉड्यूल > NameError: नाम 'जोनलस्टैट्स' परिभाषित नहीं है मैं सोच रहा हूं कि क्या कमांड सही हैं या यदि मैं जिस रैस्टर फाइल का उपयोग कर रहा हूं वह सही प्रारूप में है? धन्यवाद!
डेन वुल्फ

हाय दान। Stackexchange एक मंच से थोड़ा अलग काम करता है। उद्देश्य एक चल रही चर्चा के बजाय एक प्रश्नोत्तर प्रकार की बातचीत है। यदि मूल प्रश्न का उत्तर आपको नहीं पता है कि आपको क्या जानना चाहिए, तो आपको टिप्पणी अनुभाग में स्पष्टीकरण मांगना चाहिए या एक नया प्रश्न पूछना चाहिए।
जे ग्वारनेरी

आपकी टिप्पणी के लिए धन्यवाद, Dan। मेरा जवाब एक आवश्यक आयात विवरण याद कर रहा था, जिसे अब तय किया जाना चाहिए।
रुडिवनस्टैडेन

जवाबों:


22

मैं बिल्कुल एक ही काम करने के लिए संघर्ष कर रहा था, लेकिन विभिन्न कारणों से मैं क्यूजीआईएस का उपयोग करने के लिए प्रतिबद्ध हूं। मैंने GR.ST प्लगइन का उपयोग करके और Sextante प्लगइन के माध्यम से v.rast.stats का उपयोग करने की कोशिश की। बाद का दृष्टिकोण विफल हो गया, क्योंकि यह आँकड़ों को एक अस्थायी वेक्टर परत से जोड़ देता है जिसे वह हटा देता है। GRASS प्लगइन ने काम किया, लेकिन यह ओवरलैपिंग पॉलीगन्स से नहीं निपटता है।

आसपास कुछ खुदाई करने के बाद (होनहार-लगने वाले ज़ोनलस्टैट्स प्लगइन के स्रोत में), मैंने पाया कि क्यूजीआईएस में वास्तव में जोनल सांख्यिकी तरीके एपीआई में निर्मित हैं, और इनमें पायथन बाइंडिंग भी हैं। तो जब तक आप केवल के लिए देख रहे हैं के रूप में count, sumऔर meanअपने बहुभुज सुविधाओं के लिए सांख्यिकी, अजगर कंसोल (प्लगइन्स> अजगर कंसोल) वर्तमान में बहुभुज विशेषता मेज पर आँकड़े संलग्न करने के लिए सबसे आसान तरीका है।

  1. TOC में अपनी रेखापुंज परत का चयन करें, और कंसोल में निम्न टाइप करें (यह आपके रास्टर परत के स्रोत फ़ाइल नाम को पकड़ लेता है)

    >>> rasterfile = qgis.utils.iface.mapCanvas().currentLayer().source()

  2. अपनी वेक्टर लेयर का चयन करें, और कंसोल में निम्न कमांड निष्पादित करें (यह वेक्टर लेयर को स्वयं पकड़ लेता है)

    >>> vectorlayer = qgis.utils.iface.mapCanvas().currentLayer()

  3. कंसोल में निम्नलिखित तीन कमांड निष्पादित करें (वे वेक्टर लेयर और रैस्टर फाइल को QGIS के बिल्ट-इन ज़ीरो स्टैटिस्टिक्स एक्सटेंशन में पास करते हैं)

    >>> import qgis.analysis

    >>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)

    >>> zonalstats.calculateStatistics(None)

परिणाम बहुभुज परत में अतिरिक्त क्षेत्रों के रूप में जोड़े जाएंगे।

आंचलिक सांख्यिकी

ध्यान दें कि यदि आप नए फ़ील्ड्स के लिए एक उपसर्ग को जोड़ना चाहते हैं (बल्कि उन्हें योग, माध्य और गिनती के रूप में होने के बजाय), तो आप चरण 3 में पहले कमांड को निम्नलिखित के साथ बदल देंगे (यह मानते हुए कि आप 'zonal_' का उपयोग करना चाहते थे। उपसर्ग:

>>> zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile,"zonal_")

1
+1 qgis.analysis.QgsZonalStatistics ()
हारून

क्यूजीआईएस में जोनल स्टैटिस्टिक्स प्लगइन है, इसलिए शायद स्वयं द्वारा उल्लिखित आदेशों को निष्पादित करने की आवश्यकता नहीं है: docs.qgis.org/2.2/en/docs/user_manual/plugins/… मुझे आश्चर्य है, अधिकतम और न्यूनतम गणना करने की संभावना क्यों नहीं है मूल्यों के रूप में अच्छी तरह से।
परिपक्व

मैंने आपकी तकनीक का उपयोग किया लेकिन यह कुछ बहुभुजों को हटा देता है :(
niahoo

6

अंत में यह पाया गया: सागा-जीआईएस में खुली श्रेणी-बहुभुज और डेटा-ग्रिड, फिर आकृतियाँ-> ग्रिड-> ग्रिड मूल्य-> बहुभुज के लिए ग्रिड आँकड़े


3

आप इसे PostGIS के साथ आसानी से कर सकते हैं। इस ट्यूटोरियल को देखें: http://trac.osgeo.org/postgis/wiki/WKTRasterTutorial01


विचार के लिए THX। मैं बिना किसी अन्य सॉफ्टवेयर को जोड़े और सीखे इसे पूरा करने की उम्मीद कर रहा था। मैं हालांकि बाद में PostGIS को ध्यान में रखूंगा।
stn

3

ऐसा लगता है कि यह समस्या कुछ समय पहले ही हल हो गई है, लेकिन मैं अपने चम्मच को सूप में जोड़ देता हूं, क्योंकि मुझे हाल ही में कुछ कठोर आंकड़ों की जरूरत थी।

Rudivonstaden द्वारा वर्णित QGIS कार्यप्रणाली ने एक आकर्षण की तरह काम किया, टिप के लिए धन्यवाद। हालाँकि, मेरे मामले में मैं भी अपने बहुभुज के भीतर रेखापुंज मूल्यों के लिए न्यूनतम और अधिकतम मूल्यों और एसटीडी जानना चाहता था, और उस कार्यक्षमता को मैं QGIS में नहीं ढूंढ सका। मुझे GME में फंक्शन isectpolyrst के माध्यम से एक समाधान मिला , जो कि GIS की समस्याओं को हल करने के लिए मेरा पसंदीदा है। इस फ़ंक्शन ने मुझे केवल मेरे द्वारा आवश्यक आँकड़े दिए और जल्दी से जल्दी दिए।

पुनश्च। GME के ​​पास एक दुर्भाग्यपूर्ण निर्भरता (ArcGIS) का एक सा है। इसलिए भले ही यह कार्यक्रम सभी के लिए स्वतंत्र रूप से उपलब्ध हो, लेकिन इसे चलाने के लिए आपको आर्कगिस की जरूरत है। लेकिन अगर आपके पास आर्कगिस (लाइसेंस का कोई भी स्तर) है, तो मैं आपको इसे आजमाने की सलाह देता हूं।

संपादित करें:

मुझे जो आँकड़े चाहिए थे, मुझे मिल गए, लेकिन मुझे बाद में पता चला कि मैं वास्तविक संख्याओं को देखने के बाद थोड़ी जल्दबाजी में निष्कर्ष पर पहुँच गया। आपको आंकड़े मिलते हैं, हां, लेकिन केवल पहले बैंड के लिए एक रेखापुंज में। इसलिए यदि आप 3-बैंड रेखापुंज छवि के साथ काम करते हैं, तो आंकड़े अधूरे हैं। मुझे अपने मूल पोस्ट में चैनलों की संख्या को इंगित करना चाहिए था। यदि आपके पास मल्टी बैंड रेखापुंज छवियों के साथ काम कर रहे हैं तो ऊपर प्रस्तावित एसएजीए-जीआईएस जैसे एसएजीए-जीआईएस का उपयोग करना सबसे अच्छा है।


3
zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer,rasterfile)
zonalstats.calculateStatistics(None)

डिफ़ॉल्ट रूप से गणना केवल गणना, सम और मीन (जैसा कि आप Raster -> Zonal StatisticsQGIS डेस्कटॉप से बता सकते हैं , यह बहुत अधिक कर सकता है)।

यदि आप, उदाहरण के लिए, आपके द्वारा उपयोग किए जाने वाले साधन की गणना करना चाहते हैं:

zonalstats = qgis.analysis.QgsZonalStatistics(vectorlayer, rasterfile, QgsZonalStatistics.Mean)
zonalstats.calculateStatistics(None)

सभी विकल्पों के लिए एपीआई देखें ।

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