В CesiumJS временные изменяемые свойства представляются через систему
свойств (Property API), где каждое значение может зависеть от текущего
времени сцены. Одним из ключевых механизмов управления такими данными
является TimeIntervalCollectionProperty, позволяющий
задавать набор временных интервалов, каждому из которых соответствует
собственное значение свойства.
В основе работы лежит структура временных интервалов:
JulianDate).Cesium использует TimeIntervalCollection как контейнер
интервалов, где каждый элемент содержит:
start — начало интервала;stop — конец интервала;data — значение, связанное с интервалом.TimeIntervalCollectionProperty реализует интерфейс
Property и предназначен для хранения временно-зависимых
значений, не требующих интерполяции между точками, но меняющихся
дискретно по времени.
Ключевые особенности:
Типичная область применения:
Объект создаётся через конструктор, принимающий коллекцию интервалов:
const property = new Cesium.TimeIntervalCollectionProperty(
new Cesium.TimeIntervalCollection([
new Cesium.TimeInterval({
start: Cesium.JulianDate.fromIso8601("2026-01-01T00:00:00Z"),
stop: Cesium.JulianDate.fromIso8601("2026-01-02T00:00:00Z"),
data: Cesium.Color.RED
}),
new Cesium.TimeInterval({
start: Cesium.JulianDate.fromIso8601("2026-01-02T00:00:00Z"),
stop: Cesium.JulianDate.fromIso8601("2026-01-03T00:00:00Z"),
data: Cesium.Color.BLUE
})
])
);
В этом примере значение свойства зависит от даты:
Интервалы могут формироваться динамически:
const intervals = new Cesium.TimeIntervalCollection();
intervals.addInterval(
new Cesium.TimeInterval({
start: Cesium.JulianDate.fromIso8601("2026-06-01T00:00:00Z"),
stop: Cesium.JulianDate.fromIso8601("2026-06-02T00:00:00Z"),
data: 10
})
);
intervals.addInterval(
new Cesium.TimeInterval({
start: Cesium.JulianDate.fromIso8601("2026-06-02T00:00:00Z"),
stop: Cesium.JulianDate.fromIso8601("2026-06-03T00:00:00Z"),
data: 20
})
);
const property = new Cesium.TimeIntervalCollectionProperty(intervals);
Основные операции:
addInterval(interval) — добавление нового
интервала;removeInterval(interval) — удаление;findInterval() — поиск интервала по времени;contains() — проверка принадлежности времени
интервалу.При обращении к свойству Cesium автоматически вычисляет активный интервал:
const time = Cesium.JulianDate.now();
const value = property.getValue(time);
Алгоритм работы:
JulianDate;data из найденного интервала;undefined.Если текущее время не попадает ни в один интервал:
undefined;Это поведение важно учитывать при построении временных сцен.
TimeIntervalCollectionProperty не ограничивает тип
данных, однако наиболее часто используются:
data: Cesium.Color.YELLOW
Используется для динамического изменения внешнего вида объектов.
data: 42
Применяется для параметров масштабирования, прозрачности, скорости.
data: Cesium.Cartesian3.fromDegrees(30, 50, 1000)
Используется для дискретного перемещения объектов.
data: {
speed: 10,
direction: Cesium.Cartesian3.UNIT_X
}
Применяется для пользовательской логики, где интервал управляет состоянием объекта.
В отличие от SampledProperty, где значения плавно
интерполируются, TimeIntervalCollectionProperty работает по
принципу ступенчатого изменения:
Это делает структуру подходящей для:
TimeIntervalCollectionProperty часто используется внутри
сущностей Cesium:
viewer.entities.add({
position: new Cesium.TimeIntervalCollectionProperty(intervals),
point: {
pixelSize: 10,
color: new Cesium.TimeIntervalCollectionProperty(colorIntervals)
}
});
При обновлении времени сцены свойства автоматически пересчитываются.
Основой вычислений служит Clock и Timeline
Cesium:
Clock.currentTime;getValue() вызывается многократно в цикле
рендеринга.Это обеспечивает синхронность между временной моделью и визуализацией сцены.
При большом количестве интервалов важно учитывать:
Оптимизация достигается за счёт:
Наиболее характерные случаи использования:
При перекрытии интервалов:
Cesium использует JulianDate как внутреннее
представление времени, однако часто применяется конвертация из
ISO-формата:
Cesium.JulianDate.fromIso8601("2026-06-08T12:00:00Z")
Это обеспечивает:
При включённой анимации:
Допускается создание собственных логических структур внутри
data:
data: {
visible: true,
intensity: 0.8,
label: "active"
}
В этом случае внешний код интерпретирует данные интервала самостоятельно, используя текущее значение как состояние.
ConstantProperty — фиксированное значение без
зависимости от времени;SampledProperty — непрерывная интерполяция между
точками;TimeIntervalCollectionProperty — дискретные состояния
по временным диапазонам.Эта тройка формирует базовую модель временных данных CesiumJS.