Kategorien

Archive

Kalender

Juni 2018
M D M D F S S
 123
45678910
11121314151617
18192021222324
252627282930  

Ferrophile Breitensuche

17. Juni 2018, 18:37 Uhr von Uwe

Im letzten halben Jahr war ich (mit Pausen natürlich) damit beschäftigt, eine Frage eines Bekannten zu beantworten. Der hatte mich nämlich sinngemäß folgendes gefragt: Welche Ziele kann ich erreichen, wenn ich morgens in einen Zug einsteige und maximal x Stunden unterwegs sein will? Die Onlinesuche der Bahn hilft in dem Fall nicht weiter, denn die will ja wissen von wo nach wo ich fahren will, damit sie mir fünf verschiedene Verbindungen mit 12 verschiedenen Preisen ausspucken kann. Also musste man sich da selbst was stricken.

Fahrplandaten sammeln

Schritt eins zur Lösung war das Einsammeln der Fahrplandaten. Das geht zum Beispiel, indem man die Webseiten der verschiedenen Bahnverwaltungen Europas hernimmt, sich dort die Abfahrtspläne der Bahnhöfe anzeigen lässt und diese Daten dann erfasst. Natürlich schreibt man die sich nicht von Hand ab, da baute ich mir ein kleines Programm, was das Abschreiben für mich erledigt. Einzelne Bahnverwaltungen (wie die Schweizer) bieten auch komplette Datenpakete im gtfs-Format an (General Transit Feed Specification, eigentlich gedacht für Busse und Straßenbahnen, weniger für das Eisenbahnnetz eines ganzen Landes).

Technisch gesehen steht dahinter eine einfache Breitensuche: Man pflegt eine Liste von Bahnhöfen und eine Liste von Zügen, erstere enthält anfangs einen beliebigen Startbahnhof, die andere ist leer. Dazu hält man zwei Listen, in denen man sich merkt, welche Bahnhöfe bzw. Züge man schon geprüft hat. Solange nun die Bahnhofsliste nicht leer ist, macht man folgendes: Man sucht die Daten aller Züge, die an diesem Bahnhof halten und die man noch nicht bearbeitet hatte und speichert diese in der Zugliste. Nun arbeitet man die Zugliste ab und prüft, an welchen Bahnhöfen die Züge so halten. Bahnhöfe, die man noch nicht bearbeitet hat, trägt man in die Bahnhofsliste ein. Nachdem man nun alle aktuell in der Zugliste befindlichen Züge verarbeitet hat, hat man neue Einträge in der Bahnhofsliste, und kann nun wieder beim ersten Eintrag der Bahnhofsliste fortfahren. Dieses Wechseln zwischen Bahnhofsliste und Zugliste wiederholt sich solange, bis man alle irgendwie erreichbaren Bahnhöfe abgeklappert hat.

Da das Eisenbahnnetz in Europa recht dicht ist und es viele internationale Verbindungen gibt, findet man so nicht nur die Bummelzüge nach Kleinkleckersdorf, sondern eben auch Verbindungen bis nach Peking und Wladiwostok (angebunden via Transsibirischer Eisenbahn von Moskau aus). Das ist zwar in keinem Fall mehr an einem Tag erreichbar, aber ich wollte in der Lage sein, mit beliebigen Startbahnhöfen, Umsteigeparametern und Reisezeiten zu arbeiten, ergo wurde erstmal alles eingesammelt was irgendwie erreichbar ist. Deswegen brauchte das Skript auch ein paar Monate zum Durchlaufen und hatte am Ende über 34000 Bahnstationen und etwa die zehnfache Zahl an Zügen erfasst.

Datenauswertung

