Bestuurlijke grenzen WFS: Gemeentes bevragen op Code geeft niet altijd resultaat

Als ik via OWMS de gemeentes ophaal, dan is het erg handig om op basis van de gemeentecode via de WFS de geometrie er bij te halen. Op die manier kan ik altijd de correcte gemeentegrenzen hanteren. Helaas gaat dat niet volledig geautomatiseerd zonder ingrepen en workarounds. Bij nogal wat gementen komt er bij filter op code niks terug (terwijl die gemeente met exact dezelfde code wel via de WMS terug te vinden is). Een paar voorbeeldjes:
De gemeente Hengelo in Overijssel met code0164:

https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/wfs?service=WFS&version=2.0.0&request=GetFeature&typename=gemeenten&Filter=<fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0"><fes:PropertyIsEqualTo><fes:PropertyName>code</fes:PropertyName><fes:Literal>0164</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>

geeft dit als resultaat:

<wfs:FeatureCollection numberMatched="0" numberReturned="0" timeStamp="2021-02-02T14:20:07.289Z" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://bestuurlijkegrenzen.geonovum.nl https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/wfs?service=WFS&version=2.0.0&request=DescribeFeatureType&typeName=bestuurlijkegrenzen%3Agemeenten http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>

Als ik 'm ophaal via de naam:

https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/wfs?service=WFS&version=2.0.0&request=GetFeature&typename=gemeenten&Filter=<fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0"><fes:PropertyIsEqualTo><fes:PropertyName>gemeentenaam</fes:PropertyName><fes:Literal>Hengelo (O)</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>

<wfs:FeatureCollection numberMatched="1" numberReturned="1" timeStamp="2021-02-02T14:21:32.824Z" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://bestuurlijkegrenzen.geonovum.nl https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/wfs?service=WFS&version=2.0.0&request=DescribeFeatureType&typeName=bestuurlijkegrenzen%3Agemeenten http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd">
    <wfs:member>
    <bestuurlijkegrenzen:gemeenten gml:id="gemeenten.326">
    <bestuurlijkegrenzen:code>0164</bestuurlijkegrenzen:code>
    <bestuurlijkegrenzen:gemeentenaam>Hengelo (O)</bestuurlijkegrenzen:gemeentenaam>
    <bestuurlijkegrenzen:geom>

Zie vooral het veld code…
en de naburige gemeente Dinkelland lukt wel via de code:

https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/wfs?service=WFS&version=2.0.0&request=GetFeature&typename=gemeenten&Filter=<fes:Filter xmlns:fes="http://www.opengis.net/fes/2.0"><fes:PropertyIsEqualTo><fes:PropertyName>code</fes:PropertyName><fes:Literal>1774</fes:Literal></fes:PropertyIsEqualTo></fes:Filter>

<wfs:FeatureCollection numberMatched="1" numberReturned="1" timeStamp="2021-02-02T14:23:12.794Z" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://bestuurlijkegrenzen.geonovum.nl https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/wfs?service=WFS&version=2.0.0&request=DescribeFeatureType&typeName=bestuurlijkegrenzen%3Agemeenten http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd">
<wfs:member>
<bestuurlijkegrenzen:gemeenten gml:id="gemeenten.62">
<bestuurlijkegrenzen:code>1774</bestuurlijkegrenzen:code>
<bestuurlijkegrenzen:gemeentenaam>Dinkelland</bestuurlijkegrenzen:gemeentenaam>
<bestuurlijkegrenzen:geom>

En het probleem met de naam is natuurlijk die Hengelo (O), als je de waarde uit OWMS haalt, is het gewoon netjes Hengelo, dus ik krijg het wel voor elkaar: maar dan moet ik weer Hengelo er uit filteren en daar een workaround voor maken…
Er zijn er 265 waar het niet op de Code lukt. Op Naam lukt het bij de meeste wel, behalve Haaren en Eemsdelta, maar Haaren is per 01-01-2021 vervallen, en Eemsdelta is per 01-01-2021 nieuw, dus da’s niet zo vreemd (wel jammer, want die twee waren de aanleiding voor mij om de zaak opnieuw aan te maken, maar ja, je kunt niet alles hebben :wink: ).

