olcs
Version:
OpenLayers Cesium integration and plugin library
99 lines • 7.21 kB
JavaScript
import SynchronizedOverlay from './SynchronizedOverlay.js';
import { getUid } from './util.js';
import { unByKey as olObservableUnByKey } from 'ol/Observable.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)));
}
/**
* @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
* @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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3ZlcmxheVN5bmNocm9uaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9vbGNzL092ZXJsYXlTeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxtQkFBbUIsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBR2pDLE9BQU8sRUFBQyxPQUFPLElBQUksbUJBQW1CLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUdoRSxNQUFNLENBQUMsT0FBTyxPQUFPLG1CQUFtQjtJQWFoQjtJQUFzQjtJQVpwQyxrQkFBa0IsQ0FBc0I7SUFDeEMsMEJBQTBCLENBQWlCO0lBQzNDLGlCQUFpQixDQUFpQjtJQUNsQyxXQUFXLEdBQXFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDMUQsYUFBYSxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkcsYUFBYSxHQUFnQixFQUFFLENBQUM7SUFFeEM7Ozs7TUFJRTtJQUNGLFlBQXNCLEdBQVUsRUFBWSxLQUFZO1FBQWxDLFFBQUcsR0FBSCxHQUFHLENBQU87UUFBWSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQ3RELElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLDBCQUEwQixHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFNBQVMsR0FBRywrQkFBK0IsQ0FBQztRQUM1RSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8s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