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.
Odpowiedzi:
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.
źródło
Oto wyrażenia mapcalc GRASS, aby ustawić zakres na NULL:
źródło
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:
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.
źródło
Wielkie podziękowania dla Dominika. Moja pierwsza odpowiedź nie jest poprawna dla QGIS 2.8.3 (wyrażenie
"myraster@1" > 0
zwraca 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 :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 :
lub
Spowoduje to przekształcenie wszystkich wartości mniejszych lub równych 0 w nodata (0/0).
źródło
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.
źródło
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.
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).
źródło
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.
źródło