Skip to content

Commit 83900f8

Browse files
committed
Worked out parts of wms input
1 parent c73ac04 commit 83900f8

File tree

3 files changed

+90
-10
lines changed

3 files changed

+90
-10
lines changed

api/v3/wms_types.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ SOFTWARE.
2525
package v3
2626

2727
import (
28+
"fmt"
2829
"maps"
2930
"slices"
3031
"sort"
32+
"strings"
3133

3234
shared_model "github.com/pdok/smooth-operator/model"
3335
autoscalingv2 "k8s.io/api/autoscaling/v2"
@@ -112,6 +114,29 @@ type WMSBoundingBox struct {
112114
BBox shared_model.BBox `json:"bbox"`
113115
}
114116

117+
func (wmsBoundingBox *WMSBoundingBox) ToExtent() string {
118+
bbox := wmsBoundingBox.BBox
119+
return strings.Trim(fmt.Sprintf("%s %s %s %s", bbox.MinX, bbox.MinY, bbox.MaxX, bbox.MaxY), " ")
120+
}
121+
122+
func (wmsBoundingBox *WMSBoundingBox) Combine(other *WMSBoundingBox) {
123+
if wmsBoundingBox.CRS != other.CRS {
124+
return
125+
}
126+
if other.BBox.MinX < wmsBoundingBox.BBox.MinX {
127+
wmsBoundingBox.BBox.MinX = other.BBox.MinX
128+
}
129+
if other.BBox.MaxX > wmsBoundingBox.BBox.MaxX {
130+
wmsBoundingBox.BBox.MaxX = other.BBox.MaxX
131+
}
132+
if other.BBox.MinY < wmsBoundingBox.BBox.MinY {
133+
wmsBoundingBox.BBox.MinY = other.BBox.MinY
134+
}
135+
if other.BBox.MaxY > wmsBoundingBox.BBox.MaxY {
136+
wmsBoundingBox.BBox.MaxY = other.BBox.MaxY
137+
}
138+
}
139+
115140
type Authority struct {
116141
Name string `json:"name"`
117142
URL string `json:"url"`
@@ -163,6 +188,42 @@ func init() {
163188
SchemeBuilder.Register(&WMS{}, &WMSList{})
164189
}
165190

191+
func (wmsService *WMSService) GetBoundingBox() WMSBoundingBox {
192+
var boundingBox *WMSBoundingBox
193+
194+
allLayers := wmsService.GetAllLayers()
195+
for _, layer := range allLayers {
196+
if layer.BoundingBoxes != nil && len(layer.BoundingBoxes) > 0 {
197+
for _, bbox := range wmsService.Layer.BoundingBoxes {
198+
if boundingBox == nil {
199+
boundingBox = &bbox
200+
} else {
201+
boundingBox.Combine(&bbox)
202+
}
203+
}
204+
}
205+
}
206+
207+
if boundingBox != nil {
208+
return *boundingBox
209+
} else {
210+
return WMSBoundingBox{
211+
CRS: "EPSG:28992",
212+
BBox: shared_model.BBox{
213+
MinX: "-25000",
214+
MaxX: "250000",
215+
MinY: "280000",
216+
MaxY: "860000",
217+
},
218+
}
219+
}
220+
221+
}
222+
223+
func (wmsService *WMSService) GetAllLayers() (layers []Layer) {
224+
return wmsService.Layer.GetAllLayers()
225+
}
226+
166227
func (layer *Layer) GetAllLayers() (layers []Layer) {
167228
layers = append(layers, *layer)
168229
if layer.Layers != nil {

internal/controller/mapfilegenerator/mapfile_generator_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ const (
8787
}
8888
]
8989
}`
90-
WMSConfig = `{"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"}]}]}`
90+
WMSConfig = `{"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"}]}]}`
9191
)
9292

9393
func TestGetConfigForWFS(t *testing.T) {
@@ -251,7 +251,7 @@ func TestGetConfigForWMS(t *testing.T) {
251251
var wms pdoknlv3.WMS
252252
v2beta1.V3HubFromV2(&v2wms, &wms)
253253

254-
pdoknlv3.SetHost("http://localhost")
254+
pdoknlv3.SetHost("https://service.pdok.nl")
255255

256256
inputStruct, err := MapWMSToMapfileGeneratorInput(&wms, ownerInfo)
257257
assert.NoError(t, err)

internal/controller/mapfilegenerator/mapper.go

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -90,26 +90,45 @@ func getGeopackagePath(data pdoknlv3.Data) *string {
9090
func MapWMSToMapfileGeneratorInput(wms *pdoknlv3.WMS, ownerInfo *smoothoperatorv1.OwnerInfo) (WMSInput, error) {
9191
service := wms.Spec.Service
9292

93+
accessConstraints := service.AccessConstraints
94+
if accessConstraints == "" {
95+
accessConstraints = "https://creativecommons.org/publicdomain/zero/1.0/deed.nl"
96+
}
97+
98+
owner := wms.ObjectMeta.Labels["dataset-owner"]
99+
datasetName := wms.ObjectMeta.Labels["dataset"]
100+
protocol := "http"
101+
authority := wms.GetAuthority()
102+
authorityUrl := ""
103+
if authority != nil {
104+
authorityUrl = authority.URL
105+
}
106+
107+
box := service.GetBoundingBox()
108+
extent := box.ToExtent()
109+
110+
epsgs := []string{"EPSG:28992", "EPSG:25831", "EPSG:25832", "EPSG:3034", "EPSG:3035", "EPSG:3857", "EPSG:4258", "EPSG:4326", "CRS:84"}
111+
93112
result := WMSInput{
94113
BaseServiceInput: BaseServiceInput{
95114
Title: service.Title,
96115
Abstract: service.Abstract,
97116
Keywords: strings.Join(service.Keywords, ","),
98-
Extent: "-25000 250000 280000 860000",
99-
NamespacePrefix: "prefix",
100-
NamespaceURI: fmt.Sprintf("https://%s.geonovum.nl", wms.ObjectMeta.Labels["dataset"]),
117+
Extent: extent,
118+
NamespacePrefix: datasetName,
119+
NamespaceURI: fmt.Sprintf("%s://%s.geonovum.nl", protocol, datasetName),
101120
OnlineResource: pdoknlv3.GetHost(),
102121
Path: mapperutils.GetPath(wms),
103122
MetadataId: "onbekend",
104-
DatasetOwner: smoothoperatorutils.Pointer("onbekend"),
105-
AuthorityURL: smoothoperatorutils.Pointer("onbekend"),
123+
DatasetOwner: &owner,
124+
AuthorityURL: &authorityUrl,
106125
AutomaticCasing: wms.Spec.Options.AutomaticCasing,
107126
DataEPSG: service.DataEPSG,
108-
EPSGList: []string{service.DataEPSG},
127+
EPSGList: epsgs,
109128
},
110-
AccessConstraints: service.AccessConstraints,
129+
AccessConstraints: accessConstraints,
111130
Layers: []WMSLayer{},
112-
Templates: "onbekend",
131+
Templates: "/src/data/config/templates",
113132
}
114133

115134
return result, nil

0 commit comments

Comments
 (0)