From f52ab95b17bb680b81bcffb19379fc7af7d43556 Mon Sep 17 00:00:00 2001 From: damienmulder Date: Thu, 15 May 2025 16:44:44 +0200 Subject: [PATCH 1/2] Fix empty layer extent --- .../controller/mapfilegenerator/mapper.go | 40 ++++++++++++------- internal/controller/shared_controller.go | 1 - 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/internal/controller/mapfilegenerator/mapper.go b/internal/controller/mapfilegenerator/mapper.go index d956c32..7441f01 100644 --- a/internal/controller/mapfilegenerator/mapper.go +++ b/internal/controller/mapfilegenerator/mapper.go @@ -16,6 +16,7 @@ import ( const ( defaultMaxFeatures = 1000 geopackagePath = "/srv/data/gpkg" + defaultExtent = "-25000 250000 280000 860000" ) var mapserverDebugLevel = 0 @@ -68,25 +69,21 @@ func MapWFSToMapfileGeneratorInput(wfs *pdoknlv3.WFS, ownerInfo *smoothoperatorv DebugLevel: mapserverDebugLevel, }, MaxFeatures: smoothoperatorutils.PointerVal(wfs.Spec.Service.CountDefault, strconv.Itoa(defaultMaxFeatures)), - Layers: getWFSLayers(wfs.Spec.Service.FeatureTypes), + Layers: getWFSLayers(wfs.Spec.Service), } return input, nil } -func getWFSLayers(featureTypes []pdoknlv3.FeatureType) (layers []WFSLayer) { - for _, featureType := range featureTypes { - bbox := pdoknlv3.FeatureBbox{} - if featureType.Bbox != nil { - bbox = *featureType.Bbox - } +func getWFSLayers(service pdoknlv3.WFSService) (layers []WFSLayer) { + for _, featureType := range service.FeatureTypes { layer := WFSLayer{ BaseLayer: BaseLayer{ Name: featureType.Name, Title: mapperutils.EscapeQuotes(featureType.Title), Abstract: mapperutils.EscapeQuotes(featureType.Abstract), Keywords: strings.Join(featureType.Keywords, ","), - Extent: bbox.DefaultCRS.ToExtent(), + Extent: getWFSExtent(featureType, service), MetadataID: featureType.DatasetMetadataURL.CSW.MetadataIdentifier, Columns: getColumns(featureType.Data), TableName: featureType.Data.GetTableName(), @@ -104,6 +101,26 @@ func getWFSLayers(featureTypes []pdoknlv3.FeatureType) (layers []WFSLayer) { return } +func getWFSExtent(featureType pdoknlv3.FeatureType, service pdoknlv3.WFSService) string { + if featureType.Bbox != nil { + return featureType.Bbox.DefaultCRS.ToExtent() + } + if service.Bbox != nil { + return service.Bbox.DefaultCRS.ToExtent() + } + return defaultExtent +} + +func getWMSExtent(serviceLayer pdoknlv3.Layer, serviceExtent string) string { + if len(serviceLayer.BoundingBoxes) > 0 { + return serviceLayer.BoundingBoxes[0].ToExtent() + } + if serviceExtent != "" { + return serviceExtent + } + return defaultExtent +} + func getColumns(data pdoknlv3.Data) []Column { columns := []Column{{Name: "fuuid"}} if data.GetColumns() != nil { @@ -222,11 +239,6 @@ func MapWMSToMapfileGeneratorInput(wms *pdoknlv3.WMS, _ *smoothoperatorv1.OwnerI // TODO fix linting (cyclop) func getWMSLayer(serviceLayer pdoknlv3.Layer, serviceExtent string, wms *pdoknlv3.WMS) WMSLayer { - layerExtent := serviceExtent - if len(serviceLayer.BoundingBoxes) > 0 { - layerExtent = serviceLayer.BoundingBoxes[0].ToExtent() - } - groupName := "" parent := serviceLayer.GetParent(&wms.Spec.Service.Layer) // If the layer falls directly under the toplayer, the groupname is omitted @@ -255,7 +267,7 @@ func getWMSLayer(serviceLayer pdoknlv3.Layer, serviceExtent string, wms *pdoknlv Title: smoothoperatorutils.PointerVal(serviceLayer.Title, ""), Abstract: smoothoperatorutils.PointerVal(serviceLayer.Abstract, ""), Keywords: strings.Join(serviceLayer.Keywords, ","), - Extent: layerExtent, + Extent: getWMSExtent(serviceLayer, serviceExtent), MetadataID: metadataID, Columns: columns, GeometryType: nil, diff --git a/internal/controller/shared_controller.go b/internal/controller/shared_controller.go index c97c623..54e81c2 100644 --- a/internal/controller/shared_controller.go +++ b/internal/controller/shared_controller.go @@ -608,7 +608,6 @@ func mutateConfigMapMapfileGenerator[R Reconciler, O pdoknlv3.WMSWFS](r R, obj O if err != nil { return err } - // mapfileGeneratorConfig := "TODO" // TODO Implement mapfilegenerator.GetConfig for WMS configMap.Data = map[string]string{mapfileGeneratorInput: mapfileGeneratorConfig} } configMap.Immutable = smoothoperatorutils.Pointer(true) From c1a49e093decde9c9f73a929fb26b34f37546367 Mon Sep 17 00:00:00 2001 From: damienmulder Date: Thu, 15 May 2025 17:33:58 +0200 Subject: [PATCH 2/2] Linting --- internal/controller/mapfilegenerator/mapper.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/internal/controller/mapfilegenerator/mapper.go b/internal/controller/mapfilegenerator/mapper.go index a86a597..739972f 100644 --- a/internal/controller/mapfilegenerator/mapper.go +++ b/internal/controller/mapfilegenerator/mapper.go @@ -237,9 +237,6 @@ func MapWMSToMapfileGeneratorInput(wms *pdoknlv3.WMS, _ *smoothoperatorv1.OwnerI return result, nil } -// TODO fix linting (cyclop) -// -//nolint:cyclop func getWMSLayer(serviceLayer pdoknlv3.Layer, serviceExtent string, wms *pdoknlv3.WMS) WMSLayer { groupName := "" parent := serviceLayer.GetParent(&wms.Spec.Service.Layer)