Примеры использования инструментов GDAL

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/gdal-examples.html


Перечь примеров для справки

GDAL/OGR - библиотека для работы с географическими форматами данных. GDAL представляет собой набор утилит для обработки растровых данных, в то время, как OGR предназначена для работы с векторными форматами. В статье рассматриваются некоторые практические примеры применения утилит этой библиотеки для работы с растровыми данными.

С библиотекой GDAL так же поставляется утилита ogr2ogr, предназначенная для работы с векторными данными. Примеры использования этой утилиты приводятся в другой статье.

Если у вас есть свои часто используемые примеры - присылайте автору или дописывайте прямо здесь.

Общие сведения

Утилиты GDAL предназначены для конвертации растровых данных из одного формата в другой и выполнения над ними различных операций. Установить утилиты GDAL для Windows можно с помощью OSGeo4W. Удобный визуальный интерфейс для утилит имеется в GDALTools для QGIS. В комплект GDAL входят следующие утилиты:

  • gdal_calc - растровый калькулятор, арифметические операции с растрами;
  • gdal-config - получить опции необходимые для создания ПО использующего GDAL;
  • gdal_contour - получение изолиний по цифровым моделям рельефа (ЦМР);
  • gdal_calc - растровый калькулятор, арифметические операции с растрами;
  • gdal_edit.py - редактировать информацию о растре;
  • gdal_fillnodata.py - заполнение областей имеющих значение NODATA;
  • gdal_merge.py - создание мозаик и композитных изображений;
  • gdal_polygonize.py - векторизовать растр с получением полигонального слоя;
  • gdal_proximity.py - расчитать растр близости;
  • gdal_rasterize - растеризация векторных данных;
  • gdal_retile.py - создать новый набор тайлов и/или перестроить пирамидные слои;
  • gdal_sieve.py - фильтрация осколочных объектов растра;
  • gdal_translate - конвертация растров из формата в формат;
  • gdal2tiles.py - создание тайловой структуры, KML и простого просмотровщика;
  • gdaladdo - добавление пирамидных слоёв (overview);
  • gdalbuildvrt - создание виртуального растра (VRT) из набора;
  • gdalcompare.py - сравнение двух изображений;
  • gdaldem - набор инструментов для анализа и визуализации ЦМР;
  • gdalinfo - информация о растре;
  • gdallocationinfo - запросы информации к растровыми файлам;
  • gdalmanage - управление растровыми файлами (копирование, переименование, удаление и т.д.);
  • gdalmove.py - трансформирование системы координат растра без ресэмплирования;
  • gdalsrsinfo - показывается информацию по системе координат в разных форматах (WKT, PROJ.4 и др.);
  • gdaltindex - построить индекс фрагментов (тайлов) MapServer;
  • gdaltransform- трансформация координат;
  • gdalwarp - трансформация изображения в новую систему координат;
  • nearblack - конвертация черных/белых границ в нужное значение;
  • pct2rgb.py - конвертация 8-битных изображений с палитрой в 24-битные RGB изображений;
  • rgb2pct.py - конвертация 24-битных RGB изображений в 8-битные с палитрой;

Поддерживаемые форматы и используемые ключи можно узнать просто набрав в командной строке имя одной из утилит.

gdalinfo

В результате будет получена справка по использованию этой программы:

Usage: gdalinfo [--help-general] [-mm] [-stats] [-nogcp] [-nomd]
                [-noct] [-checksum] [-mdd domain]* datasetname

Версию GDAL можно посмотреть командой:

gdalinfo --version

Список форматов поддерживаемых утилитами GDAL можно посмотреть следующим образом:

gdalinfo --formats

