Интерфейс CesiumJS строится вокруг класса Viewer,
который объединяет сцену, камеру, слои данных и набор стандартных
UI-компонентов. Вся визуальная оболочка представляет собой комбинацию
DOM-элементов, Canvas WebGL и вспомогательных HTML-виджетов, наложенных
поверх рендеринга.
Ключевая особенность архитектуры UI заключается в том, что почти каждый элемент интерфейса может быть:
Основная точка конфигурации интерфейса — объект Viewer,
принимающий набор параметров управления UI.
При создании экземпляра Viewer UI формируется
автоматически. Каждый компонент может быть отключён через параметры:
animationtimelinebaseLayerPickerfullscreenButtonvrButtongeocoderhomeButtonsceneModePickernavigationHelpButtoninfoBoxselectionIndicatornavigationInstructionsInitiallyVisibleСтруктура UI разделяется на верхнюю панель инструментов, нижнюю временную шкалу и вспомогательные всплывающие окна.
Отключение компонентов позволяет формировать минималистичные интерфейсы для специализированных приложений (геоаналитика, симуляции, мониторинг).
Навигационные элементы включают:
Эти элементы управляют камерой и режимом отображения сцены (3D, 2D, Columbus View).
Кастомизация чаще всего выполняется через:
viewer.containerКомпоненты временной шкалы:
TimelineAnimationиспользуются для работы с временными данными (полетные траектории, спутниковые данные, исторические слои).
UI таймлайна включает:
При кастомизации часто заменяется только логика, а визуальный слой
скрывается через CSS или отключается в Viewer.
Элемент выбора базовой карты управляет слоями:
UI компонент создаёт выпадающий список с превью слоёв.
Расширение функциональности выполняется через добавление
пользовательских ImageryProvider:
Полное отключение интерфейсных элементов используется для создания кастомных оболочек:
const viewer = new Cesium.Viewer("cesiumContainer", {
animation: false,
timeline: false,
baseLayerPicker: false,
geocoder: false,
homeButton: false,
sceneModePicker: false,
navigationHelpButton: false,
fullscreenButton: false,
infoBox: false,
selectionIndicator: false
});
В этом режиме остаётся только WebGL-сцена и минимальный watermark Cesium.
UI CesiumJS формируется как набор HTML-элементов внутри контейнера:
cesiumContainer
cesium-widgetcesium-viewerКаждый элемент можно модифицировать через стандартные DOM API или CSS.
Пример классов:
.cesium-viewer-toolbar.cesium-viewer-animationContainer.cesium-widget-creditsИзменение визуального стиля интерфейса осуществляется через переопределение классов.
.cesium-viewer-animationContainer {
display: none;
}
.cesium-viewer-timelineContainer {
display: none;
}
.cesium-widget {
background-color: rgba(10, 10, 10, 0.85);
color: #e0e0e0;
}
.cesium-viewer-toolbar {
top: 10px;
right: 10px;
background: transparent;
}
CSS-кастомизация является основным способом адаптации интерфейса под дизайн системы.
CesiumJS не ограничивает использование стандартного интерфейса. Поверх сцены может быть размещён любой HTML.
Примеры UI-структур:
Размещение осуществляется через абсолютное позиционирование:
.custom-panel {
position: absolute;
top: 20px;
left: 20px;
z-index: 1000;
}
CesiumJS часто используется вместе с:
UI-слой при этом отделяется от рендеринга сцены.
Типовая архитектура:
ref контейнераInfoBox отображает информацию о выбранных объектах.
Замена стандартного поведения:
infoBox: falseselectedEntityChangedИндикатор выбора объекта может быть отключён или заменён кастомной графикой.
Часто используется для:
Нижний правый угол интерфейса содержит блок атрибуции данных.
Элемент:
.cesium-widget-creditsУправление включает:
Navigation Help Button открывает встроенное окно с инструкциями по управлению камерой.
Кастомизация включает:
При создании «headless UI» подхода Viewer используется только как рендер-движок.
UI полностью выносится наружу:
Cesium становится визуальным ядром без встроенного интерфейса.
UI-логика строится вокруг событий:
camera.changedselectedEntityChangedclock.onTickscene.preRenderЭти события связываются с внешними UI-компонентами и позволяют синхронизировать состояние интерфейса с визуализацией сцены.
Интерфейс управления камерой может быть заменён полностью:
Работа выполняется через API камеры:
viewer.camera.flyToviewer.zoomToviewer.camera.setViewUI компоненты CesiumJS проектируются как независимые модули:
Такой подход позволяет: