Mam zestaw rastrów (.vrt) z codziennymi danymi wilgotności gleby. Chcę zsumować piksele wszystkich rastrów, aby uzyskać miarę według miesiąca. Jednak cały świat nie jest objęty każdego dnia, co powoduje wartości nodata w miejscach, w których istnieją pomiary dla innych dni.
To, co chcę zrobić, to zsumować wartości każdego rastra. Wydaje się jednak, że za każdym razem, gdy piksel nodata jest sumą, piksel wynikowy jest bezpośrednio klasyfikowany jako nodata. Chciałbym mieć coś przeciwnego: ignorowanie wszystkich wartości nodata i sumowanie pozostałych.
Pomyślałem o 2 sposobach rozwiązania problemu:
- sumowanie rastrów ignorujących wartości nodata
- konwertuj piksele nodata na wartość 0, a następnie zsumuj wszystkie rastry
Niestety nie mogę znaleźć żadnego narzędzia do tego.
Czy ktoś może mi pomóc?
Odpowiedzi:
Jeśli masz dostęp do ArcGIS, to narzędzie Statystyka statystyk ma opcję ignorowania nodanych, które sumujesz \ znaczy \ min \ max swoje rastry.
źródło
Po pierwsze, możesz użyć gdal_calc.py, aby zmienić wszystkie -9999 na 0 i ustawić wartość NoData na 0.
Na przykład:
Następnie możesz zignorować wartość NoData, używając gdal_translate z opcją -a_nodata , po której następuje none .
Przykład:
źródło
gdal_translate -a_nodata none ...
. Na przykład:gdal_calc.py -A input.tif --outfile=input_with_NoData.tif --type=Int16 --calc="A+9999*(A==-9999)" --NoDataValue=0
cd
polecenia i spróbuj ponownie, aby mieć tylko-A test.tif
.W R:
źródło
s
, a argumentna.rm=TRUE
powodujeNA
ignorowanie wartości. Obiekt wyjściowyss
toraster
obiekt, który można eksportować za pomocąwriteRaster
(patrz?writeRaster
). (@RobertH jest twórcąraster
pakietu R. )Narzędzie warunkowe w programie Spatial Analyst to prosty sposób na konwersję wartości zerowych na zera. Zatem pobranie sum powinno być kłopotliwe.
źródło
Jakiś czas temu miałem ten sam problem i udało mi się go rozwiązać.
Podobnie jak uwaga na temat wyświetlania wartości nodata w QGIS: wartości nodata są zawsze wyświetlane jako wartości nodata w oknie mapy i przy użyciu narzędzia „informacje o obiekcie”, bez względu na to, czy faktycznie mają wartość -9999, 0, NULL itp. Tak więc po przeklasyfikowaniu wartości nodata na 0, jeśli przejdziesz do ustawień warstw, znajdziesz w metadanych, że nodata ma wartość 0.
W końcu znalazłem idealne narzędzie do zadania, GRASS
r.series
. Po odznaczeniu ustawienia „operacji agregacji” „maksimum” i „propagacji wartości NULL” narzędzie utworzy warstwę pasującą do twoich wymagań.źródło
Pamiętam ten problem jakiś czas temu. Jako rozwiązanie, myślę, że zrobiłem +1 dla wszystkich komórek w rastrze, dodałem rastry razem, a następnie dokonałem ostatecznego odjęcia (wszystkich dodanych +1). To dość prymitywne, ale jeśli wykona zadanie ...!
Możesz też użyć opcji „Przeklasyfikuj wartości siatki” w przyborniku Przetwarzanie w QGIS, aby przekonwertować wartości zerowe na zero.
źródło