# R-stijl: vertrouwde syntax, uitgevoerd op de server
panden <- pdok_read(
"kadaster/bag", "pand",
filter = bouwjaar < 1900
)
# of als ruwe CQL2-query
adressen <- pdok_read(
"kadaster/bag", "adres",
filter = "huisnummer BETWEEN 1 AND 3"
)PDOK heeft een demo online gezet van een hele fijne functionaliteit: échte filterfunctionaliteit op de BAG OGC API, op basis van CQL2. Ik heb de demo uitgebreid getest en feedback gegeven en ik ben het pdokr package al aan het voorbereiden.
Waarom dit fijn is: filteren aan de bron
Wie nu met pdokr werkt kent het patroon: je haalt een laag op (eventueel voorgefilterd op een gebied of jaargang) en filtert daarna lokaal met dplyr. Dat werkt prima voor buurten of gemeenten, maar bij grote lagen zoals de BAG — miljoenen panden en adressen — wil je niet eerst alles binnenhalen om vervolgens bijna alles eruit te filteren.
En daarom is CQL2 zo fijn: hiermee gebeurt het filteren op de server! Denk aan query’s als bouwjaar < 1900, gebruiksdoel = 'onderwijsfunctie' of huisnummer BETWEEN 1 AND 3. Alleen het resultaat wordt vervolgens ingeladen. Het resultaat: minder data, snellere analyses, en vragen die eerst onpraktisch of praktisch onmogelijk waren te beantwoorden (“alle schoolgebouwen van Nederland”), zijn ineens wél mogelijk.
Meegetest en feedback gegeven
PDOK vroeg op het forum om de demo te testen, dus ik ben aan de slag gegaan. De belangrijkste bevindingen heb ik op het forum teruggekoppeld:
- Huisnummers zijn strings.
huisnummer BETWEEN 1 AND 3leverde ook huisnummers 10, 122 en 137 op omdat er alfabetisch wordt vergeleken in plaats van numeriek. - Te lange filters geven geen foutmelding. Bij lange URL’s (in het geval van de test zo’n 1.400 BAG-identificaties in een
IN-lijst) verbreekt de verbinding zonder foutmelding. - Toegestane waarden zijn niet gedocumenteerd. Velden als
gebruiksdoelenstatushebben een vaste waardenlijst, maar die zijn via de API niet op te vragen en alleen in de API-documentatie te vinden. Dat maakt het voor ‘gewone’ gebruikers lastig in gebruik.
Leuk om te zien dat PDOK het eerste punt gelijk heeft opgepakt.
Zo gaat het eruitzien in pdokr
Op mijn ontwikkelmachine werkt het al: pdok_read() krijgt een filter-parameter. Je kunt straks filteren in R-stijl — zoals je van dplyr gewend bent, maar de server doet het werk — of een ruwe CQL2-query meegeven:
Het is nog werk in uitvoering en de filterfunctionaliteit zit nog niet in de productie-API, maar dit is hoe het in de package waarschijnlijk zal werken.
Hoe verder?
De demo draait tot 5 oktober op een apart endpoint (v2-demo). Daarna is het aan PDOK om de CQL2-functionaliteiten in de reguliere API te implementeren. Ik hoop dat dat — inclusief de aangedragen suggesties — snel gaat gebeuren, want het maakt het werken met écht grote geodatasets een stuk makkelijker!
Zodra dat het geval is volgt een nieuwe pdokr-release.
