Создание файлов привязки (world-файлов) в автоматическом режиме для мозаики растровых тайлов
по адресу http://gis-lab.info/qa/tfw-multi.html
Работа со скриптом на языке Perl, который позволяет в автоматическом режиме расчитывать и создавать файлы привязки для мозаики растровых тайлов.
Иногда необходимо создать большое число world-файлов для некоторой матрицы растровых картинок. К примеру, такая задача может возникнуть, когда есть разрезанное на части (тайлы, плитки, фрагменты) большое растровое изображение. Чтобы избежать отдельной привязки каждого тайла может потребоваться:
- создать относительную привязку каждому тайлу (с помощью world-файлов)
- склеить тайлы в единое растровое изображение и лишь затем
- привязывать все растровое изображение целиком (если это необходимо).
Представим ситуацию когда из имени тайлов нам известно их взаимное расположение в пространстве, ширина тайлов по оси Х одинакова для всех тайлов, высота тайлов по оси Y также одинакова для всех тайлов (может быть при этом не равна ширине).
В этом примере конечное растровое изображение должно состоять из 8 тайлов: 8 картинок в 2 ряда (4 картинки на 1 ряд). Для простоты в данном примере размерность в пикселях по оси Х и Y одинакова и равна 1000 пикселей.
Чтобы сгенерировать относительные world-файлы зададим каждому тайлу 6 параметров (подробнее о параметрах). Первые четыре параметра в нашем случае будут неизменны и равны:
1 0 0 -1
А вот последние два параметра – координаты Х и Y верхнего левого пикселя нам необходимо расчитать автоматически исходя из названия файла. Для этого, мы должны знать число колонок и строк такой матрицы тайлов (т.е. число тайлов по оси Х и Y).
К примеру:
- первый тайл – Tile1.tif. Для него параметры файла привязки будут:
1 0 0 -1 0 1000
(так как мы считаем что именно этот верхний левый угол имеет начальные относительные координаты всего растра) - Для тайла Tile2.tif параметры будут уже иными:
1 0 0 -1 1000 1000
(1000 – это ширина тайла по оси Х – следовательно именно такой число пикселей нам надо прибавить к исходной координате). - Для тайла Tile5.tif из второго ряда параметры будут уже иными:
1 0 0 -1 0 0>
- Для тайла Tile6.tif из второго ряда
1 0 0 -1 1000 0.
- И так далее
В таблице приведены расчетные значения world файла для каждого растрового фрагмента (тайла):
Tile 1: 1 0 0 -1 0 1000 |
Tile 2: 1 0 0 -1 1000 1000 |
Tile 3: 1 0 0 -1 2000 1000 |
Tile 4: 1 0 0 -1 3000 1000 |
Tile 5: 1 0 0 -1 0 0 |
Tile 6: 1 0 0 -1 1000 0 |
Tile 7: 1 0 0 -1 2000 0 |
Tile 8: 1 0 0 -1 3000 0 |
Приведенный ниже скрипт на языке Perl позволяет автоматически создать такие world-файлы для всех тайлов (растровых фраментов) в папке. Скрипт должен быть запущен из той папки, где расположены все тайлы и строка запуска может иметь иметь 5 параметров:
perl worldfile_gen.pl [raster_extension] [tiles_X] [tiles_Y] [size_X] [size_Y]
Параметры:
- [raster_extension] — расширение растровых изображений (может быть tif, jpg, img и др).
- [tiles_X] — число тайлов по оси Х в мозаике.
- [tiles_Y] — числов тайлов по оси Y в мозаике.
- [size_X] — размер (в пикселях) тайла по оси Х.
- [size_Y] — размер (в пикселях) тайла по оси Y.
Например:
D:\misc\tiles>perl worldfile_gen.pl tif 20 30 1000 2000
В этом случае будут созданы tfw-файлы для всех файлов с расширением tif в директории, всего будет создано 600 файлов. Размер тайла по оси Х = 1000 пикселей, по оси Y = 2000 пикселей. Число тайлов по оси Х = 20, по оси Y = 30. Если параметры не будут указаны сразу, скрипт запросит их введение после запуска.
Узнать размер изображения в пикселях по Х и Y осям можно с помощью бесплатной библиотеки GDAL и команды gdalinfo ([ http://gdal.org подробнее] о библиотеке Gdal) или эту информацию можно получить с помощью бесплатных графических редакторов (например IrfanView).
Дальнейшая склейка тайлов в единую мозаику может быть проиведена с помощью библиотеки gdal. Если вы работаете в QGIS, можно не склеивать растр и использовать виртуальную мозаику VRT.