Opensource GIS सॉल्यूशंस में एक बहुभुज ओवरले से रेखापुंज मान प्राप्त करें


16

मेरी दो परतें हैं। कई टाइलों के साथ एक बहुभुज-आकार की परत और एक कोलोराॅम में कई श्रेणियों के साथ कोरीन 2006 भूमि कवर वाली एक रेखापुंज-परत । मैं प्रत्येक बहुभुज के लिए रास्टर-लेयर के प्रत्येक भूमि कवर श्रेणी के आकार में प्राप्त करना चाहता हूं।

उदाहरण के लिए आईडी '2' के साथ एक बहुभुज है और मैं इस बहुभुज के लिए इस तरह से विशेषताएँ (प्रतिशत या मीटर मीटर में) चाहता हूं:

  • भूमि: 15%
  • वन: 11%
  • सड़कें: 2% (... और एक)

मैंने इसे घास, क़गिस (कोई कार्य नहीं), गाथा (कुल मूल्य तक हर राशि) r (कुल राशि) में करने की कोशिश की, लेकिन मुझे अभी भी कोई समाधान नहीं मिला। अधिकांश प्लगइन्स (qgis में आंचलिक आँकड़े) केवल 0-1 रेखापुंज परतों का समर्थन करते हैं। v.rast.stats ने भी मदद नहीं की। Iam किसी भी अच्छे और स्मार्ट समाधान के लिए खुला है! शायद मैंने गलत दृष्टिकोण का इस्तेमाल किया या गलतियाँ कीं।

आर्कगिस में यह कार्य काफी आसान है, अगर मुझे सही याद है, लेकिन मैं अभी भी आपके रोजमर्रा के लिनक्स उपयोगकर्ता के लिए एक अच्छा समाधान याद कर रहा हूं।

मैं एक डेबियन लिनक्स सिस्टम चला रहा हूं और यही कारण है कि मैं केवल इस ओएस के लिए कार्यक्रमों का उपयोग कर सकता हूं।


EDIT: क्योंकि इस प्रश्न के अभी भी बहुत सारे दृश्य और आगंतुक हैं: मैंने एक QGIS-plugin लिखा है, जो रैस्टर लेयर के लैंडकवर की गणना करने में भी सक्षम है। मैं अभी तक एक बहुभुज उपरिशायी कोडित नहीं है, लेकिन यह निश्चित रूप से योजना बनाई है। यहां प्लगइन खोजें और पहले स्कैपी लाइब्रेरी स्थापित करें।


यह निश्चित रूप से आर में किया जा सकता है, यह सिर्फ काम करने का सवाल है जो कार्य करता है। आपको प्रत्येक बहुभुज को रेखापुंज के साथ उपरिशायी करने की आवश्यकता है, और फिर "कुकी-कट" पिक्सेल का सारांश प्राप्त करने के लिए तालिका () का उपयोग करें। संकुल रेखापुंज, rgdal और rgeos उपयोगी हो सकते हैं। "आर स्पैटियल टास्क व्यू" (Google इसे
ढूंढेगा

यकीन है, लेकिन मैं ऐसा सारांश कैसे प्राप्त कर सकता हूं आप आसानी से (। उपरिशायी (पाली, रेखापुंज)) के साथ एक प्लास्टर परत के साथ एक बहुभुज परत उपरिशायी कर सकते हैं, लेकिन निकालने जैसे आदेशों के साथ मैं केवल कुकी-कट पिक्सेल में कुल क्षेत्र की गणना कर सकता हूं और एक कोलमैप के विभिन्न श्रेणियां नहीं । मैं rgeos नहीं जानता था, लेकिन मैंने एपी के माध्यम से देखा और ऐसा करने के लिए कोई फ़ंक्शन नहीं मिला।
कर्लव

GRASS में r.univar की जाँच करें, जैसा कि घास देखें gwiki.osgeo.org/wiki/Zonal_statistics
markusN

नमस्ते! QGIS प्लगइन बनाने के लिए धन्यवाद! मैं सिर्फ उल्लेख करना चाहता था, कि प्लगइन क्रैश (> 13000 बहुभुज)। यह बहुत अच्छा होगा अगर यह दुर्घटना नहीं होने के रूप में कार्य को विभाजित करेगा। और एक बार में सभी वर्गों को जोड़ने के लिए एक विकल्प होना बहुत अच्छा होगा (जैसे कि विशेषता तालिका में 2 नए फ़ील्ड LandcoverID और Landcover% शामिल हैं, जहां दोनों मूल्यों के साथ एक CSV-सूची रखते हैं) :)
Mfbaer

@ जोरान: यदि आपको लगता है कि यह एक बग है, तो इसे टिप्पणी में लिखने के बजाय बग रिपोर्ट बढ़ाएं ( github.com/Martin-Jung/LecoS/issues )। इसके अलावा 1) यह आपके कार्यों को क्रमबद्ध या बैच करने के लिए प्लगइन्स का काम नहीं है। इसे छोटे उपसमुच्चय पर चलाएं। 2) ज़रूर। जोड़ने के लिए कई अद्भुत चीजें होंगी। कोड खुला स्रोत है, इसे कोड करने के लिए स्वतंत्र महसूस करें :)
कर्लव

