Columbus View

В режиме Columbus View сцена переходит в особый тип отображения, в котором геометрия мира перестаёт интерпретироваться как сфера или плоская карта в классическом смысле и преобразуется в трёхмерную проекцию с сохранением вертикального измерения, но с характерной «развёрткой» по долготе. Такой подход исторически связан с попыткой объединить преимущества глобуса и плоской карты в единой визуальной модели, где пользователь получает возможность наблюдать объекты в 3D, сохраняя при этом более «картографическую» структуру пространства.

В архитектуре CesiumJS Columbus View реализуется как один из режимов сцены (SceneMode), наряду с Globe и Scene2D. Основная идея заключается в том, что геометрия Земли не представляется полноценным эллипсоидом, а преобразуется в цилиндрическую проекцию, которая затем визуализируется в перспективной камере. Это создаёт эффект «расплющенного глобуса», где вертикальные и горизонтальные искажения контролируются системой проекций движка.

Columbus View опирается на цилиндрическое отображение координат. Долгота интерпретируется как линейная ось X, широта сохраняет относительное положение по оси Y, а высота объектов остаётся по оси Z без изменений. В результате:

  • долготы перестают сходиться к полюсам;
  • меридианы становятся параллельными линиями;
  • полярные области растягиваются в горизонтальной плоскости;
  • масштабирование по широте становится нелинейным при приближении к полюсам.

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

Режимы сцены и переключение

В CesiumJS управление режимами осуществляется через SceneMode. Columbus View соответствует значению COLUMBUS_VIEW.

Пример переключения режима сцены:

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

// переключение в Columbus View
viewer.scene.morphToColumbusView(2.0);

Параметр 2.0 задаёт длительность морфинга в секундах, определяя плавность перехода между текущим режимом и Columbus View. При этом происходит интерполяция всех объектов сцены, включая тайлы, примитивы и камеры.

Альтернативный способ через явное задание режима:

viewer.scene.mode = Cesium.SceneMode.COLUMBUS_VIEW;

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

Камера и система координат

В Columbus View камера сохраняет перспективную проекцию, но её взаимодействие с миром отличается от глобусного режима. Камера оперирует декартовой системой координат, а не геодезической поверхностью эллипсоида.

Ключевые особенности:

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

Внутренне используются преобразования между географическими координатами (WGS84) и плоскостью проекции Columbus View, что позволяет сохранять совместимость с остальными режимами сцены.

Работа с тайлами и 3D-слоями

Иерархия тайлов в Columbus View сохраняется, но их отображение адаптируется под линейную проекцию. При использовании Cesium3DTileset геометрия объектов не изменяется, изменяется только способ её проецирования на экран.

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

  • уровень детализации (LOD) остаётся зависимым от расстояния до камеры;
  • границы тайлов могут визуально вытягиваться вдоль оси X;
  • оптимизация по видимости выполняется в экранном пространстве, а не на сфере.
const tileset = new Cesium.Cesium3DTileset({
    url: "https://example.com/tileset.json"
});

viewer.scene.primitives.add(tileset);
viewer.zoomTo(tileset);

Columbus View не требует модификации данных тайлсета, так как трансформация применяется на уровне сцены.

Матрицы преобразований

Основой визуализации является цепочка матричных преобразований:

  1. географические координаты (latitude, longitude, height);
  2. преобразование в Cartesian3;
  3. проекция в Columbus space;
  4. применение view matrix камеры;
  5. projection matrix перспективной камеры.

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

Влияние на визуализацию рельефа

В режиме Columbus View рельефные данные (terrain provider) отображаются без изменений источника данных, но интерпретация поверхности становится плоско-растянутой. Это влияет на:

  • восприятие высотных перепадов в широтном направлении;
  • визуальную плотность деталей вблизи «полюсных» областей;
  • перспективное искажение при наклоне камеры.

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

Взаимодействие с 2D и Globe режимами

Columbus View является промежуточным состоянием между Scene2D и Globe. При морфинге между режимами выполняется непрерывное преобразование пространства:

  • Globe → Columbus View: сфера «разворачивается» в цилиндрическую проекцию;
  • Scene2D → Columbus View: плоская карта «поднимается» в 3D с добавлением высоты;
  • Columbus View → Globe: цилиндрическая проекция сворачивается в эллипсоид.
viewer.scene.morphTo2D(1.5);
viewer.scene.morphTo3D(1.5);
viewer.scene.morphToColumbusView(1.5);

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

Производительность и особенности рендеринга

Columbus View часто демонстрирует отличия в производительности по сравнению с Globe-режимом. Основные причины:

  • упрощённая геометрическая модель без сферической триангуляции;
  • снижение затрат на вычисление кривизны поверхности;
  • перераспределение нагрузки на GPU в пользу экранных координат;
  • более простая логика отсечения невидимых объектов.

Однако увеличение площади растянутых регионов может приводить к росту числа видимых объектов в кадре, особенно в высоких широтах, что компенсирует часть выигрыша.

Использование в прикладных сценариях

Columbus View применяется в системах, где требуется:

  • одновременное отображение больших протяжённых территорий;
  • снижение когнитивной нагрузки от сферической геометрии;
  • визуализация линейных инфраструктур (дороги, трубопроводы, маршруты);
  • интеграция картографических и 3D-данных в единой плоскостной структуре.

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

Особенности работы с координатами пользователя

В Columbus View взаимодействие с координатами мыши и экранными координатами требует дополнительного преобразования:

  • pick-операции возвращают Cartesian3 в пространстве сцены;
  • географические координаты восстанавливаются через ellipsoid transformation;
  • глубина (depth) учитывается в перспективной проекции, а не на поверхности сферы.
const handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);

handler.setInputAction((movement) => {
    const cartesian = viewer.scene.pickPosition(movement.position);
    if (cartesian) {
        const cartographic = Cesium.Cartographic.fromCartesian(cartesian);
        const longitude = Cesium.Math.toDegrees(cartographic.longitude);
        const latitude = Cesium.Math.toDegrees(cartographic.latitude);
    }
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

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