Web Map Tile Service

Web Map Tile Service (WMTS) в CesiumJS представляет собой механизм интеграции тайловых карт, предоставляемых по стандарту OGC, в трёхмерную сцену. WMTS основан на заранее подготовленных наборах изображений (tiles), разложенных по фиксированной сетке масштабов, что обеспечивает высокую производительность отображения картографических данных без динамической генерации растра на сервере.

WMTS использует дискретную систему уровней масштабирования (zoom levels), где каждый уровень представлен набором тайлов фиксированного размера, чаще всего 256×256 пикселей. Каждый тайл идентифицируется тройкой параметров:

  • TileMatrix — уровень масштаба
  • TileRow — строка в сетке
  • TileCol — столбец в сетке

В отличие от WMS, где сервер генерирует изображение на каждый запрос, WMTS опирается на предварительно рассчитанные изображения, что снижает нагрузку и увеличивает скорость рендеринга в клиентских приложениях.

Основные режимы доступа:

  • KVP (Key-Value Pair) — параметры передаются в URL
  • RESTful — структура URL заранее определяет доступ к тайлам

Поддержка WMTS в CesiumJS

В CesiumJS работа с WMTS реализована через класс Cesium.WebMapTileServiceImageryProvider, который подключается как источник растровых данных для глобальной 3D-карты.

Базовая структура подключения:

const viewer = new Cesium.Viewer("cesiumContainer");

const wmtsLayer = new Cesium.WebMapTileServiceImageryProvider({
    url: "https://example.com/wmts",
    layer: "basic_layer",
    style: "default",
    format: "image/png",
    tileMatrixSetID: "GoogleMapsCompatible",
    maximumLevel: 18
});

viewer.imageryLayers.addImageryProvider(wmtsLayer);

Параметры WebMapTileServiceImageryProvider

Ключевые параметры конфигурации:

url

Базовый адрес WMTS-сервиса. Может поддерживать как REST, так и KVP-запросы.

layer

Имя слоя, определённого в WMTS Capabilities документе. Каждый слой соответствует отдельному набору данных.

style

Стиль визуализации слоя. Может включать цветовые схемы, фильтры или тематическое представление данных.

format

Формат изображения тайлов:

  • image/png
  • image/jpeg
  • иногда image/webp

tileMatrixSetID

Определяет систему координат и схему разбиения тайлов. Наиболее распространённые:

  • EPSG:3857 (Web Mercator)
  • GoogleMapsCompatible

maximumLevel

Ограничивает максимальный уровень детализации, предотвращая избыточную загрузку данных.

Capabilities и автоматическая конфигурация

WMTS-сервисы предоставляют XML-документ возможностей (GetCapabilities), который описывает:

  • доступные слои
  • стили
  • форматы
  • tile matrix sets
  • границы тайлов

CesiumJS способен частично интерпретировать этот документ, но в большинстве случаев требуется ручная настройка ключевых параметров.

Пример структуры Capabilities:

<Layer>
  <ows:Title>Imagery Layer</ows:Title>
  <Name>basic_layer</Name>
  <Style>
    <Name>default</Name>
  </Style>
  <Format>image/png</Format>
  <TileMatrixSetLink>
    <TileMatrixSet>GoogleMapsCompatible</TileMatrixSet>
  </TileMatrixSetLink>
</Layer>

Координатные системы и проекция

WMTS тесно связан с фиксированными проекциями, где наиболее распространённой является Web Mercator (EPSG:3857). CesiumJS, работающий в глобальной 3D-геометрии WGS84 (EPSG:4326 внутри движка с преобразованием в ECEF), выполняет трансформацию растровых тайлов в геодезическую сцену.

Особенности интеграции:

  • тайлы WMTS проецируются на эллипсоид
  • возможны искажения на полюсах
  • необходима корректная привязка TileMatrixSet

Оптимизация загрузки тайлов

Производительность WMTS в CesiumJS зависит от нескольких факторов:

Кэширование

CesiumJS автоматически кеширует загруженные тайлы в памяти, уменьшая количество повторных запросов.

Приоритизация уровней детализации

Система Level of Detail (LOD) выбирает оптимальный уровень тайлов в зависимости от расстояния камеры до поверхности.

Предзагрузка (preload)

Cesium может загружать соседние тайлы заранее для предотвращения «пустых» областей при движении камеры.

Ограничение максимального уровня

Установка maximumLevel предотвращает чрезмерную детализацию, особенно на больших масштабах глобуса.

REST WMTS и шаблоны URL

В REST реализации WMTS запрос формируется напрямую:

https://server/wmts/layer/style/tileMatrixSet/{TileMatrix}/{TileRow}/{TileCol}.png

CesiumJS автоматически подставляет значения:

  • уровень масштаба
  • координаты тайла
  • формат изображения

Пример продвинутой конфигурации

const wmts = new Cesium.WebMapTileServiceImageryProvider({
    url: "https://tiles.server.com/wmts",
    layer: "satellite",
    style: "default",
    format: "image/jpeg",
    tileMatrixSetID: "EPSG:3857",
    tileMatrixLabels: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
    maximumLevel: 10,
    tilingScheme: new Cesium.WebMercatorTilingScheme(),
    rectangle: Cesium.Rectangle.fromDegrees(-180, -85, 180, 85)
});

viewer.imageryLayers.addImageryProvider(wmts);

Tiling scheme и соответствие сетке

tilingScheme определяет математическую модель разбиения поверхности:

  • WebMercatorTilingScheme — стандартная схема для WMTS
  • GeographicTilingScheme — используется реже, при EPSG:4326

Несоответствие схемы приводит к смещениям тайлов или неправильной геопривязке.

Работа с аутентификацией

WMTS-сервисы часто требуют токены доступа или API-ключи. В CesiumJS это решается через:

  • query parameters в URL
  • custom headers через proxy-сервер
  • signed URLs (временные ссылки)

Пример:

url: "https://server/wmts?token=ABC123"

CORS и сетевые ограничения

Браузерная среда требует корректной настройки CORS на стороне сервера WMTS:

  • заголовок Access-Control-Allow-Origin
  • поддержка preflight-запросов
  • разрешение форматов изображений

При отсутствии CORS CesiumJS не сможет загрузить тайлы напрямую.

Интеграция нескольких WMTS-слоёв

CesiumJS поддерживает наложение нескольких WMTS-источников:

viewer.imageryLayers.addImageryProvider(baseLayer);
viewer.imageryLayers.addImageryProvider(overlayLayer);

Слои рендерятся по порядку добавления, что позволяет комбинировать:

  • спутниковые данные
  • тематические карты
  • ортофотопланы
  • административные границы

Ограничения WMTS в 3D-сцене

При работе в CesiumJS проявляются ограничения стандарта:

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

Несмотря на это, WMTS остаётся одним из наиболее производительных способов подачи растровых карт в глобальных 3D-сценах благодаря строгой структуре и предвычисленным данным.