Nachdem nun sämtliche Zugfahrten mehr oder minder genau erfasst waren (ich bin der Einfachheit halber davon ausgegangen, dass alle Züge täglich fahren), konnte es ans Beantworten der eigentlichen Frage gehen: Auch hier kommt wieder eine Breitensuche zum Einsatz, die vom gewählten Startbahnhof aus alle in Frage kommenden Züge benutzt, um einfach ziellos irgendwohin zu fahren. Von allen potentiellen Reisezielen wird dann wieder weitergesucht, ob man von dort via Umsteigen in andere Züge noch weiterfahren kann. Die Suche wird beendet, wenn man entweder die einstellbare Zeitgrenze oder die ebenfalls einstellbare maximale Anzahl von Umsteigevorgängen erreicht hat. D.h. man kann nun z.B. suchen, von wo aus man innerhalb von zwei Stunden mit höchstens einmal Umsteigen von einem beliebigen Bahnhof Europas aus fahren kann. Das Ergebnis wird dann als Textdatei gespeichert und enthält alle erreichbaren Zielbahnhöfe inkl. der dahin führenden Zugverbindung.

Visualisierung

Weil ein Bild mehr sagt als eine lange Liste von Ortsnamen, von denen man die wenigsten schon mal gehört hat, soll das ganze auch auf einer Karte angezeigt werden. Dazu musste ich zunächst mal die geographischen Positionen der Bahnhöfe herausfinden, was zum Glück anhand von Eintragungen in OpenStreetMap noch vergleichsweise einfach war (bis auf die Lückenhaftigkeit der Daten…). Das Programm spuckt nun eine kml-Datei aus, die man sich mittels Google Earth anzeigen lassen kann. Für den Blogeintrag ist das aber wieder doof, weil ich hier nun gerne Screenshots zeigen wollen würde, was aber wiederum rechtliche Probleme mit einer Firma nach sich zieht, die sich bessere Anwälte leisten kann als ich. Also hab ich das ganze nochmal umgebaut und gebe nun die Daten in einer Form aus, die ich mit OpenStreetMap-Tools verarbeiten kann. Und damit lassen sich nun auch schöne Screenshots zusammenpuzzeln.

Probleme

Der Ansatz ist natürlich lange nicht perfekt. Das beginnt schon bei der Tatsache, dass nicht jeder Zug täglich fährt, das Programm als auch Verbindungen errechnen kann, die es in der Realität gar nicht gibt. Außerdem gabs sicherlich Fehler in der Datenerfassung, es kann gut sein, dass diverse Züge (gerade im Ausland) einfach in meinem Datenbestand fehlen. Dann gibt es noch lustige logistische Schwierigkeiten: So ist zum Beispiel der Bahnhof Leipzig (der Startbahnhof meines Bekannten) betrieblich in zwei Bahnhöfe aufgeteilt, einen Tunnelbahnhof und den eigentlichen Hauptbahnhof. Für mein Programm sind das zwei völlig getrennte Einheiten, so dass man nun Verbindungen von Leipzig Hbf über Leipzig Messe nach Leipzig Hbf (tief) erhält, was natürlich wenig sinnvoll ist, da man statt 20 min Bahnfahrt auch 2 Min zu Fuß gehen kann. Ähnlich ist es mit dem Berliner Hauptbahnhof, der auch aus mehreren Ebenen besteht, und in der Form gibt es noch zahllose weitere Bahnhöfe.

Besonders auffällig ist es bei den großen Bahnhöfen in Paris. Weil die Franzmänner ja ein bissl chaotisch sind, gibts da sechs große Kopfbahnhöfe, und an jedem fahren nur Züge in bestimmte Regionen Frankreichs ab. Wer also am Gare de l’Est ankommt und zum Gare Montparnasse muss, darf erstmal mit der Metro durchs Pariser Stadtzentrum. Leider fehlen aber die Metroverbindungen in meinem Datensatz. Mein Programm würde also Bummelzüge aus dem Pariser Vorortverkehr nutzen, um von einem Pariser Bahnhof zum anderen zu gelangen, was deutlich länger dauert als mit der Metro. Besonders krass ist das beim Umsteigen zwischen Gare de l’Est und Gare du Nord, denn da spuckt mein Programm eine Bummelzugroute mit zweimal Umsteigen und über einer Stunde Fahrzeit aus, in der Realität kann man die Strecke in 10 Minuten laufen, da beide Bahnhöfe nur durch zwei Querstraßen getrennt sind. Die Preußen waren da vernünftiger, die haben die öchzig Berliner Kopfbahnhöfe irgendwann durch eine durchgehende Bahnstrecke ersetzt.

Beispiel (Bilder statt Worte und so)

Erlangen 2h ohne Umsteigen

In diesem Bild sieht man die Ziele, die man von Erlangen aus innerhalb von einer Stunde (rot) bzw. zwei Stunden (orange) umsteigefrei erreichen kann. Man erkennt folgende Verbindungen:

  • S-Bahn Bamberg-Erlangen-Nürnberg-Hartmannshof
  • Regionalzüge Nürnberg-Erlangen-Bamberg-Coburg und Nürnberg-Erlangen-Bamberg-Lichtenfels (und weiter nach Jena)
  • Regionalzüge Nürnberg-Erlangen-Bamberg-Schweinfurt-Würzburg
  • ICE-Verbindungen nach München über Ingolstadt bzw. Treuchtlingen und Augsburg
  • ICE-Verbindungen nach Halle und Leipzig über Erfurt

Die Fahrzeit von 2:45h oder so nach Jena ist natürlich alles andere als witzig, vor allem wenn man bedenkt dass man mit einem Schlenker über Erfurt inzwischen mal eben eine Stunde einsparen kann. Die Strecke über die Rampen des Thüringer Waldes stammt ja aus der Zeit als Deutschland noch nen Kaiser hatte (der nicht Beckenbauer hieß). Und da zuckelt man eben heute noch mit Tempo 70 herum.

Erlangen 2h mit einmal Umsteigen

Das ist der gleiche Kartenausschnitt (mit Link zur vollen Karte), nur dass man nun (fast) alle Ziele sieht, die man mit einmaligem Umsteigen in zwei Stunden erreichen kann. Deutlich zu erkennen sind die sternförmig von Nürnberg ausgehenden Bahnstrecken Richtung Würzburg, Regensburg, Ansbach und Treuchtlingen. Zahlreiche weitere neue Verbindungen kommen in den ICE-Knoten Erfurt und Ingolstadt zustande. Weniger sichtbar ist die Tatsache, dass man nun auch einige Ziele, die man umsteigefrei erreichen kann, durch einmaliges Umsteigen schneller erreichen kann (z.B. mit dem ICE von Erlangen nach Nürnberg und von dort weiter mit der S-Bahn Richtung Hartmannshof).

Erlangen >6h ohne Umsteigen

Wenn man nun die Reisezeit verlängert und nicht umsteigen mag, kommt am Ende dies hier heraus: In Richtung Süden ist nach etwas über einer Stunde Schluss in München. Nach Norden geht es über Leipzig und Halle hinaus über Bitterfeld und Wittenberg nach Berlin und von dort aus landet man nach ungefähr fünf Stunden Hamburg bzw. nach etwa 5h 30min Rostock.

Und nun kann man mit den Parametern Reisezeit und Umsteigezahl herumspielen… Die allermeisten Verbindungen sind ab 3x Umsteigen optimal – zumindest innerhalb Deutschlands. Man erreicht auch so ziemlich jede Ecke Deutschlands in weniger als acht Stunden von Erlangen aus.

Im Gesamtbild sieht das bei einer maximalen Reisezeit von zehn Stunden dann so aus:

Von Erlangen aus in 10h bei unlimitierter Umsteigezahl

