Создание файлов привязки (world-файлов) в автоматическом режиме для мозаики растровых тайлов

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


Работа со скриптом на языке Perl, который позволяет в автоматическом режиме расчитывать и создавать файлы привязки для мозаики растровых тайлов.

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

  1. создать относительную привязку каждому тайлу (с помощью world-файлов)
  2. склеить тайлы в единое растровое изображение и лишь затем
  3. привязывать все растровое изображение целиком (если это необходимо).

Представим ситуацию когда из имени тайлов нам известно их взаимное расположение в пространстве, ширина тайлов по оси Х одинакова для всех тайлов, высота тайлов по оси Y также одинакова для всех тайлов (может быть при этом не равна ширине).

Tfw-multi-01.png

В этом примере конечное растровое изображение должно состоять из 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.

Скачать скрипт

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