Эффективная работа с растровыми данными в GDAL/Python

Материал из GIS-Lab
Версия от 22:03, 26 августа 2015; Максим Дубинин (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Чтение растровых данных

Блочное чтение

Самый быстрый и правильный способ читать растровые данные - читать их по внутренним блокам.

Узнать размер нативного блока можно выполнив:

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 - номер строки.