Vlaanderen ontsluiten via GIPOD #18

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

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

Eerste extra bron op de nieuwe bronlaag. Geverifieerd op 2026-07-20 met echte
requests.

Bron: OGC API Features, publiek, geen key, GeoJSON.
https://geo.api.vlaanderen.be/GIPOD/ogc/features/v1/
Collecties: HINDER, HINDERGEVOLG, OMLEIDING, INNAME (plus _PUNT-varianten).
Werk met HINDERGEVOLG: daar zit de fietsclassificatie in.

Let op, de REST-API op gipod.api.vlaanderen.be geeft 401 en is niet bruikbaar.
De WMS uit de datavindplaats-catalogus levert alleen kaartplaatjes.

Wat GIPOD beter doet dan Melvin:

  • bbox-filter (Melvin heeft dat niet)
  • expliciete fietscategorie ConsequenceTreeLevel0 = Fietsers, met de waarden
    Geen doorgang voor fietsers en Beperkte doorgang voor fietsers
  • SevereHindrance als boolean
  • omleidingen als MultiLineString, inclusief Omleiding (brom)fietsers
  • vrije tekst in HindranceDescription (Nederlands)

Geverifieerde valkuilen:

  1. Het datumfilter doet niet wat het lijkt. datetime=<dag> filtert op
    STARTdatum binnen het venster, niet op actief-op-die-dag. Werk dat loopt van
    jan 2026 tot okt 2028 valt buiten datetime=vandaag. Zelf filteren op
    Start kleiner-gelijk datum kleiner-gelijk End.
  2. Geometrie is MultiPolygon, geen polyline. Afstand wordt punt-tot-polygon, en
    route_loopt_langs() werkt niet op vlakken; die heuristiek moet hier anders.
  3. Geen publieke deeplink per melding.
  4. properties= wordt genegeerd, alle velden komen altijd mee.
  5. numberMatched ontbreekt: doorpagineren tot minder dan limit terugkomt.
  6. CQL-filters worden stil genegeerd (gaven ongefilterde resultaten terug).
  7. Geen SLA op de dienst.

Volume ligt hoger dan in NL. Corridor Gent-Brugge: 8000+ zones, 2320 actief
vandaag, waarvan 1032 fietsgerelateerd.

LLM-laag: voorstel is die hier grotendeels over te slaan. GIPOD classificeert de
fietsimpact al expliciet, dus een deterministisch oordeel uit Consequence plus
SevereHindrance volstaat; de LLM alleen op de vrije tekst bij twijfel. Scheelt
kosten en de variantie waar we eerder tegenaan liepen.

Scope-besluit (2026-07-20): alleen Vlaanderen. Brussel en Wallonie zijn
bewust laten vallen en gearchiveerd (was TASK-16 en TASK-17). De app dekt dus
Nederland plus Vlaanderen, en dat moet ook zo uitgelegd worden.

UI-werk dat hier voor het eerst nodig wordt:

  • op de hoofdpagina, voor de check, al duidelijk maken dat de dekking Nederland
    en Vlaanderen is; niet pas achteraf in de resultaten
  • bron per melding tonen (Melvin of GIPOD)
  • filterbalk normaliseren naar eigen labels; bronclassificatie in het detail
  • grensroutes: aangeven welk deel door welke bron gedekt is
  • kaart tekent polygonen in plaats van lijnen (MapTiler dekt BE prima)
  • geen deeplink-knop tonen waar de bron er geen heeft

Definition of Done

Hoe het is opgelost

Afgerond (2026-07-20), live geverifieerd op productie.

bron_gipod.py levert Vlaamse meldingen in hetzelfde interne model, dus de
frontend en de matching bleven ongemoeid — precies waar TASK-14 voor was.

Ingang: OGC API Features (HINDERGEVOLG + OMLEIDING, gejoind op
HindranceGipodId). De REST-API geeft 401, de WMS is kaartplaatjes.

