Web Mercator

Web Mercator является одной из ключевых картографических проекций, лежащих в основе большинства современных веб-картографических систем и напрямую используемой в экосистеме CesiumJS при работе с 2D-тайлами и смешанными режимами отображения. Несмотря на то, что CesiumJS ориентирован на трёхмерную глобусную модель, понимание Web Mercator критично для корректной интеграции слоёв, тайловых сервисов и источников данных, предоставляемых в формате XYZ, TMS и WMTS.

Web Mercator, также известный как EPSG:3857, представляет собой псевдосферическую проекцию, в которой поверхность Земли отображается на квадратную плоскость. Формально она основана на классической проекции Меркатора, но адаптирована для использования в веб-картографии, где важны простота вычислений и совместимость с тайловой системой.


Проекция опирается на преобразование географических координат (широта φ, долгота λ) в декартову систему координат (x, y):

  • долгота отображается линейно:

    x = R · λ

  • широта преобразуется через логарифмическую функцию:

    y = R · ln(tan(π/4 + φ/2))

где R — радиус Земли в модели (обычно принимается 6378137 м).

Ключевой особенностью является нелинейное растяжение по оси Y, которое резко увеличивается при приближении к полюсам. На практике это приводит к тому, что область выше ~85.0511° широты не может быть корректно отображена.


Ограничения и «обрезка» полюсов

Web Mercator не предназначена для точного отображения полярных областей. При φ → ±90° значение функции y стремится к бесконечности, поэтому вводится искусственное ограничение:

  • максимальная широта: ±85.05112878°

Это значение соответствует границе, при которой квадратная карта остаётся конечной.

В CesiumJS это ограничение проявляется при использовании 2D-слоёв или при наложении тайловых карт на глобус. Полярные области либо не отображаются, либо «сжимаются» к верхнему и нижнему краю проекции.


Тайловая система Web Mercator

Одним из главных преимуществ Web Mercator является простая схема разбиения на тайлы. В стандартной XYZ-системе:

  • при зуме z карта делится на 2^z × 2^z тайлов
  • каждый тайл имеет координаты (x, y, z)
  • размер тайла фиксирован (обычно 256×256 пикселей)

Это обеспечивает предсказуемую структуру хранения данных и эффективную подгрузку.

В контексте CesiumJS тайловая система Web Mercator используется как один из слоёв поверх 3D-глобуса. Даже при рендеринге сферической Земли движок способен отображать такие слои, «натягивая» их на эллипсоид WGS84.


Проекция и система координат в CesiumJS

CesiumJS по умолчанию использует трехмерный эллипсоид WGS84 (EPSG:4326), где координаты задаются как:

  • долгота (λ)
  • широта (φ)
  • высота (h)

Однако Web Mercator вводит промежуточное пространство:

  • координаты в метрах (EPSG:3857)
  • плоское представление мира

При загрузке тайлового слоя Cesium выполняет следующие преобразования:

  1. географические координаты преобразуются в Web Mercator;
  2. вычисляются индексы тайлов;
  3. загружается соответствующее изображение;
  4. текстура накладывается на геометрическую поверхность глобуса.

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


Искажения и визуальная интерпретация

Основное свойство Web Mercator — сохранение углов (конформность), но не площадей. Это приводит к значительным искажениям:

  • объекты у экватора выглядят реалистично;
  • объекты в высоких широтах визуально увеличиваются;
  • Гренландия сопоставима по размеру с Африкой, хотя фактически меньше в ~14 раз.

Такая деформация допустима в веб-картографии, где важнее визуальная согласованность тайлов, чем метрическая точность.

В CesiumJS это особенно заметно при одновременном использовании:

  • 3D-террейна;
  • спутниковых снимков Web Mercator;
  • векторных данных в географической системе.

Работа с масштабированием и уровнями детализации

Web Mercator тесно связан с концепцией уровней детализации (LOD). При увеличении масштаба:

  • увеличивается zoom level z;
  • уменьшается площадь покрытия одного тайла;
  • возрастает детализация изображения.

Каждый следующий уровень увеличивает разрешение в 2 раза по каждой оси, что даёт экспоненциальный рост детализации:

  • уровень 0: 1 тайл покрывает весь мир;
  • уровень 1: 4 тайла;
  • уровень 2: 16 тайлов;
  • и так далее.

CesiumJS использует эту структуру для оптимизации загрузки данных: запрашиваются только видимые тайлы, соответствующие текущей камере.


Связь Web Mercator и камеры в CesiumJS

Камера в CesiumJS оперирует трёхмерным пространством, но при работе с Web Mercator-слоями возникает дополнительный слой логики:

  • положение камеры определяет видимую область глобуса;
  • эта область проецируется в bounding box в координатах EPSG:3857;
  • система тайлов выбирает необходимые изображения.

При наклоне камеры эффект искажения Web Mercator становится более заметным: плоские текстуры «тянутся» по поверхности сферы, особенно ближе к горизонту.


Проблема бесшовности и анти-меридиан

Одним из сложных аспектов является обработка границы 180° долготы (анти-меридиана). В Web Mercator:

  • карта представлена как непрерывный квадрат;
  • однако географически крайние точки сходятся.

В CesiumJS это решается:

  • дублированием тайлов по горизонтали;
  • корректировкой индексов x;
  • специальной обработкой wrap-around.

Без этого возникают артефакты разрыва изображения при переходе через 180°.


Использование векторных данных поверх Web Mercator

Векторные слои, такие как GeoJSON или Vector Tiles, часто хранятся в Web Mercator для упрощения рендеринга. В CesiumJS они:

  • преобразуются в географические координаты;
  • затем повторно проецируются на эллипсоид;
  • отрисовываются как геометрия сцены.

Такой двойной переход увеличивает вычислительную нагрузку, но обеспечивает совместимость с большинством картографических источников.


Различие между Web Mercator и геодезической моделью CesiumJS

CesiumJS изначально ориентирован на геодезически корректную модель Земли, где:

  • расстояния рассчитываются по эллипсоиду;
  • высоты привязаны к геоиду или террейну;
  • нет искусственных проекций.

Web Mercator в этой системе является внешним слоем визуализации, а не фундаментальной координатной системой. Это принципиальное различие:

  • Web Mercator — плоское представление;
  • Cesium globe — объёмная физическая модель.

Их совмещение требует постоянных преобразований между системами координат.


Масштабирование и численные особенности

При работе с Web Mercator возникают численные ограничения:

  • значения x и y ограничены диапазоном примерно ±20037508.34 метров;
  • при высоких зумах возрастает риск потери точности;
  • double precision частично компенсирует проблему, но не устраняет её полностью.

CesiumJS минимизирует ошибки за счёт:

  • локальных систем координат (ENU frames);
  • перерасчёта позиций относительно камеры;
  • использования высокоточной математики для глобальных операций.

Роль Web Mercator в гибридных сценах

В гибридных сценах CesiumJS Web Mercator часто используется одновременно с:

  • 3D Tiles;
  • террейном;
  • географическими слоями WGS84.

В таких конфигурациях Web Mercator выполняет роль:

  • базового слоя подложки;
  • источника спутниковых изображений;
  • интерфейсного стандарта для внешних API.

Это делает его неотъемлемым компонентом взаимодействия с картографическими сервисами, несмотря на математические ограничения и искажения.