Пример географической регистрации изображения с помощью world-файла
по адресу http://gis-lab.info/qa/tfw-example.html
Разбираем создание world-файла по шагам на примере.
Эта статья на простом примере иллюстрирует как зарегистрировать географически растровый слой - картинку. В этой статье мы используем термин "зарегистрировать", а не "привязать", чтобы учесть некоторое тонкое отличие. Обычно под географической привязкой понимают процесс сбора контрольных точек на изображении и опорных данных. В нашем случае, ничего собирать мы не будем, а просто изучим размеры изображения и зарегистрируем растр с помощью так называемого world-файла. Его устройство подробно рассматривается в отдельной статье. На самом деле, это не общепринятое терминологическое различие.
Суть работы заключается в создании специального файла регистрации примерно такого вида. Это обычный текстовый файл, который имеет такое же название как картинка и расширение wld.
20.0000000000000 |
A |
Для примера возьмем одну из картинок из набора данных по хлорофиллу (источник). Эти данные в явном виде не имеют географической привязки. Это означает, что если мы загрузим их в ГИС, то ГИС ничего не будет знать о том, где они находятся на самом деле.
Попробуем (для примера будем использовать свободную ГИС QGIS, но действия дальше могут выполняться и где угодно еще).
Абстрактные координаты 1763,-699 в строке статуса говорят нам, что QGIS не знает где географически находятся наши данные, чтоб обычно означает, что у них отсутствует правильный файл привязки (подробнее).
Но мы можем легко узнать на изображении очертания континентов. Как же сделать так, чтобы ГИС показывала правильные координаты и чтобы мы смогли наложить на нее свои, уже привязанные, данные?
Создадим файл привязки.
Для начала поймем каковы размеры растра в пикселях по ширине и высоте или другими словами, сколько у него рядов и колонок.
Чтобы это узнать можно использовать любой графический редактор или мы можем сделать это в самой ГИС. В QGIS для этого достаточно открыть свойства растра.
Информация о свойствах растра говорит, что наш растр шириной 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:
Как видим, координаты приобрели осмысленные значения похожие на широту-долготу. Чтобы окончательно убедиться, что растр зарегистрирован правильно, добавим еще один слой, например береговые линии (bnd-coast-l) из VMap0.
Вот как выглядит северная оконечность о-ва Мадагаскар.
Вполне прилично и растр уже можно считать географически зарегистрированным. Но есть еще одно улучшение, которое можно сделать.
Обратим внимание на верхний левый пиксель, для этого наложим какой-нибудь слой, охватывающий весь земной шар, например разграфку данных SRTM (северные широты в ней также присутствуют).
Вот как это будет выглядеть:
Как можно видеть, растр смещен. Это произошло потому, что привязка 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
Это окончательно зарегистрирует данные там, где нужно. Вот наш верхний левый угол:
А вот наш Мадагаскар: