UNPKG

olcs

Version:

OpenLayers Cesium integration and plugin library

111 lines 7.37 kB
import { unByKey as olObservableUnByKey } from 'ol/Observable.js'; import SynchronizedOverlay from './SynchronizedOverlay.js'; import { getUid } from './util.js'; export default class OverlaySynchronizer { map; scene; overlayCollection_; overlayContainerStopEvent_; overlayContainer_; overlayMap_ = new Map(); overlayEvents = [ 'click', 'dblclick', 'mousedown', 'touchstart', 'pointerdown', 'mousewheel', 'wheel', ]; listenerKeys_ = []; /** * @param map * @param scene * @api */ constructor(map, scene) { this.map = map; this.scene = scene; this.map = map; this.overlayCollection_ = this.map.getOverlays(); this.scene = scene; this.overlayContainerStopEvent_ = document.createElement('div'); this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent'; this.overlayEvents.forEach((name) => { this.overlayContainerStopEvent_.addEventListener(name, (evt) => evt.stopPropagation()); }); this.scene.canvas.parentElement.appendChild(this.overlayContainerStopEvent_); this.overlayContainer_ = document.createElement('div'); this.overlayContainer_.className = 'ol-overlaycontainer'; this.scene.canvas.parentElement.appendChild(this.overlayContainer_); } /** * Get the element that serves as a container for overlays that don't allow * event propagation. Elements added to this container won't let mousedown and * touchstart events through to the map, so clicks and gestures on an overlay * don't trigger any {@link ol.MapBrowserEvent}. * @return The map's overlay container that stops events. */ getOverlayContainerStopEvent() { return this.overlayContainerStopEvent_; } /** * Get the element that serves as a container for overlays. * @return The map's overlay container. */ getOverlayContainer() { return this.overlayContainer_; } /** * Destroy all and perform complete synchronization of the overlays. * @api */ synchronize() { this.destroyAll(); this.overlayCollection_.forEach((overlay) => { this.addOverlay(overlay); }); this.listenerKeys_.push(this.overlayCollection_.on('add', (evt) => this.addOverlay(evt.element))); this.listenerKeys_.push(this.overlayCollection_.on('remove', (evt) => this.removeOverlay(evt.element))); } /** * @param overlay * @api */ addOverlay(overlay) { if (!overlay) { return; } const cesiumOverlay = new SynchronizedOverlay({ scene: this.scene, synchronizer: this, parent: overlay, }); this.overlayMap_.set(getUid(overlay), cesiumOverlay); } /** * Removes an overlay from the scene * @param overlay * @api */ removeOverlay(overlay) { const overlayId = getUid(overlay); const csOverlay = this.overlayMap_.get(overlayId); if (csOverlay) { csOverlay.destroy(); this.overlayMap_.delete(overlayId); } } /** * Destroys all the created Cesium objects. */ destroyAll() { this.overlayMap_.forEach((overlay) => { overlay.destroy(); }); this.overlayMap_.clear(); olObservableUnByKey(this.listenerKeys_); this.listenerKeys_.length = 0; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3ZlcmxheVN5bmNocm9uaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9vbGNzL092ZXJsYXlTeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFDLE9BQU8sSUFBSSxtQkFBbUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBRWhFLE9BQU8sbUJBQW1CLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVqQyxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQXNCMUI7SUFDQTtJQXRCSixrQkFBa0IsQ0FBc0I7SUFDeEMsMEJBQTBCLENBQWlCO0lBQzNDLGlCQUFpQixDQUFpQjtJQUNsQyxXQUFXLEdBQXFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDMUQsYUFBYSxHQUFHO1FBQ3RCLE9BQU87UUFDUCxVQUFVO1FBQ1YsV0FBVztRQUNYLFlBQVk7UUFDWixhQUFhO1FBQ2IsWUFBWTtRQUNaLE9BQU87S0FDUixDQUFDO0lBQ00sYUFBYSxHQUFnQixFQUFFLENBQUM7SUFFeEM7Ozs7T0FJRztJQUNILFlBQ1ksR0FBVSxFQUNWLEtBQVk7UUFEWixRQUFHLEdBQUgsR0FBRyxDQUFPO1FBQ1YsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUV0QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQywwQkFBMEIsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxTQUFTLEdBQUcsK0JBQStCLENBQUM7UUFDNUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMs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