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