Lijst percelen ophalen met Kadaster WFS

Beste mede PDOK gebruikers,

Ik kan via de WFS met een filter een enkel perceel ophalen uit de PDOK Kadaster WFS met de volgende request:

https://service.pdok.nl/kadaster/kadastralekaart/wfs/v5_0?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=kadastralekaart:Perceel&FILTER=AKRKadastraleGemeenteCodeWaardeBEK00sectieBperceelnummer4400

Hier krijg ik prima een perceel mee terug. Dit is ook aan te passen naar enkel een gemeentecode om alle percelen voor een gemeente binnen te halen. Dit werkt voor ons tot nu toe prima.

Hoe zit het echter als ik een specifieke lijst met percelen wil opvragen (zeg 200 stuks) verdeeld over meerdere gemeentecodes.
Ik kan 200 losse requests achter elkaar aan doen om de percelen 1 voor 1 binnen te halen, maar er zal vast een handiger manier zijn (en legt dit niet ook een te zware last op de server bijvoorbeeld als je dit te veel doet?).

Hallo Jeroen,

welkom op het Geoforum!

Dat hangt er een beetje van af. Zijn het willekeurige percelen, of is het een gebied of strook waarvan je de percelen wil ophalen? Want je kunt aan een WFS vragen “geef mij alle percelen die deze polygoon of deze lijn raken/overlappen/doorsnijden”. Je filter word dan wat anders opgebouwd.

Hoi Jeroen,
Kunt u aangeven hoe u het filter op perceelnummer toepast? De URL van uw verzoek lijkt onjuist te zijn opgemaakt. Kunt u alstublieft de volledige URL opschrijven die u met filters heeft geprobeerd? Momenteel hebben wij een probleem met hen. Misschien kan uw voorbeeld ons duidelijk maken wat er mis is met ons verzoek.
Alvast bedankt,
Mo

Hallo Stefan, dank voor het welkom!

Beide situaties komen voor.
Dus zowel het opgeven van een polygoon en dan alle percelen die het vlak doorsnijden opvragen.
Als een lijst met percelen die ruimtelijk gezien niet naast elkaar liggen, waarbij bovenstaande dus niet handig is. Over deze laatste heb ik ook even contact gehad met het kadaster zelf en die geven aan dat 200 losse requests voor 1 perceel in principe geen probleem zou moeten zijn. Voor nu los ik dat op die manier op.

Hoe zou ik de request echter moeten opbouwen als ik hem wil bevragen obv een polygoon en de doorkruisende percelen wil ophalen? Ik neem aan dat ik de coördinaten van het polygoon als lijst moet meegeven? Kan dit in dezelfde filter? Of moet ik hier een ander commando voor meegeven?

Hoi Mo,

Het lijkt erop dat het forum mijn link aanpast als ik deze als quote markeer, heel apart, helaas zie ik geen optie om die post aan te passen. Hier de correcte URL die werkt om een enkel perceel op te halen, hopelijk heb je er iets aan

https://service.pdok.nl/kadaster/kadastralekaart/wfs/v5_0?request=GetFeature&service=WFS&version=2.0.0&outputFormat=application/json&typeName=kadastralekaart:Perceel&filter=<Filter><And><PropertyIsEqualTo><PropertyName>AKRKadastraleGemeenteCodeWaarde</PropertyName><Literal>BEK00</Literal></PropertyIsEqualTo><PropertyIsEqualTo><PropertyName>sectie</PropertyName><Literal>B</Literal></PropertyIsEqualTo><PropertyIsEqualTo><PropertyName>perceelnummer</PropertyName><Literal>4400</Literal></PropertyIsEqualTo></And></Filter>

Hartelijk dank Jeroen :pray: het heeft zeker geholpen

1 like

Hoi Jeroen,

Omdat de link die je plaatste tags bevat (de xml van het filter) word dat door de forum-software geinterpreteerd als html, daardoor verdwijnen dat soort tags vaak. Dat is te voorkomen door de tekst in de forum-editor te markeren als “Vooraf opgemaakte tekst”:
image

Om uit een WFS objecten op te halen aan de hand van hun locatie, moet je een aantal dingen weten uit de WFS Capabilties. Namelijk wat de attribuutnaam is van de geometrie, voor de feature kadastralekaart:Perceel is dat geom. En dan kun je je filter als volgt opbouwen:

