In Betrieb befindliche Bahnhöfe und Haltestellen für Personenfernverkehr ermitteln?

Moin,

ich versuche gerade mal alle Bahnhöfe und Haltestellen des Personenschienenverkehrs (Regional- und Fernverkehr) zu ermitteln. Dabei bin ich auf diese Query gestoßen, die alle Haltepunkte (railway=halt) sowie alle Bahnhöfe (railway=station) findet. Soweit so gut.

Nun bin ich aber auch sofort auf den Auricher Bahnhof gestoßen, von dem ich weiß, dass er im Schienennetz nicht mehr regulär im Personenverkehr bedient wird.

Nun schreibt der Nutzer “Nakaner” im alten Forum zur Anfrage vor vielen Jahren, wie stillgelegte Bahnstrecken und Bahnhöfe zu taggen seien, dass disused:railway:station zu nutzen ist.

Auf dem Auricher Bahnhöf befindet sich nun aber folgende Diskussion: Note: 1727900 | OpenStreetMap

Ich kann sehr gut nachvollziehen, dass der Bahnhof in einem spezifischen Eisenbahner-Kontext nicht “disused” erscheint - zum Beispiel wenn der Bahnhof für Spezialevents wie Jubiläen noch genutzt wird, um mal ein aus der Luft gegriffenes Beispiel zu konstruieren. Die Bahnstrecke und der Bahnhof ist dann zwar noch in Betrieb, jedoch nur nicht für die Breite der Gesellschaft im Rahmen des Personenschienenverkehrs.

Es ist also doch bedeutend komplexer, als zunächst gedacht. Ich stelle mir an der Stelle die Frage, ob es grundsätzlich überhaupt möglich ist, alle Bahnhöfe des Personenschienenverkehrs und sich “in Betrieb” befinden, also Teil einer Bahnlinie sind, zuverlässig zu ermitteln. Vermutlich gibt es auch irgendwo in Deutschland Güterbahnhöfe, die als railway=station oder railway=halt getaggt sind und mir dann fälschlicherweise als “Personenbahnhof” angezeigt würden.

Daher meine Frage, ob es da noch ein bestimmtes Tag gibt, das ich in der obigen Query vielleicht heranziehen könnte, um meinen Anwendungsfall zu lösen?

Viele Grüße und danke,

Stefano

Edit: Ich bin gerade auf diese Seite gestoßen: Eisenbahnkarte Deutschland
Diese nutzt offenbar die Haltestellen der Deutschen Bahn von hier: Haltestellendaten - Datensätze - Open-Data-Portal – Deutsche Bahn Datenportal ABN
Das CSV von dort enthält eine Spalte “Betreiber” und in der Tat findet sich an einigen Stichproben von Bahnhöfen ein operator=DB Netz AG. Vielleicht ist das der Schlüssel? Zwar ist DB Netz AG nicht “DB Station und Service AG” wie im jüngsten CSV, aber das ist ja schonmal ein Anhaltspunkt, dem ich nachgehen könnte.

Moin,

TL/DR;
Die Deutsche Bahn bietet mit ihren Haltestellendaten eine Quelle von eindeutig identifizierbaren Bahnhöfen zur Personenbeförderung. Vorschlag OSM mit diesen Daten als Import anzureichern, Lizenz ist für OSM geeignet nehme ich an (ist explizit für OSM Import vorgesehen)

Die lange Version:
ich habe mir die Datenprobleme etwas genauer angesehen und habe die uic_ref entdeckt, die einen internationalen Identifier darstellt für Bahnhöfe, analog etwa dem IATA Code bei Flughäfen.
Der Auricher Bahnhof hat keine uic_ref gepflegt, also könnte man daraus schließen, man bräuchte nur alle Bahnhöfe zu ermitteln mit “uic_ref”. Dem ist aber nicht so: overpass turbo

Scheinbar die komplette Linie zwischen Hamburg-Harburg und Cuxhaven hat keinen uic_ref, wird aber vom RE 5 der DB selbst bedient. Viele Haltestellen und Bahnhöfe haben die uic_ref korrekt gepflegt. Andere Linien, etwa die Verbindung Bremerhaven ↔ Bremervörde wird von privaten Unternehmen bedient, die im Haltestellen-CSV der DB auch eine uic_ref haben, in OSM also lediglich fehlen.

Das heißt, die Idee wäre, man könnte den uic_ref tatsächlich nutzen, um mit dem entstehenden Datenbild ein Netz von Regional- und Fernbahnhöfen zur Personenbeförderung ableiten zu können. Mit dem sowieso in OSM vorgesehenen uic_ref sind vermutlich auch noch andere Use Cases abbildbar, die Kollegen von openrailwaymap wissen dazu bestimmt mehr.

Nun haben wir 2 Datentöpfe:

  • Einmal OSM, mit einer vollständigen Liste aller Bahnhöfe und Haltestellen
  • Das CSV der DB, das eine Untermenge aller jener ist, die sich zum Zeitpunkt der CSV Erstellung in Betrieb befanden.

Ich könnte also einen Batch Import bzw. “Merge” programmieren, vorausgesetzt dass …

  1. die Lizenz des CSV geklärt ist → Die Daten wurden explizit für OSM (mit-) veröffentlicht: https://data.deutschebahn.com/dataset/data-haltestellen.html#

Dieser Datensatz wird bereitgestellt unter der Lizenz Creative Commons Attribution 4.0 International (CC BY 4.0). Wenn die Daten der Deutschen Bahn (DB) Bestandteil des OpenStreetMap-Datenbankwerkes werden, genügt eine Nennung der Deutschen Bahn AG in der Liste der Beitragenden. Eine Nennung der DB bei jeder Verwendung der Daten auch durch Lizenznehmer des oben genannten Datenbankwerks ist dann nicht mehr erforderlich. Eine indirekte Nennung (Verweis auf Herausgeber des Datenbankwerks, der wiederum auf die DB verweist) genügt.

  1. wir gesichert wissen, dass die Haltestellendaten der DB aus dem CSV nur Haltestellen zur Personenbeförderung darstellen,
  2. einen aktuellen Datensatz von der DB bekommen, der jüngste ist von 2020
  3. den Datensatz als Batch Prozess gegen alle gepflegten OSM Bahnhöfe und Haltestellen laufen lassen und fehlende uic_ref vervollständigen.

Ein “Merge” Script Ansatz, um einen Match & Merge Algorithmus zu bauen, könnte so aussehen:

  1. Für jeden Datensatz im CSV der DB: Nimm Lat/Lon und finde zugehörigen OSM Bahnhof oder Haltestelle
  2. Setze uic_ref, name, operator und Verkehrstyp (Regio, Fern, etc.)
  3. Done

Den 2. Step könnte man erstmal vorsichtig gestalten, so dass man zunächst nur Tags hinzufügt, die noch nicht existieren, jedoch keine bestehenden überschreibt usw.

Klingt das sinnig oder wurde das schon versucht, oder was würde dagegen sprechen? Für mich sieht es jedenfalls nicht so aus, als wenn die Datensätze der Deutschen Bahn jemals importiert wurden.

Das einzige was ich noch bemerkenswert finde ist, dass bspw. Hemmoor durchaus mal die uic_ref lt. DB CSV hatte und auch damit angelegt worden ist, aber in Revision 9 entfernt wurde (wie auch bei anderen Haltestellen auf dieser Linie)

VG,

Stefano

1 Like

Ohne die uic_ref Daten der Deutschen Bahn oder von anderswo in OSM rein zu holen wird es aus meiner Sicht auch nicht gehen in Betrieb befindliche Personenbahnhöfe zu ermitteln. Man sehe sich mal diese “Haltestellen” an:

