TilingTools

Михаил Потанин

В самом конце года хотим поделиться хорошей штукой — нашим проектом для выполнения операций с тайлами: TilingTools (https://github.com/scanex/tilingtools). Мы выкладываем этот проект с открытым кодом, который написан на C++. Есть готовая сборка под Windows-x64, код может быть легко скомпилирован с помощью Visual Studio, в ближайших планах адаптация под Linux. Мы также полагаем, что наш проект заряжен правильной инженерной энергетикой и поэтому обязательно принесет удачу своим пользователем и привнесет гармонию в разрабатываемые ими технологии в наступающем году. О том, как он может принести хотя бы пользу, написано чуть ниже. В общем с Наступающим всех!
Проект состоит из библиотеки, реализующей набор классов, и двух утилит:

  • ImageTiling — построение пирамиды тайлов для публикации растровых данных в геосервисах
  • CopyTiles — конвертер между различными форматами хранения тайлов

За счет использования нативного API GDAL на C++ и многопоточной обработки данных утилита ImageTiling обеспечивают высокую скорость тайлинга (конвертацию растра в пирамиду тайлов). Кроме высокой производительности ImageTiling обладает гибким интерфейсом и развитым функционалом. Примеры использования ImageTiling через консольную строку:

  • Imagetiling -i image1.tif -i image2.tif -i image3.tif -o image1-3_tilesтайлинг и склейка нескольких изображений в единый слой тайлов
  • Imagetiling -i image1.tif -i image2.tif -b vector1.shp -b vector2.shp -o image1-2_tiles - тайлинг с указанием векторной маски для каждого растра:
  • Imagetiling -i images/*.tif -of mbtiles -o image_all.mbtilesзаписью тайлов в формат MBTiles

Пользовательский кейс: входные данные — каталог растровых планшетов ПЗЗ на г. Санкт-Петербург, требуется — «сшить» планшеты в единое покрытие, создать единый набор тайлов для публикации.

tt_img1

Рис. 1. Схема разграфки планшетов ПЗЗ — входные данные

Для каждого растрового файла, соответствующего одному планшету, записан текстовый файл с географическими координатами углов планшета. После тайлинга получается интерактивная карта:

Рис. 2. Визуализация склеенных с помощью ImageTiling, планшетов ПЗЗ единым тайловым слоем на базовой картографической подложке

Архитектура программного кода ImageTiling позволяет расширять функциональность без изменения базового алгоритма тайлинга. Для поддержки специфического формата упаковки тайлов достаточно написать расширение класса gmx::ITileContainer. Для поддержки дополнительной целевой проекции тайлинга и нестандартной сетки тайлов нужно писать дочерний класс gmx::ITileMatrixSet. В текущую функциональность ImageTiling входят операции:

  • тайлинг набора растров в “мозаику” тайлов со склейкой по векторной маске (входные растры могут иметь произвольное пересечение или быть “стык в стык”)
  • jpg-тайлы и png-тайлы с прозрачностью
  • трансформирование на лету входных данных в проекцию тайлинга
  • поддержка двух целевых проекций тайлинга: EPSG:3395 (WORLD_MERCATOR) и EPSG:3387 (WEB_MERCATOR)
  • настройка шаблона именования тайлов
  • поддержка контейнеров: gmxtiles и mbtiles
  • настройка последовательности растровых каналов
  • конвертация из 16 бит в 8 бит
  • запись тайлов в формате 16 бит-tif — данная опция позволяет организовать хранилище “грид-данных”. Например, высота рельефа местности, значение индекса NDVI в точке и т.п.

Будем признательны за комментарии здесь или на help@kosmosnimki.ru. Еще раз всех с Новым Годом!

 

Оставить комментарий