Valkuilen afgevangen in code, met de reden erbij in de docstring:

  • Het GIPOD-datumfilter filtert op STARTdatum binnen het venster, niet op
    actief-op-die-dag; werk dat maanden loopt zou wegvallen. Zelf gefilterd.
  • numberMatched ontbreekt → doorpagineren tot minder dan LIMIET terugkomt.
  • Geen SLA → fail-open: valt GIPOD uit, dan verdwijnt alleen die laag.
  • Geen publieke deeplink per melding → de knop "Details bij Melvin" wordt niet
    meer onvoorwaardelijk getoond; dat was een kapotte link geworden.
  • Geometrie is MultiPolygon, dus route_loopt_langs() geeft None; het
    LLM-oordeel neemt het daar over.

Fietsrelevantie draait nu per bron. GIPOD levert de verkeerssoort zelf
(Fietsers / Voetgangers / Gemotoriseerd verkeer) — betrouwbaarder dan tekst
matchen, en het maakte veel uit. Op de Red Loop kwamen eerst 62 meldingen
ongefilterd binnen, waarvan het merendeel parkeermaatregelen (containers,
werfwagens) en zuivere voetgangershinder. Na degradatie blijven 16 mogelijk
relevante over, met "Geen doorgang voor fietsers" op 2 m van de route
bovenaan. Degradatie, geen verwijdering: onder "Alles" staat alles er nog.

UI: dekking benoemd op de homepage (NL + Vlaanderen, met beide bronnen), bron
per melding in het detailpaneel, GIPOD in het colofon inclusief het ontbreken
van een SLA.

Regressietest uitgebreid met de Ronde van Vlaanderen Red Loop (publieke
Komoot-route, 116,6 km). Vier routes, alle identiek.

Live: Red Loop 62 treffers uit GIPOD, Elfstedentocht 17 uit MELVIN/SPIN — de
bronkeuze op route-bbox doet wat hij moet.

Nog open, klein: er is nog geen route die beide bronnen tegelijk raakt in de
regressieset. Een rit over de grens bij Zeeuws-Vlaanderen zou dat pad dekken.