Cписок поддерживаемых форматов (список может отличаться как в большую, так и в меньшую сторону, поскольку зависит от того, были ли подключены/отключены соответствующие модули при компиляции программы):

  • GRASS (ro): GRASS Database Rasters (5.7+)
  • VRT (rw+): Virtual Raster
  • GTiff (rw+): GeoTIFF
  • HFA (rw+): Erdas Imagine Images (.img)
  • AIG (ro): Arc/Info Binary Grid
  • AAIGrid (rw): Arc/Info ASCII Grid
  • JPEG (rw): JPEG JFIF
  • MEM (rw+): In Memory Raster
  • GIF (rw): Graphics Interchange Format (.gif)
  • BMP (rw+): MS Windows Device Independent Bitmap
  • DIMAP (ro): SPOT DIMAP
  • PCIDSK (rw+): PCIDSK Database File
  • SRTMHGT (rw): SRTMHGT File Format
  • GMT (rw): GMT NetCDF Grid Format
  • HDF4 (ro): Hierarchical Data Format Release 4
  • HDF4Image (rw+): HDF4 Dataset
  • ENVI (rw+): ENVI .hdr Labelled
  • EHdr (rw+): ESRI .hdr Labelled

Примеры конвертации

Извлечь три канала с номерами 1, 2, 3 в новый файл из исходного с перекомбинацией, в котором каналов может быть больше.

gdal_translate -b 3 -b 2 -b 1 output.tif input.tif

В результате в текущем каталоге появится результат 3-х канальный файл output.tif. Или в цикле для например 46-канального (win):

for /L %i in (1,1,46) DO gdal_translate -b %i input.tif output_%i.tif

Создание композитного изображения из серии отдельных растров, каждый из которых в своем файле TIF. Разрешение выходного файла устанавливается по первому их растров. Таким образом, если первый канал 15 м, а остальные 30 м, то последние будут пересчитаны на 15 м. Чтобы указать, что производится помещение каждого растра в свой слой, а не мозаицирование, используется ключ -separate:

gdal_merge.py -o output.tif band1.tif band2.tif band3.tif band4.tif band5.tif -separate

Для мозаицирования (объединения растров располагающихся в пространстве рядом друг с другом), этот ключ нужно убрать. Например чтобы склеить соседние фрагменты (тайлы) рельефа в единое поле:

gdal_merge -o altay.tif srtm_53_02.tif srtm_53_03.tif srtm_54_02.tif srtm_54_03.tif

Конвертация с обрезкой по заданным координатам:

gdal_translate -of GTiff -projwin 75.081940 57.250275 89.869980 49.083084 input.tif output.tiff

Конвертация с компрессией и созданием world-файла:

gdal_translate -co "COMPRESS=LZW" -co "worldfile=yes" input.tif output.tiff

Конвертация 16 битного одноканального растра в 8 битный:

gdal_translate -scale -ot Byte input.tif output.tif

Пакетная конвертация всех JPG в TIF (Windows):

for %i in (*.jpg) do gdal_translate %i %~ni.tif 

Работа с NODATA

Конвертация с заменой одного значения на другое (обычно используется для NODATA):

gdalwarp -srcnodata -999 -dstnodata 0 input.tif output.tif

Если в исходном растре nodata записано как nan NoData Value=nan, то конвертировать лучше так:

gdalwarp -dstnodata nan input.tif output.tif

Работа с системами координат

Переназначение системы координат

Если вам нужно просто перепрописать систему координат, без пересчета самого растра:

gdal_edit -a_srs "EPSG:4326" input.tif

Конвертация с перепроецированием

gdalwarp позволяет не только конвертировать данные из одного формата в другой, но и одновременно произвести перепроецирование данных из одной системы координат в другую. Для этого используются параметры:

  • -a_srs используется для указания системы координат для данных
  • -s_srs используется для перезаписи информации о системе координат
  • -t_srs перепроецирования данных в требуемую систему координат

Например, перепроецировать из проекции растра в проекцию Альберса можно так:

gdalwarp.exe -t_srs "+proj=aea +lat_1=52 +lat_2=64 +lat_0=0 +lon_0=45 +x_0=8500000 +y_0=0 +ellps=krass +units=m +towgs84=28,-130,-95,0,0,0,0 +no_defs" in.tif out.tif

Обрезка

Обрезка по векторному контуру c уменьшением охвата растра (реальная обрезка, а не просто заполнение ненужных областей значениями NODATA):

