2.2 KiB
GTFS-Neuberechnung — harte Lehren aus urlaub.perfekt-ohne-en.de (2026-08-19)
Ergänzung zum main SKILL.md. Diese Notes stammen aus dem echten Großumbau der Fahrzeiten auf der Zugverbindungs-Webseite und sind die Dinge, die NICHT sofort ersichtlich sind. (Haupt-SKILL.md-Patch war durch eine Schreib-Sperre blockiert; diese Erkenntnisse gehören trotzdem zu diesem Umbrella.)
Die 3 Teambefunde, die den Dijkstra erst korrekt machten
- Geo-Stop-Merging — Ein Bahnhof hat MEHRERE aktive stop_ids in der st-Tabelle
(Saarbrücken Hbf: 6 IDs = Plattform-/Gleis-Stops).
stops.txtstop_id ist nicht eindeutig. Fix: Stops < ~350m Luftlinie zu einer Gruppe zusammenfassen; der Router expandiert von/zu allen Gruppen-IDs. - Umstiegsbuffer — Ohne min ~4min Transfer-Puffer erlaubt Dijkstra physisch
unmögliche Anschlüsse (Ankunft 10:05 → Abfahrt 10:04) → zu optimistische Zeiten.
Buffer NUR beim Umstieg, nicht beim Start:
dep_s < t + (BUFFER if t>dep0 else 0). - Profil-Query (Min) — Feste Abfahrtszeit (09:00) liefert systematisch zu langsame Werte, wenn die früheste Verbindung zufällig viele Umstiege hat. Abfahrten über den Tag scannen (z.B. stündlich 06-22) und MIN(Fahrzeit) nehmen.
Performance: EIN Dijkstra je Start statt je Verbindung
- Naiv: 12.201 Verbindungen × ~17 Abfahrtsstichproben = ~207k Dijkstra-Läufe → ~18h.
- Korrekt: EIN Dijkstra je eindeutigen Start (191 Starts), der ALLE Ziele gleichzeitig
erreicht (
spread(start_ids)→ dict stop→ankunft). Danach Werte ablesen → ~10 Min. - Commit NUR am Ende, und nur markierte Ziele (0.0h / mehrdeutig) neu verteilen.
Start ohne Bahnhof (z.B. Radevormwald)
Städte ohne eigene Bahnhofs-ID matchen in stops nicht. Löse über den nächstgelegenen
Bahnhof (Radevormwald → Remscheid-Lennep Bf) und addiere die Bus-Anreise (~20min):
Gesamtzeit = BUS_MIN + Dijkstra(Bahnhof → Ziel).
Ziel-Eindeutigkeit: Berlin-Falle
Mehrdeutige Zielnamen (z.B. "Berlin") matchen falsche/lokalnahe Stops → ungenaue
oder sogar 0.0h-Zeiten. Abbilden auf eindeutiges "… Hbf":
UPDATE verkehr SET nach='Berlin Hbf' WHERE nach='Berlin';
0.0h-Zeilen sind als Fehler zu behandeln und neu zu berechnen, nicht zu akzeptieren.