@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
120 lines (119 loc) • 5.13 kB
JavaScript
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;