From a52f81bc3bd7f2f3bc30f688261b3ffa9eb82bde Mon Sep 17 00:00:00 2001 From: AlitaBernachot Date: Tue, 11 Feb 2025 12:48:44 +0100 Subject: [PATCH] feat: add flatten layers function for wms endpoint --- src/wms/endpoint.spec.ts | 47 ++++++++++++++++++++++++++++++++++++++++ src/wms/endpoint.ts | 19 ++++++++++++++++ 2 files changed, 66 insertions(+) diff --git a/src/wms/endpoint.spec.ts b/src/wms/endpoint.spec.ts index ef5b7b6..978275e 100644 --- a/src/wms/endpoint.spec.ts +++ b/src/wms/endpoint.spec.ts @@ -203,6 +203,53 @@ describe('WmsEndpoint', () => { }); }); + describe('#getFlattenedLayers', () => { + it('returns a list of layers', async () => { + await endpoint.isReady(); + expect(endpoint.getFlattenedLayers()).toEqual([ + { + abstract: + "Ensemble des services d'accès aux données sur la géologie, l'hydrogéologie et la gravimétrie, diffusées par le BRGM", + name: 'GEOSERVICES_GEOLOGIE', + title: 'GéoServices : géologie, hydrogéologie et gravimétrie', + }, + { + abstract: 'Cartes géologiques', + name: 'GEOLOGIE', + title: 'Cartes géologiques', + }, + { + abstract: + 'BD Scan-Million-Géol est la base de données géoréférencées de la carte géologique image à 1/1 000 000', + name: 'SCAN_F_GEOL1M', + title: 'Carte géologique image de la France au million', + }, + { + abstract: + 'BD Scan-Géol-250 est la base de données géoréférencées des cartes géologiques image à 1/250 000. Utilisation scientifique, technique, pédagogique', + name: 'SCAN_F_GEOL250', + title: 'Carte géologique image de la France au 1/250000', + }, + { + abstract: + "BD Scan-Géol-50 est la base de données géoréférencées des cartes géologiques 'papier' à 1/50 000", + name: 'SCAN_D_GEOL50', + title: 'Carte géologique image de la France au 1/50 000e', + }, + { + abstract: '', + name: 'INHERIT_SCALE', + title: 'Inherited scale denominators', + }, + { + abstract: '', + name: 'INHERIT_BBOX', + title: 'Inherited bounding boxes', + }, + ]); + }); + }); + describe('#getLayerByName', () => { it('returns detailed info on a layer', async () => { await endpoint.isReady(); diff --git a/src/wms/endpoint.ts b/src/wms/endpoint.ts index ec9c792..203eda0 100644 --- a/src/wms/endpoint.ts +++ b/src/wms/endpoint.ts @@ -83,6 +83,13 @@ export default class WmsEndpoint { return this._layers.map(layerSummaryMapper); } + /** + * Returns a array of layers, same as WmsEndpoint.getLayers(), but flattened + */ + getFlattenedLayers() { + return this.getLayers().flatMap(wmsLayerFlatten); + } + /** * Returns the full layer information, including supported coordinate systems, available layers, bounding boxes etc. * Layer name is case-sensitive. @@ -205,3 +212,15 @@ export default class WmsEndpoint { return this._url[operationName]?.[method]; } } + +function wmsLayerFlatten(layerFull) { + const layer = { + title: layerFull.title, + name: layerFull.name, + abstract: layerFull.abstract, + }; + + return 'children' in layerFull && Array.isArray(layerFull.children) + ? [layer, ...layerFull.children.flatMap(wmsLayerFlatten)] + : [layer]; +}