Эффективная работа с растровыми данными в GDAL/Python
Перейти к навигации
Перейти к поиску
Чтение растровых данных
Блочное чтение
Самый быстрый и правильный способ читать растровые данные - читать их по внутренним блокам.
Узнать размер нативного блока можно выполнив:
gdalinfo raster.tif
Результат может выглядеть например так:
Band 2 Block=43200x1 Type=Float32, ColorInterp=Undefined
Как видно из примера, блоки могут быть разными для разных каналов. Для GeoTIFF блок всегда равен строке.
Получить размеры блока в программе на Python можно так:
nBlockXSize = band.GetBlockSize()[0]
nBlockYSize = band.GetBlockSize()[1]
Обработка
Растровые данные представляют собой матрицы, в Python эффективнее всего работать с матрицами используя массивы (array) numpy.
При этом стоит помнить, что операции с массивами стоит выполнять вдоль большой оси, это быстрее.
Запись растровых данных
Если чтение происходит поблочно, то и запись обычно тоже (в примере запись в первый канал):
dataset.GetRasterBand(1).WriteArray(newarray,0,x)
где x - номер строки.