जवाबों:


13

बहुवचन पर एक SpatialPolygonsDataFrame (जिसे एक आकार का उपयोग करके maptools: readShapeSpatial) से एक रेखापुंज पर बहुभुज सुविधाओं को ओवरले करने के लिए 'अर्क' का उपयोग करें, फिर संक्षेप करने के लिए 'तालिका' का उपयोग करें। उदाहरण:

> c=raster("cumbria.tif") # this is my CORINE land use raster
> summary(spd)
Object of class SpatialPolygonsDataFrame
[...]
> nrow(spd)  # how many polygons:
[1] 2
> ovR = extract(c,spd)
> str(ovR)
List of 2
 $ : num [1:542] 26 26 26 26 26 26 26 26 26 26 ...
 $ : num [1:958] 18 18 18 18 18 18 18 18 18 18 ...

तो मेरा पहला बहुभुज 542 पिक्सेल कवर करता है, और मेरा दूसरा कवर 958 है। मैं उनमें से प्रत्येक को संक्षेप में बता सकता हूं:

> lapply(ovR,table)
[[1]]

 26  27 
287 255 

[[2]]

  2  11  18 
 67  99 792 

तो मेरा पहला बहुभुज कक्षा 26 का 287 पिक्सेल है, और कक्षा 27 का 255 पिक्सेल है। प्रतिशत प्राप्त करने के लिए योग करने और विभाजित करने और गुणा करने के लिए पर्याप्त आसान है।


महान, प्रयास के लिए बहुत बहुत धन्यवाद। मैं कोशिश करूंगा कि वापस रिपोर्ट करूं और :-)
करलेव

6

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

...
tab <- apply(ovR,table)
# Calculate percentage of landcover types for each polygon-field.
# landcover is a datastream with the names of every polygon
for(i in 1:length(tab)){
 s <- sum(tab[[i]])
 mat <- as.matrix(tab[[i]])
 landcover[i,paste("X",row.names(mat),sep="")] <- as.numeric(tab[[i]]/s)
}

3

अगर मैं सही ढंग से समझता हूं कि आप क्या चाहते हैं, और यह मानते हुए कि आपके GRASS GIS डेटाबेस में पहले से ही वेक्टर लेयर 'mypolygonlayer' और रैस्टर लेयर 'corina' है:

पहले मैं वेक्टर को रेखापुंज में बदलूंगा। बिल्ली यह सुनिश्चित करेगी कि आपके पास बहुभुज प्रति एक अद्वितीय पहचानकर्ता होगा। यदि आपके पास एक अद्वितीय संख्यात्मक पहचानकर्ता वाला स्तंभ है, तो आप इसके बजाय उस स्तंभ का उपयोग कर सकते हैं। लेबलक्यूल वैकल्पिक है:

v.to.rast इनपुट = mypolygonlayer लेयर = 1 आउटपुट = mypolygons उपयोग = कैट लेबल कोलम्बरी = NameMappingUnit

फिर अपने आँकड़े प्राप्त करने के लिए r.stats चलाएं:

r.stats -a -l input = mypolygons, corina विभाजक =; उत्पादन = / घर / पाओलो / corinastats.csv

अंतिम चरण में corinastats.csv को खोलना है, जैसे, लिबर ऑफिस और पिवट टेबल बनाएं या अपनी क्रॉस टेबल बनाने के लिए R का उपयोग करें


3

