नोडटा पिक्सल की वजह से आपदाओं का योग असंभव


12

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

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

मैंने समस्या को हल करने के 2 तरीकों के बारे में सोचा:

  1. नोड्स के मूल्यों को अनदेखा करने वाली चींटियों को योग करें
  2. नोडाटा पिक्सेल्स को मान 0 में परिवर्तित करना, फिर सभी रैस्टर्स को योग करना

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

दुर्भाग्य से, मुझे ऐसा करने के लिए कोई उपकरण नहीं मिला।

क्या कोई मेरी मदद कर सकता है?


मुझे आश्चर्य है कि परिणाम कितना व्याख्यात्मक होगा: आखिरकार, गुमशुदा दिनों के लिए रकमों में मूल्य शामिल नहीं होंगे, यह दर्शाता है कि वे लापता डेटा की मात्रा के आधार पर विभिन्न मात्राओं से कम पक्षपाती होंगे। अगर कोई डेटा गुम के किसी भी पर्याप्त राशि है, तो आप के बजाय विचार करना चाहिए imputing या भविष्यवाणी लापता कोशिकाओं में मूल्यों और फिर योग प्रदर्शन।
whuber

1
इस टिप्पणी के लिए धन्यवाद। मैंने डेटा के प्रबंधकों से पूछा और उन्होंने कहा कि उन्होंने सभी उपलब्ध आंकड़ों को संक्षेप में माध्य मान की गणना की है, फिर उस पिक्सेल पर महीने के दिनों के दिनों की संख्या से विभाजित करें जब अवलोकन उपलब्ध हैं।
डेमियन

2
यह चूहों के ढेर के स्थानीय माध्य के समान है जहां जीआईएस को केवल सभी नोदाटा कोशिकाओं को अनदेखा करने का निर्देश दिया जाता है, जो आपको जाने के लिए एक और रास्ता सुझाता है। वैसे, यह प्रक्रिया अभी भी संभावित रूप से पक्षपाती है जब लापता टिप्पणियों को मूल्यों के साथ सहसंबद्ध किया जाता है। उदाहरण के लिए, जब आप क्लाउड कवर के कारण डेटा गुम कर रहे हैं, तो यह प्रशंसनीय है कि उन दिनों मिट्टी की नमी सामान्य से अधिक (औसतन) हो सकती है।
whuber

1
ठीक है, मैंने अभी 'नजरअंदाज नाडाटा' जाँच के साथ सेल आँकड़ों के उपकरण का परीक्षण किया और यह वही है जो मैं चाहता था। मैं इस तरह की विधि की कमियों से अवगत हूं। हालांकि, मेरा काम अंतरिक्ष और समय दोनों में एक बड़े पैमाने पर है, इसलिए मैं मानता हूं कि इस तरह के पूर्वाग्रह कम महत्वपूर्ण होंगे। वैसे भी, मेरे पास वास्तव में डेटा का इतना विकल्प नहीं है।
डेमियन

पैमाने पूर्वाग्रह की राशि से संबंधित नहीं होंगे। पूर्वाग्रह का महत्व इसके आकार और आपके आवेदन की संवेदनशीलता पर निर्भर करता है। यद्यपि आप डेटा के बारे में कुछ भी करने में सक्षम नहीं हो सकता है, आप करते हैं उन्हें का विश्लेषण करने के लिए प्रक्रियाओं पर नियंत्रण है। इस पर सुधार करने के लिए बहुत सारे तरीके हैं। आपके विकल्पों में समय के साथ हस्तक्षेप हो रहा है और कोवरिएट्स के खिलाफ पुनर्जन्म हो रहा है जो मिट्टी की नमी के साथ संबंधित हो सकते हैं और लापता तिथियों पर भी उपलब्ध हैं। (वहाँ "imputing" लापता मूल्यों के लिए समर्पित आंकड़े की एक पूरी शाखा है।)
whuber

जवाबों:


1

यदि आपकी पहुंच आर्कगिस तक है तो सेल स्टैटिस्टिक्स टूल में नोडटा को नजरअंदाज करने का विकल्प है जिसे आप \ n \ n \ n अधिकतम आपदाओं के रूप में जोड़ते हैं।


यदि आप "योग" को "औसत" से बदलने के लिए इस उत्तर को संशोधित करते हैं, तो यह सही होगा: कारण के लिए टिप्पणी थ्रेड को देखें।
whuber

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

11

सबसे पहले, आप gdal_calc.py का उपयोग करके सभी -9999 को 0 में बदल सकते हैं और NoData मान को 0 पर सेट कर सकते हैं ।

उदाहरण के लिए:

gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --calc="A+9999*(A==-9999)" --NoDataValue=0