Die ersten Stationen im Ausland sind hier in Österreich, etwa Salzburg und Innsbruck, aber auch Strasbourg, später gefolgt von den Benelux-Staaten. Noch etwas später folgt die Schweiz, hier macht sich der Umweg um den Bodensee zeitlich bemerkbar. In Frankreich fallen die isoliert liegenden Punkte im Westen und Süden auf – das sind TGV-Bahnhöfe, von denen aus man wiederum mit Regionalzügen weiterfahren könnte – so entsteht die sternförmige Struktur um Dijon herum. Ebenso fällt auf, dass man Paris deutlich schneller erreicht als viele Orte im Nordosten Frankreichs, etwa Rouen. Im Osten hingegen fällt auf, dass man hier nur vergleichsweise langsam vorankommt, in Polen erreicht man Wroclaw und Poznan noch relativ schnell, aber viel weiter geht es nicht. Weiter südlich macht sich hingegen die schnelle Durchquerung Österreichs in Richtung Ungarn bemerkbar.

Von Leipzig aus in alle Welt

Mein Kumpel wollte nun aber nicht von Erlangen aus losfahren, sondern von Leipzig. Also hat mein Programm das alles auch nochmal lustig für den Startbahnhof Leipzig Hbf ausgerechnet. Und das sieht dann ungefähr so aus:

Von Leipzig aus ohne Umsteigen mit max. 10h Reisezeit

Sieht ja soweit ganz nett aus, hat aber einen großen Haken – es ist nicht die ganze Wahrheit. Wie weiter oben beschrieben gibts am Leipziger Hauptbahnhof ja noch die Tiefbahnsteige. Und die sind betrieblich ein anderer Bahnhof. Das heißt es fehlen hier die ganzen S-Bahnen des mitteldeutschen S-Bahn-Netzes, die von Leipzig aus in Richtung Halle, Dessau, Wittenberg, Hoyerswerda oder Zwickau fahren. Sobald man aber Umsteigevorgänge mit in Betracht zieht passt das wieder halbwegs, da man natürlich auch anderswo (z.B. Leipzig-Messe in die S-Bahn einsteigen kann, die dann zu den Tiefbahnsteigen fährt). Allerdings braucht man so halt rein rechnerisch 22 min, um vom Hauptbahnhof zum Marktplatz zu kommen. Da wäre man zu Fuß ungefähr doppelt so schnell… Ich gehe trotzdem mal aus, dass das meinem Kumpel egal ist – er wohnt in Leipzig, da will er kaum zum Marktplatz fahren, sondern eher Fernverkehrsreiseziele der Größenordnung Amsterdam, Prag oder Paris aufgelistet haben. Wobei… Leipzig ist ja ein klein Paris (sagte Goethe, und Goethe muss es wissen, der wusste schließlich vieles und das meiste besser).

Also weiter im Text, das eigentliche Endergebnis ist ja die Karte mit maximalen Umsteigeverbindungen und zehn Stunden Reisezeit. Und die sieht so aus:

Von Leipzig aus in 10h mit max. 9mal Umsteigen

Wenn man das nun mit der weiter oben gezeigten Karte von den Erlanger Verbindungen vergleicht, stellt man im Wesentlichen folgendes fest: Richtung Westen ändert sich nicht viel, man schafft es entlang der TGV-Strecken in Frankreich nicht ganz so weit Richtung Marseille und Bordeaux, aber Paris wird bequem im gesetzten Zeitraum erreicht. Richtung Norden kommt man ein gutes Stück weiter, nämlich bis zu den nördlichen Spitzen Dänemarks sowie nach Schweden. Richtung Süden kommt man erwartungsgemäß nicht so weit, Erlangen liegt halt schon mal 1.5h Fahrzeit weiter südlich. Venedig muss man damit von der Liste streichen, ebenso den Großteil Sloweniens und Ungarns. Im Osten hingegen kommt man von Leipzig aus wieder weiter, so erreicht man in Polen eine ganze Reihe weiterer Ziele wie Krakau, Warschau oder Danzig.

Ein Kommentar zu “Ferrophile Breitensuche”

  1. CWeasel

    Man schafft’s sogar in unter zwei Stunden von Leipzig bis Chemnitz! 😉

    Tolle, aufwändige Analyse!

Einen Kommentar schreiben