> Gemigreerd uit `backlog/` naar issues op 2026-07-20 — oorspronkelijk **TASK-15**. > Labels in het oude bord: `frontend`, `bronnen`, `vlaanderen`. Eerste extra bron op de nieuwe bronlaag. Geverifieerd op 2026-07-20 met echte requests. Bron: OGC API Features, publiek, geen key, GeoJSON. `https://geo.api.vlaanderen.be/GIPOD/ogc/features/v1/` Collecties: HINDER, HINDERGEVOLG, OMLEIDING, INNAME (plus _PUNT-varianten). Werk met HINDERGEVOLG: daar zit de fietsclassificatie in. Let op, de REST-API op gipod.api.vlaanderen.be geeft 401 en is niet bruikbaar. De WMS uit de datavindplaats-catalogus levert alleen kaartplaatjes. Wat GIPOD beter doet dan Melvin: - bbox-filter (Melvin heeft dat niet) - expliciete fietscategorie `ConsequenceTreeLevel0 = Fietsers`, met de waarden `Geen doorgang voor fietsers` en `Beperkte doorgang voor fietsers` - `SevereHindrance` als boolean - omleidingen als MultiLineString, inclusief `Omleiding (brom)fietsers` - vrije tekst in `HindranceDescription` (Nederlands) Geverifieerde valkuilen: 1. Het datumfilter doet niet wat het lijkt. `datetime=<dag>` filtert op STARTdatum binnen het venster, niet op actief-op-die-dag. Werk dat loopt van jan 2026 tot okt 2028 valt buiten `datetime=vandaag`. Zelf filteren op Start kleiner-gelijk datum kleiner-gelijk End. 2. Geometrie is MultiPolygon, geen polyline. Afstand wordt punt-tot-polygon, en `route_loopt_langs()` werkt niet op vlakken; die heuristiek moet hier anders. 3. Geen publieke deeplink per melding. 4. `properties=` wordt genegeerd, alle velden komen altijd mee. 5. `numberMatched` ontbreekt: doorpagineren tot minder dan limit terugkomt. 6. CQL-filters worden stil genegeerd (gaven ongefilterde resultaten terug). 7. Geen SLA op de dienst. Volume ligt hoger dan in NL. Corridor Gent-Brugge: 8000+ zones, 2320 actief vandaag, waarvan 1032 fietsgerelateerd. LLM-laag: voorstel is die hier grotendeels over te slaan. GIPOD classificeert de fietsimpact al expliciet, dus een deterministisch oordeel uit `Consequence` plus `SevereHindrance` volstaat; de LLM alleen op de vrije tekst bij twijfel. Scheelt kosten en de variantie waar we eerder tegenaan liepen. Scope-besluit (2026-07-20): alleen Vlaanderen. Brussel en Wallonie zijn bewust laten vallen en gearchiveerd (was TASK-16 en TASK-17). De app dekt dus Nederland plus Vlaanderen, en dat moet ook zo uitgelegd worden. UI-werk dat hier voor het eerst nodig wordt: - op de hoofdpagina, voor de check, al duidelijk maken dat de dekking Nederland en Vlaanderen is; niet pas achteraf in de resultaten - bron per melding tonen (Melvin of GIPOD) - filterbalk normaliseren naar eigen labels; bronclassificatie in het detail - grensroutes: aangeven welk deel door welke bron gedekt is - kaart tekent polygonen in plaats van lijnen (MapTiler dekt BE prima) - geen deeplink-knop tonen waar de bron er geen heeft ## Definition of Done - [x] #1 Werkend op https://gpx.jelmer.org - [x] #2 Documentatie bijgewerkt ## Hoe het is opgelost Afgerond (2026-07-20), live geverifieerd op productie. bron_gipod.py levert Vlaamse meldingen in hetzelfde interne model, dus de frontend en de matching bleven ongemoeid — precies waar TASK-14 voor was. Ingang: OGC API Features (HINDERGEVOLG + OMLEIDING, gejoind op HindranceGipodId). De REST-API geeft 401, de WMS is kaartplaatjes. Valkuilen afgevangen in code, met de reden erbij in de docstring: - Het GIPOD-datumfilter filtert op STARTdatum binnen het venster, niet op actief-op-die-dag; werk dat maanden loopt zou wegvallen. Zelf gefilterd. - numberMatched ontbreekt → doorpagineren tot minder dan LIMIET terugkomt. - Geen SLA → fail-open: valt GIPOD uit, dan verdwijnt alleen die laag. - Geen publieke deeplink per melding → de knop "Details bij Melvin" wordt niet meer onvoorwaardelijk getoond; dat was een kapotte link geworden. - Geometrie is MultiPolygon, dus route_loopt_langs() geeft None; het LLM-oordeel neemt het daar over. **Fietsrelevantie draait nu per bron.** GIPOD levert de verkeerssoort zelf (Fietsers / Voetgangers / Gemotoriseerd verkeer) — betrouwbaarder dan tekst matchen, en het maakte veel uit. Op de Red Loop kwamen eerst 62 meldingen ongefilterd binnen, waarvan het merendeel parkeermaatregelen (containers, werfwagens) en zuivere voetgangershinder. Na degradatie blijven 16 mogelijk relevante over, met "Geen doorgang voor fietsers" op 2 m van de route bovenaan. Degradatie, geen verwijdering: onder "Alles" staat alles er nog. UI: dekking benoemd op de homepage (NL + Vlaanderen, met beide bronnen), bron per melding in het detailpaneel, GIPOD in het colofon inclusief het ontbreken van een SLA. Regressietest uitgebreid met de Ronde van Vlaanderen Red Loop (publieke Komoot-route, 116,6 km). Vier routes, alle identiek. Live: Red Loop 62 treffers uit GIPOD, Elfstedentocht 17 uit MELVIN/SPIN — de bronkeuze op route-bbox doet wat hij moet. Nog open, klein: er is nog geen route die beide bronnen tegelijk raakt in de regressieset. Een rit over de grens bij Zeeuws-Vlaanderen zou dat pad dekken.
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#18
No description provided.