Follow The Money (FTM) heeft dit voorjaar een nieuw dossier geopend: Gore Grond in je Gemeente. Op 11 april deed dit platform voor onderzoeksjournalistiek een oproep: Bodemvervuiling in jouw gemeente? Zet het op de kaart. Volgens FTM zijn overheden niet altijd even transparant over bodemverontreiniging. Informatie is moeilijk te vinden en lastig te interpreteren. Dat geldt met name voor de spoedlocaties. Dat zijn plaatsen waar de vervuiling zo erg is, dat er direct maatregelen genomen moeten worden.

De overheid stelt informatie over de bodemkwaliteit beschikbaar via het Bodemloket. Na het lezen van de oproep vroeg ik me af of de gegevens in het Bodemloket geschikt zijn voor hergebruik door FTM. Ik ging op onderzoek uit.

Een zoekopdracht op ‘Bodemloket’ in het Nationaal Georegister levert vijf datasets op. Jammer genoeg zijn het allemaal Web Map Services (WMS). Dat betekent dat de services niet gebruikt kunnen worden om de ruwe data op te vragen.

Terug naar de kaart in het Bodemloket. Bij het laden van de pagina zie je onder water - bijvoorbeeld met Chrome DevTools - dat de bodemkwaliteitgegevens worden opgevraagd bij een webservice:

Het gaat om het volgende endpoint:

https://www.gdngeoservices.nl/arcgis/services/blk/lks_blk_rd/MapServer/WMSServer

Helaas is dit ook een WMS. Toch geeft de URL een belangrijk stukje informatie: de service wordt gepubliceerd met ArcGIS Server. Je kunt nu de ArcGIS REST Services Directory opvragen door de URL aan te passen:

https://www.gdngeoservices.nl/arcgis/rest/services

Via deze mappenstructuur kun je bij de REST API van het Bodemloket:

https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer

Met de REST API kun je vier datasets (layers) opvragen. WBB_punten en WBB_locaties bevatten respectievelijk punten en vlakken van Wet bodembescherming (WBB) locaties. Het volgnummer van de layer is belangrijk om het endpoint voor een request te bepalen. WBB_locaties is bijvoorbeeld de tweede layer en heeft volgnummer 1.

Het is nu relatief eenvoudig om locaties als GeoJSON bestand op te vragen:

https://www.gdngeoservices.nl/arcgis/rest/services/blk/lks_blk_rd/MapServer/1/query?where=1=1&outFields=*&f=geojson

De response bevat maar 1.000 locaties. Het zijn er in werkelijkheid véél meer. Het is niet mogelijk om meer dan 1.000 locaties per request op te vragen. Hoe kun je dan toch alle locaties opvragen?

Helaas is response paging uitgezet in de configuratie van de service. Een alternatief is om zelf meerdere requests te genereren waarmee in stappen alle locaties worden opgevraagd. Dit kan op twee manieren:

  • in de where query parameter filteren op een attribuut dat een uniek identificatienummer bevat of
  • met de query parameters geometryType, inSR, geometry en spatialRel filteren op gebied.

De eerste optie is in dit geval ongeschikt. Alleen WBB_DOSSIER_DBK lijkt in aanmerking te komen als uniek identificatienummer. Requests waarbij gefilterd wordt op dit attribuut retourneren regelmatig foutcode 400 (Unable to complete operation).

Bij de tweede optie verdeel je het interessegebied - bijvoorbeeld een provincie of heel Nederland - in een grid. Per tegel binnen het grid doe je een request (voorbeeld). Het probleem is dat je de afmetingen van een tegel zo moet kiezen, dat er niet meer dan 1.000 locaties binnen een tegel liggen.

Zo langzamerhand wordt het best ingewikkeld! Daarom heb ik in FME Desktop een script gemaakt voor het genereren van de requests en samenvoegen van de responses. Het script is te downloaden van GitHub. Ik heb het -vanwege de grote hoeveelheid data- alleen nog maar getest per provincie, nog niet voor heel Nederland.

Uit de gegevens die de REST API retourneert, kun je voor iedere locatie ook de hyperlink naar het rapport met de voortgang van het bodemonderzoek afleiden:

https://www.bodemloket.nl/bodemloket/tools/report/guid/[NEN3610_ID_SOIL_MANAGEMENT]/[LOCATIECODE_BEVOEGD_GEZAG]/SIKB_12

Tussen de blokhaken komen de waarden van de gelijknamige attributen te staan (voorbeeld). In het voortgangsrapport staat méér informatie dan in de API response, bijvoorbeeld de locatienaam, onderzoeksrapporten en besluiten. Helaas is deze informatie niet rechtstreeks via de API op te vragen in een gestructureerd formaat. Je moet de gegevens zelf scrapen als je ze voor een analyse wilt gebruiken.

De conclusie is dat FTM gelijk heeft: het is inderdaad niet makkelijk is om de ruwe bodemkwaliteitsgegevens op te vragen, want:

  • de ArcGIS REST API is niet opgenomen in het Nationaal Georegister en daardoor moeilijk vindbaar,
  • response paging is uitgezet,
  • er is geen duidelijke API documentatie,
  • niet alle (gestructureerde) gegevens worden rechtstreeks ontsloten via de REST API.

Daarnaast zijn er nog semantische problemen. De betekenis van attributen is niet meteen duidelijk. En hoe filter je eigenlijk alle spoedlocaties uit het Bodemloket?

Kortom: er is nog veel ruimte voor verbetering als het gaat om het ontsluiten van bodemkwaliteitgegevens voor hergebruik door andere partijen dan de overheid.

Aanvulling op 5 juni 2019:
Inmiddels weet ik dat het wél mogelijk is om alle gegevens op te vragen door te filteren op een uniek identificatienummer. Dat is sneller een eenvoudiger dan de gegevens opvragen met een grid. In deze post leg ik uit hoe dat moet.