Webmapper berekende de routes vanaf 3.000 willekeurige locaties in Nederland naar het GeoFort in Herwijnen. Hoe we dat aanpakten? Dat lees je in deze blog.

Bestemming: Geofort!
De bestemming van iedere route is het GeoFort. Op de contactpagina staat de locatie in graden, minuten en seconden aangegeven als 51° 51′51.51″ N, 5° 07′ 33.33″ E. Geef je deze notatie op in Google Maps (https://www.google.com/maps/place/51°51′51.5″N+5°07′33.3″E/), dan krijg je de decimale notatie terug als 51.864306, 5.125917: precies wat we nodig hebben voor onze berekeningen!
Vertrekpunten
Om de routes te berekenen hebben we de naast de bestemming natuurlijk ook nog eens 3.000 willekeurige vertrekpunten in Nederland nodig. Waar halen we zo snel een niet al te gedetailleerd kaartje van Nederland vandaan?
PDOK biedt een Web Feature Service (WFS) van de CBS Gebiedsindelingen met onder andere een generaliseerde provinciekaart uit 2017 waar de binnenwateren uitgeknipt zijn. We missen dus de grenscorrectie bij Eijsen-Margraten en we zullen de provincies zelf moeten samenvoegen. Met deze WFS-bevraging haal de geometrie (in WGS-84), naam en provinciecode binnen als GeoJSON-bestand:
https://geodata.nationaalgeoregister.nl/cbsgebiedsindelingen/ows?request=GetFeature&Service=WFS&version=2.0.0&typename=cbsgebiedsindelingen:cbs_provincie_2017_gegeneraliseerd&outputFormat=application/json&srsName=EPSG:4326&propertyName=statcode,statnaam,geom |
Klik met de rechter muisknop op deze link om de kaart naar je computer te downloaden. Sla de kaart op als provincies2017.geojson
. Om de provincies samen te voegen gebruiken we Mapshaper. Met deze Web tool kan je geografische bestanden converteren, versimpelen en bewerken:
- Sleep het bestand
provincies2017.geojson
naar de Web browser, waarin je Mapshaper hebt geopend en laat het los - In de pop-up druk je op de knop Import, waarna de kaart in de Web browser verschijnt.
- Rechtsboven in het scherm druk je op de knop Console.
- In het scherm dat verschijnt, type je
-dissolve
en druk je op deEnter
-knop van je toetsenbord om de provincies samen te voegen. - Rechtsboven in het scherm druk je op de knop Export om de kaart op te slaan als
nederland.geojson
.
Nu importeren we nederland.geojson
naar een tabel in PostGIS met bijvoorbeeld ogr2ogr
. Met ST_GeneratePoints maken we dan eindelijk die 3000 willekeurige locaties in Nederland:
CREATE TABLE |
We schrijven deze coördinaten met ogr2ogr
weer naar een CSV-bestand vertrekpunten.csv
om als input te dienen voor de volgende stap.
Routes berekenen
Als wegennet gebruiken we OpenStreetMap. Bij het Duitse bedrijf GeoFabrik kan je heel Nederland in een keer downloaden. De routeberekening doen we met Open Source Routing Machine (OSRM). Met 4 Docker-commando’s heb je op http://localhost:5000
een eigen OSRM-server draaien met het Nederlandse wegennet:
docker run -t -v /data/geofort:/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/netherlands-latest.osm |
Je geeft 2 coördinatenparen op in WGS-84. Even spelen met de extra variablen die je mee kan geven en je slaat het antwoord o in een GeoJSON-bestand!
Met onze lijst van 3000 willekeurige punten (het CSV-bestand vertrekpunten.csv
) kunnen we een bash
-script draaien om de API 3000 keer te bevragen. Hoelang dat duurt? 20 minuten: even naar de WC, even koffie en klaar!
while IFS=, read -r lon lat id |
Nu hebben we 3000 JSON-bestanden met daarin de geometrie van iedere route als GeoJSON geformuleerd. Om alle routes in QGIS te bekijken, moeten we die GeoJSON van de routes uit de losse JSON-bestanden halen en dan voegen we deze samen tot 1 GeoJSON-bestand. Dit doe we met JavaScript:
fs.readdir(testFolder, (err, files) => { |
Nu hebben we 1 GeoJSON-bestand met 3000 routes naar het GeoFort van 72,8 MB! Dat vindt QGIS niet leuk om in te laden! Dus maken we er een GeoPackage-bestand van:
ogr2ogr -f "GPKG" total_route_random.gpkg total_route_random.geojson
Met de vertrekpunten erbij ziet dat er zo uit in QGIS:
In deel 3 gaan we met D3.js aan de slag om van deze routes een animatie te maken.