मुझे पता है कि यह पोस्ट काफी पुरानी है लेकिन मुझे हाल ही में उसी तरह के विश्लेषण को करने से नफरत है लेकिन आर जैसे कार्यक्रमों को डाउनलोड करना मेरे काम के कंप्यूटर पर थोड़ी परेशानी है और इसे मंजूरी की आवश्यकता है। एक विधि पर शोध करने के कई घंटों के बाद जिसे मैं केवल QGis और Excel के साथ उपयोग कर सकता था मैंने पाया कि यह विधि मेरे लिए सबसे अच्छा काम करती है और इसे उसी तरह की स्थिति में लोगों को पेश करना चाहती है।

  1. रेस्टर लेयर पर क्लिप बहुभुज (Raster → निष्कर्षण → क्लिपर: इनपुट फ़ाइल = रैस्टर लेयर, आप आउटपुट नाम और स्थान चुनें, मास्क लेयर पर क्लिक करें, आप बहुभुज → ok चुनें)

  2. बहुलीकरण क्लिपर परत (रेखापुंज → रूपांतरण → बहुभुज: इनपुट फ़ाइल = आपकी क्लिप परत, आउटपुट को सहेजना → ठीक है)

  3. पिक्सेल की संख्या की गणना करना (आपके द्वारा अभी बनाई गई आकृति फ़ाइल पर क्लिक करें) ओपन फ़ील्ड कैलकुलेटर: "नया फ़ील्ड बनाएं" पर टिक करें और फ़ील्ड का नाम, फ़ंक्शन = ज्यामिति → क्षेत्र → ठीक जोड़ें) जोड़ें। अब आपको अपनी विशेषता तालिका में एक नया कॉलम होना चाहिए जिसमें पिक्सेल की संख्या दिखाई दे।

  4. बहुभुज परत सहेजें (राइट क्लिक बहुभुज परत, इस रूप में सहेजें: प्रारूप = DBF फ़ाइल, के रूप में सहेजें → ठीक है)

  5. प्रत्येक निवास स्थान के लिए पिक्सेल की संख्या को सारांशित करें (एक्सेल शुरू करें, खुली फाइल, यदि आपके पास प्रत्येक कॉलम के लिए अब एक शीर्षक नहीं है, तो खाली सेल पर क्लिक करें, डेटा टैब पर जाएं, समेकित करें, सुनिश्चित करें कि यह योग पर है, क्लिक करें "ब्राउज़ करें ..." के बगल में लाल तीर और दो कॉलम (शीर्षक शामिल) का चयन करें, "जोड़ें" पर क्लिक करें और दोनों "शीर्ष पंक्ति" और "बाएं कॉलम" बॉक्स → ओके पर टिक करें

  6. अगर, मेरी तरह, आपके पास विश्लेषण करने के लिए बहुत सारे पॉलीगॉन हैं और उन्हें एक ही तालिका में तुलना करने की आवश्यकता है, तो यह कदम मददगार होगा। एक नई एक्सेल वर्कबुक में आपके आवास संख्याओं को कॉलम A (मेरे लिए 1 से 48 तक) में सूचीबद्ध करें और उन दो स्तंभों को रखें जिन्हें आपने स्तंभ B और C में समेकित किया है (B में निवास स्थान और C में पिक्सेल की संख्या)। सेल D1 में निम्न सूत्र लिखें: = IFNA (INDEX (C: C; MATCH (A2; B: B; 0)) ";") और ड्रैग (या डबल क्लिक बॉटम राइट कार्नर) को अपने अंतिम मान तक ले जाएं (इसलिए यदि आपके पास सेल डी 48 के नीचे 48 आवास हैं)। पिक्सल्स की संख्या अब आपके अनुरूप आवास में है और आप इस प्रक्रिया को अपने सभी बहुभुजों के लिए दोहरा सकते हैं।


2

पॉलीगोन के साथ गठबंधन करने के लिए QGIS ( रेखापुंज> रूपांतरण> बहुभुज ) का उपयोग करके और फिर केंद्रीय फ़ंक्शन ( वेक्टर> जियोप्रोसेसिंग टूल> यूनियन ) का उपयोग करके एक वेक्टर बहुभुज डेटासेट में कॉइन डेटा को परिवर्तित करने के बारे में कैसे । परिणामस्वरूप वेक्टर डेटासेट में प्रत्येक बहुभुज में प्रत्येक कोरीन वर्ग के क्षेत्र शामिल होंगे।


इस सुझाव के लिए धन्यवाद। वेक्टर यूनियन के बारे में अभी तक सोचा नहीं गया है। शायद मैं कोशिश करूंगा कि, अगर आर-प्रोसेसिंग किसी तरह विफल हो जाए।
कर्लेव

0

QGIS।

क्यूजीआईएस ट्रंक में, ज़ोनलस्टैट्स का एक और संस्करण उपलब्ध है, इसे ज़ोनल स्टैटिस्टिक्स कहा जाता है।

यह आपके द्वारा अपेक्षित फ़ंक्शन को करता है।

वर्कफ़्लो के रूप में, मुझे यह स्पष्ट नहीं है कि आपके पास कितने रैस्टर हैं या वे एक रैस्टर में सिर्फ बैंड हैं?


टिप्पणी के लिए धन्यवाद, लेकिन जोनल सांख्यिकी केवल श्रेणियों के बिना रेखापुंज खाती है। Iam QGIS ट्रंक 1.9 का उपयोग करते हुए
कर्लव

0

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

अपने बहुभुज को रेखापुंज डेटा के ठीक उसी सीमा और रिज़ॉल्यूशन में बदलने के बाद , आप यहाँ दिए गए सारांश आँकड़ों को सारणीबद्ध कर सकते हैं , जो कि उपयुक्त है यदि आपका रेखापुंज स्मृति (छोटे / मध्यम रेखापुंज परतों) में फिट बैठता है या आप reclassफ़ंक्शन के साथ प्रत्येक श्रेणी को दूर कर सकते हैं। और zonalप्रत्येक वर्ग के लिए आँकड़ों की गणना से । यहां एक समाधान है जो एक फ़ंक्शन में रेखांकन और जोनल आँकड़ों को शामिल करता है और बहुत बड़े डेटासेट के साथ अच्छा काम करता है।

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