Динамические сущности в CesiumJS представляют собой основу для построения сцен, в которых объекты изменяют своё положение, внешний вид и свойства во времени. Архитектура CesiumJS ориентирована на работу с временными рядами, где геометрия и визуальные атрибуты не являются статичными, а вычисляются на основе текущего момента симуляции.
В основе динамического поведения лежит концепция Entity
API, где каждый объект сцены описывается набором свойств, часть
из которых может зависеть от времени. Центральным механизмом
синхронизации выступает Clock, определяющий текущее время,
скорость его изменения и диапазон симуляции.
Ключевые элементы временной модели:
Каждое изменение времени автоматически инициирует пересчёт всех динамических свойств сущностей, что обеспечивает согласованное обновление всей сцены.
Сущность (Entity) в CesiumJS представляет собой
контейнер, объединяющий визуальные и пространственные свойства. В
отличие от низкоуровневых примитивов, Entity ориентирован на
декларативное описание поведения объекта.
Структура сущности включает:
Пример ключевого принципа: каждое свойство может быть либо статическим значением, либо функцией времени.
Основой анимации объектов выступают специализированные классы свойств, реализующие временную зависимость.
Используется для задания координат объекта на основе набора временных отметок. Между точками выполняется интерполяция.
f(t) = (p_i, p_{i+1}, )
Где интерполяционный коэффициент определяется положением времени между двумя соседними ключевыми кадрами.
Особенности:
Позволяет вычислять ориентацию объекта на основе его скорости. Используется для корректного разворота 3D моделей вдоль траектории движения.
Ключевая идея заключается в вычислении касательного вектора к траектории движения и преобразовании его в кватернион ориентации.
Каждая динамическая сущность может иметь ограниченную область
существования во времени. Это реализуется через свойство
availability, которое определяет интервал активности
объекта.
Поведение системы при выходе за пределы доступности:
Это критично для потоковых данных, где объекты появляются и исчезают в зависимости от внешнего источника информации.
Для управления множеством динамических объектов используется слой
DataSource. Он инкапсулирует загрузку, обновление и
синхронизацию сущностей.
Основные реализации:
GeoJsonDataSource — загрузка геопространственных
данныхCZMLDataSource — потоковое описание сценCustom DataSource — пользовательские источникиCZML особенно важен для динамических сцен, так как позволяет описывать изменение объектов во времени без ручного управления сущностями.
CZML представляет собой JSON-формат, ориентированный на временные данные. Он описывает не только геометрию объекта, но и её эволюцию.
Пример логики CZML:
Это позволяет реализовывать сценарии:
Для сценариев, где данные не дискретны, используется
CallbackProperty. Это функция, которая вычисляет значение
свойства на каждом кадре.
Основной принцип:
Такой подход позволяет реализовать полностью процедурную анимацию, зависящую от внешних факторов.
Особенность заключается в том, что вычисления происходят в основном цикле рендеринга, поэтому требуется контроль производительности.
Динамические сущности тесно связаны с механизмом рендеринга CesiumJS. Обновление происходит в следующем порядке:
Синхронизация критична при работе с множеством объектов, особенно при потоковой передаче данных.
Одним из ключевых применений динамических сущностей является визуализация траекторий. Для этого используется комбинация:
PathGraphicsSampledPositionPropertyPath позволяет визуализировать историю движения объекта, формируя след в пространстве. При этом длина и детализация пути могут зависеть от времени или скорости объекта.
Работа с большим количеством динамических сущностей требует оптимизации:
Критическим фактором является стоимость интерполяции и обновления свойств на каждом кадре.
Динамические сущности могут управлять полноценными 3D моделями через
ModelGraphics. В этом случае изменяются:
При синхронизации с временными данными модель становится участником единой временной сцены, а не статическим объектом.
Помимо геометрии, динамике подвержены визуальные параметры:
Это позволяет кодировать дополнительную информацию прямо в визуальном представлении сцены, например интенсивность события или уровень сигнала.
CesiumJS поддерживает сценарии, в которых данные поступают непрерывно. В таких случаях сущности:
Такой подход используется при визуализации: