UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

57 lines (56 loc) 2.04 kB
// 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;