Vlaamse meldingen missen de geometrische voorfilter #25

Closed
opened 2026-07-20 14:46:26 +02:00 by jelmer · 0 comments
Owner

Gemigreerd uit backlog/ naar issues op 2026-07-20 — oorspronkelijk TASK-20.
Labels in het oude bord: backend, vlaanderen.

Gemeld door Jelmer op 2026-07-20 na een test met een route die hij vorige week
reed: de app zegt te snel dat er geen doorgang voor fietsers is.

Oorzaak, gemeten in de regressieset:

routeLooptLangs Melvin (Elfstedentocht) GIPOD (Red Loop)
True (eroverheen) 5 0
False (kruist alleen) 9 0
None (onbekend) 3 62

route_loopt_langs() werkt op polylines. GIPOD levert MultiPolygon-zones, dus
de functie geeft altijd None terug en de deterministische voorfilter doet bij
Vlaamse meldingen niets. Bij Melvin filtert die 9 van de 17 weg als "je kruist
dit alleen" — precies de filter die destijds de Reitdiepstraat oploste
(TASK-8).

Gevolg: elke Vlaamse zone in de buurt gaat ongefilterd naar het taalmodel, dat
op GIPOD-s eigen tekst "Geen doorgang voor fietsers" concludeert dat je er niet
door kunt. Ook als de werfzone naast de route ligt.

Voorstel: een vlak-variant van dezelfde vraag. Bij een polygoon is de juiste
toets niet "loopt er iets parallel" maar "gaat de route dwars door de zone":
punt-in-polygoon op de routepunten.

  • minstens één routepunt binnen de zone → de route gaat er doorheen → True
  • geen enkel punt binnen, maar wel dichtbij → je passeert ernaast → False

Dat vraagt om de zone-geometrie in het interne model; die wordt nu weggegooid
(alleen verts blijft over). Twee vliegen: met de geometrie erbij kan de kaart
Vlaamse zones ook tekenen, wat nu niet gebeurt.

Aandachtspunt: de frontend tekent restrictions[].polyline als lijn. Een vlak
daarin stoppen kan de kaart breken — eerst nakijken hoe die tekencode met een
(Multi)Polygon omgaat.

Uitvoeren als route-relatie per bron, net als is_snelweg en fiets_relevant nu
al per bron gaan.

Te valideren met de route die Jelmer nastuurt: die moet na de fix geen
onterechte "geen doorgang" meer geven, en de Red Loop moet een flink deel van
de 62 als "kruist alleen" wegzetten.

Definition of Done

Hoe het is opgelost

Afgerond (2026-07-20), gevalideerd op de Vlaamse route die Jelmer aanleverde
(COURSE_487337725, 66,7 km rond Averbode/Demer).

route_relatie is nu bronspecifiek, net als is_snelweg en fiets_relevant:
bron_melvin parallel-en-dichtbij op polylines (ongewijzigd)
bron_gipod punt-in-vlak op de zone (geo.route_door_vlak)

De marge van 20 m is de kern, niet een detail. Zonder marge zag het er
prachtig uit — 23 van de 25 afgeserveerd — maar daar zat G19777350 tussen, met
als tekst "afsluiten en omleiding voorzien voor fietsers en voetgangers", op
16 m. Een echte fietsafsluiting. Oorzaak: een GPX volgt de rijbaan-as terwijl de
werfzone op het fietspad ernaast ligt, dus die zone bevat je routepunten niet.
Binnen 20 m geven we daarom None (onzeker) in plaats van False.

Uitkomst op die route: 25x None wordt 13 False / 10 None / 2 True. De melding op
84 m die zelf zegt "Doorgang blijft mogelijk" wordt afgeserveerd; de echte
afsluiting op 16 m blijft staan.
Red Loop: 62x None wordt 41 False / 17 None / 4 True.

Les: bij een filter die dingen verbergt is de vraag niet "hoeveel ruis haal ik
weg" maar "wat haal ik ten onrechte weg". De eerste versie scoorde beter op het
eerste en faalde op het tweede.

Zijeffect: de zone-geometrie zit nu in het interne model (veld "vlak"), dus de
kaart zou Vlaamse werfzones kunnen tekenen. Nog niet gedaan — de frontend
tekent restrictions[].polyline als lijn en moet eerst met vlakken overweg
kunnen.

