diff --git a/api/v3/wfs_types.go b/api/v3/wfs_types.go index 9662e21..2941be6 100644 --- a/api/v3/wfs_types.go +++ b/api/v3/wfs_types.go @@ -28,6 +28,7 @@ import ( shared_model "github.com/pdok/smooth-operator/model" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "slices" ) // EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN! @@ -145,6 +146,15 @@ type WFSService struct { FeatureTypes []FeatureType `json:"featureTypes"` } +func (s WFSService) KeywordsIncludingInspireKeyword() []string { + keywords := s.Keywords + if s.Inspire != nil && !slices.Contains(keywords, "infoFeatureAccessService") { + keywords = append(keywords, "infoFeatureAccessService") + } + + return keywords +} + type Bbox struct { // EXTENT/wfs_extent in mapfile //nolint:tagliatelle diff --git a/api/v3/wms_types.go b/api/v3/wms_types.go index 1e657c2..4e63b8d 100644 --- a/api/v3/wms_types.go +++ b/api/v3/wms_types.go @@ -118,6 +118,15 @@ type WMSService struct { Layer Layer `json:"layer"` } +func (s WMSService) KeywordsIncludingInspireKeyword() []string { + keywords := s.Keywords + if s.Inspire != nil && !slices.Contains(keywords, "infoMapAccessService") { + keywords = append(keywords, "infoMapAccessService") + } + + return keywords +} + // +kubebuilder:validation:XValidation:message="Either blobKeys or configMapRefs is required",rule="has(self.blobKeys) || has(self.configMapRefs)" type StylingAssets struct { // +kubebuilder:validations:MinItems:=1 diff --git a/internal/controller/capabilitiesgenerator/mapper.go b/internal/controller/capabilitiesgenerator/mapper.go index 2880061..ab8ace9 100644 --- a/internal/controller/capabilitiesgenerator/mapper.go +++ b/internal/controller/capabilitiesgenerator/mapper.go @@ -49,7 +49,7 @@ func MapWFSToCapabilitiesGeneratorInput(wfs *pdoknlv3.WFS, ownerInfo *smoothoper Abstract: mapperutils.EscapeQuotes(wfs.Spec.Service.Abstract), AccessConstraints: *wfs.Spec.Service.AccessConstraints, Keywords: &wsc110.Keywords{ - Keyword: wfs.Spec.Service.Keywords, + Keyword: wfs.Spec.Service.KeywordsIncludingInspireKeyword(), }, }, Capabilities: wfs200.Capabilities{ @@ -232,7 +232,7 @@ func MapWMSToCapabilitiesGeneratorInput(wms *pdoknlv3.WMS, ownerInfo *smoothoper Name: "WMS", Title: mapperutils.EscapeQuotes(wms.Spec.Service.Title), Abstract: &abstract, - KeywordList: &wms130.Keywords{Keyword: wms.Spec.Service.Keywords}, + KeywordList: &wms130.Keywords{Keyword: wms.Spec.Service.KeywordsIncludingInspireKeyword()}, OnlineResource: wms130.OnlineResource{Href: &hostBaseURL}, ContactInformation: getContactInformation(ownerInfo), Fees: smoothoperatorutils.Pointer("NONE"), diff --git a/internal/controller/capabilitiesgenerator/test_data/wms_input.yaml b/internal/controller/capabilitiesgenerator/test_data/wms_input.yaml index 662be37..32071be 100644 --- a/internal/controller/capabilitiesgenerator/test_data/wms_input.yaml +++ b/internal/controller/capabilitiesgenerator/test_data/wms_input.yaml @@ -35,6 +35,7 @@ services: - Hectometerpunten - HVD - Mobiliteit + - infoMapAccessService onlineResource: xlink: null type: null diff --git a/internal/controller/mapfilegenerator/mapfile_generator_test.go b/internal/controller/mapfilegenerator/mapfile_generator_test.go index ad0b738..0764fd2 100644 --- a/internal/controller/mapfilegenerator/mapfile_generator_test.go +++ b/internal/controller/mapfilegenerator/mapfile_generator_test.go @@ -90,9 +90,9 @@ const ( ] }` //nolint:misspell - WMSGrouplessConfig = `{"service_title": "NWB - Wegen WMS", "service_abstract": "Dit is de web map service van het Nationaal Wegen Bestand (NWB) - wegen. Deze dataset bevat alleen de wegvakken en hectometerpunten. Het Nationaal Wegen Bestand - Wegen is een digitaal geografisch bestand van alle wegen in Nederland. Opgenomen zijn alle wegen die worden beheerd door wegbeheerders als het Rijk, provincies, gemeenten en waterschappen, echter alleen voor zover deze zijn voorzien van een straatnaam of nummer.", "service_keywords": "Vervoersnetwerken,Menselijke gezondheid en veiligheid,Geluidsbelasting hoofdwegen (Richtlijn Omgevingslawaai),Nationaal,Voertuigen,Verkeer,Wegvakken,Hectometerpunten,HVD,Mobiliteit", "service_accessconstraints": "https://creativecommons.org/publicdomain/zero/1.0/deed.nl", "service_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "maxSize": "4000", "service_namespace_prefix": "nwbwegen", "service_namespace_uri": "http://nwbwegen.geonovum.nl", "service_onlineresource": "https://service.pdok.nl", "service_path": "/rws/nwbwegen/wms/v1_0", "service_metadata_id": "f2437a92-ddd3-4777-a1bc-fdf4b4a7fcb8", "dataset_owner": "rws", "authority_url": "https://www.rijkswaterstaat.nl", "automatic_casing": true, "data_epsg": "EPSG:28992", "epsg_list": ["EPSG:28992", "EPSG:25831", "EPSG:25832", "EPSG:3034", "EPSG:3035", "EPSG:3857", "EPSG:4258", "EPSG:4326", "CRS:84"], "templates": "/srv/data/config/templates", "fonts": "/srv/data/config/fonts", "outputformat_jpg": "jpg", "outputformat_png8": "png", "symbols": ["/styling/nwb_wegen_hectopunten.symbol"], "group_layers": [], "layers": [{"name": "wegvakken", "gpkg_path": "/srv/data/gpkg/nwb_wegen.gpkg", "tablename": "wegvakken", "geometry_type": "MultiLineString", "columns": [{"name": "fuuid"}, {"name": "objectid"}, {"name": "wvk_id"}, {"name": "wvk_begdat"}, {"name": "jte_id_beg"}, {"name": "jte_id_end"}, {"name": "wegbehsrt"}, {"name": "wegnummer"}, {"name": "wegdeelltr"}, {"name": "hecto_lttr"}, {"name": "bst_code"}, {"name": "rpe_code"}, {"name": "admrichtng"}, {"name": "rijrichtng"}, {"name": "stt_naam"}, {"name": "stt_bron"}, {"name": "wpsnaam"}, {"name": "gme_id"}, {"name": "gme_naam"}, {"name": "hnrstrlnks"}, {"name": "hnrstrrhts"}, {"name": "e_hnr_lnks"}, {"name": "e_hnr_rhts"}, {"name": "l_hnr_lnks"}, {"name": "l_hnr_rhts"}, {"name": "begafstand"}, {"name": "endafstand"}, {"name": "beginkm"}, {"name": "eindkm"}, {"name": "pos_tv_wol"}, {"name": "wegbehcode"}, {"name": "wegbehnaam"}, {"name": "distrcode"}, {"name": "distrnaam"}, {"name": "dienstcode"}, {"name": "dienstnaam"}, {"name": "wegtype"}, {"name": "wgtype_oms"}, {"name": "routeltr"}, {"name": "routenr"}, {"name": "routeltr2"}, {"name": "routenr2"}, {"name": "routeltr3"}, {"name": "routenr3"}, {"name": "routeltr4"}, {"name": "routenr4"}, {"name": "wegnr_aw"}, {"name": "wegnr_hmp"}, {"name": "geobron_id"}, {"name": "geobron_nm"}, {"name": "bronjaar"}, {"name": "openlr"}, {"name": "bag_orl"}, {"name": "frc"}, {"name": "fow"}, {"name": "alt_naam"}, {"name": "alt_nr"}, {"name": "rel_hoogte"}, {"name": "st_lengthshape"}], "title": "Wegvakken", "abstract": "Deze laag bevat de wegvakken uit het Nationaal Wegen bestand (NWB) en geeft gedetailleerde informatie per wegvak zoals straatnaam, wegnummer, routenummer, wegbeheerder, huisnummers, enz. weer.", "keywords": "Vervoersnetwerken,Menselijke gezondheid en veiligheid,Geluidsbelasting hoofdwegen (Richtlijn Omgevingslawaai),Nationaal,Voertuigen,Verkeer,Wegvakken", "dataset_metadata_id": "a9b7026e-0a81-4813-93bd-ba49e6f28502", "dataset_source_id": "8f0497f0-dbd7-4bee-b85a-5fdec484a7ff", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "NWB - Wegvakken", "path": "/styling/wegvakken.style"}]}, {"name": "hectopunten", "gpkg_path": "/srv/data/gpkg/nwb_wegen.gpkg", "tablename": "hectopunten", "geometry_type": "MultiPoint", "columns": [{"name": "fuuid"}, {"name": "objectid"}, {"name": "hectomtrng"}, {"name": "afstand"}, {"name": "wvk_id"}, {"name": "wvk_begdat"}, {"name": "zijde"}, {"name": "hecto_lttr"}], "title": "Hectopunten", "abstract": "Deze laag bevat de hectopunten uit het Nationaal Wegen Bestand (NWB) en geeft gedetailleerde informatie per hectopunt zoals hectometrering, afstand, zijde en hectoletter weer.", "keywords": "Vervoersnetwerken,Menselijke gezondheid en veiligheid,Geluidsbelasting hoofdwegen (Richtlijn Omgevingslawaai),Nationaal,Voertuigen,Verkeer,Hectometerpunten", "dataset_metadata_id": "a9b7026e-0a81-4813-93bd-ba49e6f28502", "dataset_source_id": "8f0497f0-dbd7-4bee-b85a-5fdec484a7ff", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "NWB - Hectopunten", "path": "/styling/hectopunten.style"}]}]}` + WMSGrouplessConfig = `{"service_title": "NWB - Wegen WMS", "service_abstract": "Dit is de web map service van het Nationaal Wegen Bestand (NWB) - wegen. Deze dataset bevat alleen de wegvakken en hectometerpunten. Het Nationaal Wegen Bestand - Wegen is een digitaal geografisch bestand van alle wegen in Nederland. Opgenomen zijn alle wegen die worden beheerd door wegbeheerders als het Rijk, provincies, gemeenten en waterschappen, echter alleen voor zover deze zijn voorzien van een straatnaam of nummer.", "service_keywords": "Vervoersnetwerken,Menselijke gezondheid en veiligheid,Geluidsbelasting hoofdwegen (Richtlijn Omgevingslawaai),Nationaal,Voertuigen,Verkeer,Wegvakken,Hectometerpunten,HVD,Mobiliteit,infoMapAccessService", "service_accessconstraints": "https://creativecommons.org/publicdomain/zero/1.0/deed.nl", "service_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "maxSize": "4000", "service_namespace_prefix": "nwbwegen", "service_namespace_uri": "http://nwbwegen.geonovum.nl", "service_onlineresource": "https://service.pdok.nl", "service_path": "/rws/nwbwegen/wms/v1_0", "service_metadata_id": "f2437a92-ddd3-4777-a1bc-fdf4b4a7fcb8", "dataset_owner": "rws", "authority_url": "https://www.rijkswaterstaat.nl", "automatic_casing": true, "data_epsg": "EPSG:28992", "epsg_list": ["EPSG:28992", "EPSG:25831", "EPSG:25832", "EPSG:3034", "EPSG:3035", "EPSG:3857", "EPSG:4258", "EPSG:4326", "CRS:84"], "templates": "/srv/data/config/templates", "fonts": "/srv/data/config/fonts", "outputformat_jpg": "jpg", "outputformat_png8": "png", "symbols": ["/styling/nwb_wegen_hectopunten.symbol"], "group_layers": [], "layers": [{"name": "wegvakken", "gpkg_path": "/srv/data/gpkg/nwb_wegen.gpkg", "tablename": "wegvakken", "geometry_type": "MultiLineString", "columns": [{"name": "fuuid"}, {"name": "objectid"}, {"name": "wvk_id"}, {"name": "wvk_begdat"}, {"name": "jte_id_beg"}, {"name": "jte_id_end"}, {"name": "wegbehsrt"}, {"name": "wegnummer"}, {"name": "wegdeelltr"}, {"name": "hecto_lttr"}, {"name": "bst_code"}, {"name": "rpe_code"}, {"name": "admrichtng"}, {"name": "rijrichtng"}, {"name": "stt_naam"}, {"name": "stt_bron"}, {"name": "wpsnaam"}, {"name": "gme_id"}, {"name": "gme_naam"}, {"name": "hnrstrlnks"}, {"name": "hnrstrrhts"}, {"name": "e_hnr_lnks"}, {"name": "e_hnr_rhts"}, {"name": "l_hnr_lnks"}, {"name": "l_hnr_rhts"}, {"name": "begafstand"}, {"name": "endafstand"}, {"name": "beginkm"}, {"name": "eindkm"}, {"name": "pos_tv_wol"}, {"name": "wegbehcode"}, {"name": "wegbehnaam"}, {"name": "distrcode"}, {"name": "distrnaam"}, {"name": "dienstcode"}, {"name": "dienstnaam"}, {"name": "wegtype"}, {"name": "wgtype_oms"}, {"name": "routeltr"}, {"name": "routenr"}, {"name": "routeltr2"}, {"name": "routenr2"}, {"name": "routeltr3"}, {"name": "routenr3"}, {"name": "routeltr4"}, {"name": "routenr4"}, {"name": "wegnr_aw"}, {"name": "wegnr_hmp"}, {"name": "geobron_id"}, {"name": "geobron_nm"}, {"name": "bronjaar"}, {"name": "openlr"}, {"name": "bag_orl"}, {"name": "frc"}, {"name": "fow"}, {"name": "alt_naam"}, {"name": "alt_nr"}, {"name": "rel_hoogte"}, {"name": "st_lengthshape"}], "title": "Wegvakken", "abstract": "Deze laag bevat de wegvakken uit het Nationaal Wegen bestand (NWB) en geeft gedetailleerde informatie per wegvak zoals straatnaam, wegnummer, routenummer, wegbeheerder, huisnummers, enz. weer.", "keywords": "Vervoersnetwerken,Menselijke gezondheid en veiligheid,Geluidsbelasting hoofdwegen (Richtlijn Omgevingslawaai),Nationaal,Voertuigen,Verkeer,Wegvakken", "dataset_metadata_id": "a9b7026e-0a81-4813-93bd-ba49e6f28502", "dataset_source_id": "8f0497f0-dbd7-4bee-b85a-5fdec484a7ff", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "NWB - Wegvakken", "path": "/styling/wegvakken.style"}]}, {"name": "hectopunten", "gpkg_path": "/srv/data/gpkg/nwb_wegen.gpkg", "tablename": "hectopunten", "geometry_type": "MultiPoint", "columns": [{"name": "fuuid"}, {"name": "objectid"}, {"name": "hectomtrng"}, {"name": "afstand"}, {"name": "wvk_id"}, {"name": "wvk_begdat"}, {"name": "zijde"}, {"name": "hecto_lttr"}], "title": "Hectopunten", "abstract": "Deze laag bevat de hectopunten uit het Nationaal Wegen Bestand (NWB) en geeft gedetailleerde informatie per hectopunt zoals hectometrering, afstand, zijde en hectoletter weer.", "keywords": "Vervoersnetwerken,Menselijke gezondheid en veiligheid,Geluidsbelasting hoofdwegen (Richtlijn Omgevingslawaai),Nationaal,Voertuigen,Verkeer,Hectometerpunten", "dataset_metadata_id": "a9b7026e-0a81-4813-93bd-ba49e6f28502", "dataset_source_id": "8f0497f0-dbd7-4bee-b85a-5fdec484a7ff", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "NWB - Hectopunten", "path": "/styling/hectopunten.style"}]}]}` //nolint:misspell - WMSGroupConfig = `{"service_title": "Waterschappen Hydrografie (INSPIRE geharmoniseerd) WMS", "service_abstract": "Deze dataset is gebaseerd op (niet geharmoniseerde) data van alle waterschappen in Nederland conform INSPIRE. De dataset bevat de volgende INSPIRE objecten: CrossingLine, CrossingPoint, DamOrWeir, DrainageBasin, Embankment, Lock, Sluice, Watercourse.", "service_keywords": "Aquaduct,Brug,Duikersifonhevel,Stuw,Vastedam,AfvoerAanvoergebied,Waterkering,Sluis,HydroObject,HVD,Aardobservatie en milieu", "service_accessconstraints": "https://creativecommons.org/publicdomain/zero/1.0/deed.nl", "service_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "maxSize": "4000", "service_namespace_prefix": "hydrografie", "service_namespace_uri": "http://hydrografie.geonovum.nl", "service_onlineresource": "https://service.pdok.nl", "service_path": "/hwh/hydrografie/wms/v2_0", "service_metadata_id": "871a58f8-c9f1-41a4-be37-0f059e0f886f", "dataset_owner": "hwh", "authority_url": "https://www.hetwaterschapshuis.nl/", "automatic_casing": false, "data_epsg": "EPSG:28992", "epsg_list": ["EPSG:28992", "EPSG:25831", "EPSG:25832", "EPSG:3034", "EPSG:3035", "EPSG:3857", "EPSG:4258", "EPSG:4326", "CRS:84"], "templates": "/srv/data/config/templates", "outputformat_jpg": "jpg", "outputformat_png8": "png", "symbols": ["/styling/bridge.symbol", "/styling/x.symbol"], "group_layers": [{"name": "HY.PhysicalWaters.ManMadeObject", "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "style_name": "HY.PhysicalWaters.ManMadeObject.Default", "style_title": "Man-made objects default style"}], "layers": [{"name": "HY.PhysicalWaters.Waterbodies", "gpkg_path": "/srv/data/gpkg/Waterbody.gpkg", "tablename": "watercourse", "geometry_type": "MultiLineString", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "delineationknown"}, {"name": "endlifespanversion"}, {"name": "length"}, {"name": "level"}, {"name": "localid"}, {"name": "localtype"}, {"name": "name"}, {"name": "namespace"}, {"name": "origin"}, {"name": "persistence"}, {"name": "streamorder"}, {"name": "tidal"}, {"name": "widthrange"}], "title": "Waterbody", "abstract": "Watercourse", "keywords": "Hydroobject,Waterbody,Watercourse,River,Stream,Lake,Reservoir", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Water bodies default style", "path": "/styling/watercourse.style"}]}, {"name": "HY.PhysicalWaters.Catchments", "gpkg_path": "/srv/data/gpkg/Catchment.gpkg", "tablename": "drainagebasin", "geometry_type": "MultiPolygon", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "area"}, {"name": "beginlifespanversion"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}, {"name": "order"}, {"name": "orderscheme"}, {"name": "origin"}, {"name": "outlet"}, {"name": "scope"}], "title": "Catchment", "abstract": "Drainage basin", "keywords": "AfvoergebiedAanvoergebied,Catchment,Basin,Catchment Area,Drainage basin", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Drainage Basin default style", "path": "/styling/drainagebasin.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.lock", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "lock", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Lock", "path": "/styling/lock.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.crossingpoint", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "crossingpoint", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}, {"name": "type"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Crossing Point", "path": "/styling/crossingpoint.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.sluice", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "sluice", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Sluice", "path": "/styling/sluice.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.embankment", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "embankment", "geometry_type": "MultiLineString", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Embankment", "path": "/styling/embankment.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.crossingline", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "crossingline", "geometry_type": "MultiLineString", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}, {"name": "type"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Crossing Line", "path": "/styling/crossingline.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.damorweir", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "damorweir", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Dam or Weir", "path": "/styling/damorweir.style"}]}]}` + WMSGroupConfig = `{"service_title": "Waterschappen Hydrografie (INSPIRE geharmoniseerd) WMS", "service_abstract": "Deze dataset is gebaseerd op (niet geharmoniseerde) data van alle waterschappen in Nederland conform INSPIRE. De dataset bevat de volgende INSPIRE objecten: CrossingLine, CrossingPoint, DamOrWeir, DrainageBasin, Embankment, Lock, Sluice, Watercourse.", "service_keywords": "Aquaduct,Brug,Duikersifonhevel,Stuw,Vastedam,AfvoerAanvoergebied,Waterkering,Sluis,HydroObject,HVD,Aardobservatie en milieu,infoMapAccessService", "service_accessconstraints": "https://creativecommons.org/publicdomain/zero/1.0/deed.nl", "service_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "maxSize": "4000", "service_namespace_prefix": "hydrografie", "service_namespace_uri": "http://hydrografie.geonovum.nl", "service_onlineresource": "https://service.pdok.nl", "service_path": "/hwh/hydrografie/wms/v2_0", "service_metadata_id": "871a58f8-c9f1-41a4-be37-0f059e0f886f", "dataset_owner": "hwh", "authority_url": "https://www.hetwaterschapshuis.nl/", "automatic_casing": false, "data_epsg": "EPSG:28992", "epsg_list": ["EPSG:28992", "EPSG:25831", "EPSG:25832", "EPSG:3034", "EPSG:3035", "EPSG:3857", "EPSG:4258", "EPSG:4326", "CRS:84"], "templates": "/srv/data/config/templates", "outputformat_jpg": "jpg", "outputformat_png8": "png", "symbols": ["/styling/bridge.symbol", "/styling/x.symbol"], "group_layers": [{"name": "HY.PhysicalWaters.ManMadeObject", "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "style_name": "HY.PhysicalWaters.ManMadeObject.Default", "style_title": "Man-made objects default style"}], "layers": [{"name": "HY.PhysicalWaters.Waterbodies", "gpkg_path": "/srv/data/gpkg/Waterbody.gpkg", "tablename": "watercourse", "geometry_type": "MultiLineString", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "delineationknown"}, {"name": "endlifespanversion"}, {"name": "length"}, {"name": "level"}, {"name": "localid"}, {"name": "localtype"}, {"name": "name"}, {"name": "namespace"}, {"name": "origin"}, {"name": "persistence"}, {"name": "streamorder"}, {"name": "tidal"}, {"name": "widthrange"}], "title": "Waterbody", "abstract": "Watercourse", "keywords": "Hydroobject,Waterbody,Watercourse,River,Stream,Lake,Reservoir", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Water bodies default style", "path": "/styling/watercourse.style"}]}, {"name": "HY.PhysicalWaters.Catchments", "gpkg_path": "/srv/data/gpkg/Catchment.gpkg", "tablename": "drainagebasin", "geometry_type": "MultiPolygon", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "area"}, {"name": "beginlifespanversion"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}, {"name": "order"}, {"name": "orderscheme"}, {"name": "origin"}, {"name": "outlet"}, {"name": "scope"}], "title": "Catchment", "abstract": "Drainage basin", "keywords": "AfvoergebiedAanvoergebied,Catchment,Basin,Catchment Area,Drainage basin", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Drainage Basin default style", "path": "/styling/drainagebasin.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.lock", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "lock", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Lock", "path": "/styling/lock.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.crossingpoint", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "crossingpoint", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}, {"name": "type"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Crossing Point", "path": "/styling/crossingpoint.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.sluice", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "sluice", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Sluice", "path": "/styling/sluice.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.embankment", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "embankment", "geometry_type": "MultiLineString", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Embankment", "path": "/styling/embankment.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.crossingline", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "crossingline", "geometry_type": "MultiLineString", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}, {"name": "type"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Crossing Line", "path": "/styling/crossingline.style"}]}, {"name": "HY.PhysicalWaters.ManMadeObject.damorweir", "group_name": "HY.PhysicalWaters.ManMadeObject", "gpkg_path": "/srv/data/gpkg/Man-madeObject.gpkg", "tablename": "damorweir", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "gml_id"}, {"name": "beginlifespanversion"}, {"name": "condition"}, {"name": "endlifespanversion"}, {"name": "localid"}, {"name": "name"}, {"name": "namespace"}], "title": "Man-made Object", "abstract": "Crossing line, crossing point, dam or weir, sluice, embankment, lock.", "keywords": "Man Made,Duikersifonhevel,Aquaduct,Brug,Stuw,Vastedam,Waterkering,Sluis.", "dataset_metadata_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "dataset_source_id": "07575774-57a1-4419-bab4-6c88fdeb02b2", "layer_extent": "-59188.44333693248 304984.64144318487 308126.88473339565 858328.516489961", "minscale": "1", "maxscale": "50000", "styles": [{"title": "Dam or Weir", "path": "/styling/damorweir.style"}]}]}` //nolint:misspell WMSGroupAndToplayerConfig = `{"service_title": "Kadastrale Kaart (WMS)", "service_abstract": "Overzicht van de ligging van de kadastrale percelen in Nederland. Fungeert als schakel tussen terrein en registratie, vervult voor externe gebruiker vaak een referentiefunctie, een ondergrond ten opzichte waarvan de gebruiker eigen informatie kan vastleggen en presenteren.", "service_keywords": "Kadaster,Kadastrale percelen,Kadastrale grens,Kadastrale kaart,Bebouwing,Nummeraanduidingreeks,Openbare ruimte naam,Perceel,Grens,Kwaliteit,Kwaliteitslabels,HVD,Geospatiale data", "service_accessconstraints": "https://creativecommons.org/publicdomain/zero/1.0/deed.nl", "service_extent": "-25000 250000 280000 860000", "maxSize": "10000", "service_namespace_prefix": "kadastralekaart", "service_namespace_uri": "http://kadastralekaart.geonovum.nl", "service_onlineresource": "https://service.pdok.nl", "service_path": "/kadaster/kadastralekaart/wms/v5_0", "service_metadata_id": "97cf6a64-9cfc-4ce6-9741-2db44fd27fca", "dataset_owner": "kadaster", "authority_url": "https://www.kadaster.nl", "automatic_casing": true, "data_epsg": "EPSG:28992", "epsg_list": ["EPSG:28992", "EPSG:25831", "EPSG:25832", "EPSG:3034", "EPSG:3035", "EPSG:3857", "EPSG:4258", "EPSG:4326", "CRS:84"], "templates": "/srv/data/config/templates", "fonts": "/srv/data/config/fonts", "top_level_name": "Kadastralekaart", "resolution": "91", "defresolution": "91", "outputformat_jpg": "jpg", "outputformat_png8": "png", "symbols": [], "group_layers": [{"name": "Bebouwing", "title": "Bebouwing", "abstract": "De laag Bebouwing is een selectie op panden van de BGT.", "style_name": "standaard:bebouwing", "style_title": "Standaardvisualisatie Bebouwing"}, {"name": "Perceel", "title": "Perceel", "abstract": "Een perceel is een stuk grond waarvan het Kadaster de grenzen heeft gemeten of gaat meten en dat bij het Kadaster een eigen nummer heeft. Een perceel is een begrensd deel van het Nederlands grondgebied dat kadastraal ge\u00efdentificeerd is en met kadastrale grenzen begrensd is.", "style_name": "standaard:perceel", "style_title": "Standaardvisualisatie Perceel"}], "layers": [{"name": "Bebouwingvlak", "group_name": "Bebouwing", "gpkg_path": "/srv/data/gpkg/pand.gpkg", "tablename": "pand", "geometry_type": "Polygon", "columns": [{"name": "fuuid"}, {"name": "object_begin_tijd"}, {"name": "lv_publicatiedatum", "alias": "LV-publicatiedatum"}, {"name": "relatieve_hoogteligging"}, {"name": "in_onderzoek"}, {"name": "tijdstip_registratie"}, {"name": "identificatie_namespace"}, {"name": "identificatie_lokaal_id", "alias": "identificatieLokaalID"}, {"name": "bronhouder"}, {"name": "bgt_status", "alias": "bgt-status"}, {"name": "plus_status", "alias": "plus-status"}, {"name": "identificatie_bag_pnd", "alias": "identificatieBAGPND"}], "title": "Bebouwingvlak", "abstract": "De laag Bebouwing is een selectie op panden van de BGT.", "keywords": "Bebouwing", "dataset_metadata_id": "a29917b9-3426-4041-a11b-69bcb2256904", "dataset_source_id": "06b6c650-cdb1-11dd-ad8b-0800200c9a64", "layer_extent": "-25000 250000 280000 860000", "minscale": "50", "maxscale": "6001", "styles": [{"title": "Standaardvisualisatie", "path": "/styling/bebouwing.style"}, {"title": "Kwaliteitsvisualisatie", "path": "/styling/bebouwing_kwaliteit.style"}, {"title": "Printvisualisatie", "path": "/styling/bebouwing_print.style"}, {"title": "Standaardvisualisatie Bebouwing", "path": "/styling/bebouwing.group.style"}, {"title": "Kwaliteitsvisualisatie Bebouwing", "path": "/styling/bebouwing_kwaliteit.group.style"}, {"title": "Printvisualisatie Bebouwing", "path": "/styling/bebouwing_print.group.style"}]}, {"name": "Nummeraanduidingreeks", "group_name": "Bebouwing", "gpkg_path": "/srv/data/gpkg/pand_nummeraanduiding.gpkg", "tablename": "pand_nummeraanduiding", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "bebouwing_id", "alias": "bebouwingID"}, {"name": "hoek"}, {"name": "tekst"}, {"name": "bag_vbo_laagste_huisnummer", "alias": "identificatie_BAGVBOLaagsteHuisnummer"}, {"name": "bag_vbo_hoogste_huisnummer", "alias": "identificatie_BAGVBOHoogsteHuisnummer"}, {"name": "hoek"}], "title": "Nummeraanduidingreeks", "abstract": "De laag Bebouwing is een selectie op panden van de BGT.", "keywords": "Nummeraanduidingreeks", "dataset_metadata_id": "a29917b9-3426-4041-a11b-69bcb2256904", "dataset_source_id": "06b6c650-cdb1-11dd-ad8b-0800200c9a64", "layer_extent": "-25000 250000 280000 860000", "minscale": "50", "maxscale": "2001", "styles": [{"title": "Standaardvisualisatie", "path": "/styling/nummeraanduidingreeks.style"}, {"title": "Kwaliteitsvisualisatie", "path": "/styling/nummeraanduidingreeks_kwaliteit.style"}, {"title": "Printvisualisatie", "path": "/styling/nummeraanduidingreeks_print.style"}, {"title": "Standaardvisualisatie Bebouwing", "path": "/styling/nummeraanduidingreeks.group.style"}, {"title": "Kwaliteitsvisualisatie Bebouwing", "path": "/styling/nummeraanduidingreeks_kwaliteit.group.style"}, {"title": "Printvisualisatie Bebouwing", "path": "/styling/nummeraanduidingreeks_print.group.style"}]}, {"name": "OpenbareRuimteNaam", "gpkg_path": "/srv/data/gpkg/openbareruimtelabel.gpkg", "tablename": "openbareruimtelabel", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "object_begin_tijd"}, {"name": "lv_publicatiedatum", "alias": "LV-publicatiedatum"}, {"name": "relatieve_hoogteligging"}, {"name": "in_onderzoek"}, {"name": "tijdstip_registratie"}, {"name": "identificatie_namespace"}, {"name": "identificatie_lokaal_id", "alias": "identificatieLokaalID"}, {"name": "bronhouder"}, {"name": "bgt_status", "alias": "bgt-status"}, {"name": "plus_status", "alias": "plus-status"}, {"name": "identificatie_bag_opr", "alias": "identificatieBAGOPR"}, {"name": "tekst"}, {"name": "hoek"}, {"name": "openbare_ruimte_type"}], "title": "OpenbareRuimteNaam", "abstract": "De laag Openbareruimtenaam is een selectie op de openbare ruimte labels van de BGT met een bgt-status \"bestaand\" die een classificatie (openbareruimtetype) Weg en Water hebben.", "keywords": "Openbare ruimte naam", "dataset_metadata_id": "a29917b9-3426-4041-a11b-69bcb2256904", "dataset_source_id": "06b6c650-cdb1-11dd-ad8b-0800200c9a64", "layer_extent": "-25000 250000 280000 860000", "minscale": "50", "maxscale": "2001", "styles": [{"title": "Standaardvisualisatie", "path": "/styling/openbareruimtenaam.style"}, {"title": "Kwaliteitsvisualisatie", "path": "/styling/openbareruimtenaam_kwaliteit.style"}, {"title": "Printvisualisatie", "path": "/styling/openbareruimtenaam_print.style"}, {"title": "Standaardvisualisatie OpenbareRuimteNaam", "path": "/styling/openbareruimtenaam.group.style"}, {"title": "Kwaliteitsvisualisatie OpenbareRuimteNaam", "path": "/styling/openbareruimtenaam_kwaliteit.group.style"}, {"title": "Printvisualisatie OpenbareRuimteNaam", "path": "/styling/openbareruimtenaam_print.group.style"}]}, {"name": "Perceelvlak", "group_name": "Perceel", "gpkg_path": "/srv/data/gpkg/perceel.gpkg", "tablename": "perceel", "geometry_type": "Polygon", "columns": [{"name": "fuuid"}, {"name": "identificatie_namespace"}, {"name": "identificatie_lokaal_id", "alias": "identificatieLokaalID"}, {"name": "begin_geldigheid"}, {"name": "tijdstip_registratie"}, {"name": "volgnummer"}, {"name": "status_historie_code"}, {"name": "status_historie_waarde"}, {"name": "kadastrale_gemeente_code"}, {"name": "kadastrale_gemeente_waarde"}, {"name": "sectie"}, {"name": "akr_kadastrale_gemeente_code_code", "alias": "AKRKadastraleGemeenteCodeCode"}, {"name": "akr_kadastrale_gemeente_code_waarde", "alias": "AKRKadastraleGemeenteCodeWaarde"}, {"name": "kadastrale_grootte_waarde"}, {"name": "soort_grootte_code"}, {"name": "soort_grootte_waarde"}, {"name": "perceelnummer"}, {"name": "perceelnummer_rotatie"}, {"name": "perceelnummer_verschuiving_delta_x"}, {"name": "perceelnummer_verschuiving_delta_y"}, {"name": "perceelnummer_plaatscoordinaat_x"}, {"name": "perceelnummer_plaatscoordinaat_y"}], "title": "Perceelvlak", "abstract": "Een perceel is een stuk grond waarvan het Kadaster de grenzen heeft gemeten of gaat meten en dat bij het Kadaster een eigen nummer heeft. Een perceel is een begrensd deel van het Nederlands grondgebied dat kadastraal ge\u00efdentificeerd is en met kadastrale grenzen begrensd is.", "keywords": "Kadastrale percelen", "dataset_metadata_id": "a29917b9-3426-4041-a11b-69bcb2256904", "dataset_source_id": "06b6c650-cdb1-11dd-ad8b-0800200c9a64", "layer_extent": "-25000 250000 280000 860000", "minscale": "50", "maxscale": "6001", "styles": [{"title": "Standaardvisualisatie", "path": "/styling/perceelvlak.style"}, {"title": "Kwaliteitsvisualisatie", "path": "/styling/perceelvlak_kwaliteit.style"}, {"title": "Printvisualisatie", "path": "/styling/perceelvlak_print.style"}, {"title": "Standaardvisualisatie Perceel", "path": "/styling/perceelvlak.group.style"}, {"title": "Kwaliteitsvisualisatie Perceel", "path": "/styling/perceelvlak_kwaliteit.group.style"}, {"title": "Printvisualisatie Perceel", "path": "/styling/perceelvlak_print.group.style"}]}, {"name": "Label", "group_name": "Perceel", "gpkg_path": "/srv/data/gpkg/perceel_label.gpkg", "tablename": "perceel_label", "geometry_type": "Point", "columns": [{"name": "fuuid"}, {"name": "perceel_id", "alias": "perceelID"}, {"name": "perceelnummer"}, {"name": "rotatie"}, {"name": "verschuiving_delta_x"}, {"name": "verschuiving_delta_y"}], "title": "Label", "abstract": "Een perceel is een stuk grond waarvan het Kadaster de grenzen heeft gemeten of gaat meten en dat bij het Kadaster een eigen nummer heeft. Een perceel is een begrensd deel van het Nederlands grondgebied dat kadastraal ge\u00efdentificeerd is en met kadastrale grenzen begrensd is.", "keywords": "Kadastrale percelen", "dataset_metadata_id": "a29917b9-3426-4041-a11b-69bcb2256904", "dataset_source_id": "06b6c650-cdb1-11dd-ad8b-0800200c9a64", "layer_extent": "-25000 250000 280000 860000", "minscale": "50", "maxscale": "6001", "styles": [{"title": "Standaardvisualisatie", "path": "/styling/label.style"}, {"title": "Standaardvisualisatie Perceel", "path": "/styling/label.group.style"}, {"title": "Kwaliteitsvisualisatie", "path": "/styling/label_kwaliteit.style"}, {"title": "Kwaliteitsvisualisatie Perceel", "path": "/styling/label_kwaliteit.group.style"}, {"title": "Printvisualisatie", "path": "/styling/label_print.style"}, {"title": "Printvisualisatie Perceel", "path": "/styling/label_print.group.style"}]}, {"name": "Bijpijling", "group_name": "Perceel", "gpkg_path": "/srv/data/gpkg/perceel_bijpijling.gpkg", "tablename": "perceel_bijpijling", "geometry_type": "LineString", "columns": [{"name": "fuuid"}, {"name": "perceel_id", "alias": "perceelID"}], "title": "Bijpijling", "abstract": "Een perceel is een stuk grond waarvan het Kadaster de grenzen heeft gemeten of gaat meten en dat bij het Kadaster een eigen nummer heeft. Een perceel is een begrensd deel van het Nederlands grondgebied dat kadastraal ge\u00efdentificeerd is en met kadastrale grenzen begrensd is.", "keywords": "Kadastrale percelen", "dataset_metadata_id": "a29917b9-3426-4041-a11b-69bcb2256904", "dataset_source_id": "06b6c650-cdb1-11dd-ad8b-0800200c9a64", "layer_extent": "-25000 250000 280000 860000", "minscale": "50", "maxscale": "6001", "styles": [{"title": "Standaardvisualisatie", "path": "/styling/bijpijling.style"}, {"title": "Kwaliteitsvisualisatie", "path": "/styling/bijpijling_kwaliteit.style"}, {"title": "Printvisualisatie", "path": "/styling/bijpijling_print.style"}, {"title": "Standaardvisualisatie Perceel", "path": "/styling/bijpijling.group.style"}, {"title": "Kwaliteitsvisualisatie Perceel", "path": "/styling/bijpijling_kwaliteit.group.style"}, {"title": "Printvisualisatie Perceel", "path": "/styling/bijpijling_print.group.style"}]}, {"name": "KadastraleGrens", "gpkg_path": "/srv/data/gpkg/kadastrale_grens.gpkg", "tablename": "kadastrale_grens", "geometry_type": "LineString", "columns": [{"name": "fuuid"}, {"name": "begin_geldigheid"}, {"name": "tijdstip_registratie"}, {"name": "volgnummer"}, {"name": "status_historie_code"}, {"name": "status_historie_waarde"}, {"name": "identificatie_namespace"}, {"name": "identificatie_lokaal_id", "alias": "identificatieLokaalID"}, {"name": "type_grens_code"}, {"name": "type_grens_waarde"}, {"name": "classificatie_kwaliteit_code", "alias": "ClassificatieKwaliteitCode"}, {"name": "classificatie_kwaliteit_waarde", "alias": "ClassificatieKwaliteitWaarde"}, {"name": "perceel_links_identificatie_namespace"}, {"name": "perceel_links_identificatie_lokaal_id", "alias": "perceelLinksIdentificatieLokaalID"}, {"name": "perceel_rechts_identificatie_namespace"}, {"name": "perceel_rechts_identificatie_lokaal_id", "alias": "perceelRechtsIdentificatieLokaalID"}], "title": "KadastraleGrens", "abstract": "Een Kadastrale Grens is de weergave van een grens op de kadastrale kaart die door de dienst van het Kadaster tussen percelen (voorlopig) vastgesteld wordt, op basis van inlichtingen van belanghebbenden en met gebruikmaking van de aan de kadastrale kaart ten grondslag liggende bescheiden die in elk geval de landmeetkundige gegevens bevatten van hetgeen op die kaart wordt weergegeven.", "keywords": "Grens,Kadastrale grenzen", "dataset_metadata_id": "a29917b9-3426-4041-a11b-69bcb2256904", "dataset_source_id": "06b6c650-cdb1-11dd-ad8b-0800200c9a64", "layer_extent": "-25000 250000 280000 860000", "minscale": "50", "maxscale": "6001", "styles": [{"title": "Standaardvisualisatie", "path": "/styling/kadastralegrens.style"}, {"title": "Kwaliteitsvisualisatie", "path": "/styling/kadastralegrens_kwaliteit.style"}, {"title": "Printvisualisatie", "path": "/styling/kadastralegrens_print.style"}, {"title": "Standaardvisualisatie KadastraleGrens", "path": "/styling/kadastralegrens.group.style"}, {"title": "Kwaliteitsvisualisatie KadastraleGrens", "path": "/styling/kadastralegrens_kwaliteit.group.style"}, {"title": "Printvisualisatie KadastraleGrens", "path": "/styling/kadastralegrens_print.group.style"}]}]}` WMSTifConfig = `{"service_title": "Luchtfoto Labels WMS", "service_abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "service_keywords": "bzk,luchtfotolabels", "service_accessconstraints": "https://creativecommons.org/publicdomain/zero/1.0/deed.nl", "service_extent": "-25000 250000 280000 860000", "maxSize": "4000", "service_namespace_prefix": "luchtfotolabels", "service_namespace_uri": "http://luchtfotolabels.geonovum.nl", "service_onlineresource": "https://service.pdok.nl", "service_path": "/bzk/luchtfotolabels/wms/v1_0", "service_metadata_id": "70562932-e7dc-4ba2-ba4f-05863d02587c", "dataset_owner": "kadaster", "authority_url": "http://www.kadaster.nl", "automatic_casing": false, "data_epsg": "EPSG:28992", "epsg_list": ["EPSG:28992", "EPSG:25831", "EPSG:25832", "EPSG:3034", "EPSG:3035", "EPSG:3857", "EPSG:4258", "EPSG:4326", "CRS:84"], "templates": "/srv/data/config/templates", "outputformat_jpg": "jpg", "outputformat_png8": "png", "symbols": [], "group_layers": [{"name": "lufolabels", "title": "Luchtfoto labels", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "style_name": "luchtfotolabels", "style_title": "Luchtfotolabels"}], "layers": [{"name": "luchtfotoroads_100pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/100pixkm_luforoads.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto roads 100pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "24001", "maxscale": "48001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/roads.style"}]}, {"name": "luchtfotoroads_200pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/200pixkm_luforoads.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto roads 200pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "12001", "maxscale": "24001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/roads.style"}]}, {"name": "luchtfotoroads_400pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/400pixkm_luforoads.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto roads 400pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "6001", "maxscale": "12001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/roads.style"}]}, {"name": "luchtfotoroads_800pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/800pixkm_luforoads.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto roads 800pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "3001", "maxscale": "6001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/roads.style"}]}, {"name": "luchtfotoroads_1600pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/1600pixkm_luforoads.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto roads 1600pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "1501", "maxscale": "3001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/roads.style"}]}, {"name": "luchtfotolabels_100pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/100pixkm_lufolabels.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto labels 100pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "24001", "maxscale": "48001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/labels.style"}]}, {"name": "luchtfotolabels_200pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/200pixkm_lufolabels.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto labels 200pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "12001", "maxscale": "24001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/labels.style"}]}, {"name": "luchtfotolabels_400pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/400pixkm_lufolabels.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto labels 400pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "6001", "maxscale": "12001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/labels.style"}]}, {"name": "luchtfotolabels_800pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/800pixkm_lufolabels.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto labels 800pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "3001", "maxscale": "6001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/labels.style"}]}, {"name": "luchtfotolabels_1600pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/1600pixkm_lufolabels.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto labels 1600pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "minscale": "1501", "maxscale": "3001", "styles": [{"title": "Luchtfotolabels", "path": "/styling/labels.style"}]}, {"name": "luchtfotolabels_3200pixkm", "group_name": "lufolabels", "resample": "BILINEAR", "tif_path": "/srv/data/tif/3200pixkm_lufolabels.vrt", "geometry_type": "Raster", "offsite": "#978E97", "get_feature_info_includes_class": false, "title": "Luchtfoto labels 3200pixkm", "abstract": "De luchtfoto labels bestaan uit weglabels en wegassen en kunnen worden gebruikt als laag (overlay) op onder andere de PDOK luchtfoto.", "keywords": "bzk,luchtfotolabels", "dataset_metadata_id": "6ca22f53-b072-42f4-b920-104c7c83cd28", "dataset_source_id": "901647c2-802d-11e6-ae22-56b6b6499611", "layer_extent": "-25000 250000 280000 860000", "maxscale": "1501", "styles": [{"title": "Luchtfotolabels", "path": "/styling/labels.style"}]}]}` diff --git a/internal/controller/mapfilegenerator/mapper.go b/internal/controller/mapfilegenerator/mapper.go index 7d45f3b..d956c32 100644 --- a/internal/controller/mapfilegenerator/mapper.go +++ b/internal/controller/mapfilegenerator/mapper.go @@ -54,7 +54,7 @@ func MapWFSToMapfileGeneratorInput(wfs *pdoknlv3.WFS, ownerInfo *smoothoperatorv BaseServiceInput: BaseServiceInput{ Title: mapperutils.EscapeQuotes(wfs.Spec.Service.Title), Abstract: mapperutils.EscapeQuotes(wfs.Spec.Service.Abstract), - Keywords: strings.Join(wfs.Spec.Service.Keywords, ","), + Keywords: strings.Join(wfs.Spec.Service.KeywordsIncludingInspireKeyword(), ","), OnlineResource: pdoknlv3.GetHost(true), Path: mapperutils.GetPath(wfs), MetadataID: metadataID, @@ -176,7 +176,7 @@ func MapWMSToMapfileGeneratorInput(wms *pdoknlv3.WMS, _ *smoothoperatorv1.OwnerI BaseServiceInput: BaseServiceInput{ Title: service.Title, Abstract: service.Abstract, - Keywords: strings.Join(service.Keywords, ","), + Keywords: strings.Join(wms.Spec.Service.KeywordsIncludingInspireKeyword(), ","), Extent: extent, NamespacePrefix: datasetName, NamespaceURI: fmt.Sprintf("%s://%s.geonovum.nl", protocol, datasetName),