Co zrobić z wartościami -3.4e + 38 wartości węzłów?

17

Próbuję przetworzyć niektóre bioklimatyczne pliki rastrowe, takie jak te, które można pobrać ze strony http://www.worldclim.org/current (zestaw bioklimatyczny). Wydaje się, że mają ustawione wartości nodata -3.4e+38zgodnie z QGIS (patrząc na wynik gdalinfo, to -3.39999999999999996e+38).

Wydaje się, że narzędzia gdal nie są w stanie poradzić sobie z tą wartością nodata, a qgis też nie jest w stanie jej rozpoznać. W stylizacji warstw jest pozycja dla -3,4e + 38 ustawiona na 100% przezroczystość, ale nadal wyświetla takie wartości, mimo że próbnik „Identyfikuj funkcje” pokazuje je jako mające wartość -3,4.4 + 38.

Próbowałem utworzyć vrt do konwersji wartości nodata na -9999, ale to też nie zadziałało.

Jak mogę przetwarzać takie pliki, aby miały użyteczne wartości węzłów?

wartości nodata pobrane z pliku ustawienie przezroczystości nie ma wpływu

rudivonstaden
źródło
Podobno w nowej wersji qgis ma DUŻO lepszą obsługę nodanych. Miałem wiele problemów z „nodatą” z 1.8 (szczególnie, gdy próbowałem obliczyć histogram lub średnie w obrębie obszaru).
nickves

Odpowiedzi:

4

GDAL może obsłużyć te wartości. W rzeczywistości domyślna wartość NoData GDAL jest prawie taka sama jak twoja. Myślę jednak, że problemem jest błąd zmiennoprzecinkowy w QGIS. Mam ten sam problem z wartościami zmiennoprzecinkowymi NoData.

Jeśli chcesz zmienić wartość NoData za pomocą GDAL, możesz użyć gdalwarp lub być może gdal_translate i ustawić wartość nodata na liczbę całkowitą (odpowiednio -dstnodata i -a_nodata). Na przykład w przeszłości miałem sukces w ustawianiu mojej wartości NoData na -999 w 64-bitowym rastrze float. Biorąc jednak pod uwagę, że ustaliliśmy, że pod tym względem istnieje problem zmiennoprzecinkowy, nie chciałbym zagwarantować, że to zadziała we wszystkich przypadkach.

MappaGnosis
źródło
Dziękuję za odpowiedź, Sylvester. Nie mogłem zmusić gdal_translate do pracy przy użyciu, gdal_translate -a_nodata -9999 input.tif output.tifchociaż załatwiłem sprawę gdalwarp -dstnodata -9999 input.tif output.tif. Z pliku wejściowego 9 MB moje podejście dało plik 26 MB, natomiast gdalwarp - plik wyjściowy 52 MB. Jeśli jednak raster zawiera wartości zmiennoprzecinkowe, moje podejście nie będzie działać tam, gdzie to będzie.
rudivonstaden
Czy sprawdziłeś, czy istnieje w tym celu otwarty moduł śledzenia błędów QGIS?
podmrok
1
Nadmiar danych może wynikać albo z zastosowania większej głębi pikseli (powiedzmy 63-bit vs. 16 bitów), albo może po prostu wynikać z tego, że oryginał to JPEG, a nowy wynik to TIFF. @underdark - Przepraszamy! Nie, nie sprawdziłem, czy jest bilet otwarty.
MappaGnosis
@underdark Nie mogłem znaleźć biletu, który to pasuje, więc dodałem raport o błędzie ( hub.qgis.org/issues/6786 ).
rudivonstaden
1
W przypadku mniejszego rozmiaru pliku wystarczy dodać -co COMPRESS=LZW.
j08lue
11

Udało mi się znaleźć obejście tego problemu, konwertując format danych na Int16 z Float32. Minimalna wartość to -32768 i może być przetwarzana jako wartość nodata. Następujące polecenie załatwiło sprawę:

gdal_translate -ot Int16 -a_nodata -32768 input.tif output.tif

Prawdopodobnie jest lepsze rozwiązanie, ale to przynajmniej rozwiązuje mój bezpośredni problem.

nodata została poprawnie odebrana

rudivonstaden
źródło
0

możesz spróbować gdal_calc.py input.tif --outfile = output.tif --calc = "A * (A> 0)" --NoDataValue = 0

kmu2019
źródło