उसके बाद, आप कोई नहीं द्वारा -a_nodata विकल्प के साथ gdal_translate का उपयोग करके NoData मान को अनदेखा कर सकते हैं ।

-a_nodata मान :

आउटपुट बैंड के लिए एक निर्दिष्ट नोडता मान असाइन करें। GDAL 1.8.0 से शुरू करके, आउटपुट फ़ाइल में नोडटा मान सेट करने से बचने के लिए किसी को भी सेट नहीं किया जा सकता है यदि कोई स्रोत फ़ाइल के लिए मौजूद है

उदाहरण:

gdal_translate -a_nodata none input_with_NoData.tif output_without_NoData.tif

पारितोषिक के लिए धन्यवाद। मैंने -a_nodata पैरामीटर के साथ थोड़ा खेला, और मैं NULL के बजाय -9999 का मान रखता हूं। हालाँकि, मुझे अभी भी सभी -9999 पिक्सेल को 0
डेमियन

1
आप आवेदन करने से पहले सभी -9999 को 0 में बदलने के लिए gdal_calc.py का उपयोग कर सकते हैं gdal_translate -a_nodata none ...। उदाहरण के लिए: gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --type=Int16 --calc="A+9999*(A==-9999)" --NoDataValue=0
एंटोनियो फाल्कियानो

मैंने कई कमांड की कोशिश की, लेकिन मुझे सच में लगता है कि मुझे gdal_calc.py की समस्या है। उदाहरण के लिए, मैंने सिर्फ 1 को पूरे रैस्टर ( i.imgur.com/WiZG7MC.png ) में जोड़ने का प्रयास किया और मुझे यह अधिकतम त्रुटि मिली। मुझे समझ नहीं आ रहा है, मैंने OSGeo शेल से सीधे कमांड को रन किया है, और यह मॉड्यूल सही ढंग से स्थापित होने लगता है क्योंकि यह सूची में प्रकट होता है जब मैं शेल खोलता हूं ( i.imgur.com/fgtMZQZ.png )। क्या मेरी स्थापना टूट गई है?
डेमियन

यह एक रेगेक्स मुद्दे की तरह लगता है ... cdकमांड का उपयोग करके अपनी कार्यशील निर्देशिका को बदलने का प्रयास करें और केवल करने के लिए पुन: प्रयास करें -A test.tif
एंटोनियो फाल्कियानो

1
यह मेरे लिए काम करता है, लेकिन मैंने यह सब सामान OSGeo4W इंस्टॉलर के माध्यम से स्थापित किया है । इसके बजाय, मैं देखता हूं कि आपने स्टैंडअलोन इंस्टॉलर के माध्यम से क्यूजीआईएस स्थापित किया है। इसलिए अपने सेटअप को रिफ्रेश / अपडेट करने का प्रयास करें।
एंटोनियो फाल्कियानो

5

आर में:

library(raster)
s <- stack('file1', 'file2', ...)
ss <- sum(s, na.rm=TRUE)

क्या आप इस कोड में एक स्पष्टीकरण जोड़ सकते हैं (यदि आपने इसे लिखा है) या साइट से संक्षिप्त सारांश के साथ आपको यह लिंक कहां मिला है?
पॉल

