VRAAG: Hoe SPARQL gebruiken om kadastrale informatie te exporteren naar Excel?

Is het ook mogelijk om de OpenData van het Kadaster middels een filtering te exporteren naar Excel? Momenteel ben ik bijvoorbeeld geïnteresseerd in alle kadastrale objecten in een gemeente van een specifieke omvang. Momenteel zie ik vooral GIS oplossingen die de informatie weergeven in kaarten.

Inmiddels heb ik gezien dat je met behulp van SPARQL queries kunt uitvoeren op de dataset.

Een voorbeeld query heb ik inmiddels gevonden om percelen op te vragen uit de gemeente Terneuzen.

PREFIX brk: <http://brk.basisregistraties.overheid.nl/def/brk#>
SELECT ?x WHERE {
 ?x a brk:Perceel.
 ?x brk:kadastraleGemeente <http://brk.basisregistraties.overheid.nl/id/begrip/TNZ00>
}
LIMIT 100

Waar ik graag wat hulp bij kan gebruiken is het volgende:

  • Hoe weet ik welke velden ik kan selecteren in de SELECT?
  • Hoe kan ik vervolgens filteren op gemeente?
  • Hoe kan ik vervolgens filteren op perceelomvang (zeg >0 en < 50)

Hoop dat jullie mij kunnen helpen met deze vraag.

Dag Ruben,

Met SPARQL is het inderdaad mogelijk dit te doen. Ik heb even wat queries voor je uitgezocht om hier een kleine opzet voor te geven gebaseerd op het voorbeeld wat je aanhaalt. Hiervoor heb ik de YASGUI interface gebruikt (SPARQL editor knop op de website), maar het is voor een excel eindresultaat denk ik makkelijker om het met Postman te automatiseren. Dan kun je rechtstreeks een CSV download krijgen en paginering gebruiken in de query (LIMIT en OFFSET).

Om te beginnen met je eerste vraag heb ik eerst de query omgebouwd naar een CONSTRUCT query. Hierdoor krijg je direct de linked data terug en zijn relaties wat beter zichtbaar:

PREFIX brk: <http://brk.basisregistraties.overheid.nl/def/brk#>
CONSTRUCT {
  ?x ?p ?o
}
WHERE {
  ?x a brk:Perceel.
  ?x brk:kadastraleGemeente <http://brk.basisregistraties.overheid.nl/id/begrip/TNZ00> .
  ?x ?p ?o .
}
LIMIT 100

Dit levert de volgende triples op:

Dat betekent dat we a.d.h.v. het predicaat brk:kadastraleGrootte de grootte van het perceel op kunnen vragen. Hiermee is het dus mogelijk om te filteren op het resultaat door et volgende toe te voegen in de where clause:

?x brk:kadastraleGrootte ?grootte
filter( ?grootte < 50.0 )

Hierna krijgen we inderdaad percelen terug met een kadastrale grootte kleiner dan 50:

Uiteindelijk willen we in principe alleen het perceelnummer en eventueel de grootte terug wat we kunnen doen door er weer een SELECT query van te maken.

PREFIX brk: <http://brk.basisregistraties.overheid.nl/def/brk#>
SELECT ?x ?grootte
WHERE {
  ?x a brk:Perceel.
  ?x brk:kadastraleGemeente <http://brk.basisregistraties.overheid.nl/id/begrip/TNZ00> .
  ?x brk:kadastraleGrootte ?grootte .
  filter( ?grootte < 50.0 ) .
}
LIMIT 100

Hieruit krijgen we netjes een tabel met de percelen uit Terneuzen met een oppervlak kleiner dan 50:

Als we hier in Excel dingen mee willen doen is het handig om hier wat data aan toe te voegen (zoals de gemeente naam). Ik hiervoor het statement ?x brk:kadastraleGemeente/rdfs:label ?gemeente . toegevoegd in de WHERE clause en ?gemeente toegevoegd aan de SELECT. hierdoor filteren we niet meer op gemeente maar vragen we de gemeente naam op.


Als je dit dan in excel hebt kun je daar dan zelf op sorteren of filteren.

YASGUI heeft de mogelijkheid om een CSV download van het resultaat te geven (knopje met pijltje naar beneden).

De uiteindelijke query die ik gebruikt heb is:

PREFIX brk: <http://brk.basisregistraties.overheid.nl/def/brk#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?gemeente ?x ?grootte
WHERE {
  ?x a brk:Perceel.
  ?x brk:kadastraleGemeente/rdfs:label ?gemeente .
  ?x brk:kadastraleGrootte ?grootte .
  filter( ?grootte < 50.0 ) .
}
LIMIT 100

Als je met postman aan de slag gaat kun je deze URL gebruiken: https://data.pdok.nl/sparql?query=PREFIX%20brk%3A%20<http%3A%2F%2Fbrk.basisregistraties.overheid.nl%2Fdef%2Fbrk%23> PREFIX%20rdfs%3A%20<http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23> SELECT%20%3Fgemeente%20%3Fx%20%3Fgrootte WHERE%20{ %20%20%3Fx%20a%20brk%3APerceel. %20%20%3Fx%20brk%3AkadastraleGemeente%2Frdfs%3Alabel%20%3Fgemeente%20. %20%20%3Fx%20brk%3AkadastraleGrootte%20%3Fgrootte%20. %20%20filter(%20%3Fgrootte%20<%2050.0%20)%20. } LIMIT%20100%20OFFSET%20100

Met de accept header text/csv komt daar dan CSV uit. Als je query parameter bekijkt is dat stiekem gewoon de query maar dan encoded. Met postman kun je de decoding ook weer doen (select parameter waarde, rechtsklik, decodeURIcomponent. Dan zul je ziet dat de laatste waarde een offset meegeeft van 100. Daarmee vraag je dus feitelijk pagina 2 op van de resultaten. Deze zou je programatisch op kunnen hogen met de grootte van LIMIT en dan kun je over de hele resultset loopen zonder noemenswaardige performance impact. Pagina groottes hoger dan 100 is sterk af te raden.

2 likes

Voor de volledigheid wil ik je wel nog even hier op wijzen:

De BRK-DKK REST API serveert data die 3 - 4 jaar oud is. En de geplande dagelijkse updates die @jasperroes in bovenstaand topic noemt, zijn nog steeds niet gerealiseerd.

1 like

Wow, wat een uitwerking en fijn dat je het zo gefaseerd hebt beschreven. Dit sluit precies aan bij de vragen die ik heb. De reden dat ik het op deze manier heb gevraagd is dat ik op zoek ben naar:

  • Kleine kavels per gemeente;
  • Snippergroen kavels per gemeente.

Deze inzicht moet helpen om gemeenten ondersteuning te bieden bij het verkopen van snippergroen. Helaas is niet te achterhalen per kavel of het particulier bezit is.

1 like

Kijk bij de verkoop van snippergroen goed naar de rechten voor bijvoorbeeld Nuts kabels, riolering etc. Vaak wordt groen verkocht waar kabels en leidingen onder liggen, nu geen probleem, maar in de toekomst…