From 08ba0611c2c6a0e022a9fd0aff6399c7b957a9e7 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sat, 27 Mar 2021 14:56:16 +0100 Subject: switch to geolocation-based station matching --- bin/efa-gw | 17 +++------- bin/merge-haltestellen-and-iris | 72 +++++++++++++++++++++++++++++++++++++++++ share/vrr.json | 1 + 3 files changed, 77 insertions(+), 13 deletions(-) create mode 100755 bin/merge-haltestellen-and-iris create mode 100644 share/vrr.json diff --git a/bin/efa-gw b/bin/efa-gw index fc6e949..4d92e2c 100755 --- a/bin/efa-gw +++ b/bin/efa-gw @@ -6,7 +6,6 @@ import argparse import aiohttp from aiohttp import web -import csv import json headers = { @@ -19,17 +18,6 @@ occupancy_map = {"MANY_SEATS": 1, "FEW_SEATS": 2, "STANDING_ONLY": 3} eva_to_name = dict() -def load_eva_to_name(filename): - ret = dict() - with open(filename, "r") as f: - f.readline() - cr = csv.reader(f, delimiter=";") - for city, place, _, _, _, _, _, name, _, eva, transports in cr: - if "TRAIN" in transports: - ret[int(eva)] = name - return ret - - def get_occupancy(occupancy): try: return occupancy_map[occupancy] @@ -75,7 +63,10 @@ if __name__ == "__main__": parser.add_argument("--prefix", type=str, metavar="PATH", default="/") args = parser.parse_args() - eva_to_name = load_eva_to_name(args.eva_csv) + with open("share/vrr.json", "r") as f: + for eva, (city, stop, name) in json.load(f).items(): + eva_to_name[int(eva)] = name + app = web.Application() app.add_routes([web.get(f"{args.prefix}{{eva}}.json", handle_eva)]) web.run_app(app, host="localhost", port=args.port) diff --git a/bin/merge-haltestellen-and-iris b/bin/merge-haltestellen-and-iris new file mode 100755 index 0000000..4cc64ca --- /dev/null +++ b/bin/merge-haltestellen-and-iris @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# vim:tabstop=4 softtabstop=4 shiftwidth=4 textwidth=160 smarttab expandtab colorcolumn=160 + +import csv +import json + +from geopy.distance import distance +from progress.bar import Bar + + +class ProgressBar(Bar): + suffix = "%(percent).0f%% [%(elapsed_td)s/%(eta_td)s]" + + +vrr_stops = list() + +with open("haltestellenliste.csv", "r", encoding="iso-8859-1") as f: + f.readline() + cr = csv.reader(f, delimiter=";") + for city, place, _, _, _, lon, lat, stop, _, _ in cr: + lon = lon[:5] + lon[6:] + lat = lat[:6] + lat[7:] + try: + vrr_stops.append( + (stop.strip(), float(lat), float(lon), city.strip(), place.strip()) + ) + except ValueError: + # invalid entry + pass + +with open("/home/derf/var/code/Travel-Status-DE-IRIS/share/stations.json", "r") as f: + iris_stops = json.load(f) + +output = dict() + +for iris_stop in ProgressBar(max=len(iris_stops)).iter(iris_stops): + eva = iris_stop["eva"] + iris_name = iris_stop["name"] + iris_lat, iris_lon = iris_stop["latlong"] + + for stop, lat, lon, city, place in vrr_stops: + if stop == iris_name: + output[eva] = city, place, stop + break + + if eva in output: + continue + + candidates = list() + for stop, lat, lon, city, place in vrr_stops: + if abs(lat - iris_lat) < 0.01 and abs(lon - iris_lon) < 0.01: + candidates.append( + ( + stop, + lat, + lon, + city, + place, + distance((lat, lon), (iris_lat, iris_lon)).m, + ) + ) + + if not candidates: + continue + + candidates.sort(key=lambda x: x[5]) + + stop, _, _, city, place, _ = candidates[0] + output[eva] = city, place, stop + +with open("share/vrr.json", "w", encoding="utf-8") as f: + json.dump(output, f, ensure_ascii=False) diff --git a/share/vrr.json b/share/vrr.json new file mode 100644 index 0000000..5541ef2 --- /dev/null +++ b/share/vrr.json @@ -0,0 +1 @@ +{"8000001": ["Aachen", "Hbf", "Aachen Hbf"], "8070704": ["Aachen", "Schanz Bf", "Aachen Schanz Bf"], "8000406": ["Aachen", "Rothe Erde", "Aachen Rothe Erde"], "8000437": ["Ahaus", "Ahaus", "Ahaus"], "8000441": ["Ahlen (Westf)", "Ahlen (Westf)", "Ahlen (Westf)"], "8000477": ["Kerken", "Aldekerk Bahnhof", "Kerken Aldekerk Bahnhof"], "8000500": ["Alpen", "Alpen Bahnhof", "Alpen Bahnhof"], "8000513": ["Altena (Westf)", "Bahnhof", "Altena (Westf) Bf"], "8000331": ["Andernach", "Andernach", "Andernach"], "8000579": ["Düsseldorf", "Angermund S", "D-Angermund S"], "8000584": ["Willich", "Anrath Bf", "Willich Anrath Bf"], "8000597": ["Fröndenberg", "Ardey Bf", "Fröndenberg Ardey Bf"], "8400071": ["Arnhem", "Arnhem Centraal", "Arnhem Centraal"], "8000605": ["Arnsberg (Westf)", "Arnsberg Bahnhof", "Arnsberg Bahnhof"], "8000611": ["Arsbeck", "Bahnhof", "Arsbeck Bf (x)"], "8000623": ["Ascheberg (Westf)", "Bf", "Ascheberg (Westf) Bf"], "8000624": ["Aschendorf (Emsland)", "Aschendorf", "Aschendorf"], "8000012": ["Au (Sieg)", "Au (Sieg)", "Au (Sieg)"], "8000674": ["Auw an der Kyll", "Auw an der Kyll", "Auw an der Kyll"], "8000694": ["Bad Breisig", "Bad Breisig", "Bad Breisig"], "8070073": ["Bad Honnef (Rhein)", "Bad Honnef (Rhein)", "Bad Honnef (Rhein)"], "8000713": ["Bad Honnef (Rhein)", "Bad Honnef (Rhein)", "Bad Honnef (Rhein)"], "8000711": ["Bad Hönningen", "Bad Hönningen", "Bad Hönningen"], "8000793": ["Balve", "Bf", "Balve Bf"], "8004251": ["Neubeckum", "Neubeckum", "Neubeckum"], "8000030": ["Bedburg (Erft)", "Bedburg (Erft) Bf", "Bedburg (Erft) Bf"], "8000842": ["Bedburg-Hau", "Bahnhof", "Bedburg-Hau Bahnhof"], "8400108": ["Kamp-Lintfort", "Marienstraße", "Kamp-Lintfort Marienstraße"], "8000355": ["Bergheim (Erft)", "Bergheim (Erft) Bf", "Bergheim (Erft) Bf"], "8000899": ["Bergisch Gladbach", "Bahnhof", "Bergisch Gladbach Bf"], "8000904": ["Beringhausen (Marsb)", "Beringhausen", "Beringhausen"], "8400112": ["Kamp-Lintfort", "Post", "Kamp-Lintfort Post"], "8000927": ["Bestwig", "Bestwig Bahnhof", "Bestwig Bahnhof"], "8000034": ["Betzdorf (Sieg)", "Betzdorf (Sieg)", "Betzdorf (Sieg)"], "8000036": ["Bielefeld", "Hbf", "Bielefeld Hbf"], "8000966": ["Bigge", "Bigge Bf", "Bigge Bf"], "8000978": ["Balve", "Binolen Bf", "Balve Binolen Bf"], "8000989": ["Birresborn", "Birresborn", "Birresborn"], "8001828": ["Bitburg-Erdorf", "Bahnhof Bitburg-Erdorf", "Bitburg-Erdorf"], "8001006": ["Blankenberg (Sieg)", "Blankenberg (Sieg)", "Blankenberg (Sieg)"], "8001008": ["Blankenheim (Eifel)", "Blankenheim (Wald)", "Blankenheim (Wald)"], "8400117": ["Krefeld", "Am Königspark", "Krefeld, Am Königspark"], "8000040": ["Bocholt", "Bocholt Bahnhof", "Bocholt Bahnhof"], "8000041": ["Bochum", "Hbf", "Bochum Hbf"], "8006711": ["Bochum", "West Bf", "Bochum West Bf"], "8001038": ["Bochum", "BO-Dahlhausen", "Bochum Dahlhausen"], "8001039": ["Bochum", "Ehrenfeld", "Bochum Ehrenfeld"], "8006710": ["Bochum", "Hamme", "Bochum Hamme"], "8000358": ["Bochum", "Langendreer", "Bochum Langendreer"], "8004474": ["Bochum", "Langendreer West", "Bochum Langendreer West"], "8001035": ["Bochum", "Riemke", "Bochum Riemke"], "8001072": ["Boisheim", "Boisheim Bf", "Viersen Boisheim Bf"], "8000044": ["Bonn", "Hauptbahnhof", "Bonn Hauptbahnhof"], "8098044": ["Bonn", "Hauptbahnhof", "Bonn Hauptbahnhof"], "8070075": ["Bonn", "Bonn-Beuel", "Bonn-Beuel"], "8070107": ["Bonn", "Hauptbahnhof", "Bonn Hauptbahnhof"], "8001082": ["Bonn", "Bonn-Bad Godesberg", "Bonn-Bad Godesberg"], "8070231": ["Bonn", "Bonn-Bad Godesberg", "Bonn-Bad Godesberg"], "8001083": ["Bonn", "Bonn-Beuel", "Bonn-Beuel"], "8001085": ["Bonn", "Mehlem Bf", "Bonn Mehlem Bf"], "8001086": ["Bonn", "Bonn-Oberkassel", "Bonn-Oberkassel"], "8070027": ["Bonn", "Bonn-Oberkassel", "Bonn-Oberkassel"], "8001097": ["Bork (Westf)", "Bahnhof", "Bork (Westf) Bf"], "8000346": ["Borken (Westf)", "Bf", "Borken Bf"], "8000047": ["Bottrop", "Bottrop Hbf", "Bottrop Hbf"], "8001107": ["Bottrop", "Boy Bf", "Bottrop-Boy Bf"], "8001108": ["Bottrop", "Bottrop-Vonderort Bf", "BOT-Vonderort Bf"], "8400098": ["Isselburg", "Schulzentrum", "Isselburg Schulzentrum"], "8400129": ["Sonsbeck", "Strohweg", "Sonsbeck Strohweg"], "8001112": ["Brachbach (Sieg)", "Brachbach", "Brachbach"], "8001113": ["Brachelen", "Brachelen Bf", "Brachelen Bahnhof"], "8400131": ["Sonsbeck", "Großmann", "Sonsbeck Großmann"], "8400132": ["Kevelaer", "Husenstraße", "Kevelaer Husenstraße"], "8001137": ["Bredelar", "Bredelar", "Bredelar"], "8001180": ["Nettetal", "Breyell Bf", "Nettetal Breyell Bf"], "8001182": ["Brilon", "Brilon Wald", "Brilon Wald"], "8000054": ["Brilon", "Brilon Wald", "Brilon Wald"], "8001186": ["Brohl (Kr Ahrweiler)", "Brohl", "Brohl"], "8001215": ["Brühl (Erftkreis)", "Brühl", "Brühl"], "8003252": ["Kierberg", "Bahnhof Kierberg", "Kierberg"], "8001264": ["Buir (Rheinl)", "Buir", "Buir"], "8001266": ["Buldern", "Bahnhof", "Buldern Bf"], "8001061": ["Bönen", "Bahnhof", "Bönen Bf"], "8004448": ["Nordbögge", "Bahnhof", "Nordbögge Bf"], "8001066": ["Menden (Sauerland)", "Bösperde Bf", "Menden Bösperde Bf"], "8001261": ["Kaarst", "Büttgen S", "Kaarst Büttgen S"], "8001323": ["Capelle (Westf)", "Bf", "Capelle (Westf) Bf"], "8001327": ["Castrop-Rauxel", "Hauptbahnhof", "Castrop-Rauxel Hbf"], "8001328": ["Castrop-Rauxel", "Süd Bf", "Castrop-Rauxel Süd Bf"], "8001329": ["Castrop-Rauxel", "Merklinde Bf", "Castrop-Rauxel Merklinde Bf"], "8001343": ["Coesfeld", "Schulzentrum", "Coesfeld, Schulzentrum"], "8000066": ["Coesfeld", "Bahnhof", "Coesfeld Bf"], "8400155": ["Goch", "Schiefe-Hansen-Straße", "Goch Schiefe-Hansen-Straße"], "8001357": ["Hagen", "Dahl Bf", "Hagen Dahl Bf"], "8001359": ["Dahlem (Eifel)", "Dahlem (Eifel)", "Dahlem (Eifel)"], "8001362": ["Dahlerbrück", "Bahnhof", "Dahlerbrück Bf"], "8001365": ["Wegberg", "Dalheim Bf", "Wegberg Dalheim Bf"], "8001384": ["Dattenfeld (Sieg)", "Bahnhof Dattenfeld", "Dattenfeld (Sieg)"], "8001388": ["Daufenbach (Zemmer)", "Bahnhof Daufenbach", "Daufenbach"], "8001390": ["Davensberg", "Bf", "Davensberg Bf"], "8001414": ["Densborn", "Densborn", "Densborn"], "8001432": ["Dorsten", "Deuten Bf", "Dorsten Deuten Bf"], "8001469": ["Dinslaken", "Dinslaken Bahnhof", "Dinslaken Bahnhof"], "8400180": ["Kranenburg(Nd'rhein)", "Germenseel", "Kranenburg Germenseel"], "8400186": ["Kranenburg(Nd'rhein)", "Germenseel", "Kranenburg Germenseel"], "8400181": ["Kranenburg(Nd'rhein)", "Hettsteeg", "Kranenburg Hettsteeg"], "8001506": ["Dormagen", "Bf", "Dormagen Bf"], "8001507": ["Dormagen", "Chempark", "Dormagen Chempark"], "8006709": ["Dorsten", "Dorsten Bf", "Dorsten Bf"], "8000080": ["Dortmund", "Dortmund Hbf", "Dortmund Hbf"], "8001517": ["Dortmund", "Knappschaftskrankenhaus", "Dortmund Knappschaftskrankenhaus"], "8001518": ["Dortmund", "DO-Möllerbrücke", "Dortmund Möllerbrücke"], "8001522": ["Dortmund", "Max-Planck-Gymnasium", "Dortmund Max-Planck-Gymnasium"], "8001520": ["Dortmund", "DO-Stadthaus", "Dortmund Stadthaus"], "8001521": ["Dortmund", "DO-Tierpark Bf", "Dortmund Tierpark Bf"], "8004419": ["Dortmund", "DO-Universität", "Dortmund Universität"], "8003946": ["Dortmund", "DO-West", "Dortmund West"], "8001523": ["Dortmund", "Aplerbeck Bf", "Dortmund Aplerbeck Bf"], "8001524": ["Dortmund", "Ederstraße", "Dortmund Ederstraße"], "8001526": ["Dortmund", "DO-Asseln Mitte", "Dortmund Asseln Mitte"], "8001527": ["Dortmund", "DO-Barop", "Dortmund Barop"], "8001529": ["Dortmund", "Brackel*103/Westfälische Str.", "DO-Brackel S/Westfälische Str."], "8001528": ["Dortmund", "Bövinghauser Straße", "Dortmund Bövinghauser Straße"], "8001530": ["Dortmund", "DO-Derne Bf", "Dortmund Derne Bf"], "8000081": ["Dortmund", "DO-Dorstfeld", "Dortmund Dorstfeld"], "8004230": ["Dortmund", "Dorstfeld Süd", "Dortmund Dorstfeld Süd"], "8001540": ["Dortmund", "DO-Germania", "Dortmund Germania"], "8001505": ["Dortmund", "DO-Huckarde", "Dortmund DO-Huckarde"], "8001532": ["Dortmund", "Huckarde Nord", "Dortmund Huckarde Nord"], "8000961": ["Dortmund", "DO-Hörde Bf", "Dortmund Hörde Bf"], "8001533": ["Dortmund", "DO-Kirchderne Bf", "Dortmund Kirchderne Bf"], "8001534": ["Dortmund", "Kirchhörde Bf", "Dortmund Kirchhörde Bf"], "8004269": ["Dortmund", "DO-Kley", "Dortmund Kley"], "8001536": ["Dortmund", "DO-Kruckel", "Dortmund Kruckel"], "8001537": ["Dortmund", "DO-Kurl Bf", "Dortmund Kurl Bf"], "8001535": ["Dortmund", "DO-Körne", "Dortmund Körne"], "8003916": ["Dortmund", "DO-Körne West", "Dortmund Körne West"], "8001538": ["Dortmund", "DO-Löttringhausen Bf", "Dortmund Löttringhausen Bf"], "8001516": ["Dortmund", "Beguinenstraße", "Dortmund Beguinenstraße"], "8001539": ["Dortmund", "DO-Lütgendortmund Nord Bf", "Dortmund Lütgendortmund Nord"], "8001541": ["Dortmund", "DO-Marten Bf", "Dortmund Marten Bf"], "8001542": ["Dortmund", "DO-Marten Süd", "Dortmund Marten Süd"], "8001543": ["Dortmund", "DO-Mengede Bf", "Dortmund Mengede Bf"], "8001519": ["Dortmund", "DO-Nette/Oestrich", "Dortmund Nette/Oestrich"], "8004288": ["Dortmund", "DO-Oespel", "Dortmund Oespel"], "8001544": ["Dortmund", "DO-Rahm Bf", "Dortmund Rahm Bf"], "8001515": ["Dortmund", "DO-Scharnhorst Bf", "Dortmund Scharnhorst Bf"], "8001549": ["Dortmund", "Somborn", "Dortmund Somborn"], "8001545": ["Dortmund", "Jasminstraße", "Dortmund Jasminstraße"], "8001525": ["Dortmund", "DO-Westerfilde", "Dortmund Westerfilde"], "8001546": ["Dortmund", "DO-Wickede", "Dortmund Wickede"], "8003936": ["Dortmund", "DO-Wickede West", "Dortmund Wickede West"], "8001531": ["Dortmund", "DO-Wischlingen", "Dortmund Wischlingen"], "8001558": ["Drensteinfurt", "Drensteinfurt", "Drensteinfurt"], "8001566": ["Duckterath", "Bahnhof", "Duckterath Bf"], "8005272": ["Duisburg", "Entenfang", "Duisburg Entenfang"], "8000086": ["Duisburg", "Duisburg Hbf", "Duisburg Hbf"], "8001600": ["Duisburg", "Buchholz Bf", "Duisburg Buchholz Bf"], "8001602": ["Duisburg", "Großenbaum S", "Duisburg Großenbaum S"], "8001605": ["Duisburg", "Hochfeld Süd Bf/RheinPark", "Hochfeld Süd Bf/RheinPark"], "8001607": ["Duisburg", "Meiderich Ost Bf", "Duisburg Meiderich Ost Bf"], "8000367": ["Duisburg", "Brückelstraße", "Duisburg Brückelstraße"], "8001608": ["Duisburg", "Obermeiderich Bf", "#NAME?"], "8001609": ["Duisburg", "Rahm BF", "Duisburg Rahm BF"], "8001611": ["Duisburg", "Ruhrort Bf", "Duisburg Ruhrort Bf"], "8001596": ["Duisburg", "Schlenk Bf", "Duisburg Schlenk Bf"], "8001612": ["Duisburg", "Wedau Bf", "Duisburg Wedau Bf"], "8001486": ["Dörpen", "Dörpen", "Dörpen"], "8001571": ["Dülken", "Dülken Bahnhof", "Dülken Bahnhof"], "8000083": ["Dülmen", "Bf", "Dülmen Bf"], "8000084": ["Düren (Rheinl)", "Düren", "Düren"], "8000082": ["Düsseldorf", "Flughafen Bahnhof", "D-Flughafen Bf"], "8001580": ["Düsseldorf", "Flughafen Terminal S", "D-Flughafen Terminal S"], "8001579": ["Düsseldorf", "Friedrichstadt S", "D-Friedrichstadt S"], "8000085": ["Düsseldorf", "Düsseldorf Hbf", "Düsseldorf Hbf"], "8001581": ["Düsseldorf", "Volksgarten S", "D-Volksgarten S"], "8001603": ["Düsseldorf", "Völklinger Straße S", "D-Völklinger Straße S"], "8001582": ["Düsseldorf", "Wehrhahn S", "D-Wehrhahn S"], "8001584": ["Düsseldorf", "Benrath S", "D-Benrath S"], "8001585": ["Düsseldorf", "Bilk S", "D-Bilk S"], "8001586": ["Düsseldorf", "Derendorf S", "D-Derendorf S"], "8001587": ["Düsseldorf", "Eller S", "D-Eller S"], "8001308": ["Düsseldorf", "Eller Mitte S", "D-Eller Mitte S"], "8001588": ["Düsseldorf", "Eller Süd S", "D-Eller Süd S"], "8001598": ["Düsseldorf", "Flingern S", "D-Flingern S"], "8001589": ["Düsseldorf", "Garath S", "D-Garath S"], "8001590": ["Düsseldorf", "Gerresheim S", "D-Gerresheim S"], "8001597": ["Düsseldorf", "Hamm S", "D-Hamm S"], "8004920": ["Düsseldorf", "Hellerhof S", "D-Hellerhof S"], "8001591": ["Düsseldorf", "Oberbilk S U", "D-Oberbilk S U"], "8001592": ["Düsseldorf", "Rath S", "D-Rath S"], "8001593": ["Düsseldorf", "Rath Mitte S", "D-Rath Mitte S"], "8001594": ["Düsseldorf", "Reisholz S", "D-Reisholz S"], "8001595": ["Düsseldorf", "Unterrath S", "D-Unterrath S"], "8001583": ["Düsseldorf", "Zoo S", "D-Zoo S"], "8000370": ["Ehrang (Trier)", "Bahnhof Ehrang", "Ehrang"], "8001688": ["Ehrang (Trier)", "Bahnhof Ehrang", "Ehrang"], "8001700": ["Eichen (Kr Siegen)", "Kreuztal-Eichen Bf", "Kreuztal-Eichen Bf"], "8001712": ["Eilendorf", "Bahnhof Eilendorf", "Eilendorf"], "8001729": ["Siegen", "Eiserfeld Bf", "Siegen, Eiserfeld Bf"], "8001736": ["Eitorf", "Eitorf", "Eitorf"], "8001768": ["Emden", "Emden Hbf", "Emden, Emden Hbf"], "8001773": ["Emmerich", "Emmerich Bahnhof", "Emmerich Bahnhof"], "8001776": ["Emmerich", "Elten Bahnhof", "Emmerich, Elten Bahnhof"], "8001780": ["Rees", "Empel Bf", "Rees Empel Bf"], "8001782": ["Emsdetten", "Emsdetten", "Emsdetten"], "8000094": ["Engers", "Engers", "Engers"], "8001795": ["Ennepetal", "Ennepetal (Gevelsberg) Bf.", "Ennepetal (Gevelsberg) Bf."], "8400212": ["Enschede", "Enschede", "Enschede"], "8001808": ["Epe (Westf)", "Epe (Westf)", "Epe (Westf)"], "8003671": ["Erftstadt", "Erftstadt", "Erftstadt"], "8001836": ["Schwerte", "Bahnhof Ergste", "Schwerte Bahnhof Ergste"], "8001839": ["Erkelenz", "Erkelenz Bf", "Erkelenz Bf"], "8001841": ["Erkrath", "Erkrath S", "Erkrath Erkrath S"], "8001842": ["Erkrath", "Erkrath Nord Bf Nordseite", "Erkrath Nord Bf Nordseite"], "8001858": ["Erpel (Rhein)", "Erpel (Rhein)", "Erpel (Rhein)"], "8001886": ["Eschweiler (Rheinl)", "Eschweiler Hbf", "Eschweiler Hbf"], "8001887": ["Eschweiler (Rheinl)", "Eschweiler Hbf", "Eschweiler Hbf"], "8004060": ["Mönchehof (b Kassel)", "Espenau-Mönchehof", "Espenau-Mönchehof"], "8000098": ["Essen", "Hauptbahnhof", "Essen Hbf"], "8001896": ["Essen", "Stadtwald S", "Essen Stadtwald S"], "8001897": ["Essen", "Süd S", "Essen Süd S"], "8001898": ["Essen", "West", "Essen West S"], "8001900": ["Essen", "Altenessen Bf Schleife", "Essen Altenessen Bf Schleife"], "8001901": ["Essen", "Bergeborbeck Bf", "Essen Bergeborbeck Bf"], "8001902": ["Essen", "Borbeck Bf", "Essen Borbeck Bf"], "8005031": ["Essen", "Borbeck Süd Bf", "Essen Borbeck Süd Bf"], "8001903": ["Essen", "Dellwig Bf", "Essen Dellwig Bf"], "8001904": ["Essen", "Dellwig Ost", "Essen Dellwig Ost Bf"], "8001905": ["Essen", "Eiberg S", "Essen Eiberg S"], "8001906": ["Essen", "Frohnhausen S", "Essen Frohnhausen S"], "8001907": ["Essen", "Gerschede", "Essen Gerschede"], "8006514": ["Essen", "Holthausen Bf", "Essen Holthausen Bf"], "8006194": ["Essen", "Horst S", "Essen Horst S"], "8001908": ["Essen", "Hügel S", "Essen Hügel S"], "8001910": ["Essen", "Kray Nord Bf", "Essen Kray Nord Bf"], "8001911": ["Essen", "Pramenweg", "Essen Pramenweg"], "8001912": ["Essen", "Kupferdreh Bf", "Essen Kupferdreh Bf"], "8000099": ["Essen", "Steele S", "Essen Steele S"], "8001913": ["Essen", "Steele Ost S", "Essen Steele Ost S"], "8001915": ["Essen", "Werden", "Essen Werden S"], "8001909": ["Essen", "Zollverein Nord Bf", "Essen Zollverein Nord Bf"], "8001914": ["Essen", "Überruhr Bf", "Essen Überruhr Bf"], "8001928": ["Etzbach", "Etzbach", "Etzbach"], "8000100": ["Euskirchen", "Euskirchen", "Euskirchen"], "8002402": ["Großbüllesheim", "Bahnhof Großbüllesheim", "Großbüllesheim"], "8001972": ["Bottrop", "Feldhausen Bf", "BOT Feldhausen Bf"], "8000102": ["Finnentrop", "Bf", "Finnentrop Bf"], "8002027": ["Krefeld", "Forsthaus Bf", "Krefeld Forsthaus Bf"], "8002389": ["Frechen", "Königsdorf Bf", "Frechen Königsdorf Bf"], "8002073": ["Freienohl", "Freienohl Bf", "Freienohl Bf"], "8002092": ["Freusburg", "Bahnhof Freusburg Siedlung", "Freusburg Siedlung"], "8002104": ["Friedrich-Wilhelms-H", "Friedrich Wilhelmshütte", "Friedrich Wilhelmshütte"], "8002109": ["Voerde", "Friedrichsfeld Bahnhof", "Voerde Friedrichsfeld Bahnhof"], "712894": ["Kassel", "Hbf", "Kassel Hbf"], "8002127": ["Grevenbroich", "Frimmersdorf Bf", "Grevenbroich Frimmersdorf Bf"], "8002130": ["Fröndenberg", "Frömern Bf", "Fröndenberg Frömern Bf"], "8000113": ["Fröndenberg", "Fröndenberg Bf", "Fröndenberg Bf"], "8002180": ["Balve", "Garbeck Bf", "Balve Garbeck Bf"], "8002203": ["Geeste", "Geeste", "Geeste"], "8002206": ["Geilenkirchen", "Bahnhof", "Geilenkirchen Bahnhof"], "8002222": ["Geldern", "Geldern Bahnhof", "Geldern Bahnhof"], "8000118": ["Gelsenkirchen", "Hbf", "Gelsenkirchen Hbf"], "8002223": ["Gelsenkirchen", "Zoo Bf", "Gelsenkirchen Zoo Bf"], "8002224": ["Gelsenkirchen", "Buer Nord Bf", "GE Buer Nord Bf"], "8002225": ["Gelsenkirchen", "GE-Buer Süd Bf", "Gelsenkirchen Buer Süd Bf"], "8002226": ["Gelsenkirchen", "Hassel Bf", "Gelsenkirchen Hassel Bf"], "8002227": ["Gelsenkirchen", "Rotthausen", "Gelsenkirchen Rotthausen"], "8000123": ["Gerolstein", "Gerolstein", "Gerolstein"], "8002267": ["Gevelsberg", "Gevelsberg Hbf.", "Gevelsberg Hbf."], "8002268": ["Gevelsberg", "Gevelsberg West", "Gevelsberg West"], "8002509": ["Gevelsberg", "Gevelsberg-Kipp", "Gevelsberg-Kipp"], "8001943": ["Gevelsberg", "Gevelsberg-Knapp", "Gevelsberg-Knapp"], "8002283": ["Gladbeck", "Oberhof", "GLA Oberhof"], "8000125": ["Gladbeck", "West Bf Vorplatz", "Gladbeck West Bf Vorplatz"], "8002284": ["Gladbeck", "Zweckel Bf", "Gladbeck-Zweckel Bf"], "8400011": ["Glanerbrug", "Glanerbrug", "Glanerbrug"], "8002290": ["Glesch", "Glesch Bf", "Glesch Bf"], "8002296": ["Goch", "Goch Bahnhof", "Goch Goch Bahnhof"], "8400256": ["Nijmegen", "Spoorkuil", "Nijmegen (Centrum), Spoorkuil"], "8002358": ["Grebenstein", "Grebenstein", "Grebenstein"], "8002369": ["Greven (Westf)", "Greven", "Greven"], "8000133": ["Grevenbroich", "Bf", "Grevenbroich Bf"], "8000382": ["Gronau (Westf)", "Bf", "Gronau Bf"], "8002477": ["Grevenbroich", "Gustorf Bf", "Grevenbroich Gustorf Bf"], "8002461": ["Gütersloh", "Gütersloh Hbf", "Gütersloh Hbf"], "8002490": ["Haan (Rheinl)", "Haan Bf", "Haan Bf"], "8000138": ["Haan (Rheinl)", "Haan-Gruiten", "Haan-Gruiten"], "8000142": ["Hagen", "Hauptbahnhof", "Hagen Hauptbahnhof"], "8002512": ["Hagen", "Heubing Bf", "Hagen Heubing Bf"], "8002514": ["Hagen", "Oberhagen", "Hagen Oberhagen"], "8000977": ["Hagen", "Vorhalle Bf", "Hagen Vorhalle Bf"], "8006712": ["Hagen", "Wehringhausen", "Hagen Wehringhausen"], "8004440": ["Hagen", "Westerbauer Bf", "Hagen Westerbauer Bf"], "8002536": ["Rees", "Haldern Bahnhof", "Rees Haldern Bf"], "8000145": ["Haltern am See", "Haltern am See Bf", "Haltern am See Bf"], "8000149": ["Hamm (Westf)", "Hbf", "Hamm Hbf"], "8001045": ["Bockum-Hövel", "Bockum-Hövel", "Bockum-Hövel"], "8002680": ["Heessen", "Heessen", "Heessen"], "8002571": ["Hamminkeln", "Hamminkeln Bahnhof", "Hamminkeln Bahnhof"], "8001465": ["Hamminkeln", "Dingden Bahnhof", "Hamminkeln Dingden Bf"], "8002598": ["Haren (Ems)", "Haren (Ems)", "Haren (Ems)"], "8002640": ["Hattingen", "Hattingen Mitte", "Hattingen Mitte"], "8002639": ["Hattingen", "Hattingen Bf.", "Hattingen Bf."], "8400307": ["Heerlen", "Heerlen", "Heerlen"], "8002745": ["Hemmerde", "Bahnhof", "Hemmerde Bf"], "8002775": ["Hennef (Sieg)", "Hennef im Siegbogen", "Hennef im Siegbogen"], "8002753": ["Hennef (Sieg)", "Hennef (Sieg)", "Hennef (Sieg)"], "8002754": ["Hennen", "Bahnhof", "Hennen Bf"], "8002768": ["Herchen", "Herchen", "Herchen"], "8002769": ["Herdecke", "Herdecke Bf", "Herdecke Bf"], "8000162": ["Herford", "Herford", "Herford"], "8000164": ["Herne", "Herne Bf", "Herne Bf"], "8002779": ["Herne", "Börnig Bf", "Herne Börnig Bf"], "8002784": ["Mönchengladbach", "Herrath Bf", "Mönchengladbach Herrath Bf"], "8000165": ["Dorsten", "Hervest-Dorsten Bf", "Dorsten Hervest-Dorsten Bf"], "8002806": ["Herzogenrath", "Herzogenrath Bf", "Herzogenrath Bf"], "8000388": ["Hilden", "Hilden S", "Hilden Hilden S"], "8002828": ["Hilden", "Talstraße/Hilden Süd S", "Hilden Talstr./Hilden Süd S"], "8002868": ["Erkrath", "Hochdahl S", "Erkrath Hochdahl S"], "8002869": ["Erkrath", "Millrath S", "Erkrath Millrath S"], "8000390": ["Jüchen", "Hochneukirch Bf", "Jüchen Hochneukirch Bf"], "8002933": ["Hofgeismar", "Hofgeismar", "Hofgeismar"], "8002953": ["Hagen", "Hohenlimburg Bf", "Hagen Hohenlimburg Bf"], "8002979": ["Neuss", "Lövelinger Str.", "Neuss Lövelinger Str."], "8000392": ["Holzwickede", "Bf", "Holzwickede Bf"], "8002992": ["Hoppecke", "Hoppecke", "Hoppecke"], "8000178": ["Horrem (Kerpen)", "Horrem Bf", "Horrem Bf"], "8002919": ["Ratingen", "Hösel S, Nordseite", "Ratingen Hösel S, Nordseite"], "8000677": ["Hückelhoven", "Baal Bf", "Hückelhoven Baal Bf"], "8003160": ["Kalscheuren", "Kalscheuren BfBf", "Kalscheuren Bf"], "8003021": ["Hüttingen (Kyll)", "Hüttingen", "Hüttingen"], "8003062": ["Immenhausen (Hess)", "Immenhausen", "Immenhausen"], "8000186": ["Iserlohn", "Bahnhof", "Iserlohn Bf"], "8003090": ["Iserlohner Heide", "Bahnhof", "Iserlohnerheide Bf"], "8003130": ["Jüchen", "Bahnhof", "Jüchen Bahnhof"], "8003135": ["Jünkerath", "Jünkerath", "Jünkerath"], "8000438": ["Kaarst", "IKEA Kaarst", "Kaarst IKEA Kaarst"], "8000432": ["Kaarst", "Mitte/Holzbüttgen", "Kaarst Mitte/Holzbüttgen"], "8003141": ["Kaarst", "Kaarster Bahnhof", "Kaarst Kaarster Bahnhof"], "8000430": ["Kaarst", "Kaarster See", "Kaarst Kaarster See"], "8000190": ["Nettetal", "Kaldenkirchen Bf", "Nettetal Kaldenkirchen Bf"], "8003158": ["Kall", "Kall", "Kall"], "8003166": ["Kalthof (Iserlohn)", "Bahnhof", "Kalthof Bf"], "8003168": ["Kamen", "Bf", "Kamen Bf"], "8003169": ["Kamen", "Methler Bf", "Kamen Methler Bf"], "8003174": ["Grevenbroich", "Kapellen Wevelinghoven Bf", "Kapellen Wevelinghoven Bf"], "8000193": ["Kassel", "Hbf", "Kassel Hbf"], "8098193": ["Kassel", "Hbf", "Kassel Hbf"], "8003200": ["Kassel", "Wilhelmshöhe", "Kassel Wilhelmshöhe"], "8000409": ["Kempen", "Bahnhof", "Kempen Bahnhof"], "8000198": ["Essen", "Kettwig S", "Essen Kettwig S"], "8003245": ["Essen", "Kettwig Stausee S", "Essen Kettwig Stausee S"], "8003247": ["Kevelaer", "Kevelaer Bahnhof", "Kevelaer Bahnhof"], "8000427": ["Kirchen (Sieg)", "Kirchen", "Kirchen"], "8003287": ["Kirchhundem", "Kirchhundem", "Kirchhundem"], "8003321": ["Korschenbroich", "Kleinenbroich Bf", "Kleinenbroich Bf"], "8000205": ["Kleve (Niederrhein)", "Bahnhof", "Kleve Bahnhof"], "8000206": ["Koblenz", "Hbf", "Koblenz Hbf"], "8003341": ["Koblenz", "Hbf", "Koblenz Hbf"], "8003351": ["Koblenz", "Koblenz-Ehrenbreitstein", "Koblenz-Ehrenbreitstein"], "8003352": ["Koblenz", "Koblenz-Lützel", "Koblenz-Lützel"], "8003395": ["Kohlscheid", "Bahnhof", "Kohlscheid Bf"], "8003407": ["Kordel", "Kordel", "Kordel"], "8003412": ["Korschenbroich", "Korschenbroich Bf", "Korschenbroich Bf"], "8000211": ["Krefeld", "Krefeld Hbf", "Krefeld Hbf"], "8002941": ["Krefeld", "KR-Hohenbudberg Chempark", "Krefeld-Hohenbudberg Chempark"], "8003426": ["Krefeld", "Idastraße", "Krefeld Idastraße"], "8000212": ["Krefeld", "Oppum Bf Nord", "Krefeld Oppum Bf Nord"], "8003427": ["Krefeld", "Uerdingen Bf", "Krefeld Uerdingen Bf"], "8000214": ["Kreuztal (Siegerl)", "Kreuztal", "Kreuztal"], "8003716": ["Kreuztal (Siegerl)", "Littfeld Bf", "Kreuztal-Littfeld Bf"], "8003484": ["Kyllburg", "Kyllburg", "Kyllburg"], "8003370": ["Köln", "Airport-Businesspark", "Köln Airport-Businesspark"], "8003358": ["Köln", "Frankfurter Straße", "Köln Frankfurter Straße"], "8003360": ["Köln", "Geldernstr/Parkgürtel", "Köln Geldernstr/Parkgürtel"], "8003392": ["Köln", "Hansaring", "Köln Hansaring"], "8000207": ["Köln", "Hbf", "Köln Hbf"], "8003368": ["Köln", "Deutz/Messe Bf", "Köln Deutz/Messe Bf"], "8083368": ["Köln", "Deutz/Messe Bf", "Köln Deutz/Messe Bf"], "8073368": ["Köln", "Deutz/Messe Bf", "Köln Deutz/Messe Bf"], "8003379": ["Köln", "Steinstraße", "Köln Steinstraße"], "8003361": ["Köln", "Köln Süd", "Köln Süd"], "8003320": ["Köln", "Trimbornstr", "Köln Trimbornstr"], "8003362": ["Köln", "Volkhovener Weg", "Köln Volkhovener Weg"], "8003363": ["Köln", "Köln West", "Köln West"], "8079140": ["Köln", "Blumenberg S", "Köln Blumenberg S"], "8003364": ["Köln", "Buchforst", "Köln Buchforst"], "8003365": ["Köln", "Chorweiler", "Köln Chorweiler"], "8003366": ["Köln", "Chorweiler Nord", "Köln Chorweiler Nord"], "8003367": ["Köln", "Dellbrück", "Köln Dellbrück"], "8000208": ["Köln", "Ehrenfeld S", "Köln Ehrenfeld S"], "8003369": ["Köln", "Holweide", "Köln Holweide"], "8003371": ["Köln", "Longerich", "Köln Longerich"], "8000209": ["Köln", "Mülheim", "Köln Mülheim"], "8003375": ["Köln", "Müngersdorf Technologiepark S", "Köln Müngersdorf Technologiepa"], "8003372": ["Köln", "Geldernstr/Parkgürtel", "Köln Geldernstr/Parkgürtel"], "8003310": ["Köln", "Stammheim", "Köln Stammheim"], "8003383": ["Köln", "Weiden-West", "Köln Weiden-West"], "8003373": ["Worringen", "Worringen Bf", "Köln-Worringen Bf"], "8003330": ["Köln", "Köln/Bonn Flughafen", "Köln/Bonn Flughafen"], "714222": ["Kassel", "Hbf", "Kassel Hbf"], "8003386": ["Königswinter", "Königswinter", "Königswinter"], "8070029": ["Königswinter", "Königswinter", "Königswinter"], "8070074": ["Königswinter", "Königswinter", "Königswinter"], "8003470": ["Neuenrade", "Küntrop Bf", "Neuenrade Küntrop Bf"], "8400548": ["Landgraaf", "Landgraaf", "Landgraaf"], "8003540": ["Langenfeld (Rheinl)", "Langenfeld S", "Langenfeld (Rheinl) S"], "8003539": ["Langenfeld (Rheinl)", "Berghausen S", "Langenfeld Berghausen S"], "8003553": ["Langerwehe", "Langerwehe", "Langerwehe"], "8003563": ["Lathen", "Lathen", "Lathen"], "8003608": ["Legden", "Legden", "Legden"], "8003616": ["Leichlingen", "Bahnhof", "Leichlingen Bf"], "8003630": ["Dorsten", "Lembeck Bf", "Dorsten Lembeck Bf"], "8003638": ["Menden (Sauerland)", "Lendringsen Bf", "Menden Lendringsen Bf"], "8000532": ["Altenhundem", "Lennestadt-Altenhundem", "Lennestadt-Altenhundem"], "8002370": ["Lennestadt", "Grevenbrück Bf", "Lennestadt Grevenbrück Bf"], "8003939": ["Meggen (Lennestadt)", "Lennestadt-Meggen", "Lennestadt-Meggen"], "8003656": ["Leschede", "Bahnhof Leschede", "Leschede"], "8000227": ["Letmathe", "Bf", "Letmathe Bf"], "8003657": ["Letmathe", "Dechenhöhle", "Letmathe-Dechenhöhle"], "8003658": ["Lette (Kr Coesfeld)", "Bahnhof", "Lette (Kr Coesfeld) Bf"], "8003660": ["Leubsdorf (Rhein)", "Leubsdorf (Rhein)", "Leubsdorf (Rhein)"], "8003665": ["Leutesdorf (Rhein)", "Leutesdorf (Rhein)", "Leutesdorf (Rhein)"], "8000832": ["Wiesdorf", "CHEMPARK S-Bahn", "CHEMPARK S-Bahn,Wiesdorf"], "8006713": ["Wiesdorf", "Leverkusen Mitte Bf", "Leverkusen Mitte Bf,Wiesdorf"], "8003668": ["Leverkusen", "Küpperst.Bf", "Leverk.-Küpperst.Bf"], "8003672": ["Leverkusen", "Rheindorf", "Leverkusen Rheindorf"], "8003669": ["Leverkusen", "Schlebusch", "Leverkusen Schlebusch"], "8003697": ["Geilenkirchen", "Lindern Bf", "Geilenkirchen Lindern Bf"], "8003701": ["Lingen (Ems)", "Lingen (Ems)", "Lingen (Ems)"], "8003708": ["Linz (Rhein)", "Linz (Rhein)", "Linz (Rhein)"], "8000571": ["Lippstadt", "Lippstadt", "Lippstadt"], "8003713": ["Lissendorf", "Lissendorf", "Lissendorf"], "715535": ["Kassel", "Hbf", "Kassel Hbf"], "8003732": ["Köln", "Lövenich Bf", "Köln Lövenich Bf"], "8003782": ["Lüdenscheid", "Bahnhof", "Lüdenscheid Bf"], "8001213": ["Lüdenscheid", "Brügge Bf.", "Lüdenscheid, Brügge Bf."], "8003783": ["Lüdinghausen", "Bahnhof", "Lüdinghausen Bf"], "8000239": ["Lünen", "Hbf", "Lünen Hbf"], "8004883": ["Lünen", "Preußen Bf", "Lünen Preußen Bf"], "8003788": ["Lünern", "Bahnhof", "Lünern Bf"], "8003855": ["Marbeck-Heiden", "Marbeck-Heiden Bf", "Marbeck-Heiden Bf"], "8003860": ["Maria Veen", "Bahnhof", "Maria-Veen Bf"], "8003888": ["Marl (Westf)", "Marl Mitte", "Marl Mitte"], "8003890": ["Marl (Westf)", "Hamm Bf", "Marl-Hamm Bf"], "8003891": ["Marl (Westf)", "Sinsen Bf", "Marl Sinsen Bf"], "8003896": ["Marsberg", "Marsberg", "Marsberg"], "8003909": ["Unna", "Massen S", "Unna Massen S"], "8003927": ["Mechernich", "Mechernich", "Mechernich"], "8004694": ["Meerbusch", "Osterath Bf", "Meerbusch Osterath Bf"], "8003943": ["Hamminkeln", "Mehrhoog Pollmann", "Hamminkeln Mehrhoog Pollmann"], "8003966": ["Menden (Rheinl)", "Menden (Rheinl)", "Menden (Rheinl)"], "8003967": ["Menden (Sauerland)", "Menden Bf", "Menden (Sauerland) Bf"], "8003965": ["Menden (Sauerland)", "Süd Bf", "Menden (Sauerland) Süd Bf"], "8003978": ["Meppen", "Meppen", "Meppen"], "8003986": ["Mersch (Kr Warendf.)", "Mersch (Westf.)", "Mersch (Westf.)"], "8003987": ["Merten (Sieg)", "Merten (Sieg)", "Merten (Sieg)"], "8003990": ["Merzenich (Kr Düren)", "Merzenich", "Düren-Merzenich"], "8003993": ["Meschede", "Meschede Bahnhof", "Meschede Bahnhof"], "8003998": ["Messinghausen", "Messinghausen", "Messinghausen"], "8004005": ["Mettmann", "Stadtwald S", "ME-Stadtwald S"], "8004007": ["Mettmann", "Regiobahn", "ME-Regiobahn"], "8004024": ["Rees", "Millingen Bf", "Rees Millingen Bf"], "8004023": ["Rheinberg", "Millingen Bahnhof", "Rheinberg Millingen Bahnhof"], "8000252": ["Minden (Westf)", "Minden (Westf)", "Minden (Westf)"], "8000644": ["Moers", "Moers Bahnhof", "Moers Bahnhof"], "8004099": ["Mudersbach (Sieg)", "Mudersbach", "Mudersbach"], "8000253": ["Mönchengladbach", "Hbf /Europaplatz", "MG Hbf /Europaplatz"], "8004061": ["Mönchengladbach", "Genhausen", "Mönchengladbach Genhausen"], "8001745": ["Mönchengladbach", "Lürrip S-Bf.", "Mönchengladb. Lürrip S-Bf."], "8004063": ["Mönchengladbach", "Rheindahlen Bf", "Mönchengl. Rheindahlen Bf"], "8000259": ["Mülheim", "Hbf Nordeingang", "Mülheim Hbf Nordeingang"], "8000687": ["Mülheim", "Styrum S", "Mülheim Styrum S"], "8004122": ["Mülheim", "MH-West S", "Mülheim West S"], "8004173": ["Münster (Westf)", "Zentrum Nord", "Münster (W) Zentrum Nord"], "8000263": ["Münster (Westf)", "Hbf", "Münster (Westf) Hbf"], "8000462": ["Münster (Westf)", "Albachten Bf", "Münster-Albachten Bf"], "8000569": ["Münster (Westf)", "Amelsbüren Bf", "Münster-Amelsbüren Bf"], "8002841": ["Hiltrup", "Münster-Hiltrup", "Münster-Hiltrup"], "8005635": ["Münster (Westf)", "Münster-Sprakel", "Münster-Sprakel"], "8004174": ["Mürlenbach", "Mürlenbach", "Mürlenbach"], "8004200": ["Namedy", "Namedy", "Namedy"], "8004213": ["Mettmann", "Neanderthal S", "ME-Neanderthal S"], "8004228": ["Neheim", "Neheim-Hüsten Bahnhof", "Neheim-Hüsten Bahnhof"], "8004242": ["Nettersheim", "Nettersheim", "Nettersheim"], "8004273": ["Neuenrade", "Bf", "Neuenrade Bf"], "8004335": ["Neuss", "Allerheiligen", "Allerheiligen"], "8004320": ["Neuss", "Am Kaiser", "Neuss Am Kaiser"], "8000274": ["Neuss", "Hauptbahnhof", "Neuss Hauptbahnhof"], "8004316": ["Neuss", "Rheinpark-Center S", "Neuss Rheinpark-Center S"], "8004317": ["Neuss", "Süd", "Neuss Süd"], "8000276": ["Neuwied", "Neuwied", "Neuwied"], "8004366": ["Niederdollendorf", "Niederdollendorf", "Niederdollendorf"], "8004381": ["Niederhövels", "Bahnhof Niederhövels", "Niederhövels"], "8004406": ["Niederschelden", "Bahnhof Niederschelden", "Niederschelden"], "8004407": ["Niederschelden", "Niederschelden Nord", "Niederschelden Nord"], "8004433": ["Kerken", "Nieukerk Bahnhof", "Kerken Nieukerk Bahnhof"], "8004434": ["Dormagen", "Nievenheim BF", "Dormagen Nievenheim BF"], "8400470": ["Nijmegen", "Centraal Station", "Nijmegen Centraal Station"], "8400468": ["Nijmegen", "Station Heyendaal", "Nijmegen, Station Heyendaal"], "8004462": ["Neuss", "Norf Bf", "Neuss Norf Bf"], "8000595": ["Nottuln", "Appelhülsen Bf", "Nottuln-Appelhülsen Bf"], "8004513": ["Oberbettingen", "Bahnhof Oberbettingen-Hillesh.", "Oberbettingen-Hillesheim"], "8000286": ["Oberhausen (Rheinl)", "Hbf", "Oberhausen Hbf"], "8004540": ["Oberhausen (Rheinl)", "Holten Bf.", "Oberhausen Holten Bf."], "8004541": ["Oberhausen (Rheinl)", "Osterfeld Süd Bf.", "Oberhausen Osterfeld Süd Bf."], "8004542": ["Oberhausen (Rheinl)", "Sterkrade Bf.", "OB Sterkrade Bf."], "8004604": ["Oberwinter", "Oberwinter", "Oberwinter"], "8004626": ["Oelde (Kr Warendorf)", "Oelde", "Oelde"], "8004631": ["Menden (Sauerland)", "Battenfeld", "Menden Battenfeld"], "8004642": ["Oeventrop", "Oeventrop Bf", "Oeventrop Bahnhof"], "8004676": ["Olsberg", "Olsberg", "Olsberg"], "8000853": ["Opladen", "Opladen", "Opladen Bf"], "8000294": ["Osnabrück", "Osnabrück Hbf", "Osnabrück Hbf"], "8000297": ["Paderborn", "Hbf", "Paderborn Hbf"], "8004746": ["Paffendorf", "Bahnhof", "Paffendorf Bf"], "8004751": ["Papenburg (Ems)", "Papenburg (Ems)", "Papenburg (Ems)"], "8004784": ["Pfalzel (Trier)", "Bahnhof Pfalzel", "Pfalzel"], "8004814": ["Philippsheim", "Philippsheim", "Philippsheim"], "8004838": ["Plettenberg", "Bahnhof", "Plettenberg Bf"], "8004869": ["Köln", "Porz (Rhein)", "Köln Porz (Rhein)"], "8004873": ["Köln", "Porz-Wahn", "Köln Porz-Wahn"], "8004878": ["Emmerich", "Praest Bahnhof", "Emmerich, Praest Bf"], "8004898": ["Pulheim", "Bahnhof", "Pulheim Bf"], "8004907": ["Quadrath-Ichendorf", "Bahnhof", "Quadrath-Ichendorf Bf"], "712896": ["Kassel", "Hbf", "Kassel Hbf"], "716122": ["Kassel", "Hbf", "Kassel Hbf"], "8004948": ["Ratingen", "Ost S", "Ratingen Ost S"], "8004972": ["Reckenfeld", "Reckenfeld", "Reckenfeld"], "8000307": ["Recklinghausen", "RE Hbf", "Recklinghausen Hbf"], "8000887": ["Recklinghausen", "RE Süd Bf", "RE Süd Bf"], "8005030": ["Reken", "Bf", "Reken Bf"], "8003305": ["Reken", "Klein Reken Ort", "Klein Reken Ort"], "8000310": ["Remagen", "Bahnhof", "Remagen Bahnhof"], "8005033": ["Remscheid", "Remscheid Hbf", "Remscheid Hbf"], "8005034": ["Remscheid", "Güldenwerth Bf", "RS-Güldenwerth Bf"], "8000311": ["Remscheid", "Lennep Bf", "Remscheid-Lennep Bf"], "8005035": ["Remscheid", "Lüttringhausen Bf", "RS-Lüttringhausen Bf"], "8005055": ["Dorsten", "Rhade Bf", "Dorsten Rhade Bf"], "8000315": ["Rheda-Wiedenbrück", "Rheda-Wiedenbrück", "Rheda-Wiedenbrück"], "8005059": ["Rheinberg", "Rheinberg Bahnhof", "Rheinberg Bahnhof"], "8005062": ["Rheinbrohl", "Rheinbrohl", "Rheinbrohl"], "8000316": ["Rheine", "Bahnhof", "Rheine, Bahnhof"], "8004000": ["Mesum", "Rheine-Mesum", "Rheine-Mesum"], "8000317": ["Duisburg", "Rheinhausen Bf", "Duisburg Rheinhausen Bf"], "8005065": ["Duisburg", "Rheinhausen Ost Bf", "Duisburg Rheinhausen Ost Bf"], "8000318": ["Mönchengladbach", "Rheydt Hbf", "MG Rheydt Hbf"], "8005073": ["Mönchengladbach", "Odenkirchen Bf", "MG Odenkirchen Bf"], "8005074": ["Rhöndorf", "Rhöndorf", "Rhöndorf"], "8005102": ["Rinkerode", "Rinkerode", "Rinkerode"], "8005152": ["Roisdorf", "Roisdorf", "Roisdorf"], "8005153": ["Rolandseck", "Rolandseck", "Rolandseck"], "8005159": ["Rommerskirchen", "Rommersk. Bf.", "Rommerskirchen, Bahnhof"], "8005164": ["Rosbach (Sieg)", "Rosbach", "Rosbach"], "8002972": ["Rosendahl (Kr COE)", "Rosendahl-Holtwick", "Rosendahl-Holtwick"], "8005225": ["Duisburg", "Rumeln Bf", "Duisburg Rumeln Bf"], "8005227": ["Hagen", "Rummenohl Bf", "Hagen Rummenohl Bf"], "8005262": ["Salzbergen", "Salzbergen", "Salzbergen"], "8005289": ["Balve", "Sanssouci Bf", "Balve Sanssouci Bf"], "8005298": ["Satzvey", "Bahnhof Satzvey", "Satzvey"], "8005316": ["Schalksmühle", "Schalksmühle Bf", "Schalksmühle Bf"], "713679": ["Kassel", "Hbf", "Kassel Hbf"], "8005336": ["Scherfede", "Scherfede", "Scherfede"], "8005338": ["Scheuerfeld (Sieg)", "Scheuerfeld (Sieg)", "Scheuerfeld (Sieg)"], "8005339": ["Scheven (Kr EU)", "Bahnhof Scheven", "Scheven"], "8005356": ["Schladern (Sieg)", "Schladern", "Schladern"], "8005378": ["Schmidtheim", "Bahnhof Schmidtheim", "Schmidtheim"], "8000033": ["Schwelm", "Schwelm Bf.", "Schwelm Bf."], "8005488": ["Schwelm", "Schwelm West", "Schwelm West"], "8000037": ["Schwerte", "Schwerte ZOB", "Schwerte ZOB"], "8005499": ["Sechtem", "Sechtem", "Sechtem"], "8005525": ["Selm", "Bahnhof", "Selm Bf"], "8005526": ["Selm", "Beifang Bf", "Selm Beifang Bf"], "8001065": ["Bösensell", "Bf", "Bösensell Bf"], "8005555": ["Siedlinghausen", "Siedlinghausen Bf", "Siedlinghausen Bf"], "8075556": ["Siegburg", "Siegburg/Bonn", "Siegburg/Bonn"], "8005556": ["Siegburg", "Siegburg/Bonn", "Siegburg/Bonn"], "8000046": ["Siegen", "Hbf", "Siegen Hbf"], "8003018": ["Siegen", "Geisweid Bf", "Siegen-Geisweid Bf"], "8003020": ["Siegen", "Siegen-Weidenau", "Siegen-Weidenau"], "8005569": ["Silbach", "Silbach Bf", "Silbach Bf"], "8005575": ["Sindorf (Kerpen)", "Sindorf", "Sindorf"], "8005580": ["Sinzig (Rhein)", "Sinzig (Rhein)", "Sinzig (Rhein)"], "8000076": ["Soest (Westf)", "Bahnhof", "Soest Bf"], "8005597": ["Solingen", "Grünewald", "Solingen Grünewald"], "8000087": ["Solingen", "Hauptbahnhof", "Solingen Hbf"], "8005598": ["Solingen", "Bahnhof Mitte", "Solingen Bahnhof Mitte"], "8006714": ["Solingen", "Solingen-Vogelpark", "Solingen-Vogelpark"], "8005590": ["Solingen", "Schaberg Bf", "Solingen Schaberg Bf"], "8005624": ["Speicher", "Speicher", "Speicher"], "8005629": ["Spich (Kr SU)", "Spich", "Spich"], "8005658": ["St Thomas (Eifel)", "St Thomas", "St Thomas"], "8099506": ["Stolberg (Rheinl)", "Stolberg", "Stolberg"], "8000348": ["Stolberg (Rheinl)", "Stolberg", "Stolberg"], "8098348": ["Stolberg (Rheinl)", "Stolberg", "Stolberg"], "8098349": ["Stolberg (Rheinl)", "Stolberg", "Stolberg"], "8005744": ["Stolberg (Rheinl)", "Stolberg", "Stolberg"], "8005746": ["Stommeln", "Bahnhof", "Stommeln Bf"], "8005811": ["Haltern am See", "Sythen Bf", "Haltern am See Sythen Bf"], "8000134": ["Trier", "Hauptbahnhof", "Trier Hbf"], "8000135": ["Troisdorf", "Troisdorf", "Troisdorf"], "8005910": ["Duisburg", "Trompet Bf", "Duisburg Trompet Bf"], "8005970": ["Unkel", "Unkel", "Unkel"], "8000171": ["Unna", "Unna S", "Unna S"], "8003925": ["Unna", "West S", "Unna West S"], "8005971": ["Unna", "Königsborn S", "Unna Königsborn S"], "8006032": ["Urft", "Bahnhof Urft", "Urft"], "8006035": ["Urmitz", "Urmitz", "Urmitz"], "8006036": ["Urmitz", "Urmitz Rheinbrücke", "Urmitz Rheinbrücke"], "8005342": ["Usch", "Bahnhof Usch-Zendscheid", "Usch-Zendscheid"], "8006054": ["Vallendar", "Vallendar", "Vallendar"], "8006064": ["Velbert", "Rosenhügel Bahnhof", "Velbert Rosenhügel Bahnhof"], "8003529": ["Velbert", "Frohnstraße/Bahnhof", "Velbert Frohnstraße/Bahnhof"], "8004340": ["Velbert", "Neviges Markt/Bahnhof", "Velbert Neviges Markt/Bahnhof"], "8004430": ["Velbert", "Nierenhof Bf", "Velbert Nierenhof Bf"], "8400644": ["Venlo", "Station", "Venlo Station"], "8000174": ["Viersen", "Viersen Bahnhof", "Viersen Bahnhof"], "8006098": ["Voerde", "Voerde Bahnhof", "Voerde Bahnhof"], "8006109": ["Balve", "Volkringhausen Bf", "Balve Volkringhausen Bf"], "8000192": ["Herne", "Wanne-Eickel Hbf", "HER Wanne-Eickel Hbf"], "8006226": ["Bochum", "Wattenscheid Bf", "Bochum Wattenscheid Bf"], "8006227": ["Bochum", "Höntrop", "Bochum Höntrop"], "8006240": ["Weeze", "Weeze Bahnhof", "Weeze Bahnhof"], "8006243": ["Wegberg", "Bahnhof", "Wegberg Bahnhof"], "8006280": ["Weilerswist", "Weilerswist", "Weilerswist"], "8001416": ["Derkum", "Bahnhof Derkum", "Derkum"], "8006303": ["Weißenthurm", "Weißenthurm", "Weißenthurm"], "8006320": ["Welschen Ennest", "Welschen Ennest Bf", "Welschen Ennest Bf"], "8006339": ["Werdohl", "Bahnhof", "Werdohl Bf"], "8006342": ["Werl (Kr Soest)", "Werl Bf", "Werl Bf"], "8006348": ["Werne (a.d.Lippe)", "Bf", "Werne (a.d.Lippe) Bf"], "8000242": ["Wesel", "Wesel Bahnhof", "Wesel Bahnhof"], "8006356": ["Wesel", "Feldmark Bahnhof", "Wesel Feldmark Bf"], "8001030": ["Wesel", "Blumenkamp Bahnhof", "Wesel Blumenkamp Bf"], "8006379": ["Westheim (Westf)", "Westheim (Westf)", "Westheim (Westf)"], "8006383": ["Westönnen", "Bahnhof", "Westönnen Bf"], "8006386": ["Wetter (Ruhr)", "Wetter Bf.", "Wetter Bf."], "8006389": ["Wickede (Ruhr)", "Wickede (Ruhr) Bf", "Wickede (Ruhr) Bf"], "8006391": ["Mönchengladbach", "Wickrath Bf", "Mönchengladbach Wickrath Bf"], "710021": ["Kassel", "Hbf", "Kassel Hbf"], "8006486": ["Winterberg (Westf)", "Winterberg Bahnhof", "Winterberg Bahnhof"], "8006501": ["Wissen (Sieg)", "Wissen (Sieg)", "Wissen (Sieg), Wissen (Sieg)"], "8006505": ["Herdecke", "Wittbräucke Bf", "Herdecke Wittbräucke Bf"], "8000251": ["Witten", "Hbf", "Witten Hbf"], "8006510": ["Witten", "Witten-Annen", "Witten Witten-Annen"], "8006590": ["Dorsten", "Wulfen Bf", "Dorsten Wulfen Bf"], "8000266": ["Wuppertal", "Hauptbahnhof", "Wuppertal Hbf"], "8006596": ["Wuppertal", "Barmen Bf", "Wuppertal Barmen Bf"], "8006601": ["Wuppertal", "Dornap Postamt", "Wuppertal Dornap Postamt"], "8006607": ["Wuppertal", "Langerfeld Bf", "Wuppertal Langerfeld Bf"], "8006719": ["Wuppertal", "Oberbarmen Bf", "Wuppertal Oberbarmen Bf"], "8006616": ["Wuppertal", "Ronsdorf Bf", "Wuppertal Ronsdorf Bf"], "8006618": ["Wuppertal", "Sonnborn Bf", "Wuppertal Sonnborn Bf"], "8006619": ["Wuppertal", "Steinbeck Bf", "Wuppertal Steinbeck Bf"], "8006620": ["Wuppertal", "Unterbarmen Bf", "Wuppertal Unterbarmen Bf"], "8006718": ["Wuppertal", "Vohwinkel Bf", "Wuppertal Vohwinkel Bf"], "8006623": ["Wuppertal", "Zoologischer Garten Bf", "Wuppertal Zoolog. Garten Bf"], "8006575": ["Wülfrath", "Aprath Bf", "Wülfrath-Aprath Bf"], "8006630": ["Xanten", "Bahnhof", "Xanten Bahnhof"], "8400735": ["Zevenaar", "Zevenaar", "Zevenaar"], "8006659": ["Zieverich", "Zieverich Bf", "Zieverich Bf"], "8005935": ["Übach-Palenberg", "Bahnhof", "Übach-Palenberg Bahnhof"]} \ No newline at end of file -- cgit v1.2.3