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+38
zgodnie 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?
Odpowiedzi:
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.
źródło
gdal_translate -a_nodata -9999 input.tif output.tif
chociaż 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.-co COMPRESS=LZW
.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ę:
Prawdopodobnie jest lepsze rozwiązanie, ale to przynajmniej rozwiązuje mój bezpośredni problem.
źródło
Odpowiedź na to pytanie prawdopodobnie rozwiązałaby również ten problem: Zmiana pikseli węzłów o wartości -3.40282347e + 38 na inną liczbę w QGIS
Podsumowując, możesz użyć r.null z przybornika przetwarzania, aby zmienić wartości.
źródło
możesz spróbować gdal_calc.py input.tif --outfile = output.tif --calc = "A * (A> 0)" --NoDataValue = 0
źródło