Ontsluiten van NDW wegverkeersdata voor correlatie met geluidsmetingen

NDW is het nationaal dataportaal wegverkeer, zij bieden open data aan op https://opendata.ndw.nu/
Dit zijn onder andere actuele verkeersgegevens op rijkswegen en provinciale wegen, over intensiteit (voertuigen/uur) en gemiddelde snelheid (km/uur) van de afgelopen minuut. Elke minuut is er nieuwe data beschikbaar op hun portaal, ongeveer 170.000 metingen op ca 18.000 plekken in het verkeersnet.

De data wordt beschikbaar als gz-file die uitpakt naar een enorm XML bestand (uitgepakt ca 45 MB).
Ik ben bezig met een java service te schrijven die dit bestand 1x/minuut ophaalt en beschikbaar maakt in een wat handzamer formaat, namelijk een JSON per meetlokatie. Dat maakt het mogelijk om voor 1 lokatie de minuutgegevens op te halen (i.p.v. alles tegelijk). Dat kan op “pull” basis (doe elke minuut een GET), maar ook op “push”-basis (server-sent events). Dus bijvoorbeeld:
http://host/traffic/static voor een geojson file met alle lokaties (inleesbaar in bijvoorbeeld QGIS)
http://host/traffic/static/lokatie statische gegevens van een specifieke lokatie
http://host/traffic/dynamic/lokatie voor de verkeersminuutgegevens van een specifieke lokatie
http://host/traffic/dynamic/lokatie/events voor een server-sent-event stream met verkeersminuutgegevens van een specifieke lokatie

Het is in eerste instantie nogal een technische interface, maar mogelijk nuttig voor mensen die geluid meten en dit bijvoorbeeld willen correleren met intensiteit van wegverkeer.

Mijn work-in-progress (Java code) staat op:

In de bijlage een indruk van de beschikbare meetpunten in het nederlandse wegennet:

2 likes

De eerste versie van mijn programma werkt.

Voorbeeldgegevens van het REST JSON/SSE endpoint, dit zijn near-realtime gegevens van een meetpunt op de A12 bij Gouda:

bertrik@ideapad:~/code/verkeersdrukte$ curl http://localhost:9002/traffic/dynamic/RWS01_MONIBAS_0121hrr0298ra/events
event: measurement
id: 28441071
data: {"datetime":"2024-01-28T18:51:00+01:00","flow":1620,"speed":112.1}

event: measurement
id: 28441072
data: {"datetime":"2024-01-28T18:52:00+01:00","flow":1020,"speed":116.9}

event: measurement
id: 28441073
data: {"datetime":"2024-01-28T18:53:00+01:00","flow":1920,"speed":111.3}

event: measurement
id: 28441074
data: {"datetime":"2024-01-28T18:54:00+01:00","flow":1680,"speed":114.4}

event: measurement
id: 28441075
data: {"datetime":"2024-01-28T18:55:00+01:00","flow":1140,"speed":112.7}

Je krijgt dus elke minuut weer drie regels erbij, met in de data de “flow” = de intensiteit (aantal voertuigen / uur), en “speed” = de gemiddelde snelheid (km/uur) van een rijbaan, gewogen naar aantallen voertuigen per rijstrook.

Het idee is dat iemand (ik bijvoorbeeld) dit programma ergens op een gemeenschappelijke plek kan draaien, en dat iedereen die dat wil, dan de semi-realtime data kan opvragen van een willekeurig meetpunt in nederland.

Snapshot van dynamisch minuutdata:

bertrik@ideapad:~/code/verkeersdrukte$ curl http://localhost:9002/traffic/dynamic/RWS01_MONIBAS_0121hrr0298ra
{
  "datetime" : "2024-01-28T20:41:00+01:00",
  "flow" : 1440,
  "speed" : 114.8
}

Snapshot van statische data van een meetpunt:

bertrik@ideapad:~/code/verkeersdrukte$ curl http://localhost:9002/traffic/static/RWS01_MONIBAS_0121hrr0298ra
{
  "type" : "Feature",
  "geometry" : {
    "type" : "Point",
    "coordinates" : [ 4.697882960944579, 52.036364021503125 ]
  },
  "properties" : {
    "naam" : "0121hrr0298ra",
    "dgl_loc" : "RWS01_MONIBAS_0121hrr0298ra",
    "wegtype" : "H",
    "id" : "11246",
    "meetgeg" : "3",
    "meetricht" : "51"
  }
}

Je kan dit ook zelf draaien om mee testen, er staat een docker-compose file in

Kan je ook historische data ophalen (bijvoorbeeld uurwaarden voor een jaar)? NDW Dexter is wat onhandig.

Nee, dit is nu alleen voor de (near) real-time data, het doet alleen formaat-conversie (XML → JSON), aggregatie over de rijstroken en uitsplitsing naar een specifieke meetlokatie.

Een testversie draait nu ook publiek, voorbeelden van URLs: