From bdd898842d47ddc0ad2c153f4b0683353d1a640d Mon Sep 17 00:00:00 2001 From: Filip Leitner Date: Wed, 17 Jan 2024 14:49:45 +0100 Subject: [PATCH] fix: WMS metadata extent parsing If layer extent is missing try to use the one on service, world fallback otherwise --- .../layer-manager-metadata.service.ts | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/projects/hslayers/shared/layer-manager/layer-manager-metadata.service.ts b/projects/hslayers/shared/layer-manager/layer-manager-metadata.service.ts index ff8fe214fa..0a1942346d 100644 --- a/projects/hslayers/shared/layer-manager/layer-manager-metadata.service.ts +++ b/projects/hslayers/shared/layer-manager/layer-manager-metadata.service.ts @@ -5,7 +5,11 @@ import {Source} from 'ol/source'; import {WMSCapabilities, WMTSCapabilities} from 'ol/format'; import {get as getProjection, transformExtent} from 'ol/proj'; -import {Attribution, MetadataUrl} from 'hslayers-ng/types'; +import { + Attribution, + CapabilitiesResponseWrapper, + MetadataUrl, +} from 'hslayers-ng/types'; import {HsAddDataUrlService} from 'hslayers-ng/shared/add-data'; import { HsArcgisGetCapabilitiesService, @@ -226,7 +230,7 @@ export class HsLayerManagerMetadataService { } this.setCapsExtent( this.hsAddDataUrlService.calcCombinedExtent( - layerObjs.map((lo) => this.getCapsExtent(lo)), + layerObjs.map((lo) => this.getCapsExtent(lo, layerCaps)), ), olLayer, ); @@ -285,7 +289,7 @@ export class HsLayerManagerMetadataService { }); } this.collectLegend(layerObj, legends); - this.setCapsExtent(this.getCapsExtent(layerObj), olLayer); + this.setCapsExtent(this.getCapsExtent(layerObj, layerCaps), olLayer); return layerObj; } @@ -337,14 +341,20 @@ export class HsLayerManagerMetadataService { /** * Helper used in to get usable extent from layers capabilities object */ - private getCapsExtent(layerObj: any): Extent { - let extent = layerObj.EX_GeographicBoundingBox || layerObj.BoundingBox; + private getCapsExtent(layerObj: any, layerCaps: HsWmsLayer): Extent { + // Extent of selected layer or service in case its missing + let extent = + (layerObj.EX_GeographicBoundingBox || layerObj.BoundingBox) ?? + (layerCaps.EX_GeographicBoundingBox || layerCaps.BoundingBox); //If from BoundingBox picl one usable - extent = extent[0].crs - ? extent.find( - (e) => e.crs != 'CRS:84' && getProjection(layerObj.BoundingBox[0]), - ) - : extent; + extent = !extent + ? //In case extent could not be found + [-180, -90, 180, 90] + : extent[0].crs + ? extent.find( + (e) => e.crs != 'CRS:84' && getProjection(layerObj.BoundingBox[0]), + ) + : extent; return transformExtent( //BoundingBox extent is obj with crs, extent, res props extent.extent ?? extent,