Обсудить в форуме Комментариев 5Редактировать в вики
Описание и скрипт.
Задача: заменить в растре одно значение на другое.
Для решения можно использовать возможности GDAL для чтения/записи растров и Numpy для операций замены. Данный способ использовался, например, для нормализации ошибочных значений NODATA в данных SRTM 5x5.
Все основные моменты работы с растрами изложены в статье «Работа с растрами при помощи GDAL и Python». Остановимся на ключевых деталях реализации:
Так как мы хотим только поменять значение, то важно сохранить растр в том же числовом формате, что и исходный. Для этого нужно при чтении получить исходный числовой формат:
gd = gdal.Open( input )
intype = gd.GetRasterBand( 1 ).DataType
и использовать его же при сохранении результирующего растра:
outRaster = driver.Create( output, xsize, ysize, 1, intype )
Также полезным может оказаться установка значения NoData, если для его установки и заменяются значения:
outRaster.GetRasterBand( 1 ).SetNoDataValue(-32678)
Основная работа производится с помощью функций обработки массивов Numpy, значительно более быстрых чем попиксельная обработка. Цикл поиска-замены значения выглядит следующим образом:
temp1_bool = numpy.equal(raster,inval)
numpy.putmask(raster,temp1_bool,outval)
Запуск скрипта производится следующим образом:
remap.py input_raster output_raster input_value output_value
В качестве аргументов используется имя исходного и конечного растра, а также исходное и конечное значение. Например, для замены значения 255 на -32678:
remap.py input.tif output.tif 255 -32678
Скачать скрипт.
Предупреждение: на данный момент описанная реализация относительно медленная, операции на больших растрах могут занимать значительное время.
Обсудить в форуме Комментариев 5Редактировать в вики
Последнее обновление: 2014-05-14 22:45
Дата создания: 04.07.2010
Автор(ы): Максим Дубинин
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).