<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
<ogc:Overlaps>
<ogc:PropertyName>geom</ogc:PropertyName>
<gml:Polygon srsName="28992">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates>
154104.71 462737.50,
154104.71 462847.71,
154310.00 462847.71,
154310.00 462737.50,
154104.71 462737.50,
</gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</ogc:Overlaps>
</ogc:Filter>

De complete URL word daarmee:

https://service.pdok.nl/kadaster/kadastralekaart/wfs/v5_0?service=WFS&version=2.0.0&request=GetFeature&typename=kadastralekaart:Perceel&outputFormat=json&filter=<ogc:Filter xmlns:ogc="http://www.opengis.net/ogc"><ogc:Overlaps><ogc:PropertyName>geom</ogc:PropertyName><gml:Polygon srsName="28992"><gml:outerBoundaryIs><gml:LinearRing><gml:coordinates>154104.71 462737.50,154104.71 462847.71,154310.00 462847.71,154310.00 462737.50,154104.71 462737.50</gml:coordinates></gml:LinearRing></gml:outerBoundaryIs></gml:Polygon></ogc:Overlaps></ogc:Filter>

Ik heb hier een simpel rechthoekje genomen om de locatie heen waar ik nu zit, en gevraagd om alle percelen die dat rechthoekje overlappen. Uit de Capabilities kun je halen welke operators ondersteund worden, in dit geval is het het volgende lijstje:

  • Equals
  • Disjoint
  • Touches
  • Within
  • Overlaps
  • Crosses
  • Intersects
  • Contains
  • DWithin
  • Beyond
  • BBOX

En ik heb gevraagd om (geo)json, maar de volgende outputformaten worden ondersteund:

  • application/gml+xml; version=3.2
  • text/xml; subtype=gml/3.2.1
  • text/xml; subtype=gml/3.1.1
  • application/json; subtype=geojson
  • application/json

Ook weer uit de Capabilities te halen :wink:

In totaal levert me dat 14 percelen op:

{
"type": "FeatureCollection",
"numberMatched": 14,
"name": "Perceel",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:EPSG::28992" } },
"features": [
{ "type": "Feature", <snip>

En inderdaad, voor een losse lijst percelen zonder verdere samenhang zul je voor elk perceel een request moeten doen - maar als het een redelijk beperkt gebied is, kun je ook de Download Viewer proberen. Is een beetje afhankelijk van of dit geautomatiseerd moet zijn, of dat het telkens om eenmalige acties gaat. Soms kan het voor een eenmalige actie sneller zijn om een bak percelen te downloaden, en met QGis of wat je ook gebruikt daar je filter op los te laten (koppelen met een excelletje bijvoorbeeld).

1 like

Dank voor deze zeer uitgebreide toelichting, en de nadere toelichting hoe ik de tags goed kan weergeven in een post! Hiermee gaat het lukken.

Nog een vraag, je geeft aan dat de attribuutnaam voor Perceel ‘geom’ is. Ik zie dit echter niet terugkomen in de WFS Capabilties.
Waar kan ik dit vinden (voor als ik in de toekomst tegen een vergelijkbare situatie aanloop met een andere WFS)?

‘geom’ is een attribuut van het object Perceel. Welke attributen er bij een object horen krijg je te zien met 'describeFeatureType:
https://service.pdok.nl/kadaster/kadastralekaart/wfs/v5_0?request=DescribeFeaturetype&typeName=kadastralekaart:Perceel&service=WFS&version=1.1.0

1 like

Met een WFS moet je per featuretype de attributen bekijken. Je ziet in het Operations-gedeelte de tag

<ows:Operation name="DescribeFeatureType">

Daarmee kun je een beschrijving van een featuretype ophalen, dus bijvoorbeeld:

https://service.pdok.nl/kadaster/kadastralekaart/wfs/v5_0?request=DescribeFeatureType&service=wfs&version=2.0.0&typename=kadastralekaart:Perceel

Zelf heb ik ooit eens met PHP een webpagina gemaakt die dat automatisch voor me doet, maar als je 't handmatig doet, moet je dus eigenlijk 2 requests doen: eerst de Capabilities ophalen, en daarna het featuretype waarin je geïnteresseerd bent ophalen.
De Geoserver documentatie heeft wel een goed hoofdstuk over WFS: WFS reference.

2 likes