Jak ustawić wszystkie piksele o wartości <= 0 na „nodata” w rastrze DEM?


28

Mam raster DEM z wartościami pikseli od około 3000 do -0 0003. Muszę ustawić wszystkie piksele o wartości 0 i smaler (<= 0) na „nodata” (do późniejszych obliczeń rastrowych i zmniejszenia rozmiaru pliku).

Wydaje mi się, że jest to zadanie kalkulatora rastrowego (ustaw wartość pikseli <= 0 na „nodata”) lub przeklasyfikowanie (ustaw wartość pikseli <= 0 na „nodata” i zachowaj wszystkie inne wartości), ale nie wiem jak.


Muszę też ustawić wszystkie piksele o wartości <0 na „nodata”. Więc post z vascobnunes mi nie pomaga.
MAP

Przepraszam, ale to nie pomaga mi zmienić stylu wyświetlania rastra. Muszę fizycznie edytować plik rastrowy.
MAP

Z komentarzy i sugestii zamknięcia wydaje się, że powinieneś edytować swoje Pytanie, aby dokładnie wyjaśnić, czego chcesz i co już próbowałeś.
PolyGeo

Odpowiedzi:


29

Nie znalazłem rozwiązania jednego narzędzia, ale możesz najpierw użyć kalkulatora rastrowego, aby ustawić wszystkie wartości poniżej określonego progu na zero, a następnie użyć gdal_translate z -a_nodata 0, aby zamienić 0 na nodata.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj


17

Oto wyrażenia mapcalc GRASS, aby ustawić zakres na NULL:

r.mapcalc "dem_corrected = if(dem<=0, null(), dem)"

Świetnie, działa dla mnie!
ilFonta

16

Można to zrobić w jednym kroku w QGIS w kalkulatorze rastrowym.

W QGIS3 dla warstwy rastrowej o nazwie „x” użyj następującego wyrażenia:

(("x">0)*"x") / (("x">0)*1 + ("x"<=0)*0)

Ta sztuczka odwzorowuje wartości rastrowe x> 0 na stosunek x / 1 = x, a wartości rastrowe x <= 0 na stosunek 0/0 = NaN. Ten NaN jest renderowany jako FLOAT_MIN (aka -3,402832 ... e + 38), jeśli raster jest 4-bajtowym zmiennoprzecinkowym.

O dziwo wydaje się, że to pytanie już dawno minęło, a (o ile dziś pokazuje moje szybkie wyszukiwanie w Google) większość respondentów twierdzi, że nie można tego zrobić jednym krokiem. Z pewnością nie trzeba go tak hakować. Dokumentacja QGIS może być również lepsza.


10

Wielkie podziękowania dla Dominika. Moja pierwsza odpowiedź nie jest poprawna dla QGIS 2.8.3 (wyrażenie "myraster@1" > 0zwraca 0 lub 1 dla nie- NODATA wejściowe, na kod NODATA wejście to powraca NODATA ).

Poniższe wyrażenie QGIS Raster Calculator powinno wystarczyć (warstwa rastrowa o nazwie „myraster”), ponieważ QGIS Raster Calculator ustawia wszystkie piksele niespełniające warunku na nodata :

(„myraster @ 1”> 0) * „myraster @ 1”

Poniższe rozwiązanie jest oparte na https://docs.qgis.org/2.8/en/docs/training_manual/processing/no_data.html i działa dla QGIS 2.8.3 z SAGA 2.1.2.

W QGIS przetwarzanie, wykorzystywanie sagi kalkulatora Raster i wprowadź następujące w Formule :

ifelse(g1=0, 0/0, ifelse(g1<0, 0/0, g1))

lub

ifelse(a=0, 0/0, ifelse(a<0, 0/0, a))

Spowoduje to przekształcenie wszystkich wartości mniejszych lub równych 0 w nodata (0/0).


to nie działa, ponieważ piksele niespełniające warunku to 0, a nie nodata
Dominik

Wspaniały. Można go użyć do filtrowania wartości rastrowych: Na przykład filtr (0,5; 23): ifelse (g1 <0,5, 0/0, ifelse (g1> 23, 0/0, g1))
lolipop

10

Możesz także zapisać warstwę (prawy przycisk myszy, zapisać jako ...) i określić zakres nodata. Pozwoli to zachować oryginalne nodata i utworzyć nowe wartości dodatkowe dla określonego zakresu wartości.


To najlepsze rozwiązanie
Alexander

5

Miałem podobny problem, ale Miałem OBA wartości, które chciałem przekonwertować na brak danych ORAZ istniejące wartości bez danych w rastrze.

Zidentyfikuj wyniki

Przyszedłem na tę stronę po pomoc, ale myślę, że jest tutaj zastrzeżenie. Metody @underdark i @Micha wydają się działać tylko wtedy, gdy w rastrze nie ma żadnych wartości braku danych.

Aby obejść ten problem, musisz przekonwertować zarówno wartości bez danych, jak i wartości, które chcesz przekonwertować na dane bez danych, na stałą liczbę. W takim przypadku można użyć drugiego kroku @underdark.

Aby to zrobić, użyj Przybornika przetwarzania> Przeklasyfikuj wartości siatki (SAGA), aby jednocześnie przekonwertować wartości i wartości bez danych na wspólną liczbę (np. -999). W szczególności użyj metody „zakres” i określ zakres. Następnie w zastępowaniu wartości bez danych wybierz tę samą wartość (np. -999). Odznacz zastąp inne wartości. Działa to dla pojedynczej zmiany wartości lub bardziej złożonych zmian.

Następnie postępuj zgodnie z metodą @underdark i zapisz raster używając Raster> Konwersja> Przetłumacz i zaznacz brak danych, wprowadzając wartość, której użyłeś (np. -999).


-3

Kliknij prawym przyciskiem myszy raster, przejdź do właściwości rastra, wybierz trzecią opcję „przezroczystość”, w zakładce bez wartości danych dodaj dodatkową wartość 0 i kliknij Zastosuj. Jest to podobna opcja „wyświetl wartość tła” w Arcgis.


4
Nie jest to dobra metoda. Nie jesteś rzeczywiście się zmienia dane, więc jeśli trzeba statystyk wyliczania lub zrobić analizę wyniki będą błędne
khafen
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.