GDAL/OGR: Швейцарский нож геоданных
Обучение

GDAL/OGR: Швейцарский нож геоданных

Вы открываете QGIS, перетаскиваете shape-файл — и он работает. Под капотом GDAL. Конвертируете растр в другую проекцию — снова он. Извлекаете высоты из SRTM — он. Даже когда ArcGIS читает ваш старый TIF с нестандартной геопривязкой — за кулисами всё тот же GDAL. Любое открытие растра, любое репроецирование слоя — GDAL внутри. QGIS — это графическая обёртка вокруг GDAL + GRASS + PROJ

GDAL (Geospatial Data Abstraction Library) — это библиотека-переводчик между форматами геоданных. Создан в 1998 году Фрэнком Вармердамом, когда каждый производитель ГИС хранил координаты по-своему, и обмен данными был мучением. Сегодня GDAL поддерживает более 200 растровых и векторных форматов — от привычных GeoTIFF и Shapefile до экзотических ECW, MrSID, NetCDF и даже специфических форматов спутников (Sentinel, Landsat, MODIS)

Когда QGIS — это слишком медленно

Для пакетной обработки графический интерфейс — тупик. Если перед вами стоит задача: 500 файлов в разных проекциях, форматах, с разным сжатием. Нужно привести к единому стандарту: одна проекция, один формат, одна структура папок. Открывать каждый вручную? Жизнь коротка. Python + GDAL — и вы свободны.

from osgeo import gdal
from pathlib import Path

def batch_convert(input_folder, output_folder, target_epsg=4326):
   """Конвертирует все TIFF в заданную проекцию."""
   for tif_file in Path(input_folder).glob('*.tif'):
       output_file = Path(output_folder) / tif_file.name
       
       # Пропускаем, если уже есть
       if output_file.exists():
           continue
           
       # Репроецируем с сжатием
       warp_options = gdal.WarpOptions(
           format='GTiff',
           dstSRS=f'EPSG:{target_epsg}',
           resampleAlg=gdal.GRA_Bilinear,
           creationOptions=['COMPRESS=DEFLATE', 'TILED=YES']
       )
       
       ds = gdal.Warp(str(output_file), str(tif_file), options=warp_options)
       if ds:
           ds = None
           print(f"✓ {tif_file.name}")

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

Иногда даже Python — избыточно. GDAL поставляется с набором утилит командной строки, которые работают мгновенно. Никаких IDE, никаких импортов — просто терминал:

# Перевести в Web Mercator с сжатием
gdalwarp -t_srs EPSG:3857 -co COMPRESS=LZW input.tif output.tif

# Обрезать по bounding box (xmin ymin xmax ymax)
gdalwarp -te 37.6 55.7 37.7 55.8 -te_srs EPSG:4326 large.tif small.tif

# Создать пирамидные чанки для быстрого отображения
gdalwarp -co TILED=YES -co BLOCKXSIZE=512 -co BLOCKYSIZE=512 input.tif optimized.tif

Командная строка обрабатывает файлы в 10-50 раз быстрее, чем GUI-инструменты. 

Начните уже сегодня:

  1. Установите GDAL: conda install -c conda-forge gdal 
  2. Откройте терминал и выполните gdalinfo --formats — увидите 200+ поддерживаемых форматов
  3. Возьмите один свой растр и репроецируйте его командой gdalwarp
  4. Заверните это в Python-скрипт — и вы уже автоматизированы

GDAL существует уже 27 лет. Он пережил десятки коммерческих ГИС, форматы данных и технологические хайпы. Пока существуют геопространственные данные — будет существовать и GDAL.

Документация: https://gdal.org/en/stable/programs/index.html