Tile Map Service (TMS) представляет собой стандартизированный способ публикации растровых тайлов изображений карты по фиксированной схеме разбиения пространства. Основная идея заключается в предварительном рендеринге карты на набор квадратных изображений (тайлов), которые хранятся на сервере и загружаются клиентом по запросу в зависимости от текущего положения камеры и уровня детализации.
Ключевая особенность TMS — иерархическая структура уровней масштабирования. Каждый последующий уровень увеличивает детализацию, разбивая тайлы предыдущего уровня на четыре дочерних:
Такая структура обеспечивает предсказуемую загрузку данных и упрощает кеширование.
В контексте CesiumJS TMS используется как один из типов источников подложки (imagery provider), обеспечивая интеграцию классических 2D-карт в глобальную 3D-сцену.
TMS-сервер обычно содержит три ключевых компонента:
1. Метаданные слоя Файл
tilemapresource.xml описывает:
2. Дерево тайлов Файловая структура обычно выглядит следующим образом:
/{z}/{x}/{y}.png
или
/zoom/x/y.png
Где:
3. Статические изображения Каждый тайл — это готовое изображение, чаще всего PNG или JPEG, без динамической генерации на сервере.
TMS часто сравнивается с другими системами разбиения карты:
XYZ (Slippy Map Tiles) Использует обратную нумерацию оси Y (origin вверху слева)
WMTS (Web Map Tile Service) Более формализованный OGC-стандарт с поддержкой различных матриц тайлов
TMS Использует origin внизу слева, что является ключевым отличием
Это различие критично при интеграции источников данных, так как неправильная трактовка оси Y приводит к инверсии карты.
В CesiumJS работа с TMS реализуется через
TileMapServiceImageryProvider.
Базовая схема подключения:
import * as Cesium from "cesium";
const viewer = new Cesium.Viewer("cesiumContainer", {
imageryProvider: false,
baseLayerPicker: false
});
const tmsProvider = new Cesium.TileMapServiceImageryProvider({
url: "https://example.com/tms/",
fileExtension: "png",
maximumLevel: 18
});
viewer.imageryLayers.addImageryProvider(tmsProvider);
url Базовый адрес TMS-сервера. Должен указывать на
корень слоя, где расположен tilemapresource.xml.
fileExtension Формат тайлов:
maximumLevel Ограничивает максимальный уровень детализации, загружаемый клиентом. Используется для:
minimumLevel Минимальный уровень отображения слоя. Полезен для предотвращения чрезмерного увеличения глобальных тайлов.
При перемещении камеры CesiumJS выполняет следующие шаги:
Система LOD в Cesium учитывает:
TMS традиционно использует проекцию Web Mercator (EPSG:3857), что обеспечивает совместимость с большинством веб-картографических систем.
Однако важно учитывать:
CesiumJS автоматически преобразует координаты между:
В 3D-сцене CesiumJS тайлы TMS не просто накладываются на плоскость, а проецируются на эллипсоид Земли.
При наклоне камеры:
Это достигается за счёт системы terrain and imagery layering, где TMS-слой комбинируется с геометрией поверхности.
CesiumJS использует многоуровневое кеширование:
1. Memory cache Хранит недавно использованные тайлы в оперативной памяти.
2. Request scheduler Контролирует количество одновременных HTTP-запросов.
3. Disk cache (через browser storage) Позволяет повторно использовать ранее загруженные тайлы между сессиями.
Если сервер возвращает отсутствующий тайл:
Это предотвращает появление “дыр” в карте при неполных наборах данных.
TMS-слои в CesiumJS могут комбинироваться с:
Порядок наложения влияет на визуальный результат:
const viewer = new Cesium.Viewer("cesiumContainer");
const tmsLayer = new Cesium.TileMapServiceImageryProvider({
url: "https://example.com/tms/roads/",
fileExtension: "png"
});
viewer.imageryLayers.addImageryProvider(tmsLayer);
viewer.camera.setView({
destination: Cesium.Cartesian3.fromDegrees(71.4304, 51.1282, 20000)
});
Производительность TMS в CesiumJS зависит от:
Оптимизационные практики включают:
Несмотря на простоту, TMS имеет ряд ограничений:
В современных системах TMS часто используется как базовый слой, поверх которого строятся более гибкие векторные или 3D-решения.
Внутри CesiumJS TMS-интеграция проходит через abstraction layer imagery providers:
Каждый тайл проходит жизненный цикл:
TMS остаётся важной частью экосистемы веб-картографии благодаря:
В связке с CesiumJS он часто используется как базовый слой, обеспечивающий визуальную подложку для более сложных 3D-данных и аналитических сцен.