Я пытаюсь обработать некоторые биоклиматические растровые файлы, например, которые можно скачать с http://www.worldclim.org/current (набор биоклимов). Кажется, что для них установлены значения узлов в -3.4e+38
соответствии с QGIS (если посмотреть на вывод gdalinfo, это так -3.39999999999999996e+38
).
Кажется, что инструменты gdal не могут справиться с этим значением нодаты, и qgis, похоже, тоже не может его распознать. В стилизации слоя есть запись для -3.4e + 38, установленная на 100% прозрачность, но она по-прежнему отображает такие значения, даже несмотря на то, что средство выбора «Определить объекты» показывает, что они имеют значение -3.4e + 38.
Я попытался создать vrt для преобразования значений узлов в -9999, но это тоже не сработало.
Как я могу обработать такие файлы, чтобы получить пригодные значения узлов?
Ответы:
GDAL может обрабатывать эти значения. На самом деле значение NoData GDAL по умолчанию почти такое же, как у вас. Я думаю, что проблема заключается в ошибке с плавающей запятой в QGIS. У меня та же проблема со значениями NoData с плавающей точкой.
Если вы хотите изменить значение NoData с помощью GDAL, вы можете использовать gdalwarp или, возможно, gdal_translate и установить для этого значения nodata целое число (-dstnodata и -a_nodata соответственно). Например, в прошлом я успешно установил значение NoData -999 в 64-битном растре с плавающей запятой. Однако, учитывая, что мы установили, что существует проблема с плавающей запятой в этом отношении, я не хотел бы гарантировать, что это будет работать во всех случаях.
источник
gdal_translate -a_nodata -9999 input.tif output.tif
хотя иgdalwarp -dstnodata -9999 input.tif output.tif
добился цели . Из 9-мегабайтного входного файла мой подход позволил получить 26-мегабайтный файл, тогда как gdalwarp - 52-мегабайтный выходной. Однако, если растр содержит значения с плавающей точкой, мой подход не будет работать там, где этот будет.-co COMPRESS=LZW
.Мне удалось найти обходной путь для этой проблемы путем преобразования формата данных в Int16 из Float32. Тогда минимальное значение равно -32768 и может быть обработано как значение узла. Следующая команда добилась цели:
Возможно, есть лучшее решение, но это, по крайней мере, решает мою непосредственную проблему.
источник
Ответ на этот вопрос, вероятно, также решит эту проблему: изменение пикселей узлов с -3.40282347e + 38 на другое число в QGIS
Таким образом, вы можете использовать r.null из набора инструментов обработки для изменения значений.
источник
Вы можете попробовать gdal_calc.py input.tif --outfile = output.tif --calc = "A * (A> 0)" --NoDataValue = 0
источник