Onder de motorkap van
RouteDNA
Waar de meeste routeplanners stoppen bij simpele statistieken, gaan wij verder. Ontdek hoe we jouw route transformeren van ruwe GPS-punten naar een gedetailleerde analyse.
Van ruwe GPS-punten naar het echte wegennet
Wanneer je een GPX-bestand uploadt, bestaat dat simpelweg uit een reeks losse GPS-coördinaten. Omdat GPS-signalen soms afwijken, liggen deze punten vaak net naast de weg. In deze eerste stap trekken we jouw route terug recht en plakken we deze exact op het OpenStreetMap-netwerk. Zo weten we precies over welke specifieke wegen je fietst of wandelt.
Technisch: Onder de motorkap
Bestand inlezen: De backend ontvangt het bestand via onze API endpoint.
Map Matching: We sturen de coördinaten naar een lokaal draaiende GraphHopper instantie.
Snapping: GraphHopper gebruikt een map-matching algoritme om de onnauwkeurige punten te 'snappen' aan de exacte edges (wegsegmenten) van de OpenStreetMap (OSM) routing graph.
Omgevingsdata en natuurkaarten koppelen
Zodra we exact weten welke paden je volgt, halen we de omgeving erbij. We knippen de route op in duizenden kleine stukjes en kijken voor elk stukje wat de officiële data zegt. We zoeken niet alleen de ondergrond op, maar kruisen je route ook met Vlaamse natuurkaarten en Europese beschermingszones. Zo rolt er een compleet profiel uit van het landschap waar je doorheen trekt.
Technisch: Onder de motorkap
Spatial Joins via DuckDB: We gebruiken DuckDB voor supersnelle ruimtelijke analyses (spatial joins).
Databronnen: Het gematchte pad (cpath) wordt gekoppeld aan verrijkte OSM-data (highway, surface, ...) en Open-Data zoals de Vlaamse Biologische Waarderingskaart (BWK) en Natura 2000-kaart.
Resultaat: Dit levert een rijke DataFrame op waarbij elke paar meter van de route is gekoppeld aan de exacte omgevings- en infrastructuurkenmerken.
Scores en context berekenen
Data alleen is niet genoeg, het moet betekenis krijgen. In deze stap berekent het systeem hoe stressvol het verkeer is op basis van de weginrichting en snelheidslimieten (de LTS-score). Ook berekenen we je 'Groen-factor' (hoe lang blijf je onafgebroken in de natuur?) en bepalen we voor welk type fiets deze rit het meest geschikt is. Ook alle andere statistieken worden op deze manier berekend.
Technisch: Onder de motorkap
Python API: Meerdere functies analyseren het net gematchte DataFrame.
Level of Traffic Stress (LTS): Op basis van complexe regels (combinaties van highway type, surface, aanwezigheid van fietspaden en maxspeed) krijgt elk segment een LTS-score toegekend (van 'Zeer veilig' tot 'Zeer onveilig').
Aaneengesloten Groen: Het algoritme zoekt naar aaneengesloten blokken bos/natuur en deelt strafpunten uit voor onderbrekingen (zoals een drukke weg oversteken) om de green_continuity score (0-100) te berekenen.
Suitability Matrix: Via een weging van de ondergrond-percentages bepalen we de geschiktheid voor Racefiets, All-Road, Gravel en MTB.
Het Route-DNA genereren
Als laatste stap gieten we alle berekeningen in een gestructureerd pakket dat je browser kan lezen. We bouwen een interactieve kaart op waarin elke meter is ingekleurd op basis van de ondergrond, het verkeer en nog veel meer. Daarnaast genereren we het 'Route DNA': een tijdlijn die je rit van kilometer 0 tot het einde chronologisch in blokken hakt.
Technisch: Onder de motorkap
Data Formatteren: De ongestructureerde data wordt omgezet naar een JSON-structuur.
GeoJSON: De segmenten worden samengevoegd tot één rijke GeoJSON FeatureCollection. Elk feature krijgt properties mee zoals lts_score, surface, en environment.
Route DNA Blokken: De route wordt gesplitst in grotere, chronologische blokken (bv. per 500m) voor de overzichtelijke Route DNA tijdlijn op de frontend.
Frontend Rendering: SvelteKit en MapLibre GL vangen deze JSON op en vertalen dit direct naar de grafieken en de interactieve kaart die je op je scherm ziet.