UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

120 lines (119 loc) 5.13 kB
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _WmsManager3d_instances, _WmsManager3d_manageLayerOptions; import StateManager from '../../../tools/state/statemanager'; import SelectionParam from '../../../models/selectionparam'; import LayerManager from '../../../tools/layers/layermanager'; import { WebMapServiceImageryProvider, ImageryLayer } from 'cesium'; import ConfigManager from '../../../tools/configuration/configmanager'; class WmsManager3d { constructor(map3d) { _WmsManager3d_instances.add(this); Object.defineProperty(this, "layerManager", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "map3d", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "baseLayers", { enumerable: true, configurable: true, writable: true, value: [] }); // Group maps from the same server into one ImageryLayer Object.defineProperty(this, "layersRecord", { enumerable: true, configurable: true, writable: true, value: {} }); Object.defineProperty(this, "configManager", { enumerable: true, configurable: true, writable: true, value: void 0 }); this.map3d = map3d; this.layerManager = LayerManager.getInstance(); this.configManager = ConfigManager.getInstance(); } removeAllBasemapLayers() { this.baseLayers.forEach((layer) => this.map3d.imageryLayers.remove(layer)); this.baseLayers = []; } addLayer(layerWms) { if (!(layerWms.serverUniqueQueryId in this.layersRecord)) { this.layersRecord[layerWms.serverUniqueQueryId] = []; } const newImagery = this.newImagery(layerWms.ogcServer.url, layerWms.layers); this.layersRecord[layerWms.serverUniqueQueryId].push({ layers: layerWms, imagery: newImagery }); this.map3d.imageryLayers.add(newImagery); } addBasemapLayer(layerWms) { this.baseLayers.push(this.newImagery(layerWms.ogcServer.url, layerWms.layers)); } newImagery(url, layers, format = 'image/png') { return new ImageryLayer(new WebMapServiceImageryProvider({ url: url, layers: layers, parameters: { transparent: true, format: format }, tileWidth: 4096, tileHeight: 4096 })); } removeLayer(layerWms) { const layersEntry = this.layersRecord[layerWms.serverUniqueQueryId]; if (layersEntry != undefined) { this.map3d.imageryLayers.remove(layersEntry.filter((l) => l.layers === layerWms)[0].imagery); this.layersRecord[layerWms.serverUniqueQueryId] = layersEntry.filter((l) => l.layers !== layerWms); } } layerExists(layerWms) { if (layerWms.serverUniqueQueryId in this.layersRecord) { const layerDef = this.layersRecord[layerWms.serverUniqueQueryId]; const layer = layerDef.find((l) => l.layers.treeItemId === layerWms.treeItemId); return layer !== undefined; } return false; } changeOpacity(layerWms) { __classPrivateFieldGet(this, _WmsManager3d_instances, "m", _WmsManager3d_manageLayerOptions).call(this, layerWms); } changeFilter(layerWms) { __classPrivateFieldGet(this, _WmsManager3d_instances, "m", _WmsManager3d_manageLayerOptions).call(this, layerWms); } selectFeatures(extent) { const state = StateManager.getInstance().state; const selectionParams = []; for (const key in this.layersRecord) { const layerDef = this.layersRecord[key]; selectionParams.push(new SelectionParam(layerDef[0].layers.ogcServer, layerDef.map((l) => l.layers), extent, state.projection)); } state.selection.selectionParameters.push(...selectionParams); } } _WmsManager3d_instances = new WeakSet(), _WmsManager3d_manageLayerOptions = function _WmsManager3d_manageLayerOptions(layerWms) { if (!this.layerExists(layerWms)) { throw new Error('Cannot change filter for this layer: it does not exist'); } const layersEntry = this.layersRecord[layerWms.serverUniqueQueryId]; const imagery = layersEntry.filter((l) => l.layers === layerWms)[0].imagery; imagery.alpha = layerWms.opacity; }; export default WmsManager3d;