Web Map Tile Service (WMTS) в CesiumJS представляет собой механизм интеграции тайловых карт, предоставляемых по стандарту OGC, в трёхмерную сцену. WMTS основан на заранее подготовленных наборах изображений (tiles), разложенных по фиксированной сетке масштабов, что обеспечивает высокую производительность отображения картографических данных без динамической генерации растра на сервере.
WMTS использует дискретную систему уровней масштабирования (zoom levels), где каждый уровень представлен набором тайлов фиксированного размера, чаще всего 256×256 пикселей. Каждый тайл идентифицируется тройкой параметров:
TileMatrix — уровень масштабаTileRow — строка в сеткеTileCol — столбец в сеткеВ отличие от WMS, где сервер генерирует изображение на каждый запрос, WMTS опирается на предварительно рассчитанные изображения, что снижает нагрузку и увеличивает скорость рендеринга в клиентских приложениях.
Основные режимы доступа:
В 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);
Ключевые параметры конфигурации:
Базовый адрес WMTS-сервиса. Может поддерживать как REST, так и KVP-запросы.
Имя слоя, определённого в WMTS Capabilities документе. Каждый слой соответствует отдельному набору данных.
Стиль визуализации слоя. Может включать цветовые схемы, фильтры или тематическое представление данных.
Формат изображения тайлов:
image/pngimage/jpegimage/webpОпределяет систему координат и схему разбиения тайлов. Наиболее распространённые:
EPSG:3857 (Web Mercator)GoogleMapsCompatibleОграничивает максимальный уровень детализации, предотвращая избыточную загрузку данных.
WMTS-сервисы предоставляют XML-документ возможностей (GetCapabilities), который описывает:
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 в CesiumJS зависит от нескольких факторов:
CesiumJS автоматически кеширует загруженные тайлы в памяти, уменьшая количество повторных запросов.
Система Level of Detail (LOD) выбирает оптимальный уровень тайлов в зависимости от расстояния камеры до поверхности.
Cesium может загружать соседние тайлы заранее для предотвращения «пустых» областей при движении камеры.
Установка maximumLevel предотвращает чрезмерную
детализацию, особенно на больших масштабах глобуса.
В 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);
tilingScheme определяет математическую модель разбиения
поверхности:
Несоответствие схемы приводит к смещениям тайлов или неправильной геопривязке.
WMTS-сервисы часто требуют токены доступа или API-ключи. В CesiumJS это решается через:
Пример:
url: "https://server/wmts?token=ABC123"
Браузерная среда требует корректной настройки CORS на стороне сервера WMTS:
Access-Control-Allow-OriginПри отсутствии CORS CesiumJS не сможет загрузить тайлы напрямую.
CesiumJS поддерживает наложение нескольких WMTS-источников:
viewer.imageryLayers.addImageryProvider(baseLayer);
viewer.imageryLayers.addImageryProvider(overlayLayer);
Слои рендерятся по порядку добавления, что позволяет комбинировать:
При работе в CesiumJS проявляются ограничения стандарта:
Несмотря на это, WMTS остаётся одним из наиболее производительных способов подачи растровых карт в глобальных 3D-сценах благодаря строгой структуре и предвычисленным данным.