Использование GDAL для привязки растровых материалов

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.
Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/georef-gdal.html


Описание работы с библиотекой GDAL для привязки растровых данных


Библиотека GDAL - очень полезный, бесплатно распространяемый набор инструментов и библиотек с открытым исходным кодом. Использование этих инструментов это один из немногих способов осуществить географическую привязку растрового изображения используя исключительно бесплатное (и легальное) ПО.

Привязка растровых изображений, которые кроме файловой (пиксельной) другой системы координат не имеют (например отсканированных изображений) проводится в два шага. Если растр уже имеет географическую или спроектированную систему координат и ее нужно изменить на другую то следует переходить сразу к шагу 3.

Адресация контрольных точек

Прежде чем назначать контрольные точки, необходимо разобраться с адресацией пикселей. Начало координат растра при чтении его GDAL располагается в точке 0,0, которая соответствует левому верхнему пикселю (точка 00 на иллюстрации). Координаты по оси Y увеличиваются сверху вниз, так, левый нижний угол должен адресоваться как 0, 23. Координаты по оси Х увеличиваются слева направо, так верхний правый угол должен адресоваться как 31,0. Наконец, нижний правый угол будет иметь координаты 31,23.

запуск listgeo

Назначение контрольных точек

На этом этапе задаётся информация о том, какие конечные координаты (Lat, Long) должен получить определенный пиксел (имеющий пиксельные координаты X,Y). Конечные координаты не обязательно должны быть широтой долготой, они также могут быть иметь и спроектированную прямоугольную систему координат:

gdal_translate.exe -of GTiff -gcp X Y Long Lat source.tif output.tif

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

gdal_translate.exe -of GTiff -gcp 136 172 49 -11.3333 -gcp 3363 187 49.5 -11.3333 -gcp 56594 208 50 -11.3333 source.tif output.tif

Проверить, правильно ли прописались контрольные точки можно с помощью listgeo:

listgeo.exe output.tif

В случае если операция осуществлена корректно, в тэгах GeoTIFF должна появиться информация о контрольных точках:

запуск listgeo

Трансформация растра

Обычно на втором этапе производится трансформация растра, если растр уже имеет географическую или спроектированную систему координат и ее нужно изменить на другую, то первый шаг не нужен:

-s_rsr - исходная система координат, в формате строки описания системы координат PROJ. Исходная система координат должна соответствовать системе координат введенных на первом этапе контрольных точек.

-t_srs - конечная система координат, если необходимо только трансформировать растр в систему координат контрольных точек, то она должна быть равна исходной.

gdalwarp.exe -s_srs "+proj=longlat +ellps=krass +datum=Pulkovo_1942" -t_srs "+proj=longlat +ellps=krass +datum=Pulkovo_1942" output.tif result.tif

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

gdalwarp.exe output.tif result.tif

Примечания:

  • Названия файлов не рекомендуется начинать с цифр
  • По умолчанию для трансформации используется полиномиальное преобразование, причем его порядок определяется количеством точек, что не всегда удобно, так как если у вас много контрольных точек, то выбрано будет преобразование высокого порядка, которое сильно деформирует растр, что в большинстве случаев неприемлемо. Чтобы установить определенный порядок полиномиального преобразования, нужно использовать ключ -order n, где n - порядок полинома.
  • GDAL также позволяет использовать преобразование thin-plate spline, для этого нужно использовать ключ -tps.

Благодарим за идею Григория Морозова


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