De GML output van de WFS geeft een boundingbox terug in de response, dus dat scheelt een bbox afleiden van een feature.
Zie hieronder een Python voorbeeld script voor het genereren van een GetMap url op basis van een WFS GetFeature response.
Input:
https://geodata.nationaalgeoregister.nl/kadastralekaart/wfs/v4_0?request=GetFeature&service=WFS&typenames=kadastralekaartv4:perceel&version=2.0.0&filter=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3EidentificatieLokaalID%3C/PropertyName%3E%3CLiteral%3E13040217570000%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Filter%3E
Geeft output:
https://geodata.nationaalgeoregister.nl/kadastralekaart/wms/v4_0?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=false&LAYERS=Perceelvlak,label&CRS=EPSG%3A28992&WIDTH=400&HEIGHT=495.84326643824795&BBOX=140986.204,470626.374,141009.275,470654.973
#!/usr/bin/env python3
import requests
from lxml import etree
lokaal_id="13040217570000"
getfeature_url=f"https://geodata.nationaalgeoregister.nl/kadastralekaart/wfs/v4_0?request=GetFeature&service=WFS&typenames=kadastralekaartv4:perceel&version=2.0.0&filter=%3CFilter%3E%3CPropertyIsEqualTo%3E%3CPropertyName%3EidentificatieLokaalID%3C/PropertyName%3E%3CLiteral%3E{lokaal_id}%3C/Literal%3E%3C/PropertyIsEqualTo%3E%3C/Filter%3E"
print(f"GetFeature URL: {getfeature_url}")
response = requests.get(getfeature_url)
nsmap = {'gml': 'http://www.opengis.net/gml/3.2',"wfs":"http://www.opengis.net/wfs/2.0"}
root = etree.XML(response.content)
lc = next(iter(root.xpath('//wfs:boundedBy/gml:Envelope/gml:lowerCorner/text()', namespaces=nsmap)),None) # xpath returns list, get first item or None if empty
uc = next(iter(root.xpath('//wfs:boundedBy/gml:Envelope/gml:upperCorner/text()', namespaces=nsmap)),None)
bbox_string = [*lc.split(" "), *uc.split(" ")] # unpack lists and combine in new list with * operator
bbox=[float(x) for x in bbox_string]
bbox_pad = [bbox[0]-5,bbox[1]-5,bbox[2]+5,bbox[3]+5] # add 5 meter padding to bounds
d_x = bbox_pad[2] - bbox_pad[0]
d_y = bbox_pad[3] - bbox_pad[1]
width=400 # restrict width getmap request to 400px, and calculate height based on that
height=(width/d_x)*d_y
bbox_pad_string = ",".join([str(x) for x in bbox_pad])
getmap_url = f"https://geodata.nationaalgeoregister.nl/kadastralekaart/wms/v4_0?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=false&LAYERS=Perceelvlak,label&CRS=EPSG%3A28992&WIDTH={width}&HEIGHT={height}&BBOX={bbox_pad_string}"
print(f"GetMap URL: {getmap_url}")