В режиме 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, что позволяет сохранять совместимость с остальными режимами сцены.
Иерархия тайлов в Columbus View сохраняется, но их отображение
адаптируется под линейную проекцию. При использовании
Cesium3DTileset геометрия объектов не изменяется,
изменяется только способ её проецирования на экран.
Особенности рендеринга:
const tileset = new Cesium.Cesium3DTileset({
url: "https://example.com/tileset.json"
});
viewer.scene.primitives.add(tileset);
viewer.zoomTo(tileset);
Columbus View не требует модификации данных тайлсета, так как трансформация применяется на уровне сцены.
Основой визуализации является цепочка матричных преобразований:
Колумбус-проекция фактически заменяет сферическую модель на линейную, сохраняя при этом высотную компоненту. Это позволяет использовать стандартные шейдеры без необходимости их переопределения под новый тип поверхности.
В режиме Columbus View рельефные данные (terrain provider) отображаются без изменений источника данных, но интерпретация поверхности становится плоско-растянутой. Это влияет на:
Несмотря на это, вертикальная ось сохраняет физически корректное представление высот, что позволяет использовать одинаковые алгоритмы освещения и теней во всех режимах сцены.
Columbus View является промежуточным состоянием между Scene2D и Globe. При морфинге между режимами выполняется непрерывное преобразование пространства:
viewer.scene.morphTo2D(1.5);
viewer.scene.morphTo3D(1.5);
viewer.scene.morphToColumbusView(1.5);
Переходы обеспечиваются системой интерполяции матриц камеры и геометрии сцены, что позволяет сохранять непрерывность восприятия без резких скачков координатной системы.
Columbus View часто демонстрирует отличия в производительности по сравнению с Globe-режимом. Основные причины:
Однако увеличение площади растянутых регионов может приводить к росту числа видимых объектов в кадре, особенно в высоких широтах, что компенсирует часть выигрыша.
Columbus View применяется в системах, где требуется:
При работе с аналитическими слоями режим позволяет более явно сопоставлять объекты по долготе, поскольку она становится линейной координатой без сферической сходимости.
В Columbus View взаимодействие с координатами мыши и экранными координатами требует дополнительного преобразования:
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);
Такой подход сохраняет совместимость логики взаимодействия с другими режимами сцены, несмотря на различия в геометрической интерпретации пространства.