CesiumJS строится вокруг высокоуровневой модели представления объектов на глобусе через сущности (Entity). Entity является центральной абстракцией, объединяющей геометрическое представление, визуальные свойства и временную изменчивость в единую структуру.
Entity представляет собой логическое описание объекта в сцене, не завязанное на конкретный способ рендеринга. Вместо прямого управления графическими примитивами (Primitive API), Entity инкапсулирует:
Ключевая особенность Entity — декларативный подход: описывается «что существует», а не «как это рисуется».
В основе Entity лежит система свойств (Property). Почти любое поле Entity может быть либо статическим значением, либо вычисляемым во времени объектом.
Типичная структура:
Такой подход позволяет описывать динамические сцены, где объекты изменяют положение, цвет или форму в зависимости от времени.
Пример временной координаты:
position: new Cesium.SampledPositionProperty()
Каждое значение привязывается к временной шкале, что делает Entity ключевым элементом анимационных и трекинговых систем.
Entity редко используется изолированно. Основная структура хранения — EntityCollection, представляющая собой реактивный набор объектов.
Особенности коллекции:
EntityCollection служит мостом между логической моделью и визуальным представлением сцены.
Entity может содержать несколько типов визуальных примитивов одновременно:
Каждый из этих компонентов не является самостоятельным объектом сцены, а описывает конфигурацию рендеринга внутри Entity.
Пример:
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(30, 50),
point: {
pixelSize: 10,
color: Cesium.Color.RED
}
});
Одной из ключевых возможностей Entity является поддержка временной оси (JulianDate). Любое свойство может зависеть от времени.
Наиболее важные типы:
Пример движения объекта:
const property = new Cesium.SampledPositionProperty();
property.addSample(
Cesium.JulianDate.fromIso8601("2026-01-01T00:00:00Z"),
Cesium.Cartesian3.fromDegrees(30, 50)
);
property.addSample(
Cesium.JulianDate.fromIso8601("2026-01-01T01:00:00Z"),
Cesium.Cartesian3.fromDegrees(31, 51)
);
Такой подход используется в системах трекинга объектов, моделировании полётов и симуляции движения.
Entity часто создаются не вручную, а через DataSource API:
DataSource преобразуют внешние форматы в набор Entity, сохраняя семантику данных.
Например, CZML напрямую отображает временные изменения свойств через Entity, что делает его естественным форматом для анимаций.
CZML (Cesium Language) представляет собой JSON-подобный формат, ориентированный на описание динамических сцен.
Каждый пакет CZML фактически описывает Entity:
Entity в CesiumJS выступает как runtime-реализация CZML-модели.
Entity является высокоуровневой абстракцией, что влияет на производительность:
Для высоконагруженных сцен применяется гибридный подход: Entity для логики, Primitive для рендера.
Viewer интегрирует Entity через встроенную коллекцию:
viewer.entities.add(...)
Взаимодействие включает:
Entity становится частью глобальной сцены без дополнительной конфигурации рендера.
Entity несёт не только визуальную, но и смысловую нагрузку. Каждая сущность может содержать:
Эти данные используются для:
Entity превращает 3D-сцену в семантически насыщенную модель данных.
Entity поддерживает реакцию на изменения через Property observers и EntityCollection events.
Основные сценарии:
Это позволяет строить реактивные геопространственные приложения.
Entity занимает промежуточный уровень между низкоуровневым рендерингом и прикладной логикой:
Такое разделение позволяет масштабировать приложения от простых визуализаций до сложных симуляционных систем.