CesiumJS оперирует тремя основными режимами отображения сцены,
которые определяют способ проекции и интерпретации географических
данных: трёхмерный режим, двумерный
режим и промежуточный режим Колумба (Columbus View). Эти режимы
реализованы на уровне SceneMode и управляются через объект
сцены viewer.scene.
Ключевая особенность архитектуры состоит в том, что все режимы используют единый набор данных (тайлы, сущности, примитивы), но различаются способом их проецирования и визуального представления.
Трёхмерный режим является основным и наиболее функциональным в CesiumJS. Он использует глобальную сферическую модель Земли с поддержкой перспективной камеры.
В этом режиме:
Переключение в 3D осуществляется через:
viewer.scene.mode = Cesium.SceneMode.SCENE3D;
или через морфинг:
viewer.scene.morphTo3D(1.5);
Параметр морфинга определяет длительность перехода в секундах.
Камера в трёхмерном режиме имеет полную свободу вращения:
viewer.camera.setView({
destination: Cesium.Cartesian3.fromDegrees(30.5, 50.45, 1500000)
});
Дополнительно доступны:
Двумерный режим переводит сцену в плоскую картографическую проекцию. Геометрия Земли «разворачивается» в прямоугольную координатную плоскость.
Характерные свойства:
Переключение:
viewer.scene.mode = Cesium.SceneMode.SCENE2D;
Морфинг:
viewer.scene.morphTo2D(2.0);
В двумерном режиме камера теряет свободу вращения:
Пример установки вида:
viewer.camera.setView({
destination: Cesium.Rectangle.fromDegrees(
-20.0, 10.0, 20.0, 50.0
)
});
Режим Колумба представляет собой гибрид между 2D и 3D. Он отображает данные на развернутой плоскости, но сохраняет возможность вертикального возвышения объектов.
Основные характеристики:
Переключение:
viewer.scene.mode = Cesium.SceneMode.COLUMBUS_VIEW;
Морфинг:
viewer.scene.morphToColumbusView(1.5);
В этом режиме:
CesiumJS поддерживает плавное переключение между режимами без перезагрузки сцены. Этот процесс называется morphing.
Доступные методы:
viewer.scene.morphTo3D(duration);
viewer.scene.morphTo2D(duration);
viewer.scene.morphToColumbusView(duration);
Где duration задаёт длительность анимации.
Морфинг реализован через интерполяцию параметров камеры и геометрии сцены, включая:
Основной интерфейс для контроля режима:
Cesium.SceneMode.SCENE3D
Cesium.SceneMode.SCENE2D
Cesium.SceneMode.COLUMBUS_VIEW
Текущее состояние сцены:
const mode = viewer.scene.mode;
Проверка режима:
if (viewer.scene.mode === Cesium.SceneMode.SCENE3D) {
// логика для 3D
}
Каждый режим накладывает собственные ограничения на рендеринг и взаимодействие.
Entity API и примитивы Cesium адаптируются под текущий режим автоматически. Однако поведение отдельных компонентов может изменяться:
Пример добавления сущности:
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(30, 50),
point: {
pixelSize: 10,
color: Cesium.Color.RED
}
});
Эта сущность корректно отображается во всех режимах, но её визуальная интерпретация зависит от сцены.
Cesium предоставляет низкоуровневый доступ к сцене:
const scene = viewer.scene;
scene.mode = Cesium.SceneMode.SCENE3D;
Также доступно управление через события:
scene.morphStart.addEventListener(function() {
// начало перехода
});
scene.morphComplete.addEventListener(function() {
// завершение перехода
});
Выбор режима напрямую влияет на нагрузку рендеринга:
Оптимизация часто сводится к динамическому переключению режима в зависимости от масштаба сцены и типа данных.