gdalwarp -cutline aoi.shp -crop_to_cutline input.tif output.tif

Работа с рельефом

Теневая отмывка рельефа:

gdaldem hillshade altay.tif altayhill.tif -z 5 -s 111120

Ключ -s 111120 используется для пересчета для растров сделанных в EPSG:4326 в метровые СК. Если исходник уже находится в проекции, то он не нужен.

Цветовая отмывка рельефа:

gdaldem color-relief altay.tif ramp.txt altay-color.tif

Пример файла ramp.txt:

5000 255 255 255
1000 168 112 0
650 198 165 48
400 229 218 97
200 218 229 97
0 112 168 0

Построение изолиний

Утилита gdal_contour используется для получения изолиний - линий равных значений по растровым данным. Полученные линии пересекают все пиксели с одинаковым значением, очерчивая при этом некоторую область. Чаще всего применяется для построения горизонталей рельефа из ЦМР.

Построение контуров с интервалом в 5 единиц (Единица указывается в единицах измерения исходного растра):

gdal_contour -i 5 mydem.tif contour.shp

Построение контуров из первого канала растра, с интервалом в 100 единиц начиная с 1200 и записью значения в поле elev:

gdal_contour -b 1 -a elev -i 100 -off 1200 mydem.tif contour.shp

Построение только контуров с фиксированными значениями 1000, 1100 и 1120 и выводом результата в таблицу PostGIS

gdal_contour -a elev -f PostgreSQL -fl 1000 1100 1120 -nln cont mydem.tif "PG:host=localhost user=iampg password=iampgpass dbname=iamgis"

netCDF

Конвертирование в GeoTIFF:

gdal_translate -of GTiff -b 1 NETCDF:precip.mon.mean.nc:precip b1.tif

Конвертирование в GeoTIFF с обрезкой по исходным координатам и созданием TFW (world-)файла:

gdal_translate -of GTiff -srcwin 0 0 72 72 -co TFW=YES -b 1 NETCDF:precip.mon.mean.nc:precip b1.tif

Разбиение поднаборов данных ("SUBDATASET") на отдельные файлы netCDF (на выходе — файлы типа "example1", "example2" и т.д.):

gdal_translate -sds example.nc example

HDF4

В HDF4 распространяется множество данных дистанционного зондирования, например MODIS и ASTER. Использовать -geoloc для перепроецирования не нужно.

Импорт данных ASTER L1A:

gdalwarp -overwrite -of GTiff HDF4_EOS:EOS_SWATH:"110601_081441.hdf":VNIR_Band1:ImageData b1.tif 

Расчеты

Для разнообразных пересчетов значений пикселей можно использовать gdal_calc. Например, такая команда сбросит в NODATA все пиксели чьё значение больше 16000:

gdal_calc.bat -A input.tif --outfile=output.tif --calc="A*(A<16000)" --NoDataValue=0

Читается такое выражение следующим образом: для каждого пикселя растра input.tif, если его значение меньше 16000 - оставить его таким же, иначе - сбросить в 0.

В выражениях могут использоваться логические "и" и "или", т.е. например в примере ниже: если значение пикселя больше или равно 249, но меньше 255 - сделать его единицей, остальные значения (включая 255) установить в 0.

gdal_calc.bat -A input.tif --outfile=output.tif --calc="1*(logical_and(A>=249,A<255)) " --NoDataValue=0'

Создание растров уменьшенного разрешения (т.н. quicklook, preview)

Создать для данных ДЗЗ высокого разрешения так называемый quicklook, т.е. привязанный растр для быстрого предварительного просмотра, можно с помощью gdal_translate, ему можно просто указать конечный размер процентах:

gdal_translate -of "JPEG" -outsize 20% 20%  ALOS_example.tif ALOS_example_preview.jpg -co "WORLDFILE=YES"

Или с помощью gdalwarp, ему можно передать нужный размер пикселя в единицах системы координат, так же можно указать метод, которым будет происходить объединение значений (например усреднение):

gdalwarp -tr 8000 8000 -r average input.tif output.tif

Ссылки по теме