Polygonen uit BRK in Python

Beste,

Ik ben nieuw rond het werken met geodata in Python. Met de tools rond de API is het gelukt om een script te schrijven dat automatisch (een deel van) het BRK te downloaden. (PDOK API - Swagger UI )

Dat levert een zip bestand op met de volgende features:

  • kadastralegrens
  • kwaliteit
  • openbareruimtelabel
  • pand
  • perceel

Graag zou ik een lijst met polygonen krijgen van de percelen. maar als ik met geopandas de het bestand met de percelen open, krijg ik een geodataframe object met punten in plaats van polygonen.

Het kadastralegrens.gml bestand lijkt belovend en de grenzen zien er normaal uit, maar dat bestaat weer uit linestrings, en als ik deze polygonizeer, gaat dat niet altijd goed, omdat soms ingesloten ruimtes ingesloten door andere perceelgrenzen ingesloten worden en voor een perceel worden aangezien.

import geopandas as gpd 
from zipfile import ZipFile

z = ZipFile("data/downloads/kadaster.zip")
kadaster_grens = gpd.read_file(z.open("kadastralekaart_kadastralegrens.gml"))
kadaster_perceel = gpd.read_file(z.open("kadastralekaart_perceel.gml"))

Screenshot 2025-03-03 175113

Is het de bedoeling dat de gebruiker zelf polygonen maakt van deze dataset, bijvoorbeeld door linestrings van de kadastrale begrenzing te polygoniseren en dan te combineren met punten van de perceellaag? Gaat er iets mis bij hoe ik de data inlaad met geopandas? Moet ik eigenlijk een ander bestand downloaden?

Na wat zoeken kwam ik een ander topic tegen ( Polygonen uit de WFS - Datasets / BRK - Geoforum), maar deze oplossing (lijkt mij) voor QGIS. Graag zou ik het in Python afhandelen om het proces te automatiseren.

1 like

Beste afnemer… cool om te zien dat je aan de slag bent met deze open data. Weet even dat we bezig zijn met realisatie van de DKK in OGC API’s zoals bijvoorbeeld nu ook al staat voor de basisregistratie topografie: BRT TOP10NL (OGC API). Ik zou je willen adviseren het geoforum in de gaten te houden want ik veronderstel dat we binnen afzienbare tijd hierover meer kunnen delen.

1 like

Je kunt heel eenvoudig percelen als polygonen ophalen als je gebruik maakt van de WFS. Persoonlijk geef ik daar ook de voorkeur aan, vooral als je alleen een simpele bounding box als zoek-filter gebruikt (wat ik opmaak uit jouw screenshot - corrigeer me als dat anders is, een filter op perceelnummer of zo is ook niet heel erg ingewikkeld. Het enige waar je voor moet oppassen is dat de WFS gelimiteerd is, dus als je bounding box teveel percelen bevat, dan moet je het resultaat in meerdere requests ophalen. Op zich ook niet heel erg lastig, overigens. Maar zoiets als dit:

https://service.pdok.nl/kadaster/kadastralekaart/wfs/v5_0?
service=WFS&
version=2.0.0&
request=GetFeature&
typeName=kadastralekaart:Perceel&
bbox=132723,517836,132759,517889

in een eenvoudig GET-request, geeft je een aantal polygonen in GML (14 om precies te zijn). Eventueel kun je nog de outputFormat parameter toevoegen, met als mogelijke waarden:

  • 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

voor als je liever met Json werkt (mijn persoonlijke voorkeur - GML is nogal bloated…). Moet m.i. niet zo lastig zijn om dit in python te doen…

1 like

Beste Stefan,

Bedankt voor het advies! Het gebruiken van de WFS was makkelijk te implementeren, en prima geschikt voor kleinere bounding boxes zoals ik gebruik. Met startIndex was het eenvoudig om de polygonen te chunken en in stappen van duizend ze allemaal op te halen.

Uiteindelijk ben ik voor bag:pand gegaan. Deze heeft alleen polygonen van de panden, en dat kwam bij nader inzien meer overeen met mijn gebruiksbehoefte dan de gehele percelen waar ik eerst op aasde.

Was inderdaad minder lastig dan ik dacht!

1 like