Основы работы динамических TMS-сервисов

Материал из GIS-Lab
Версия от 12:40, 6 апреля 2013; Denis Rykov (обсуждение | вклад) (Новая страница: «== Введение == TMS-сервис может функционировать в одном из двух режимов - статическом и дина…»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Введение

TMS-сервис может функционировать в одном из двух режимов - статическом и динамическом. В первом случае это ни что иное, как просто набор файлов, организованных определённым образом в файловой системе - тайловый кэш (здесь и далее в статье мы предполагаем, что тайловый сервис отвечает лишь за передачу самих тайлов (Tile Resources), остальные ресурсы, описываемые в спецификации, мы рассматривать не будем в виду их тривиальности). При запросе конкретного тайла HTTP-сервер (Apache, nginx) самостоятельно отображает запрашиваемый URL на структуру файловой системы и возвращает клиенту нужный тайл. Пример организации тайлового кэша:

└── admin_EPSG3857
    ├── 1
    │   ├── 0
    │   │   ├── 0.png
    │   │   └── 1.png
    │   └── 1
    │       ├── 0.png
    │       └── 1.png
    └── 2
        ├── 0
        │   ├── 0.png
        │   ├── 1.png
        │   ├── 2.png
        │   └── 3.png
        ├── 1
        │   ├── 0.png
        │   ├── 1.png
        │   ├── 2.png
        │   └── 3.png
        ├── 2
        │   ├── 0.png
        │   ├── 1.png
        │   ├── 2.png
        │   └── 3.png
        └── 3
            ├── 0.png
            ├── 1.png
            ├── 2.png
            └── 3.png

В данном случае, чтобы получить, тайл с координатами (0, 0) на втором масштабном уровне, необходимо выполнить запрос, который может выглядеть следующим образом:

http://10.22.0.9/tms/1.0.0/admin_EPSG3857/2/0/0.png

Для создания тайлового кэша существует различное программное обеспечение, например, утилиты gdal2tiles и mapproxy-seed, TileMill, QTiles. Процесс создания тайлового кэша называется сидированием (seeding). Данная процедура весьма требовательна к объёму жесткого диска и может занимать очень много времени. Например, время создания тайлового кэша на территорию Казахстана вплоть до 16 масштабного уровня (профиль global-mercator) при средней наполненности слоёв составляет 2-3 дня, поэтому на практике данный способы используется для подготовки кэшей карт небольших территорий или для создания кэшей определённых масштабных уровней.

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

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

Чтобы разобраться с тем, как организована работа современных тайловых серверов (TileCache, MapProxy) (фактически работающих в смешанном режиме), попытаемся написать собственный динамический TMS-сервер.

Заключение

Таким образом, мы написали свой собственный примитивный TMS-сервер в котором пока нет ни возможности кэширования тайлов, ни многих других важных функций, но который наглядно отражает подходы, используемые современным ПО данного класса.