Overigens zie ik vergelijkbare vragen c.q. opmerkingen over dit soort akkefietjes vaker terugkomen hier, maar het feit dat de WFS op het attribuut code soms wel en soms niet iets terug geeft, terwijl de gezochte waarde wel degelijk voorkomt in de dataset, vind ik opmerklijk genoeg om er toch een post aan te wijden.

Er staat mij vaag iets bij dat de voorloop nul in de code hier het struikelpunt is. Opvragen op code 164 i.p.v. 0164 helpt daarbij helaas niet.

Hmmmm… nou je het zegt, dat doet wel ergens een belletje rinkelen ja. Zal eens kijken of dat inderdaad het geval is. Bij de voorbeelden die ik eerder gaf klopt het in ieder geval wel. Is wel raar overigens, want dat betekent dat de code opgeslagen is als een getal - maar dat het opzoeken met een string gebeurt (= datatype mismatch).

Maar ja, er zijn zoveel dingen raar aan dit hele gebeuren: je wil niet weten hoeveel workarounds in het script zitten waarmee ik gemeenten, provincies en waterschappen ophaal uit OWMS en DPOK…

Yup. Dat lijkt inderdaad het probleem te zijn. Alle codes die niet met 0 beginnen krijg ik een resultaat terug, alles dat met een 0 begint levert dit op:

<?xml version="1.0" encoding="UTF-8"?><wfs:FeatureCollection xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:bestuurlijkegrenzen="http://bestuurlijkegrenzen.geonovum.nl" xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" numberMatched="0" numberReturned="0" timeStamp="2021-02-04T09:15:51.499Z" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd http://bestuurlijkegrenzen.geonovum.nl https://geodata.nationaalgeoregister.nl/bestuurlijkegrenzen/wfs?service=WFS&amp;version=2.0.0&amp;request=DescribeFeatureType&amp;typeName=bestuurlijkegrenzen%3Agemeenten http://www.opengis.net/gml/3.2 http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>

Beste @sbjager

Een workaround voor dit issue is om een POST request te doen ipv een GET request. De body is dan als volgt:

<wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs" service="WFS" version="1.1.0" outputFormat="GML3" maxFeatures="1000" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
  <wfs:Query typeName="bestuurlijkegrenzen:gemeenten" srsName="EPSG:28992" xmlns:feature="http://bestuurlijkegrenzen.geonovum.nl">
     <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
       <ogc:PropertyIsEqualTo matchCase="true">
         <ogc:PropertyName>code</ogc:PropertyName>
          <ogc:Literal>0164</ogc:Literal>
        </ogc:PropertyIsEqualTo>
      </ogc:Filter>
   </wfs:Query>
</wfs:GetFeature>

Nee, dat meen je niet… dat werkt inderdaad wel. Dat is toch van de zotte…

Maar goed, ik heb weer een workaround verzameld voor het lijstje workarounds! Alleen jammer dat de Bestuurlijke Grenzen WFS nu nog achterloopt, Haaren, Loppersum, Delfzijl en Appingedam zijn sinds 01-01-2021 vervallen, en de laatste 3 zijn opgegaan in 1979 - Eemsdelta, terwijl 0788 - Haaren is opgegaan in de omliggende gemeenten. Eemsdelta kan ik nog reconstrueren door de andere 3 te aggregeren, maar Haaren blijft een gat helaas. Wat betekent dat mijn Covid-kaart een gat heeft (daarvoor gebruik ik OWMS en de WFS: om daarmee gemeentes en veiligheidsregio’s op de kaart te kunnen zetten).

@sbjager we verwachten de definitieve bestuurlijke grenzen over niet al te lange tijd aangeleverd krijgen zodat we deze kunnen verwerken in de WMS en WFS.

Nog een kleine toevoeging: er zijn al wel voorlopige bestuurlijke grenzen voor 2021 als download beschikbaar.

Zie: Bestuurlijke Grenzen ATOM

1 like

@sbjager de bestuurlijke grenzen services zijn bijgewerkt.

1 like

:smiley: Ja, ik had het gister al gezien, dankjewel!

1 like