В CesiumJS CesiumJS управление объектами сцены строится вокруг сущностей (Entity) и их коллекций. Центральную роль в этом механизме играет EntityCollection — структура, обеспечивающая хранение, доступ, обновление и удаление объектов, отображаемых на виртуальном глобусе.
EntityCollection представляет собой специализированный контейнер, предназначенный для работы с объектами Entity. Каждый Entity описывает геометрический объект на сцене: точку, линию, полигон, модель, билборд или сложную комбинацию графических примитивов с привязанными свойствами.
EntityCollection используется:
viewer.entitiesКлючевая особенность заключается в реактивной модели: любые изменения в коллекции автоматически отражаются в сцене.
EntityCollection предоставляет базовый набор операций CRUD, оптимизированных для работы в реальном времени.
Добавление выполняется через метод add:
const entity = viewer.entities.add({
id: "point-1",
position: Cesium.Cartesian3.fromDegrees(37.6173, 55.7558),
point: {
pixelSize: 10,
color: Cesium.Color.RED
}
});
При добавлении происходит:
Удаление осуществляется через remove или
removeAll:
viewer.entities.remove(entity);
viewer.entities.removeAll();
Удаление приводит к:
EntityCollection поддерживает несколько способов доступа:
const entity = viewer.entities.getById("point-1");
ID является ключевым механизмом индексации. При отсутствии ID доступ возможен только через перебор.
viewer.entities.values.forEach(e => {
console.log(e.id);
});
Коллекция предоставляет массив values, содержащий все
Entity в порядке добавления.
EntityCollection поддерживает события, позволяющие отслеживать изменения состава коллекции:
collectionChanged — изменение состава
(добавление/удаление)Пример обработки изменений:
viewer.entities.collectionChanged.addEventListener((collection, added, removed) => {
console.log("Добавлено:", added.length);
console.log("Удалено:", removed.length);
});
События позволяют строить синхронизацию с внешними источниками данных и UI-системами.
EntityCollection содержит набор управляющих параметров:
Глобальное управление видимостью всех объектов:
viewer.entities.show = false;
При отключении:
const allEntities = viewer.entities.values;
Возвращает живую коллекцию, отражающую текущее состояние.
EntityCollection тесно связана с DataSource API. Каждый DataSource содержит собственную EntityCollection.
Основные отличия:
При подключении DataSource:
viewer.dataSources.add(Cesium.GeoJsonDataSource.load(url));
внутри создаётся отдельная EntityCollection, синхронизированная с источником данных.
EntityCollection обеспечивает реактивность всех свойств Entity:
const entity = viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(0, 0),
point: { pixelSize: 5 }
});
entity.point.pixelSize = 20;
Изменение свойства приводит к немедленному обновлению сцены без повторного добавления объекта.
EntityCollection оптимизирована под работу с большим количеством объектов, однако существуют ограничения:
Для оптимизации применяются:
showEntityCollection может использоваться для создания временных наборов объектов:
const tempCollection = new Cesium.EntityCollection();
tempCollection.add(new Cesium.Entity({
position: Cesium.Cartesian3.fromDegrees(10, 10)
}));
Такие коллекции не привязаны к Viewer и требуют ручного добавления в сцену при необходимости.
ID играет ключевую роль в управлении коллекцией:
При отсутствии ID Cesium генерирует внутренний идентификатор, что усложняет последующий доступ.
EntityCollection поддерживает сложные композиции через вложенные Entity:
Пример:
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(30, 30),
ellipse: {
semiMinorAxis: 1000,
semiMajorAxis: 2000,
material: Cesium.Color.BLUE.withAlpha(0.5)
},
label: {
text: "Zone"
}
});
Один Entity может содержать несколько визуальных компонентов, управляемых как единое целое внутри коллекции.
EntityCollection активно используется в сценариях с временной динамикой:
Каждый Entity может содержать SampledPositionProperty,
которая автоматически обновляет позицию без вмешательства в
коллекцию.
Несмотря на гибкость, модель имеет ограничения:
Для высоконагруженных сценариев применяются альтернативы:
EntityCollection интегрирована с системой picking:
Это позволяет связывать геометрические объекты с логикой приложения без дополнительной инфраструктуры.