Geographic проекция

В CesiumJS основная модель представления мира опирается на географическую систему координат WGS84 и эллипсоидальную модель Земли, где поверхность описывается не плоской проекцией, а геодезической формой. Это принципиально отличает подход от традиционных 2D-картографических библиотек: вместо перехода к плоской проекции используется работа с географическими координатами напрямую, а визуализация строится через 3D-движок.

Базовая система координат в CesiumJS — это WGS84 (World Geodetic System 1984). Она определяет:

  • эллипсоидальную модель Земли
  • систему географических координат (широта, долгота, высота)
  • единый глобальный референс для всех пространственных данных

В отличие от плоских проекций (Mercator, Lambert и др.), WGS84 не выполняет математического «разворачивания» поверхности. Вместо этого каждая точка задаётся на эллипсоиде:

  • долгота (longitude, λ) — угол относительно нулевого меридиана
  • широта (latitude, φ) — угол относительно экватора
  • высота (height, h) — расстояние от поверхности эллипсоида

Cesium хранит такие координаты в структуре Cartographic.

Cartographic и радианная система

Внутреннее представление географических координат в Cesium использует радианы, а не градусы.

Основной тип:

Cesium.Cartographic(longitude, latitude, height)

Где:

  • longitude — в радианах
  • latitude — в радианах
  • height — в метрах

Перевод между градусами и радианами выполняется явно:

const lonRad = Cesium.Math.toRadians(90.0);
const latRad = Cesium.Math.toRadians(50.0);

const carto = new Cesium.Cartographic(lonRad, latRad, 0);

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

Геоцентрическая модель: Cartesian3

Несмотря на работу в географических координатах, рендеринг сцены происходит в декартовой системе координат:

  • X — ось от центра Земли к пересечению экватора и нулевого меридиана
  • Y — ось к 90° восточной долготы на экваторе
  • Z — ось к северному полюсу

Эта система называется Earth-Centered, Earth-Fixed (ECEF).

В Cesium она представлена типом Cartesian3.

Преобразование из географических координат:

const cartographic = Cesium.Cartographic.fromDegrees(30, 50, 100);

const position = Cesium.Cartesian3.fromRadians(
    cartographic.longitude,
    cartographic.latitude,
    cartographic.height
);

И обратное преобразование:

const carto = Cesium.Cartographic.fromCartesian(position);

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

Отсутствие классической 2D-проекции

Ключевая особенность географической системы в Cesium заключается в том, что карта не «проецируется» в привычном смысле.

Вместо этого:

  • геометрия задаётся в 3D (ECEF)
  • камера перемещается в пространстве
  • поверхность Земли аппроксимируется эллипсоидом
  • тайлы растягиваются на сферическую поверхность

Это означает, что понятие «проекция» заменяется понятием «геодезического отображения».

В традиционных GIS-системах используется:

  • Web Mercator (EPSG:3857)
  • Plate Carrée (EPSG:4326)
  • локальные проекции

Cesium же работает как глобальный 3D-глобус, где плоская проекция — лишь промежуточный этап подготовки тайлов.

Географическая проекция в контексте 3D сцены

При рендеринге сцены происходит следующая цепочка:

  1. Географические координаты (Cartographic)
  2. Преобразование в ECEF (Cartesian3)
  3. Применение матриц модели и вида
  4. Проекция на экран (perspective projection)

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

Ellipsoid и математическая модель Земли

В основе лежит эллипсоид WGS84:

  • радиус экватора ≈ 6378137 м
  • сжатие ≈ 1 / 298.257223563

Cesium использует класс Ellipsoid:

Cesium.Ellipsoid.WGS84

Преобразование географических координат учитывает форму эллипсоида, а не идеальной сферы. Это влияет на:

  • точность позиционирования
  • вычисление нормалей поверхности
  • высотные данные
  • intersection rays

Высота и геоидальные особенности

Высота в Cesium задаётся как эллипсоидальная, а не ортометрическая.

Это означает:

  • 0 м — поверхность WGS84 эллипсоида
  • реальные высоты могут отличаться от геоида
  • DEM и terrain data корректируют это значение

При использовании terrain происходит:

  • запрос высотных тайлов
  • интерполяция высот
  • смещение вершины над эллипсоидом

Географические координаты и камера

Камера в Cesium работает в мировых координатах:

viewer.camera.setView({
    destination: Cesium.Cartesian3.fromDegrees(30, 50, 1000000)
});

Здесь географическая проекция проявляется косвенно: камера задаётся в географических координатах, но интерпретируется через Cartesian3.

При этом:

  • направление камеры вычисляется в ECEF
  • up-vector зависит от нормали эллипсоида
  • вращение учитывает локальную географическую ориентацию

Трансформации между системами координат

Cesium предоставляет полный набор преобразований:

Degrees → Cartographic

Cesium.Cartographic.fromDegrees(lon, lat, height)

Cartographic → Cartesian3

Cesium.Cartesian3.fromRadians(longitude, latitude, height)

Cartesian3 → Cartographic

Cesium.Cartographic.fromCartesian(cartesian)

Degrees → Cartesian3

Cesium.Cartesian3.fromDegrees(lon, lat, height)

Эти функции являются основой всей географической модели.

Географическая точность и floating precision

При работе с глобальной системой координат возникает проблема точности:

  • координаты имеют большие значения (до миллионов метров от центра)
  • float precision ограничен
  • возможны артефакты при удалении от центра сцены

Cesium решает это через:

  • origin shifting (локальное смещение сцены)
  • floating origin camera model
  • 64-bit математику в критических расчётах

Привязка тайлов к географической системе

Визуализация поверхности Земли строится на тайлах, чаще всего:

  • Web Mercator tiles (XYZ)
  • imagery layers
  • terrain tiles

Каждый тайл:

  • хранится в плоской проекции
  • при загрузке «натягивается» на эллипсоид
  • преобразуется в 3D геометрию

Таким образом географическая проекция — это процесс обратного отображения 2D-тайлов в 3D пространство.

Геодезические линии и расстояния

В отличие от плоских движков, расстояния в Cesium считаются по поверхности эллипсоида:

const geodesic = new Cesium.EllipsoidGeodesic(
    Cesium.Cartographic.fromDegrees(0, 0),
    Cesium.Cartographic.fromDegrees(10, 10)
);

const distance = geodesic.surfaceDistance;

Это важно для:

  • маршрутов
  • авиационных траекторий
  • измерений на глобусе

Влияние географической модели на рендеринг

Географическая проекция влияет на:

  • уровень детализации (LOD)
  • фрустум камеры
  • отрисовку горизонта
  • кулинг объектов на поверхности

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

Итоговая модель представления пространства

В Cesium географическая проекция представляет собой не преобразование в 2D, а систему взаимосвязанных пространств:

  • географическое (Cartographic)
  • геоцентрическое (ECEF / Cartesian3)
  • экранное (Screen Space)
  • тайловое (Tile Space)

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