> Gemigreerd uit `backlog/` naar issues op 2026-07-20 — oorspronkelijk **TASK-20**. > Labels in het oude bord: `backend`, `vlaanderen`. Gemeld door Jelmer op 2026-07-20 na een test met een route die hij vorige week reed: de app zegt te snel dat er geen doorgang voor fietsers is. **Oorzaak, gemeten in de regressieset:** routeLooptLangs Melvin (Elfstedentocht) GIPOD (Red Loop) True (eroverheen) 5 0 False (kruist alleen) 9 0 None (onbekend) 3 62 `route_loopt_langs()` werkt op polylines. GIPOD levert MultiPolygon-zones, dus de functie geeft altijd None terug en de deterministische voorfilter doet bij Vlaamse meldingen niets. Bij Melvin filtert die 9 van de 17 weg als "je kruist dit alleen" — precies de filter die destijds de Reitdiepstraat oploste (TASK-8). Gevolg: elke Vlaamse zone in de buurt gaat ongefilterd naar het taalmodel, dat op GIPOD-s eigen tekst "Geen doorgang voor fietsers" concludeert dat je er niet door kunt. Ook als de werfzone naast de route ligt. **Voorstel:** een vlak-variant van dezelfde vraag. Bij een polygoon is de juiste toets niet "loopt er iets parallel" maar "gaat de route dwars door de zone": punt-in-polygoon op de routepunten. - minstens één routepunt binnen de zone → de route gaat er doorheen → True - geen enkel punt binnen, maar wel dichtbij → je passeert ernaast → False Dat vraagt om de zone-geometrie in het interne model; die wordt nu weggegooid (alleen `verts` blijft over). Twee vliegen: met de geometrie erbij kan de kaart Vlaamse zones ook tekenen, wat nu niet gebeurt. Aandachtspunt: de frontend tekent `restrictions[].polyline` als lijn. Een vlak daarin stoppen kan de kaart breken — eerst nakijken hoe die tekencode met een (Multi)Polygon omgaat. Uitvoeren als route-relatie per bron, net als is_snelweg en fiets_relevant nu al per bron gaan. **Te valideren met de route die Jelmer nastuurt**: die moet na de fix geen onterechte "geen doorgang" meer geven, en de Red Loop moet een flink deel van de 62 als "kruist alleen" wegzetten. ## Definition of Done - [x] #1 Werkend op https://omleidingchecker.nl - [x] #2 Documentatie bijgewerkt ## Hoe het is opgelost Afgerond (2026-07-20), gevalideerd op de Vlaamse route die Jelmer aanleverde (COURSE_487337725, 66,7 km rond Averbode/Demer). route_relatie is nu bronspecifiek, net als is_snelweg en fiets_relevant: bron_melvin parallel-en-dichtbij op polylines (ongewijzigd) bron_gipod punt-in-vlak op de zone (geo.route_door_vlak) **De marge van 20 m is de kern, niet een detail.** Zonder marge zag het er prachtig uit — 23 van de 25 afgeserveerd — maar daar zat G19777350 tussen, met als tekst "afsluiten en omleiding voorzien voor fietsers en voetgangers", op 16 m. Een echte fietsafsluiting. Oorzaak: een GPX volgt de rijbaan-as terwijl de werfzone op het fietspad ernaast ligt, dus die zone bevat je routepunten niet. Binnen 20 m geven we daarom None (onzeker) in plaats van False. Uitkomst op die route: 25x None wordt 13 False / 10 None / 2 True. De melding op 84 m die zelf zegt "Doorgang blijft mogelijk" wordt afgeserveerd; de echte afsluiting op 16 m blijft staan. Red Loop: 62x None wordt 41 False / 17 None / 4 True. Les: bij een filter die dingen verbergt is de vraag niet "hoeveel ruis haal ik weg" maar "wat haal ik ten onrechte weg". De eerste versie scoorde beter op het eerste en faalde op het tweede. Zijeffect: de zone-geometrie zit nu in het interne model (veld "vlak"), dus de kaart zou Vlaamse werfzones kunnen tekenen. Nog niet gedaan — de frontend tekent restrictions[].polyline als lijn en moet eerst met vlakken overweg kunnen.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jelmer/gpx-afsluitingen#25
No description provided.