Theoretisch gibt es als weitere Quelle das zentrale Haltestellenverzeichnis des DELFI e.V. Dieses hat eigentlich Attribute Condition und State, aus denen sich Informationen ableiten ließen, aber sie sind nicht durchgängig gepflegt (siehe issues #1 und #14). Anhand des GTFS-Datensatzes des DELFI eV ermittle ich diejenigen, die definitiv noch bedient werden, allerdings fehlen in diesem auch wieder manche Linien.

Aus meiner Sicht sollten perspektivisch alle Haltestellen und Bahnhöfe mit ihren jeweiligen DHIDs als ref:IFOPT ergänzt werden. Meine bisherigen Matching-Ansätze (siehe älterer Blog-Artikel und aktuelle Ergebnisse) haben jedoch (zumindest was die einzelnen Steige angeht) eine zu hohe Fehlerquote, um dies zu automatisieren.

VG
Holger

Nun bin ich aber auch sofort auf den Auricher Bahnhof gestoßen, von dem ich weiß, dass er im Schienennetz nicht mehr regulär im Personenverkehr bedient wird.

Wichtig ist die Unterscheidung zwischen der Infrastruktur on the ground und dem Verkehr auf dieser Infrastruktur.

railway=station oder railway=halt kennzeichnet zunächst einmal nur die bauliche Einrichtung vor Ort, also eine Bahnanlage mit Bahnsteigen, die für den Personenverkehr vorgesehen ist (ganz grob gesagt). Ob die Station regulär von Personenzügen bedient wird, sagen die beiden Tags nicht aus.

Ich kann sehr gut nachvollziehen, dass der Bahnhof in einem spezifischen Eisenbahner-Kontext nicht “disused” erscheint - zum Beispiel wenn der Bahnhof für Spezialevents wie Jubiläen noch genutzt wird, um mal ein aus der Luft gegriffenes Beispiel zu konstruieren. Die Bahnstrecke und der Bahnhof ist dann zwar noch in Betrieb, jedoch nur nicht für die Breite der Gesellschaft im Rahmen des Personenschienenverkehrs.

Ganz genau, so wird das in OSM gehandhabt. disused bedeutet, dass die baulichen Einrichtungen (Gleise, Bahnsteig, Bahnsteigzuwege, etc.) noch vorhanden sind und ggf. wieder in Betrieb genommen werden könnten, aber nicht mehr genutzt und unterhalten werden. Ein Zug kann dort nicht grundsätzlich nicht mehr fahren, weder Personen- noch Güterverkehr.

Ist die Infrastruktur weiterhin in Betrieb und wird regelmäßig unterhalten, wäre disused also falsch. Wenn die Strecke von Zügen befahren werden kann (und es hin und wieder zumindest durch Sonderzüge wird) und es im Bahnhof intakte Bahnsteige gibt, handelt es sich definitiv nicht um eine stillgelegte Strecke oder einen stillgelegten Bahnhof, auch wenn dort keine regelmäßigen Personenzüge fahren.

Es ist also doch bedeutend komplexer, als zunächst gedacht. Ich stelle mir an der Stelle die Frage, ob es grundsätzlich überhaupt möglich ist, alle Bahnhöfe des Personenschienenverkehrs und sich “in Betrieb” befinden, also Teil einer Bahnlinie sind, zuverlässig zu ermitteln. Vermutlich gibt es auch irgendwo in Deutschland Güterbahnhöfe, die als railway=station oder railway=halt getaggt sind und mir dann fälschlicherweise als “Personenbahnhof” angezeigt würden.

Für Güterbahnhöfe gibt es das Tag railway=yard, für Betriebsbahnhöfe railway=service_station. Wenn Personenbahnhöfe falsch als railway=station oder railway=halt getaggt sein sollten, spricht nichts dagegen, das Tagging zu korrigieren.

Daher meine Frage, ob es da noch ein bestimmtes Tag gibt, das ich in der obigen Query vielleicht heranziehen könnte, um meinen Anwendungsfall zu lösen?

Der in meinen Augen sinnvollste Ansatz wäre, ausgehend von den Routenrelationen alle Stationen zu ermitteln, die Teil einer SPV-Linie sind. Dazu musst du alle Mitglieder mit der Rolle stop herausfiltern. Beispiel für eine Zugroutenrelation: Relation: ‪RE15: Münster => Emden‬ (‪69561‬) | OpenStreetMap

Ein Vorteil dieser Methode ist, dass du recht genau die gewünschten Stationen filtern kannst. Möchtest du zum Beispiel nur ICE-Halte, dann fragst du eben nur Routenrelationen ab, bei denen ref mit ICE beginnt.

Ebenso kannst du auf diese Weise auch sehr gut die oben angesprochenen Güterbahnhöfe, die evtl. falsch als Personenbahnhöfe getaggt sind, ausschließen. Die sind nämlich nicht Teil einer Routenrelation.

Es gibt aber auch ein paar Schwierigkeiten:

  1. Die Mitglieder mit der Rolle stop sind nicht die Bahnhofs-Objekte mit railway=station, sondern die Haltepositionen, von denen es in einer Station mehrere gibt. Du wirst also noch Duplikate zusammenführen müssen.
  2. Die Abfrage ist auf jeden Fall komplizierter als in deiner verlinkten Overpass-Abfrage.
1 Like

Diese nutzt offenbar die Haltestellen der Deutschen Bahn von hier: Haltestellendaten - Datensätze - Open-Data-Portal – Deutsche Bahn Datenportal ABN

Ich habe mir den Datensatz nicht näher angesehen, aber zwei Dinge fallen mir dazu spontan ein:

  1. Die Daten wurden vor drei Jahren zuletzt aktualisiert. Es ist fraglich, ob die Daten noch dem aktuellen Stand entsprechen. Seit 2020 sind definitiv neu in Betrieb genommene Stationen hinzugekommen, aber auch Stationen weggefallen, die nicht mehr angefahren werden.
  2. Da der Datensatz von der Deutschen Bahn stammt und laut Beschreibung die Stationen von DB Station & Service enthält, dürften sehr wahrscheinlich viele Stationen fehlen, die von anderen Eisenbahnunternehmen betrieben werden.

Das CSV von dort enthält eine Spalte “Betreiber” und in der Tat findet sich an einigen Stichproben von Bahnhöfen ein operator=DB Netz AG. Vielleicht ist das der Schlüssel? Zwar ist DB Netz AG nicht “DB Station und Service AG” wie im jüngsten CSV, aber das ist ja schonmal ein Anhaltspunkt, dem ich nachgehen könnte.

Der Infrastrukturbetreiber lässt keine Rückschlüsse darauf, ob eine Strecke durch regulären Personenverkehr bedient wird oder nicht. So verkehren auf den Strecken der Rurtalbahn reguläre RB-Linien.

1 Like

Hallo rurseekatze,

vielen lieben Dank für die ausführliche Antwort. Deine vorgeschlagene Lösung sieht sehr vielversprechend aus. Es gibt sogar sehr aufschlussreiche Details an den Routen, die für die Zielgruppe sehr hilfreich sein dürfte: https://overpass-turbo.eu/s/1rn5

Die Häufung der einzelnen Bahnhöfe bzw. Haltestellen, z. B. Hamburg schön zu sehen, sollte mit ein bisschen Fleiß kein Problem für mich sein. Toll!

Hälst du es für sinnvoll, die uic_ref Idee trotzdem umzusetzen, sofern ein aktueller Datensatz erhältlich sein sollte? Immerhin ist ein Ansprechpartner auf der Seite der DB zu finden. Die sind vielleicht bereit, den Datensatz zu erneuern.

Zu deinem 2. Punkt: In 3 von 3 Stichproben waren auch für diese Haltepunkte die uic_ref im CSV der DB enthalten. Das ist natürlich nicht repräsentativ. Selbst wenn ein paar Haltepunkte im CSV fehlen, so könnte das CSV ja dennoch geeignet sein die Datenlage zu verbessern, oder gibt es da noch grundsätzliche andere Bedenken?

Wenn nein, dann würde ich mir das Vorhaben mal notieren. Ist ja kein riesen Aufwand sowas.

VG und danke,

Stefano

Hallo Stefano,

Dein Ziel ist sicher eine sinnvolle Verbesserung, speziell mit der “vorsichtigen” Gestaltung bei Step 2, auf die Du vermutlich nicht verzichten kannst.

Was Du auf jeden Fall beachten solltest, ist der Verhaltenskodex für automatisierte Änderungen.

Ich wünsche Deinem Vorhaben Erfolg,
Vinzenz

Daher meine Frage, ob es da noch ein bestimmtes Tag gibt, das ich in der obigen Query vielleicht heranziehen könnte, um meinen Anwendungsfall zu lösen?

Mir ist gerade noch eine einfachere Variante zu meinem vorherigen Vorschlag eingefallen. Ja, da gibt es ein bestimmtes Tag, nämlich public_transport=station. Tag:public_transport=station - OpenStreetMap Wiki

Vorsicht: Das Tag wird nicht allein für “stations” im Sinne von Bahnhöfen verwendet, sondern für alle größeren ÖPNV-Stationen, also auch Busbahnhöfe oder Fährterminals. Wenn du die Kombination public_transport=station + railway=station oder railway=halt abfragst, kannst du diese aber herausfiltern. overpass turbo

Die Wikiseite sagt dazu auch:

the public_transport=station tag is used only on the stations interesting for passenger transport

Also genau das, was du suchst.

Das lässt sich mit Overpass dann auch deutlich einfacher abfragen als der Weg über die Routenrelationen.

Zur Überprüfung der Qualität kannst du dir auch noch alle railway=station und railway=halt anschauen, bei denen kein public_transport=station getaggt ist: overpass turbo. In Niedersachsen scheint das wirklich nur bei den Museums-/Touristik-/Draisinenbahnen der Fall zu sein. Im Raum Freiburg wiederum gibt es jedoch noch etliche Stationen ohne dieses Tag. Es sind also noch einige Taggingkorrekturen notwendig.

2 Likes

Ohne die uic_ref Daten der Deutschen Bahn oder von anderswo in OSM rein zu holen wird es aus meiner Sicht auch nicht gehen in Betrieb befindliche Personenbahnhöfe zu ermitteln. Man sehe sich mal diese “Haltestellen” an:

Um solche Stationen von “richtigen” Bahnhöfen unterscheiden zu können, wurden in der Vergangenheit diverse Tags wie station=miniature oder usage=tourism genutzt. Ein einheitliches Tagging gibt es bisher nicht. Da müsste sich mal jemand finden, der ein Taggingschema dafür entwickeln möchte.

Wenn du die von mir vorgeschlagenen Varianten (public_transport=station oder Routenrelationen) nutzt, kannst du diese Stationen aber sauber herausfiltern.

Das heißt, die Idee wäre, man könnte den uic_ref tatsächlich nutzen, um mit dem entstehenden Datenbild ein Netz von Regional- und Fernbahnhöfen zur Personenbeförderung ableiten zu können. Mit dem sowieso in OSM vorgesehenen uic_ref sind vermutlich auch noch andere Use Cases abbildbar, die Kollegen von openrailwaymap wissen dazu bestimmt mehr.

Ich denke, dass die Abfrage nach uic_ref im Ergebnis vielleicht dem entspricht, was du suchst, aber sozusagen als Korrelation und nicht als Kausaliät. uic_ref ist letztlich nur eine ID, die nicht aussagt, ob eine Station regulär bedient wird, höchstens indirekt.

Ein konstruiertes Beispiel dazu: Wenn eine RB-Linie eingestellt wird, aber die Strecke und die Stationen für den Museumsbetrieb in Betrieb bleiben, sollten dann automatisch die uic_ref von den Stationen entfernt werden, damit diese nicht mehr als regulär bediente Personenbahnhöfe gelten?

Probleme sehe ich auch in Ländern, in denen es diese Nummern gar nicht gibt oder sie mangels Quellen nicht in OSM erfasst werden können. Als internationales Projekt sollten wir bemüht sein, auch dort allein mit vor Ort erfassbaren Daten zwischen regulären und unregelmäßig bedienten Stationen unterscheiden zu können.

Abgesehen davon sehe ich das Tag inzwischen auch kritisch hinsichtlich der Überprüfbarkeit. Zur Erfassung dieser Angaben sind wir auf externe Datensätze angewiesen, da die Information nicht On the Ground erfassbar ist. In einigen Ländern können wir die Nummern daher schon gar nicht erfassen, weil es keine geeigneten Open-Data-Datensätze gibt. Die Mapper selbst können im Grunde auch nicht nachvollziehen, ob die Nummer überhaupt richtig ist. Im Grunde handelt es sich bis auf das Länderkürzel der ersten zwei Ziffern um eine willkürliche Zahl.

Darüber hinaus sind die Nummern auch gar nicht so einheitlich, wie das auf den ersten Blick scheint. Aus eigener Erfahrung mit der intensiven Beschäftigung diverser Open-Data-Datensätze aus dem ÖPNV-Bereich weiß ich, dass Stationen auch mehrere verschiedene Nummern haben können. Sonderfälle, mit denen ich zu tun hatte, waren zum Beispiel:

  1. Eine Station in Deutschland hatte im DB-Datensatz eine Nummer beginnend mit 80. Im Fahrplan der SBB hatte die Station eine Nummer, die auch mit 80 beginnt, aber sich in den übrigen Ziffern unterschieden hat.
  2. Bei Infrastruktur, die in Land X liegt, aber durch eine Bahngesellschaft aus Land Y betrieben wird (z.B. Basel Bad, Region Schaffhausen), gab es je nach Datensatz verschiedene Nummern mit verschiedenen Länderkürzeln (die DB hatte für die Station eine 80er-Nummer, die SBB eine 85er-Nummer).

Ich könnte also einen Batch Import bzw. “Merge” programmieren, vorausgesetzt dass

Klingt das sinnig oder wurde das schon versucht, oder was würde dagegen sprechen? Für mich sieht es jedenfalls nicht so aus, als wenn die Datensätze der Deutschen Bahn jemals importiert wurden.

Generell würde ich davon abraten, automatisch per Script Daten zu bearbeiten. Zu groß ist die Gefahr, dass durch Programmierfehler, nicht berücksichtige Sonderfälle oder Fehler in den externen Datensätzen Datenmüll entsteht. Dazu siehe auch DE:Automated Edits code of conduct - OpenStreetMap Wiki.

Wenn, dann sollten solche Importe oder Abgleiche manuell erfolgen, zum Beispiel mit einer Mapillary-Challenge oder einer Karte, die beide Datensätze vergleicht und Unterschiede anzeigt. Es gibt in OSM einfach schon zu viele Daten, als dass man automatisiert übernehmen könnte. Ohne Mapper, die sich die Datenunterschiede ansehen und entscheiden, was übernommen wird und was nicht, wird es nicht funktionieren.

Hälst du es für sinnvoll, die uic_ref Idee trotzdem umzusetzen, sofern ein aktueller Datensatz erhältlich sein sollte? Immerhin ist ein Ansprechpartner auf der Seite der DB zu finden. Die sind vielleicht bereit, den Datensatz zu erneuern.

Wenn nein, dann würde ich mir das Vorhaben mal notieren. Ist ja kein riesen Aufwand sowas.

Wie oben erklärt, halte ich persönlich vom Import der uic_ref nicht besonders viel. Den Abgleich von Namen, Betreibern, Lage, etc. fände ich dagegen eine sinnvolle Sache. Falls du dich damit beschäftigen möchtest, fände ich das super!

Das einzige was ich noch bemerkenswert finde ist, dass bspw. Hemmoor durchaus mal die uic_ref lt. DB CSV hatte und auch damit angelegt worden ist, aber in Revision 9 entfernt wurde (wie auch bei anderen Haltestellen auf dieser Linie)

Der Mapper hat die Daten anscheinend von dem Stationspunkt an die stop_area übertragen. Kann man sich drüber streiten, ob das richtig ist und ob die Daten nur an einer Stelle oder doppelt gepflegt werden sollten. Würde hier zu weit ausholen und sollte in einem separaten Thema diskutiert werden.

Da der Datensatz von der Deutschen Bahn stammt und laut Beschreibung die Stationen von DB Station & Service enthält, dürften sehr wahrscheinlich viele Stationen fehlen, die von anderen Eisenbahnunternehmen betrieben werden.

Nach einem Blick in die Daten muss ich die Aussage korrigieren: Stationen anderer Eisenbahninfrastrukturunternehmen scheinen doch enthalten zu sein, so weit ich das stichprobenartig feststellen konnte.

Ich habe den Stationsdatensatz wohl mit anderen Datensätzen wie z.B. https://data.deutschebahn.com/dataset/geo-betriebsstelle.html verwechselt. Dort ist tatsächlich nur nicht-DB-Infrastruktur enthalten.

Ich finde dazu gerade noch nichts, aber gerade wenn es Personenfernverkehr in Deutschland sein soll, könnte vielleicht noch die Bahnhofskategorie railway:station_category relevant sein