В статьях “Работа с растрами при помощи GDAL и Python” и “Замена значений в растрах с помощью GDAL/Numpy“, приводится такой пример обработки данных растра попиксельно:
# перебираем все пиксели растра for col in range( xsize ): for row in range( ysize ): # если значение пикселя равно inval, то меняем его на outval # иначе значение остается без изменений if raster[ row, col ] == inval: raster[ row, col ] = outval |
Пример годный, но для больших растров очень медленный. Для подобных операций лучше использовать функции Numpy для обработки массивов.
Для сравнения:
Вышеприведенная обработка для растра размером 6000×6000 пикселей (36 миллионов) займет 528 секунд.
Ее аналог для обработки массивов будет выглядеть так:
temp1_bool = numpy.equal(raster,inval) numpy.putmask(raster,temp1_bool,outval) |
? для того же растра займет всего 2 секунды. Не слабая разница. Статьи и скрипт для замены значений обновлены.