@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
57 lines (56 loc) • 2.04 kB
JavaScript
// SPDX-License-Identifier: Apache-2.0
import { sanitizeGeometryType } from './xmlTypes.js';
class ServerWfs {
name;
url;
layers = {};
featureTypeToGeometryColumnName = {};
initialized;
constructor(name, url) {
this.name = name;
this.url = url;
this.initialized = false;
}
addLayer(layer) {
if (!this.layers[layer]) {
this.layers[layer] = [];
}
}
removeLayer(layer) {
delete this.layers[layer];
delete this.featureTypeToGeometryColumnName[layer];
}
addLayerAttribute(layer, name, type) {
this.addLayer(layer);
this.layers[layer].push({
name: name,
type: type
});
}
addLayerGeometryAttribute(layer, name, type) {
this.addLayer(layer);
const geomType = sanitizeGeometryType(type);
if (geomType === 'unknown') {
console.warn(`Unknown geometry type ${type} for layer ${layer}`);
}
this.featureTypeToGeometryColumnName[layer] = { name: name, type: geomType };
}
getGeometryColumnNameToFeatureTypes(featureTypes) {
if (!this.initialized) {
throw new Error('Initialize WFS server before trying to get geometry column names.');
}
const geometryColumnNameToFeatureType = {};
for (const featureType of featureTypes) {
if (!(featureType in this.layers)) {
console.warn(`featureType ${featureType} is unknown to WFS server ${this.url}\navailable featureTypes: ${Object.keys(this.layers).join(',')}`);
}
const geometryColumnName = this.featureTypeToGeometryColumnName[featureType]?.name;
if (!(geometryColumnName in geometryColumnNameToFeatureType)) {
geometryColumnNameToFeatureType[geometryColumnName] = [];
}
geometryColumnNameToFeatureType[geometryColumnName].push(featureType);
}
return geometryColumnNameToFeatureType;
}
}
export default ServerWfs;