UNPKG

@eliorar/angular-cesium

Version:

Angular library for working with Cesium.

115 lines 17.9 kB
import { BasicDrawerService } from '../basic-drawer/basic-drawer.service'; import { CallbackProperty, CustomDataSource } from 'cesium'; import { GraphicsType } from './enums/graphics-type.enum'; import { OptimizedEntityCollection } from './optimized-entity-collection'; /** * General primitives drawer responsible of drawing Cesium primitives. * Drawers the handle Cesium primitives extend it. */ export class EntitiesDrawerService extends BasicDrawerService { constructor(cesiumService, graphicsType, defaultOptions = { collectionMaxSize: -1, collectionSuspensionTime: -1, collectionsNumber: 1, }) { super(); this.cesiumService = cesiumService; this.graphicsType = graphicsType; this.defaultOptions = defaultOptions; this.entityCollections = new Map(); this.graphicsTypeName = 'Unknown'; // Fix bad enum compilation for (const i in GraphicsType) { if (GraphicsType[i] === this.graphicsType) { this.graphicsTypeName = i; } } } getFreeEntitiesCollection() { let freeEntityCollection = null; if (this.entityCollections != null) { this.entityCollections.forEach(entityCollection => { if (entityCollection.isFree()) { freeEntityCollection = entityCollection; } }); } return freeEntityCollection; } init(options) { const finalOptions = options || this.defaultOptions; const dataSources = []; for (let i = 0; i < finalOptions.collectionsNumber; i++) { const dataSource = new CustomDataSource(this.graphicsTypeName); dataSources.push(dataSource); this.cesiumService.getViewer().dataSources.add(dataSource); this.entityCollections.set(dataSource.entities, new OptimizedEntityCollection(dataSource.entities, finalOptions.collectionMaxSize, finalOptions.collectionSuspensionTime)); } return dataSources; } add(cesiumProps) { const optimizedEntityCollection = this.getFreeEntitiesCollection(); if (optimizedEntityCollection === null) { throw new Error('No more free entity collections'); } const entityObject = { position: cesiumProps.position !== undefined ? cesiumProps.position : undefined, description: cesiumProps.description !== undefined ? cesiumProps.description : undefined, orientation: cesiumProps.orientation !== undefined ? cesiumProps.orientation : undefined, viewFrom: cesiumProps.viewFrom !== undefined ? cesiumProps.viewFrom : undefined, [this.graphicsTypeName]: cesiumProps, }; if (cesiumProps.name !== undefined) { entityObject.name = cesiumProps.name; } if (cesiumProps.availability !== undefined) { entityObject.availability = cesiumProps.availability; } return optimizedEntityCollection.add(entityObject); } update(entity, cesiumProps) { this.suspendEntityCollection(entity); if (entity.position instanceof CallbackProperty) { if (entity.position._isConstant) { entity.position = cesiumProps.position; } } entity.position = cesiumProps.position !== undefined ? cesiumProps.position : undefined; entity.name = cesiumProps.name !== undefined ? cesiumProps.name : entity.name; entity.description = cesiumProps.description !== undefined ? cesiumProps.description : entity.description; entity.orientation = cesiumProps.orientation !== undefined ? cesiumProps.orientation : entity.orientation; entity.viewFrom = cesiumProps.viewFrom !== undefined ? cesiumProps.viewFrom : entity.viewFrom; entity.availability = cesiumProps.availability !== undefined ? cesiumProps.availability : cesiumProps.availability; if (this._propsAssigner) { this._propsAssigner(entity[this.graphicsTypeName], cesiumProps); } else { Object.assign(entity[this.graphicsTypeName], cesiumProps); } } remove(entity) { const optimizedEntityCollection = this.entityCollections.get(entity.entityCollection); if (optimizedEntityCollection != null) { optimizedEntityCollection.remove(entity); } } removeAll() { this.entityCollections.forEach(entityCollection => { entityCollection.removeAll(); }); } setShow(showValue) { this.entityCollections.forEach(entityCollection => { entityCollection.setShow(showValue); }); } suspendEntityCollection(entity) { const id = entity.entityCollection; if (!this.entityCollections.has(id)) { throw new Error('No EntityCollection for entity.entityCollection'); } const entityCollection = this.entityCollections.get(id); entityCollection.suspend(); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXRpZXMtZHJhd2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNlc2l1bS9zcmMvbGliL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL2RyYXdlcnMvZW50aXRpZXMtZHJhd2VyL2VudGl0aWVzLWRyYXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUUxRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFeEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFeEU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHFCQUFzQixTQUFRLGtCQUFrQjtJQUkzRCxZQUNVLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGlCQUF3QztRQUM5QyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDckIsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLGlCQUFpQixFQUFFLENBQUM7S0FDckI7UUFFRCxLQUFLLEVBQUUsQ0FBQztRQVJBLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUlyQjtRQVZLLHNCQUFpQixHQUFHLElBQUksR0FBRyxFQUFrQyxDQUFDO1FBYXBFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUM7UUFFbEMsMkJBQTJCO1FBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksWUFBWSxFQUFFO1lBQzVCLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBUSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxnQkFBZ0Is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IjpbImltcG9ydCB7QmFzaWNEcmF3ZXJTZXJ2aWNlfSBmcm9tICcuLi9iYXNpYy1kcmF3ZXIvYmFzaWMtZHJhd2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtDYWxsYmFja1Byb3BlcnR5LCBDdXN0b21EYXRhU291cmNlfSBmcm9tICdjZXNpdW0nO1xuaW1wb3J0IHtDZXNpdW1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jZXNpdW0vY2VzaXVtLnNlcnZpY2UnO1xuaW1wb3J0IHtHcmFwaGljc1R5cGV9IGZyb20gJy4vZW51bXMvZ3JhcGhpY3MtdHlwZS5lbnVtJztcbmltcG9ydCB7RW50aXRpZXNEcmF3ZXJPcHRpb25zfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZW50aXRpZXMtZHJhd2VyLW9wdGlvbnMnO1xuaW1wb3J0IHtPcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9ufSBmcm9tICcuL29wdGltaXplZC1lbnRpdHktY29sbGVjdGlvbic7XG5cbi8qKlxuICogIEdlbmVyYWwgcHJpbWl0aXZlcyBkcmF3ZXIgcmVzcG9uc2libGUgb2YgZHJhd2luZyBDZXNpdW0gcHJpbWl0aXZlcy5cbiAqICBEcmF3ZXJzIHRoZSBoYW5kbGUgQ2VzaXVtIHByaW1pdGl2ZXMgZXh0ZW5kIGl0LlxuICovXG5cbmV4cG9ydCBjbGFzcyBFbnRpdGllc0RyYXdlclNlcnZpY2UgZXh0ZW5kcyBCYXNpY0RyYXdlclNlcnZpY2Uge1xuICBwcml2YXRlIGVudGl0eUNvbGxlY3Rpb25zID0gbmV3IE1hcDxhbnksIE9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24+KCk7XG4gIHByaXZhdGUgZ3JhcGhpY3NUeXBlTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2VzaXVtU2VydmljZTogQ2VzaXVtU2VydmljZSxcbiAgICBwcml2YXRlIGdyYXBoaWNzVHlwZTogR3JhcGhpY3NUeXBlLFxuICAgIHByaXZhdGUgZGVmYXVsdE9wdGlvbnM6IEVudGl0aWVzRHJhd2VyT3B0aW9ucyA9IHtcbiAgICAgIGNvbGxlY3Rpb25NYXhTaXplOiAtMSxcbiAgICAgIGNvbGxlY3Rpb25TdXNwZW5zaW9uVGltZTogLTEsXG4gICAgICBjb2xsZWN0aW9uc051bWJlcjogMSxcbiAgICB9LFxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuZ3JhcGhpY3NUeXBlTmFtZSA9ICdVbmtub3duJztcblxuICAgIC8vIEZpeCBiYWQgZW51bSBjb21waWxhdGlvblxuICAgIGZvciAoY29uc3QgaSBpbiBHcmFwaGljc1R5cGUpIHtcbiAgICAgIGlmIChHcmFwaGljc1R5cGVbaV0gYXMgYW55ID09PSB0aGlzLmdyYXBoaWNzVHlwZSkge1xuICAgICAgICB0aGlzLmdyYXBoaWNzVHlwZU5hbWUgPSBpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RnJlZUVudGl0aWVzQ29sbGVjdGlvbigpOiBPcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9uIHtcbiAgICBsZXQgZnJlZUVudGl0eUNvbGxlY3Rpb24gPSBudWxsO1xuICAgIGlmICh0aGlzLmVudGl0eUNvbGxlY3Rpb25zICE9IG51bGwpIHtcbiAgICAgIHRoaXMuZW50aXR5Q29sbGVjdGlvbnMuZm9yRWFjaChlbnRpdHlDb2xsZWN0aW9uID0+IHtcbiAgICAgICAgaWYgKGVudGl0eUNvbGxlY3Rpb24uaXNGcmVlKCkpIHtcbiAgICAgICAgICBmcmVlRW50aXR5Q29sbGVjdGlvbiA9IGVudGl0eUNvbGxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBmcmVlRW50aXR5Q29sbGVjdGlvbjtcbiAgfVxuXG4gIGluaXQob3B0aW9ucz86IEVudGl0aWVzRHJhd2VyT3B0aW9ucykge1xuICAgIGNvbnN0IGZpbmFsT3B0aW9ucyA9IG9wdGlvbnMgfHwgdGhpcy5kZWZhdWx0T3B0aW9ucztcbiAgICBjb25zdCBkYXRhU291cmNlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmluYWxPcHRpb25zLmNvbGxlY3Rpb25zTnVtYmVyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgQ3VzdG9tRGF0YVNvdXJjZSh0aGlzLmdyYXBoaWNzVHlwZU5hbWUpO1xuICAgICAgZGF0YVNvdXJjZXMucHVzaChkYXRhU291cmNlKTtcbiAgICAgIHRoaXMuY2VzaXVtU2VydmljZS5nZXRWaWV3ZXIoKS5kYXRhU291cmNlcy5hZGQoZGF0YVNvdXJjZSk7XG4gICAgICB0aGlzLmVudGl0eUNvbGxlY3Rpb25zLnNldChcbiAgICAgICAgZGF0YVNvdXJjZS5lbnRpdGllcyxcbiAgICAgICAgbmV3IE9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24oZGF0YVNvdXJjZS5lbnRpdGllcywgZmluYWxPcHRpb25zLmNvbGxlY3Rpb25NYXhTaXplLCBmaW5hbE9wdGlvbnMuY29sbGVjdGlvblN1c3BlbnNpb25UaW1lKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGFTb3VyY2VzO1xuICB9XG5cbiAgYWRkKGNlc2l1bVByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IG9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24gPSB0aGlzLmdldEZyZWVFbnRpdGllc0NvbGxlY3Rpb24oKTtcbiAgICBpZiAob3B0aW1pemVkRW50aXR5Q29sbGVjdGlvbiA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBtb3JlIGZyZWUgZW50aXR5IGNvbGxlY3Rpb25zJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZW50aXR5T2JqZWN0ID0ge1xuICAgICAgcG9zaXRpb246IGNlc2l1bVByb3BzLnBvc2l0aW9uICE9PSB1bmRlZmluZWQgPyBjZXNpdW1Qcm9wcy5wb3NpdGlvbiA6IHVuZGVmaW5lZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBjZXNpdW1Qcm9wcy5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMuZGVzY3JpcHRpb24gOiB1bmRlZmluZWQsXG4gICAgICBvcmllbnRhdGlvbjogY2VzaXVtUHJvcHMub3JpZW50YXRpb24gIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLm9yaWVudGF0aW9uIDogdW5kZWZpbmVkLFxuICAgICAgdmlld0Zyb206IGNlc2l1bVByb3BzLnZpZXdGcm9tICE9PSB1bmRlZmluZWQgPyBjZXNpdW1Qcm9wcy52aWV3RnJvbSA6IHVuZGVmaW5lZCxcbiAgICAgIFt0aGlzLmdyYXBoaWNzVHlwZU5hbWVdOiBjZXNpdW1Qcm9wcyxcbiAgICB9O1xuXG4gICAgaWYgKGNlc2l1bVByb3BzLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW50aXR5T2JqZWN0Lm5hbWUgPSBjZXNpdW1Qcm9wcy5uYW1lO1xuICAgIH1cbiAgICBpZiAoY2VzaXVtUHJvcHMuYXZhaWxhYmlsaXR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVudGl0eU9iamVjdC5hdmFpbGFiaWxpdHkgPSBjZXNpdW1Qcm9wcy5hdmFpbGFiaWxpdHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24uYWRkKGVudGl0eU9iamVjdCk7XG4gIH1cblxuICB1cGRhdGUoZW50aXR5OiBhbnksIGNlc2l1bVByb3BzOiBhbnkpIHtcbiAgICB0aGlzLnN1c3BlbmRFbnRpdHlDb2xsZWN0aW9uKGVudGl0eSk7XG5cbiAgICBpZiAoZW50aXR5LnBvc2l0aW9uIGluc3RhbmNlb2YgQ2FsbGJhY2tQcm9wZXJ0eSkge1xuICAgICAgaWYgKGVudGl0eS5wb3NpdGlvbi5faXNDb25zdGFudCkge1xuICAgICAgICBlbnRpdHkucG9zaXRpb24gPSBjZXNpdW1Qcm9wcy5wb3NpdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgZW50aXR5LnBvc2l0aW9uID0gY2VzaXVtUHJvcHMucG9zaXRpb24gIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLnBvc2l0aW9uIDogdW5kZWZpbmVkO1xuICAgIGVudGl0eS5uYW1lID0gY2VzaXVtUHJvcHMubmFtZSAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMubmFtZSA6IGVudGl0eS5uYW1lO1xuICAgIGVudGl0eS5kZXNjcmlwdGlvbiA9IGNlc2l1bVByb3BzLmRlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgPyBjZXNpdW1Qcm9wcy5kZXNjcmlwdGlvbiA6IGVudGl0eS5kZXNjcmlwdGlvbjtcbiAgICBlbnRpdHkub3JpZW50YXRpb24gPSBjZXNpdW1Qcm9wcy5vcmllbnRhdGlvbiAhPT0gdW5kZWZpbmVkID8gY2VzaXVtUHJvcHMub3JpZW50YXRpb24gOiBlbnRpdHkub3JpZW50YXRpb247XG4gICAgZW50aXR5LnZpZXdGcm9tID0gY2VzaXVtUHJvcHMudmlld0Zyb20gIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLnZpZXdGcm9tIDogZW50aXR5LnZpZXdGcm9tO1xuICAgIGVudGl0eS5hdmFpbGFiaWxpdHkgPSBjZXNpdW1Qcm9wcy5hdmFpbGFiaWxpdHkgIT09IHVuZGVmaW5lZCA/IGNlc2l1bVByb3BzLmF2YWlsYWJpbGl0eSA6IGNlc2l1bVByb3BzLmF2YWlsYWJpbGl0eTtcblxuICAgIGlmICh0aGlzLl9wcm9wc0Fzc2lnbmVyKSB7XG4gICAgICB0aGlzLl9wcm9wc0Fzc2lnbmVyKGVudGl0eVt0aGlzLmdyYXBoaWNzVHlwZU5hbWVdLCBjZXNpdW1Qcm9wcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZW50aXR5W3RoaXMuZ3JhcGhpY3NUeXBlTmFtZV0sIGNlc2l1bVByb3BzKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUoZW50aXR5OiBhbnkpIHtcbiAgICBjb25zdCBvcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9uID0gdGhpcy5lbnRpdHlDb2xsZWN0aW9ucy5nZXQoZW50aXR5LmVudGl0eUNvbGxlY3Rpb24pO1xuICAgIGlmIChvcHRpbWl6ZWRFbnRpdHlDb2xsZWN0aW9uICE9IG51bGwpIHtcbiAgICAgIG9wdGltaXplZEVudGl0eUNvbGxlY3Rpb24ucmVtb3ZlKGVudGl0eSk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlQWxsKCkge1xuICAgIHRoaXMuZW50aXR5Q29sbGVjdGlvbnMuZm9yRWFjaChlbnRpdHlDb2xsZWN0aW9uID0+IHtcbiAgICAgIGVudGl0eUNvbGxlY3Rpb24ucmVtb3ZlQWxsKCk7XG4gICAgfSk7XG4gIH1cblxuICBzZXRTaG93KHNob3dWYWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZW50aXR5Q29sbGVjdGlvbnMuZm9yRWFjaChlbnRpdHlDb2xsZWN0aW9uID0+IHtcbiAgICAgIGVudGl0eUNvbGxlY3Rpb24uc2V0U2hvdyhzaG93VmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdXNwZW5kRW50aXR5Q29sbGVjdGlvbihlbnRpdHk6IGFueSkge1xuICAgIGNvbnN0IGlkID0gZW50aXR5LmVudGl0eUNvbGxlY3Rpb247XG4gICAgaWYgKCF0aGlzLmVudGl0eUNvbGxlY3Rpb25zLmhhcyhpZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gRW50aXR5Q29sbGVjdGlvbiBmb3IgZW50aXR5LmVudGl0eUNvbGxlY3Rpb24nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnRpdHlDb2xsZWN0aW9uID0gdGhpcy5lbnRpdHlDb2xsZWN0aW9ucy5nZXQoaWQpO1xuICAgIGVudGl0eUNvbGxlY3Rpb24uc3VzcGVuZCgpO1xuICB9XG59XG5cbiJdfQ==