1
उपरोक्त पहले रैस्टर पैकेज को लोड करता है, फिर एक "स्टैक" बनाता है (समान सीमा और रिज़ॉल्यूशन की 3-आयामी सरणी, जहां प्रत्येक फ़ाइल इस स्टैक का एक स्लाइस बन जाती है) जिसमें कॉमा से अलग किए गए फ़ाइल नामों से संकेतित फाइलें शामिल हैं । अंतिम पंक्ति स्टैक के सभी स्लाइस पर सेल-वार रकम का प्रदर्शन करती है s, na.rm=TRUEजिसके परिणामस्वरूप तर्क NAको अनदेखा किया जाता है। आउटपुट ऑब्जेक्ट ssएक ऐसी rasterवस्तु है जिसे निर्यात किया जा सकता है writeRaster(देखें ?writeRaster)। ( raster
@RobertH

1

स्थानिक विश्लेषक में सशर्त उपकरण शून्य मानों को शून्य में बदलने का एक आसान तरीका है। फिर रकम लेना एक तस्वीर होना चाहिए।


आपके जवाब के लिए धन्यवाद। मैंने इस पोस्ट का अनुसरण किया: support.esri.com/fr/knowledgebase/techarticles/detail/34932 और सभी अशक्त पिक्सेल को 0. में बदलने में सक्षम था। हालाँकि, मैं इस ऑपरेशन को सभी चूहों के लिए करवाना पसंद करूँगा। निर्देशिका। QGIS में 'Reclassify ग्रिड मान' ऐसा करने में सक्षम प्रतीत होता है, लेकिन सभी मुझे नहीं पता कि यह कैसे काम करता है। मैं "सिंपल टेबल" विधि चुनता हूं, और इसे शून्य से 0 पर सेट करने के लिए कहता हूं, और अन्य मानों को नहीं बदलता, लेकिन परिणामी रेखांक -0.99 से 0.08 तक होता है, जबकि यह मूल रूप से 428 से 3491 तक है
डेमियन

क्या आप कहीं अपने मूल रेखांकन का एक अंश पोस्ट कर सकते हैं, ताकि हम एक नज़र डाल सकें?
til_b

2
यदि आप उस टूल पर राइट क्लिक करते हैं, जिसमें आप एक बैच प्रक्रिया को जितनी चाहें उतनी फाइलों पर चला सकते हैं, यानी पूरी निर्देशिका।
ब्रॉक

आपके उत्तर के लिए धन्यवाद। हालाँकि, मैं 'स्पेसल एनालिस्ट / मैप बीजगणित / रेखापुंज कैलकुलेटर' का उपयोग करके एक फाइल के लिए सभी NULLs को 0 में बदल सकता हूं। यदि मैं इस उपकरण पर सही क्लिक करता हूं, तो मैं एक निर्देशिका को बैच सकता हूं, लेकिन प्रत्येक फ़ाइल को स्वचालित रूप से ध्यान में रखने के लिए सिंटैक्स क्या होगा? ( i.imgur.com/aYaUCzz.png )
डेमियन

मैं 'स्थानिक विश्लेषक / पुनर्लेखन / पुनर्लेखन' उपकरण पर एक नज़र था और यह वही करता है जो मैं चाहता हूँ। मैं एक साथ कई फ़ाइलों को संसाधित करने के लिए बैच विंडो का उपयोग करने में कामयाब रहा। मुझे एक अंतिम समस्या है: यदि मैं 'आउटपुट रैस्टर' पर राइट-क्लिक / फिल करता हूं, तो यह सभी इनपुट रिस्तों के लिए एक ही आउटपुट फाइल को कॉपी करता है। मैं इसे प्रत्येक इनपुट के लिए एक अलग आउटपुट बनाने के लिए कैसे कर सकता हूं? ( i.imgur.com/jzTI2x9.png )
डेमियन

1

मुझे कुछ समय पहले एक ही समस्या थी और मैं इसे हल करने में कामयाब रहा।

बस QGIS में नोड्टा मूल्यों के प्रदर्शन के बारे में एक नोट के रूप में: मानचित्र विंडो में नोडटा मान हमेशा नोडटा मान के रूप में दिखाए जाते हैं और "ऑब्जेक्ट जानकारी" उपकरण का उपयोग करते समय, कोई फर्क नहीं पड़ता कि उनके पास वास्तव में मूल्य -9999, 0, NULL आदि हैं। । इसलिए नोडटा मानों के पुनर्पाठ के बाद 0 पर, यदि आप परत सेटिंग्स में जाते हैं, तो आप मेटाडेटा में पाएंगे कि नोडटा का मान 0 है।

मुझे आखिरकार खोज के लिए सही उपकरण मिल गया, GRASS r.series। "एग्रीगेट ऑपरेशन" सेटिंग के साथ "अधिकतम" और "अनचाहे NULLs" को अनियंत्रित करने के लिए, टूल एक लेयर बनाएगा जो आपकी आवश्यकता को पूरा करता है।


0

मुझे याद है कि यह समस्या कुछ समय पहले आई थी। एक समाधान के रूप में मुझे लगता है कि मैंने रैस्टर की सभी कोशिकाओं में +1 किया, चूहों को एक साथ जोड़ा, फिर एक अंतिम घटाव (हालांकि कई + 1s आपने जोड़े हैं) किया। यह बहुत कच्चा है, लेकिन अगर यह काम हो जाता है ...!

वैकल्पिक रूप से, अपने शून्य मान को शून्य में बदलने के लिए QGIS में प्रोसेसिंग टूलबॉक्स में 'Reclassify ग्रिड वैल्यूज' का उपयोग करें।


नमस्ते, मैंने बिना किसी सफलता के I रिक्लाइनिफाई ग्रिड वैल्यू ’टूल का उपयोग करने के कई तरीके आजमाए। मैंने एक रैस्टर पर शुरू किया, जहां मैंने -9999 में सभी NULL पिक्सल कन्वर्ट किए। मैंने [0] एकल विधि का उपयोग करके पुनरावृत्ति करने का प्रयास किया, और 'पुराना मान = -9999', 'नया मान = 0.0', 'संचालक: [0] =' सेट किया, लेकिन मुझे जो भी मिला वह 'नान' से भरा एक रेखापुंज है। पिक्सल। मैं क्या गलत कर रहा हूं?
डेमियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.