Пример географической регистрации изображения с помощью world-файла

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


Разбираем создание world-файла по шагам на примере.

Эта статья на простом примере иллюстрирует как зарегистрировать географически растровый слой - картинку. В этой статье мы используем термин "зарегистрировать", а не "привязать", чтобы учесть некоторое тонкое отличие. Обычно под географической привязкой понимают процесс сбора контрольных точек на изображении и опорных данных. В нашем случае, ничего собирать мы не будем, а просто изучим размеры изображения и зарегистрируем растр с помощью так называемого world-файла. Его устройство подробно рассматривается в отдельной статье. На самом деле, это не общепринятое терминологическое различие.

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

20.0000000000000
0.00000000000000
0.00000000000000
-20.000000000000
424178.117
4313415.907

A
C
D
B
E
F

Для примера возьмем одну из картинок из набора данных по хлорофиллу (источник). Эти данные в явном виде не имеют географической привязки. Это означает, что если мы загрузим их в ГИС, то ГИС ничего не будет знать о том, где они находятся на самом деле.

Попробуем (для примера будем использовать свободную ГИС QGIS, но действия дальше могут выполняться и где угодно еще).

Tfw-example-01.gif

Абстрактные координаты 1763,-699 в строке статуса говорят нам, что QGIS не знает где географически находятся наши данные, чтоб обычно означает, что у них отсутствует правильный файл привязки (подробнее).

Но мы можем легко узнать на изображении очертания континентов. Как же сделать так, чтобы ГИС показывала правильные координаты и чтобы мы смогли наложить на нее свои, уже привязанные, данные?

Создадим файл привязки.

Для начала поймем каковы размеры растра в пикселях по ширине и высоте или другими словами, сколько у него рядов и колонок.

Чтобы это узнать можно использовать любой графический редактор или мы можем сделать это в самой ГИС. В QGIS для этого достаточно открыть свойства растра.

Tfw-example-02.gif

Информация о свойствах растра говорит, что наш растр шириной 4320 пикселей и высотой 2160. Зная это легко расчитать географический размер пикселя по широте и долготе. Мы предполагаем, что растр на самом деле находится в географической системе координат.

Расчитаем для начала размер пикселя, для этого разделим расстояние по долготе на количество пикселей:

360/4320 = 0.08333333

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

180/2160 = 0.08333333

Таким образом, пиксель все-таки квадратный и размер его 0.08333333 на 0.08333333 градуса, что, кстати примерно соответствует разрешению в 1 км.

Итак, первые четыре параметра у нас определились, они выглядят так:

0.08333333
0.00000000000000
0.00000000000000
-0.08333333
?
?

Определимся с последними двумя, показывающими привязку верхнего правого пикселя. Судя по тому, что у нас изображение показывающее весь земной шар, то резонно будет предположить, что верхний правый пиксель будет иметь координаты -180 по долготе и 90 по широте. Попробуем их подставить в наш world-файл:

0.08333333
0.00000000000000
0.00000000000000
-0.08333333
-180
90

Удалим и перезагрузим растр в QGIS:

Tfw-example-03.gif

Как видим, координаты приобрели осмысленные значения похожие на широту-долготу. Чтобы окончательно убедиться, что растр зарегистрирован правильно, добавим еще один слой, например береговые линии (bnd-coast-l) из VMap0.

Вот как выглядит северная оконечность о-ва Мадагаскар.

Tfw-example-04.gif

Вполне прилично и растр уже можно считать географически зарегистрированным. Но есть еще одно улучшение, которое можно сделать.

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

Вот как это будет выглядеть:

Tfw-example-05.gif

Как можно видеть, растр смещен. Это произошло потому, что привязка world-файлов на самом деле осуществляется к центру пиксела, а не к его вернему левому углу (-180, 90), соответственно, для последних двух значений файла регистрации нужно взять их же, но уменьшенные на половину пикселя:

180-0.08333333/2 = 179.9583
90-0.08333333/2 = 89.95833

Таким образом результирующий файл регистрации будет таким:

0.08333333
0.00000000000000
0.00000000000000
-0.08333333
-179.9583
89.95833

Это окончательно зарегистрирует данные там, где нужно. Вот наш верхний левый угол:

Tfw-example-06.gif

А вот наш Мадагаскар:

Tfw-example-07.gif

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