├── README.md
├── documentation
├── files
│ ├── Anlage7-Demonstrator-MDV-EFA_HB_V1.2_201007_EFAFRS.pdf
│ ├── EFA_XML_Schnittstelle_20151217.pdf
│ ├── LINZ_AG_Linien_Schnitstelle_EFA_v7_Echtzeit.pdf
│ ├── LINZ_LINIEN_Schnittstelle_EFA_V1.pdf
│ └── dokumentationxmlschnittstelleapbv32014-08-28.pdf
├── webapi.md
└── widgets.md
├── kuerzel
├── kuerzel.py
├── kuerzel_dresden.csv
└── kuerzel_umland.csv
└── stations
├── csv2geojson.py
├── stations.csv
└── stations.json
/README.md:
--------------------------------------------------------------------------------
1 | # 🚏VVO
2 |
3 | This is a list of API endpoints, libraries, apps, tools and anything else that's available to access data in the [Verkehrsverbund Oberelbe](https://www.vvo-online.de/de) network. This includes the [Dresdner Verkehrsbetriebe](https://www.dvb.de/de-de/).
4 |
5 | This document is inspired by [derhuerst/vbb-modules](https://github.com/derhuerst/vbb-modules).
6 |
7 | Got any more info, details, links? Please don't hesitate to open an issue and/or PR 🙃
8 |
9 |
10 |
11 | ## Static Data
12 |
13 | - [`stations.csv`](https://raw.githubusercontent.com/kiliankoe/vvo/master/stations/stations.csv) - A list of all stations including coordinates.
14 | - [`stations.json`](https://raw.githubusercontent.com/kiliankoe/vvo/master/stations/stations.json) - Same as above, but as GeoJSON.
15 | - [`VVO_STOPS.JSON`](https://www.vvo-online.de/open_data/VVO_STOPS.JSON) - daily updated list of all VVO stations.
16 | - [`kuerzel_dresden.csv`](https://raw.githubusercontent.com/kiliankoe/vvo/master/kuerzel/kuerzel_dresden.csv) - A list of station abbreviations in Dresden
17 | - [`kuerzel_umland.csv`](https://raw.githubusercontent.com/kiliankoe/vvo/master/kuerzel/kuerzel_umland.csv) - A list of station abbreviations around Dresden
18 |
19 |
20 |
21 |
22 | ## APIs
23 |
24 | - [`Widgets`](http://widgets.vvo-online.de)
25 | - For the [VVO widgets](https://www.vvo-online.de/de/service/widgets/index.cshtml)
26 | - No known official documentation
27 | - See [documentation/widgets](https://github.com/kiliankoe/vvo/blob/master/documentation/widgets.md) for reverse-engineered docs
28 | - [`WebAPI`](https://webapi.vvo-online.de)
29 | - New API used by the mobile page (and therefore the official app)
30 | - No known official documentation
31 | - See [documentation/webapi](https://github.com/kiliankoe/vvo/blob/master/documentation/webapi.md) for reverse-engineered docs
32 | - [`EFA`](http://efa.vvo-online.de:8080)
33 | - "Classic" interface for trip requests
34 | - No known (public) documentation (yet?)
35 | - [`Trias`](http://trias.vvo-online.de:9000/middleware/data/trias) or [`here`](http://efa.vvo-online.de:8080/std3/trias)
36 | - Brand new and still in the process of being implemented afaik
37 | - "Documentation" [v1.1](https://www.vdv.de/431-2sds-v1.1.pdfx?forced=true) or [v1.2](https://www.vdv.de/431-2-sdsv1.2.pdfx?forced=false)
38 | - [`DVB WebDFI`](http://dfi.dvb.de/)
39 | - Closed access
40 | - For web-based [departure monitors](https://www.dvb.de/de-de/service/geschaeftskunden/abfahrtsmonitor/)
41 | - See [#3](https://github.com/kiliankoe/vvo/issues/3) for some more information
42 | - No known (public) documentation (yet?)
43 | - [`DVB Maps App`](https://www.dvb.de/apps/map/)
44 | - POI search and reverse geocoding
45 | - No known (public) documentation (yet?)
46 |
47 |
48 |
49 | ## Libraries
50 |
51 | Client libraries for various languages, sorted in no particular order. Although the names are specific to the DVB, most if not all of them are compatible with everything in the VVO network.
52 |
53 | - Node.js: [`dvbjs`](https://github.com/kiliankoe/dvbjs)
54 | - Python: [`dvbpy`](https://github.com/kiliankoe/dvbpy)
55 | - Haskell: [`dresdner-verkehrsbetriebe`](https://github.com/offenesdresden/dresdner-verkehrsbetriebe)
56 | - Swift: [`DVB`](https://github.com/kiliankoe/DVB)
57 | - Java: [`jVVO`](https://github.com/PhilippMatthes/jVVO)
58 | - Ruby: [`dvbrb`](https://github.com/kiliankoe/dvbrb)
59 | - Go: [`dvbgo`](https://github.com/kiliankoe/dvbgo)
60 | - Rust: [`dvb-rs`](https://github.com/hoodie/dvb-rs)
61 |
62 |
63 | To make it more obvious which lib support which features, here's a nifty table.
64 |
65 | | | JavaScript | Python | Haskell | Swift | Java | Ruby | Go | Rust |
66 | | --------------------- | :--------: | :-----: | :-----: | :---: | :--: | :--: | :--: | :--: |
67 | | Find stops via name | ✅ | ✅ | | ✅ | ✅ | ✅ | | ✅ |
68 | | Find stops via coords | ✅ | ✅ | | ✅ | ✅ | | | |
69 | | Departure Monitor | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
70 | | Routing | ✅ | ✅ | ✅ | ✅ | ✅ | | | |
71 | | Reverse Geocoding | ✅ | ✅ | | ✅ | | | | |
72 | | POI Search | ✅ | ✅ | | | | | | |
73 | | Route Changes | | | | ✅ | ✅ | | | |
74 | | Supported Lines | | | | ✅ | ✅ | | | |
75 | | Route Map Location | | | | | | | | |
76 | | Used API | A, E, D | W, E, D | W, E | A | A | W | W | W |
77 |
78 | W: Widgets, E: EFA, A: WebAPI, D: DVBApps
79 |
80 |
81 |
82 | ### Other
83 |
84 | - [TripKit/VVOProvider](https://github.com/alexander-albers/tripkit/blob/master/TripKit/VvoProvider.swift) - Part of TripKit, a Swift port of [schildbach/public-transport-enabler](https://github.com/schildbach/public-transport-enabler) for the iOS app [ÖPNV Navigator](http://navigatorapp.net)
85 |
86 |
87 |
88 | ## Apps
89 |
90 | Mobile apps known and used in Dresden.
91 |
92 | - [`DVB mobil`](https://www.dvb.de/de-de/fahrplan/dvb-mobil/) - Official, cross-platform
93 | - [`Faplino`](https://play.google.com/store/apps/details?id=de.faplino) - Android
94 | - [`FahrInfo Dresden`](https://itunes.apple.com/de/app/fahrinfo-dresden/id314790387?mt=8) - cross-platform
95 | - [`Öffi`](https://play.google.com/store/apps/details?id=de.schildbach.oeffi) - Android
96 | - [`DVB-Verspaetungen`](https://github.com/alexander-fischer/DVB-Verspaetungen) - Android app informing you about the current delay situation
97 | - [`Manni`](https://itunes.apple.com/us/app/manni/id1347527695?l=de&ls=1&mt=8) - iOS
98 | - [`ÖPNV Navigator`](https://itunes.apple.com/de/app/öpnv-navigator/id1239908782?mt=8) - iOS, not specific to the VVO network
99 |
100 |
101 |
102 | ## Tools, UIs & Experiments
103 |
104 | - [`Home Assistant Integration`](https://github.com/VDenisyuk/home-assistant-transport) - Show current departure data for selected stop on Home Assistant Dashboard
105 | - [`Magic Mirror`](https://web.archive.org/web/20180422030559/http://blog.thomas-bachmann.com/2016/02/magic-mirror-2-0-mit-gestensteuerung.html) - Shows current departure data (using [`dvbpy`](https://github.com/kiliankoe/dvbpy))
106 | - [`alfred_dvb`](https://github.com/kiliankoe/alfred_dvb) - [Alfred](https://www.alfredapp.com) workflow for departure data (using [`dvbgo`](https://github.com/kiliankoe/dvbgo))
107 | - [`Amazon Echo`](https://twitter.com/ubahnverleih/status/830079491523358721) - Tweet [@ubahnverleih](https://twitter.com/ubahnverleih) for more info
108 | - [`catch-my-bus`](https://github.com/hoodie/catch-my-bus) - ruby script notifying you about your next bus
109 | - [`catch-my-bus-python`](https://github.com/meepoSenpai/catch-my-bus-python) - GTK3 StatusIcon showing current departure data
110 | - [`DVBot`](https://www.messenger.com/t/dvbot) - DVB Facebook Messenger Bot
111 | - [`ddplan`](https://github.com/4gray/ddplan) - Electron based station monitor that lives in the menubar
112 | - [`Abfahrtsmonitor`](https://github.com/HeEAaD/Abfahrtsmonitor) - Departure board for your Apple Watch
113 | - [`hubot-dvb`](https://github.com/kiliankoe/hubot-dvb) - [Hubot](https://hubot.github.com) script (using [`dvbjs`](https://github.com/kiliankoe/dvbjs))
114 | - [`dresden-departure-monitor`](https://github.com/don-philipe/dresden-departure-monitor) - Bashscript for getting current departure times
115 | - [`AbfahrtsTV`](https://github.com/kiliankoe/AbfahrtsTV) - Current departure times on your AppleTV, 'cause why not
116 | - [`DVBManniBot`](https://github.com/freakyblue/DVBManniBot) - Telegram bot for checking current departures
117 | - [`Verkehrsbot`](https://github.com/dirkonet/verkehrsbot) - another Telegram bot for checking current departures (using [`dvbpy`](https://github.com/kiliankoe/dvbpy))
118 | - [`Dresden Bot`](https://github.com/rtwalz/dresden) - Feature rich Telegram bot with routing, maps, departures and a lot more
119 | - [`dvb-on-esp32`](https://github.com/andiikaa/dvb-on-esp32) - Current depature times on lcd via ESP32 (Arduino)
120 | - [`dvb-browser`](https://github.com/pabra/dvb-browser) - Vue.js (mobile) browser app showing real time departures really fast
121 | - [`oepnvdresdenbot`](https://t.me/oepnvdresdenbot) - Telegram bot featuring natural language queries for departures and routes
122 | - [`ARKit Abfahrtsmonitor`](https://twitter.com/kiliankoe/status/1009788336976908289) - iOS ARKit demo showing departure information
123 | - [`Departure Shortcut`](https://github.com/kiliankoe/shortcuts#dvb-abfahrten) - Shortcut for iOS' Shortcuts app showing departures
124 | - [`dvb-mqtt`](https://github.com/seb-daehne/dvb-mqtt) - Periodically publish departure data to an mqtt broker
125 | - [`dvblive`](https://github.com/Tiffel/dvblive) - Visualization of tram delays for the entire city ([live demo](https://rpi.heep.sax.de/dvblive/) - [#odcdresden19](http://dresden.de/odcdresden19) project)
126 | - [`VV...Wo?`](https://github.com/kiliankoe/vvwo) - iOS app using natural language queries ([#odcdresden19](http://dresden.de/odcdresden19) project)
127 | - [`DVBFast`](https://github.com/lucasvog/dvbfast) - WebApp that displays the departure infos of the nearest stations using GPS ([live Version](https://dvbfast.github.io/))
128 | - [`MMM-DVB`](https://github.com/skastenholz/MMM-DVB) - MagicMirror² module
129 | - [`vvo-departures-cli`](https://aur.archlinux.org/packages/vvo-departures-cli) - CLI for querying departures information, also see [#32](https://github.com/kiliankoe/vvo/issues/32)
130 |
--------------------------------------------------------------------------------
/documentation/files/Anlage7-Demonstrator-MDV-EFA_HB_V1.2_201007_EFAFRS.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/Anlage7-Demonstrator-MDV-EFA_HB_V1.2_201007_EFAFRS.pdf
--------------------------------------------------------------------------------
/documentation/files/EFA_XML_Schnittstelle_20151217.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/EFA_XML_Schnittstelle_20151217.pdf
--------------------------------------------------------------------------------
/documentation/files/LINZ_AG_Linien_Schnitstelle_EFA_v7_Echtzeit.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/LINZ_AG_Linien_Schnitstelle_EFA_v7_Echtzeit.pdf
--------------------------------------------------------------------------------
/documentation/files/LINZ_LINIEN_Schnittstelle_EFA_V1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/LINZ_LINIEN_Schnittstelle_EFA_V1.pdf
--------------------------------------------------------------------------------
/documentation/files/dokumentationxmlschnittstelleapbv32014-08-28.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kiliankoe/vvo/3392921bd3196b26b63feaa957e5463c78be427f/documentation/files/dokumentationxmlschnittstelleapbv32014-08-28.pdf
--------------------------------------------------------------------------------
/documentation/webapi.md:
--------------------------------------------------------------------------------
1 | Base URL: `https://webapi.vvo-online.de`
2 |
3 | # Note
4 | VVO is using a server software called [EFA](https://www.mentz.net/loesungen/) from the German company [MENTZ GmbH](https://www.mentz.net/), located in Munich, Germany. Therefore not only the VVO is using this system, but also a lot of other transport organisations and associations like:
5 | * [NVBW (Nahverkehrsgesellschaft Baden-Württemberg)](https://www.nvbw.de/)
6 | * [Ruhrbahn](https://www.ruhrbahn.de/)
7 | * [DVB](https://www.dvb.de/)
8 | * [VRR (Verkehrsverbund Rhein-Ruhr)](https://www.vrr.de/)
9 | * [Naldo (Verkehrsverbund Neckar-Alb-Donau)](https://www.naldo.de/)
10 | * [VMS (Verkehrsverbund Mittelsachsen)](https://www.vms.de/)
11 | * [KVV (Karlsruher Verkehrsverbund)](https://www.kvv.de/)
12 | * [Verkehrsverbund Steiermark](https://verbundlinie.at/)
13 |
14 | ***All requests take a JSON body to be sent via a POST request. The parameters to be included in this are specified below.***
15 |
16 | # PointFinder
17 |
18 | Find stops based certain parameters.
19 |
20 | ### Request
21 |
22 | POST `https://webapi.vvo-online.de/tr/pointfinder`
23 |
24 | JSON body:
25 |
26 | | Name | Type | Description | Required |
27 | | ----------- | ------ | ------------------------------- | -------- |
28 | | `query` | String | Search query | Yes |
29 | | `limit` | Int | Maximum number of results | No |
30 | | `stopsOnly` | Bool | Only search for stops if `true` | No |
31 | | `regionalOnly` | Bool | Include only stops in VVO area if `true` | No |
32 | | `stopShortcuts` | Bool | Include stop shortcuts if `true` | No |
33 |
34 | or
35 |
36 | | Name | Type | Description | Required |
37 | | --------------- | ------ | ---------------------------------------- | -------- |
38 | | `query` | String | `coord:[right]:[up]` in GK4 coordinates | Yes |
39 | | `limit` | Int | Maximum number of results | No |
40 | | `assignedstops` | Bool | Include stops assigned to coordinate if `true` | No |
41 |
42 | `[right]` and `[up]` are placeholders for the actual coordinates in this example.
43 |
44 | ### Response
45 |
46 | ```js
47 | {
48 | "PointStatus": "List",
49 | "Status": {
50 | "Code": "Ok"
51 | },
52 | "Points": [
53 | "33000742|||Helmholtzstraße|5655904|4621157|0||",
54 | "36030083||Chemnitz|Helmholtzstr|5635837|4566835|0||",
55 | "9022020||Bonn|Helmholtzstraße|0|0|0||"
56 | ],
57 | "ExpirationTime": "\/Date(1487859556456+0100)\/"
58 | }
59 | ```
60 |
61 | ```
62 | curl -X "POST" "https://webapi.vvo-online.de/tr/pointfinder" \
63 | -H "Content-Type: application/json; charset=utf-8" \
64 | -d $'{
65 | "query": "helmholtz",
66 | "stopsOnly": true
67 | }'
68 | ```
69 |
70 | Be aware that the elements of the `Points` array can take different forms with different types. If doing a PointFinder request for a coordinate, the first element will look like the following for example `coord:4621020:504065:NAV4:Nöthnitzer Straße 46|c||Nöthnitzer Straße 46|5655935|4621020|0||`.
71 |
72 | Point strings contain nine values separated by a vertical bar (`|`). As far as we know the values are:
73 | | Index | Type | Description | Always included |
74 | | ----- | ---- | ----------- | --------------- |
75 | | 0 | Int or string | ID of a stop (int), or an other type (string, see below) | Yes |
76 | | 1 | String | Unknown. Propably type of point: `a` for streets, `p` for pois, `c` for coordinates | No |
77 | | 2 | String | City name if point is not in the VVO area | No |
78 | | 3 | String | Name of the stop or street | Yes |
79 | | 4 | Int | Right part of the GK4 coordinates | Yes |
80 | | 5 | Int | Up part of the GK4 coordinates | Yes |
81 | | 6 | Int | Distance, when submitting coords in query otherwise 0 | Yes |
82 | | 7 | ??? | Unknown. | No |
83 | | 8 | String | Shortcut of the stop | No |
84 |
85 | Instead of a numeric ID for a stop, there are other types of ids:
86 | * streetID
87 | * poiID
88 | * suburbID
89 | * placeID
90 | * coords
91 |
92 | ### Street IDs
93 |
94 | Street IDs contain 17 values separated by colons (`:`). As far as we know the values are:
95 |
96 | | Index | Type | Description | Always included |
97 | | ----- | ---- | ----------- | --------------- |
98 | | 0 | String | Suffix for streets: `streetID` | Yes |
99 | | 1 | Int | ID of the street (OMC) | Yes |
100 | | 2 | String | Street number, e.g. for `Musterstraße 42a` it's `42a` | No |
101 | | 3 | Int | Unknown | Yes |
102 | | 4 | Int | Unknown, but mostly `-1` (invalid value) | Yes |
103 | | 5 | String | Street name | Yes |
104 | | 6 | String | City name | Yes |
105 | | 7 | String | Street name | Yes |
106 | | 8 | ??? | Unknown | No |
107 | | 9 | String | Street name | Yes |
108 | | 10 | String | Postal code | Yes |
109 | | 11 | String | `ANY` | Yes |
110 | | 12 | String | Either `DIVA_STREET` for a complete street or `DIVA_SINGLEHOUSE` for a point with street number | Yes |
111 | | 13 | Int | Unknown. Propably right part of coordinates in MDV format | Yes |
112 | | 14 | Int | Unknown. Propably up part of coordinates in MDV format | Yes |
113 | | 15 | String | Map name, e.g. `MRCV` or `NAV4` | Yes |
114 | | 16 | String | Acronym of the transport association, e.g. `VVO` | Yes |
115 |
116 | ### POI IDs
117 |
118 | POI IDs contain 13 values separated by colons (`:`). As far as we know the values are:
119 |
120 | | Index | Type | Description | Always included |
121 | | ----- | ---- | ----------- | --------------- |
122 | | 0 | String | Suffix for pois: `poiID` | Yes |
123 | | 1 | Int | ID of the poi | Yes |
124 | | 2 | Int | Unknown. | Yes |
125 | | 3 | Int | Unknown, but mostly `-1` (invalid value) | Yes |
126 | | 4 | String | Name of the poi | Yes |
127 | | 5 | String | City name | Yes |
128 | | 6 | String | Name of the poi | Yes |
129 | | 7 | String | `ANY` | Yes |
130 | | 8 | String | `POI` | Yes |
131 | | 9 | Int | Unknown. Propably right part of coordinates in MDV format | Yes |
132 | | 10 | Int | Unknown. Propably up part of coordinates in MDV format | Yes |
133 | | 11 | String | Map name, e.g. `MRCV` or `NAV4` | Yes |
134 | | 12 | String | Acronym of the transport association, e.g. `VVO` | Yes |
135 |
136 | # Departure Monitor
137 |
138 | List out upcoming departures from a given stop id.
139 |
140 | ### Request
141 |
142 | POST `https://webapi.vvo-online.de/dm`
143 |
144 | JSON body:
145 |
146 | | Name | Type | Description | Required |
147 | | ------------------ | ------------- | ---------------------------------------- | -------- |
148 | | `stopid` | String | ID of the stop | Yes |
149 | | `limit` | Int | Maximum number of results | No |
150 | | `time` | String | ISO8601 timestamp, e.g. `2017-02-22T15:40:26Z` | No |
151 | | `isarrival` | Bool | Is the time specified above supposed to be interpreted as arrival or departure time? | No |
152 | | `shorttermchanges` | Bool | unknown in this context | No |
153 | | `mot` | Array[String] | Allowed modes of transport, see below | No |
154 |
155 | Currently accepted modes of transport are `Tram`, `CityBus`, `IntercityBus`, `SuburbanRailway`, `Train`, `Cableway`, `Ferry`, `HailedSharedTaxi`.
156 |
157 | ### Response
158 |
159 | ```js
160 | {
161 | "Name": "Hauptbahnhof",
162 | "Status": {
163 | "Code": "Ok"
164 | },
165 | "Place": "Dresden",
166 | "ExpirationTime": "\/Date(1487778279147+0100)\/",
167 | "Departures": [
168 | {
169 | "Id": "65597047",
170 | "LineName": "3",
171 | "Direction": "Wilder Mann",
172 | "Platform": {
173 | "Name": "3",
174 | "Type": "Platform"
175 | },
176 | "Mot": "Tram",
177 | "RealTime": "\/Date(1487778230000+0100)\/",
178 | "ScheduledTime": "\/Date(1487778060000+0100)\/",
179 | "State": "Delayed",
180 | "RouteChanges": [
181 | "509223"
182 | ],
183 | "Diva": {
184 | "Number": "11003",
185 | "Network": "voe"
186 | }
187 | },
188 | {
189 | "Id": "65598309",
190 | "LineName": "8",
191 | "Direction": "Südvorstadt",
192 | "Platform": {
193 | "Name": "4",
194 | "Type": "Platform"
195 | },
196 | "Mot": "Tram",
197 | "RealTime": "\/Date(1487778356000+0100)\/",
198 | "ScheduledTime": "\/Date(1487778300000+0100)\/",
199 | "State": "InTime",
200 | "Diva": {
201 | "Number": "11008",
202 | "Network": "voe"
203 | }
204 | }
205 | ]
206 | }
207 | ```
208 |
209 | ```
210 | curl -X "POST" "https://webapi.vvo-online.de/dm" \
211 | -H "Content-Type: application/json;charset=UTF-8" \
212 | -d $'{
213 | "stopid": "33000028",
214 | "limit": 2,
215 | "mot": [
216 | "Tram",
217 | "CityBus",
218 | "IntercityBus",
219 | "SuburbanRailway",
220 | "Train",
221 | "Cableway",
222 | "Ferry",
223 | "HailedSharedTaxi"
224 | ]
225 | }'
226 | ```
227 |
228 |
229 | # Trip Details
230 |
231 | Get details about the stations involved in a particular trip.
232 |
233 | ## Request
234 |
235 | POST https://webapi.vvo-online.de/dm/trip
236 |
237 | ### JSON Body:
238 |
239 | | Name | Type | Description | Required |
240 | | --------- | --------- | ----------------------------------------------------------------- | -------- |
241 | | `tripid` | String | The "id" received from the departure monitor (Departures\[\*\].Id). | Yes |
242 | | `time` | String | The current time as unix timestamp plus timezone. Has to be in the future. Most likely from a departure monitor response (Departures\[\*\].RealTime / Departures\[\*\].ScheduledTime). | Yes |
243 | | `stopid` | String | ID of a stop in the route. This stop will be marked with Position=Current in the response. | Yes |
244 | | `mapdata` | Bool | Unknown. Seems to have no effect. | No |
245 |
246 |
247 | ```
248 | curl -X "POST" "https://webapi.vvo-online.de/dm/trip" \
249 | -H 'Content-Type: application/json; charset=utf-8' \
250 | -d $'{
251 | "tripid": "71313709",
252 | "time": "/Date(1512563081000+0100)/",
253 | "stopid": "33000077"
254 | }'
255 | ```
256 |
257 | ## Response
258 | ```
259 | {
260 | "Stops": [
261 | ...
262 | {
263 | "Id": "33000076",
264 | "Place": "Dresden",
265 | "Name": "Laibacher Straße",
266 | "Position": "Previous",
267 | "Platform": {
268 | "Name": "2",
269 | "Type": "Platform"
270 | },
271 | "Time": "\/Date(1512563021000+0100)\/"
272 | },
273 | {
274 | "Id": "33000077",
275 | "Place": "Dresden",
276 | "Name": "Großglocknerstraße",
277 | "Position": "Current",
278 | "Platform": {
279 | "Name": "2",
280 | "Type": "Platform"
281 | },
282 | "Time": "\/Date(1512563081000+0100)\/"
283 | },
284 | {
285 | "Id": "33000078",
286 | "Place": "Dresden",
287 | "Name": "Friedhof Leuben",
288 | "Position": "Next",
289 | "Platform": {
290 | "Name": "2",
291 | "Type": "Platform"
292 | },
293 | "Time": "\/Date(1512563141000+0100)\/"
294 | },
295 | ...
296 | ],
297 | "Status": {
298 | "Code": "Ok"
299 | },
300 | "ExpirationTime": "\/Date(1512565171371+0100)\/"
301 | }
302 | ```
303 |
304 |
305 | # Query a Trip
306 |
307 | Query how to get from station "Hauptbahnhof" (stopid 33000028) to station
308 | "Bahnhof Neustadt" (stopid 33000016).
309 |
310 | ## Request
311 |
312 | POST https://webapi.vvo-online.de/tr/trips
313 |
314 | ### JSON body
315 |
316 | | Name | Type | Description | Required |
317 | | ------------------ | ----------- | ----------------- | -------- |
318 | | `origin` | String | stopid of start station | yes |
319 | | `destination` | String | stopid of destination station | yes |
320 | | `shorttermchanges` | Bool | unknown | no (missing behaves like `shorttermchanges = false`) |
321 | | `time` | String | ISO8601 timestamp | no |
322 | | `isarrivaltime` | Bool | is `time` arrival or departure | no |
323 |
324 | ```bash
325 | curl -X "POST" "https://webapi.vvo-online.de/tr/trips?format=json" \
326 | -H 'Content-Type: application/json; charset=utf-8' \
327 | -H 'X-Requested-With: de.dvb.dvbmobil' \
328 | -d $'{
329 | "destination": "33000016",
330 | "isarrivaltime": false,
331 | "mobilitySettings": {
332 | "mobilityRestriction": "None"
333 | },
334 | "origin": "33000028",
335 | "shorttermchanges": true,
336 | "standardSettings": {
337 | "footpathToStop": 5,
338 | "includeAlternativeStops": true,
339 | "maxChanges": "Unlimited",
340 | "mot": [
341 | "Tram",
342 | "CityBus",
343 | "IntercityBus",
344 | "SuburbanRailway",
345 | "Train",
346 | "Cableway",
347 | "Ferry",
348 | "HailedSharedTaxi"
349 | ],
350 | "walkingSpeed": "Normal"
351 | },
352 | "time": "2017-12-08T21:36:42.775Z"
353 | }'
354 | ```
355 |
356 | ## Response
357 |
358 | ```json
359 | {
360 | "Routes": [
361 | ...
362 | {
363 | "Duration": 11,
364 | "FareZoneDestination": 10,
365 | "FareZoneOrigin": 10,
366 | "Interchanges": 0,
367 | "MapData": [
368 | "Tram|5657496|4621684|5657555|4621712|5657572|4621722|5657589|4621733|5657611|4621746|5657637|4621762|5657694|4621796|5657694|4621796|5657700|4621800|5657729|4621819|5657795|4621859|5657861|4621902|5657888|4621922|5657930|4621954|5657978|4621990|5657978|4621990|5658017|4622019|5658176|4622138|5658240|4622191|5658279|4622224|5658347|4622282|5658358|4622291|5658377|4622302|5658414|4622319|5658476|4622350|5658551|4622387|5658551|4622387|5658574|4622398|5658588|4622406|5658595|4622411|5658607|4622421|5658621|4622432|5658628|4622440|5658629|4622441|5658638|4622450|5658661|4622474|5658682|4622494|5658692|4622502|5658702|4622509|5658765|4622541|5658816|4622567|5658852|4622582|5658870|4622587|5658888|4622592|5658901|4622595|5658937|4622602|5658957|4622607|5658957|4622607|5658966|4622609|5658990|4622613|5659010|4622615|5659021|4622615|5659035|4622614|5659058|4622612|5659091|4622606|5659388|4622527|5659435|4622516|5659441|4622514|5659473|4622506|5659512|4622508|5659520|4622508|5659556|4622511|5659556|4622511|5659562|4622512|5659581|4622513|5659603|4622512|5659946|4622487|5659981|4622486|5660008|4622484|5660032|4622487|5660053|4622494|5660065|4622499|5660090|4622515|5660123|4622534|5660124|4622534|5660124|4622534|5660134|4622541|5660148|4622549|5660244|4622401|5660271|4622315|5660278|4622254|5660285|4622217|5660291|4622151|"
369 | ],
370 | "MapPdfId": "VVO_5A2B062D3",
371 | "MotChain": [
372 | {
373 | "Changes": [
374 | "510690"
375 | ],
376 | "Direction": " Btf Trachenberge",
377 | "Diva": {
378 | "Network": "voe",
379 | "Number": "11003"
380 | },
381 | "Name": "3",
382 | "Type": "Tram"
383 | }
384 | ],
385 | "PartialRoutes": [
386 | {
387 | "Duration": 11,
388 | "MapDataIndex": 0,
389 | "Mot": {
390 | "Changes": [
391 | "510690"
392 | ],
393 | "Direction": " Btf Trachenberge",
394 | "Diva": {
395 | "Network": "voe",
396 | "Number": "11003"
397 | },
398 | "Name": "3",
399 | "Type": "Tram"
400 | },
401 | "PartialRouteId": 0,
402 | "RegularStops": [
403 | {
404 | "ArrivalTime": "/Date(1512769800000-0000)/",
405 | "DataId": "33000028",
406 | "DepartureTime": "/Date(1512769800000-0000)/",
407 | "Latitude": 5657497,
408 | "Longitude": 4621685,
409 | "MapPdfId": "VVO_5A2B062D4",
410 | "Name": "Hauptbahnhof",
411 | "Place": "Dresden",
412 | "Platform": {
413 | "Name": "3",
414 | "Type": "Railtrack"
415 | },
416 | "Type": "Stop"
417 | },
418 | {
419 | "ArrivalTime": "/Date(1512769860000-0000)/",
420 | "DataId": "33000032",
421 | "DepartureTime": "/Date(1512769860000-0000)/",
422 | "Latitude": 5657693,
423 | "Longitude": 4621797,
424 | "Name": "Hauptbahnhof Nord",
425 | "Place": "Dresden",
426 | "Platform": {
427 | "Name": "1",
428 | "Type": "Platform"
429 | },
430 | "Type": "Stop"
431 | },
432 | {
433 | "ArrivalTime": "/Date(1512769920000-0000)/",
434 | "DataId": "33000029",
435 | "DepartureTime": "/Date(1512769920000-0000)/",
436 | "Latitude": 5657981,
437 | "Longitude": 4621985,
438 | "Name": "Walpurgisstraße",
439 | "Place": "Dresden",
440 | "Platform": {
441 | "Name": "1",
442 | "Type": "Platform"
443 | },
444 | "Type": "Stop"
445 | },
446 | {
447 | "ArrivalTime": "/Date(1512770040000-0000)/",
448 | "DataId": "33000005",
449 | "DepartureTime": "/Date(1512770040000-0000)/",
450 | "Latitude": 5658549,
451 | "Longitude": 4622390,
452 | "Name": "Pirnaischer Platz",
453 | "Place": "Dresden",
454 | "Platform": {
455 | "Name": "4",
456 | "Type": "Platform"
457 | },
458 | "Type": "Stop"
459 | },
460 | {
461 | "ArrivalTime": "/Date(1512770100000-0000)/",
462 | "DataId": "33000015",
463 | "DepartureTime": "/Date(1512770100000-0000)/",
464 | "Latitude": 5658956,
465 | "Longitude": 4622609,
466 | "Name": "Synagoge",
467 | "Place": "Dresden",
468 | "Platform": {
469 | "Name": "2",
470 | "Type": "Platform"
471 | },
472 | "Type": "Stop"
473 | },
474 | {
475 | "ArrivalTime": "/Date(1512770220000-0000)/",
476 | "DataId": "33000014",
477 | "DepartureTime": "/Date(1512770220000-0000)/",
478 | "Latitude": 5659556,
479 | "Longitude": 4622513,
480 | "Name": "Carolaplatz",
481 | "Place": "Dresden",
482 | "Platform": {
483 | "Name": "4",
484 | "Type": "Platform"
485 | },
486 | "Type": "Stop"
487 | },
488 | {
489 | "ArrivalTime": "/Date(1512770340000-0000)/",
490 | "DataId": "33000013",
491 | "DepartureTime": "/Date(1512770340000-0000)/",
492 | "Latitude": 5660122,
493 | "Longitude": 4622537,
494 | "Name": "Albertplatz",
495 | "Place": "Dresden",
496 | "Platform": {
497 | "Name": "2",
498 | "Type": "Platform"
499 | },
500 | "Type": "Stop"
501 | },
502 | {
503 | "ArrivalTime": "/Date(1512770460000-0000)/",
504 | "DataId": "33000016",
505 | "DepartureTime": "/Date(1512770460000-0000)/",
506 | "Latitude": 5660290,
507 | "Longitude": 4622151,
508 | "MapPdfId": "VVO_5A2B062D5",
509 | "Name": "Bahnhof Neustadt",
510 | "Place": "Dresden",
511 | "Platform": {
512 | "Name": "2",
513 | "Type": "Platform"
514 | },
515 | "Type": "Stop"
516 | }
517 | ],
518 | "Shift": "None"
519 | }
520 | ],
521 | "Price": "2,30",
522 | "PriceLevel": 1,
523 | "RouteId": 1
524 | },
525 | ...
526 | ],
527 | "SessionId": "367417461:efa4",
528 | "Status": {
529 | "Code": "Ok"
530 | }
531 | }
532 | ```
533 |
534 |
535 | # Route Changes
536 |
537 | Get information about route changes because of construction work or such.
538 |
539 | ## Request
540 |
541 | POST https://webapi.vvo-online.de/rc
542 |
543 | ### JSON body
544 |
545 | | Name | Type | Description | Required |
546 | | ----------- | ----------- | -------------- | -------- |
547 | | `shortterm` | Bool | unknown. I diffed the output with and without -> no diff | no |
548 |
549 | I also tried to pass other keys like mot, name, id, change, ... (each camel, pascal and lower case)
550 | but no error and no change in result. So it looks like you need to fetch all route changes for the
551 | whole VVO and filter yourself.
552 |
553 | ```bash
554 | curl -X "POST" "https://webapi.vvo-online.de/rc" \
555 | -H 'Content-Type: application/json; charset=utf-8' \
556 | -d $'{ "shortterm": true }'
557 | ```
558 |
559 | ## Response
560 |
561 | ```json
562 | {
563 | "Changes": [
564 | ...
565 | {
566 | "Description": "
\nBeschreibung
\nBuslinie 79:
Umleitung nur in Richtung Overbeckstraße zwischen den Haltestellen Rethelstraße und Mengsstraße über den Fahrweg Rethelstraße - Werftstraße.
\nHaltestellenanpassungen
\n\n- Die Haltestellen Kaditzer Straße und Thäterstraße werden in die Rethelstraße verlegt.
",
567 | "Id": "511595",
568 | "LineIds": [
569 | "428296"
570 | ],
571 | "PublishDate": "/Date(1512400560000+0100)/",
572 | "Title": "Dresden - Mengsstraße, Vollsperrung wegen Asphaltarbeiten",
573 | "Type": "Scheduled",
574 | "ValidityPeriods": [
575 | {
576 | "Begin": "/Date(1512529200000+0100)/",
577 | "End": "/Date(1512788400000+0100)/"
578 | }
579 | ]
580 | },
581 | ...
582 | ],
583 | "Status": {
584 | "Code": "Ok"
585 | }
586 | }
587 | ```
588 |
589 | (sometimes they come back: ``)
590 |
591 |
592 | # Lines
593 |
594 | Get information about which lines do service which stations.
595 |
596 | ## Request
597 |
598 | POST https://webapi.vvo-online.de/stt/lines
599 |
600 | ### JSON body
601 |
602 | | Name | Type | Description | Required |
603 | |----------|--------|----------------|----------|
604 | | `stopid` | String | ID of the stop | Yes |
605 |
606 | ```bash
607 | curl -X "POST" "https://webapi.vvo-online.de/stt/lines" \
608 | -H 'Content-Type: application/json; charset=utf-8' \
609 | -d $'{ "stopid": "33000293" }'
610 | ```
611 |
612 | ## Response
613 |
614 | ```json
615 | {
616 | "Lines": [
617 | {
618 | "Name": "41",
619 | "Mot": "Tram",
620 | "Changes": [
621 | "5482",
622 | "5480",
623 | "5481"
624 | ],
625 | "Directions": [
626 | {
627 | "Name": "Dresden Südvorstadt",
628 | "TimeTables": [
629 | {
630 | "Id": "voe:11041: :H:j19:2",
631 | "Name": "Ferienfahrplan - gültig vom 06.07. bis 18.08.2019"
632 | }
633 | ]
634 | },
635 | {
636 | "Name": "Dresden Bühlau Ullersdorfer Platz",
637 | "TimeTables": [
638 | {
639 | "Id": "voe:11041: :R:j19:2",
640 | "Name": "Ferienfahrplan - gültig vom 06.07. bis 18.08.2019"
641 | }
642 | ]
643 | }
644 | ],
645 | "Diva": {
646 | "Number": "11041",
647 | "Network": "voe"
648 | }
649 | },
650 | {
651 | "Name": "64",
652 | "Mot": "CityBus",
653 | "Changes": [
654 | "5481",
655 | "5466",
656 | "4472"
657 | ],
658 | "Directions": [
659 | {
660 | "Name": "Dresden Kaditz Am Vorwerksfeld",
661 | "TimeTables": [
662 | {
663 | "Id": "voe:21064: :H:j19:17",
664 | "Name": "Aktualisierter Standardfahrplan - gültig ab 21.06.2019"
665 | },
666 | {
667 | "Id": "voe:21064: :H:j19:18",
668 | "Name": "Ferienfahrplan - gültig vom 08.07. bis 18.08.2019"
669 | }
670 | ]
671 | },
672 | {
673 | "Name": "Dresden Reick Hülße-Gymnasium",
674 | "TimeTables": [
675 | {
676 | "Id": "voe:21064: :R:j19:17",
677 | "Name": "Aktualisierter Standardfahrplan - gültig ab 21.06.2019"
678 | },
679 | {
680 | "Id": "voe:21064: :R:j19:18",
681 | "Name": "Ferienfahrplan - gültig vom 08.07. bis 18.08.2019"
682 | }
683 | ]
684 | }
685 | ],
686 | "Diva": {
687 | "Number": "21064",
688 | "Network": "voe"
689 | }
690 | },
691 | {
692 | "Name": "74",
693 | "Mot": "CityBus",
694 | "Directions": [
695 | {
696 | "Name": "Dresden Marienallee",
697 | "TimeTables": [
698 | {
699 | "Id": "voe:21074:D:H:j19:1",
700 | "Name": "Standardfahrplan (gültig ab 07.01.2019)"
701 | }
702 | ]
703 | },
704 | {
705 | "Name": "Dresden Mathias-Oeder-Straße",
706 | "TimeTables": [
707 | {
708 | "Id": "voe:21074:D:R:j19:1",
709 | "Name": "Standardfahrplan (gültig ab 07.01.2019)"
710 | }
711 | ]
712 | }
713 | ],
714 | "Diva": {
715 | "Number": "21074D",
716 | "Network": "voe"
717 | }
718 | },
719 | {
720 | "Name": "74",
721 | "Mot": "CityBus",
722 | "Directions": [
723 | {
724 | "Name": "Dresden Marienallee",
725 | "TimeTables": [
726 | {
727 | "Id": "voe:21074: :H:j19:11",
728 | "Name": "Ferienfahrplan - gültig vom 08.07. bis 18.08.2019"
729 | }
730 | ]
731 | },
732 | {
733 | "Name": "Dresden Jägerpark Heideblick",
734 | "TimeTables": [
735 | {
736 | "Id": "voe:21074: :R:j19:11",
737 | "Name": "Ferienfahrplan - gültig vom 08.07. bis 18.08.2019"
738 | }
739 | ]
740 | }
741 | ],
742 | "Diva": {
743 | "Number": "21074",
744 | "Network": "voe"
745 | }
746 | },
747 | {
748 | "Name": "261",
749 | "Mot": "IntercityBus",
750 | "Directions": [
751 | {
752 | "Name": "Dresden Hauptbahnhof",
753 | "TimeTables": [
754 | {
755 | "Id": "voe:15261:m:H:j19:1",
756 | "Name": "Jahresfahrplan 2019 - Gültig ab 9. Dezember 2018"
757 | }
758 | ]
759 | },
760 | {
761 | "Name": "Sebnitz Busbahnhof",
762 | "TimeTables": [
763 | {
764 | "Id": "voe:15261:m:R:j19:1",
765 | "Name": "Jahresfahrplan 2019 - Gültig ab 9. Dezember 2018"
766 | }
767 | ]
768 | }
769 | ],
770 | "Diva": {
771 | "Number": "15261m",
772 | "Network": "voe"
773 | }
774 | },
775 | {
776 | "Name": "305",
777 | "Mot": "IntercityBus",
778 | "Directions": [
779 | {
780 | "Name": "Bischofswerda Bahnhof",
781 | "TimeTables": [
782 | {
783 | "Id": "voe:27305: :H:j19:1",
784 | "Name": "Jahresfahrplan 2019 - Gültig ab 9. Dezember 2018"
785 | },
786 | {
787 | "Id": "voe:27305: :H:j19:4",
788 | "Name": "Fahrbahnerneuerung S 158 in Rammenau"
789 | },
790 | {
791 | "Id": "voe:27305: :H:j19:6",
792 | "Name": "Fahrbahnerneuerung S 158 in Rammenau + Fischhausstraße"
793 | },
794 | {
795 | "Id": "voe:27305: :H:j19:7",
796 | "Name": "Bau Fischhausstraße 29. JUli bis 16. August 2019"
797 | }
798 | ]
799 | },
800 | {
801 | "Name": "Dresden Augsburger Straße",
802 | "TimeTables": [
803 | {
804 | "Id": "voe:27305: :R:j19:1",
805 | "Name": "Jahresfahrplan 2019 - Gültig ab 9. Dezember 2018"
806 | }
807 | ]
808 | },
809 | {
810 | "Name": "Dresden Ammonstraße / Budapester Straße",
811 | "TimeTables": [
812 | {
813 | "Id": "voe:27305: :R:j19:4",
814 | "Name": "Fahrbahnerneuerung S 158 in Rammenau"
815 | },
816 | {
817 | "Id": "voe:27305: :R:j19:6",
818 | "Name": "Fahrbahnerneuerung S 158 in Rammenau + Fischhausstraße"
819 | },
820 | {
821 | "Id": "voe:27305: :R:j19:7",
822 | "Name": "Bau Fischhausstraße 29. JUli bis 16. August 2019"
823 | }
824 | ]
825 | }
826 | ],
827 | "Diva": {
828 | "Number": "27305",
829 | "Network": "voe"
830 | }
831 | }
832 | ],
833 | "Status": {
834 | "Code": "Ok"
835 | },
836 | "ExpirationTime": "/Date(1563544805289+0200)/"
837 | }
838 | ```
839 |
840 | # Sources
841 | * http://data.linz.gv.at/katalog/linz_ag/linz_ag_linien/fahrplan/EFA_XML_Schnittstelle_20151217.pdf
842 | * http://data.linz.gv.at/katalog/linz_ag/linz_ag_linien/fahrplan/LINZ_AG_Linien_Schnitstelle_EFA_v7_Echtzeit.pdf
843 | * http://data.linz.gv.at/katalog/linz_ag/linz_ag_linien/fahrplan/LINZ_LINIEN_Schnittstelle_EFA_V1.pdf
844 | * http://mobilitaet21.de/wp-content/uploads/2016/03/Anlage7-Demonstrator-MDV-EFA_HB_V1.2_201007_EFAFRS.pdf
845 | * https://www.yumpu.com/de/document/read/10943659/efa-version-10-mentz-datenverarbeitung-gmbh
846 | * http://dati.retecivica.bz.it/dataset/575f7455-6447-4626-a474-0f93ff03067b/resource/c4e66cdf-7749-40ad-bcfd-179f18743d84/download/dokumentationxmlschnittstelleapbv32014-08-28.pdf
847 |
848 | # TODO
849 |
850 | - https://webapi.vvo-online.de/map/pins
851 | - (https://webapi.vvo-online.de/tr/handyticket)
852 |
--------------------------------------------------------------------------------
/documentation/widgets.md:
--------------------------------------------------------------------------------
1 | Base URL: `http://widgets.vvo-online.de`
2 |
3 | # Abfahrten
4 |
5 | Get a list of upcoming departures from a given stop with a few filter options.
6 |
7 | ### Request
8 |
9 | GET `http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do`
10 |
11 | Params:
12 |
13 | | Name | Type | Description | Required |
14 | | :---------- | ------- | ---------------------------------------- | :------- |
15 | | `hst` | String | Name of the stop | Yes |
16 | | `vz` | Int | Time offset, e.g. `1` minute in the future | No |
17 | | `ort` | String | City to further specify the stop | No |
18 | | `vm` | String | Comma-separated list of allowed transport modes, see below | No |
19 | | `lim` | Int | Maximum number of results | No |
20 | | `timestamp` | Int | Unix timestamp for when to search | No |
21 | | `iso` | unknown | unknown | No |
22 |
23 |
24 | Possible transport modes are listed [here](http://widgets.vvo-online.de/abfahrtsmonitor/Verkehrsmittel.do). Currently included are `Rufbus`, `Fähre`, `Regionalbus`, `S-Bahn`, `Seil-/Schwebebahn`, `Stadtbus`, `Straßenbahn`, `Zug`.
25 |
26 | ### Response
27 |
28 | ```js
29 | [
30 | [
31 | "4", // Line identifier
32 | "Radebeul West", // Destination
33 | "1" // Time in minutes until arrival
34 | ],
35 | [
36 | "1",
37 | "Prohlis",
38 | "2"
39 | ]
40 | ]
41 | ```
42 |
43 | ```
44 | curl -X "GET" "http://widgets.vvo-online.de/abfahrtsmonitor/Abfahrten.do?hst=postplatz&vz=0&ort=Dresden&lim=2×tamp=1487172338"
45 | ```
46 |
47 | # Haltestelle
48 |
49 | Find specific stops given a partial name or search query.
50 |
51 | ### Request
52 |
53 | GET `http://widgets.vvo-online.de/abfahrtsmonitor/Haltestelle.do`
54 |
55 | Params:
56 |
57 | | Name | Type | Description | Required |
58 | | ----- | ------ | ----------- | -------- |
59 | | `ort` | String | City name | No |
60 | | `hst` | String | Stop name | Yes |
61 |
62 | ### Response
63 |
64 | ```js
65 | [
66 | [
67 | [
68 | "Dresden"
69 | ]
70 | ],
71 | [
72 | [
73 | "Helmholtzstraße",
74 | "Dresden",
75 | "33000742"
76 | ]
77 | ]
78 | ]
79 | ```
80 |
81 | ```
82 | curl -X "GET" "http://widgets.vvo-online.de/abfahrtsmonitor/Haltestelle.do?ort=Dresden&hst=Helmholtz"
83 | ```
84 |
85 | # TODO
86 |
87 | http://widgets.vvo-online.de/abfahrtsmonitor/Verkehrsmittel.do
88 |
--------------------------------------------------------------------------------
/kuerzel/kuerzel.py:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env python3
2 |
3 | import sys
4 | import requests
5 | from bs4 import BeautifulSoup
6 |
7 | content = requests.get('https://www.dvb.de/de-de/fahrplan/haltestellenauskunft/haltestellenkuerzel/').text
8 | soup = BeautifulSoup(content, 'html.parser')
9 |
10 | tables = soup.find_all('table')
11 |
12 | if len(sys.argv) != 2:
13 | print('`dresden` or `umland`?')
14 | sys.exit(1)
15 |
16 | if sys.argv[1].lower() == 'dresden':
17 | for table in tables[0:2]:
18 | for tr in table.find_all('tr')[1:]:
19 | tds = tr.find_all('td')
20 | name, kuerzel = tds
21 | print('{};{}'.format(name.text.strip(),
22 | kuerzel.text.strip()))
23 | elif sys.argv[1].lower() == 'umland':
24 | for tr in tables[2].find_all('tr')[1:]:
25 | tds = tr.find_all('td')
26 | ort, name, kuerzel = tds
27 | print('{}, {};{}'.format(name.text.strip(),
28 | ort.text.strip(),
29 | kuerzel.text.strip()))
30 | else:
31 | print('`dresden` or `umland`?')
32 | sys.exit(1)
33 |
--------------------------------------------------------------------------------
/kuerzel/kuerzel_dresden.csv:
--------------------------------------------------------------------------------
1 | Aachener Straße;AAC
2 | Am Anger;AAN
3 | Am Altfrankener Park;AAP
4 | Alberthafen;ABH
5 | Altenberger Platz;ABP
6 | Abzweig nach Reick;ABR
7 | Am Brüchigt;ABT
8 | Altburgstädtel;ABU
9 | Achtbeeteweg;ABW
10 | Altcotta;ACO
11 | Altdobritz;ADB
12 | An der Flutrinne;ADF
13 | Auf der Höhe;ADH
14 | An der Obstplantage;ADO
15 | An der Rennbahn;ADR
16 | An den Winkelwiesen;ADW
17 | Agentur für Arbeit;AFA
18 | Am Festspielhaus;AFE
19 | Altfranken;AFR
20 | Am Galgenberg;AGB
21 | Arno-Holz-Allee;AHA
22 | Am Hellerhof;AHH
23 | Ahlbecker Straße;AHL
24 | Am Hellerrand;AHR
25 | Altkaitz;AKA
26 | Altkaditz;AKD
27 | Altklotzsche;AKL
28 | Alaunplatz;ALA
29 | Altenberger Straße;ALB
30 | Altleuben;ALN
31 | Altlockwitz;ALO
32 | Albertplatz;ALP
33 | Atlplauen;ALT
34 | Altleubnitz;ALZ
35 | Amselgrund;AMG
36 | Am Lehmberg;AML
37 | Altmockritz;AMO
38 | Amalie-Dietrich-Platz;AMP
39 | Amselsteg;AMS
40 | Altmarkt;AMT
41 | Altnaußlitz;ANA
42 | Angelikastraße;ANG
43 | Altnossener Straße;ANS
44 | Am Olter;AOL
45 | Altomsewitz;AOM
46 | Altpieschen;API
47 | An der Post;APO
48 | Alexander-Puschkin-Platz;APU
49 | Am Querfeld;AQU
50 | Altreick;ARE
51 | Arkonastraße;ARK
52 | Am Steinacker;ASA
53 | Arno-Schellenberg-Straße;ASC
54 | Am Schöpsdamm;ASD
55 | Alter Schlachthof;ASH
56 | Am Steinigt;ASI
57 | Am Steinkreuz;ASK
58 | Adalbert-Stifter-Weg;AST
59 | Am Trachauer Bahnhof;ATB
60 | Alfred-Thiele-Straße;ATH
61 | Alttolkewitz;ATO
62 | Alttrachau;ATR
63 | Alttorna;ATT
64 | Augsburger Straße;AUG
65 | Am Urnenfeld;AUR
66 | Am Weißen Adler;AWA
67 | Am Weißiger Bach;AWB
68 | Altwilschdorf;AWD
69 | A.-Weineck-Straße;AWK
70 | Albert-Wolf-Platz;AWP
71 | Am Waldrand;AWR
72 | Am Wiesenrand;AWS
73 | Altwachwitz;AWW
74 | Am Zwingerteich;AZT
75 | Babisnauer Straße;BAB
76 | Bärensteiner Straße;BAE
77 | Bamberger Straße;BAM
78 | Bannewitzer Straße;BAN
79 | Borsbergblick;BBB
80 | Budapester Straße;BDP
81 | Bodemerweg;BDW
82 | Beckerstraße;BEC
83 | Beerenhut;BEH
84 | Bernhardstraße;BER
85 | Bahnhof Grenzstraße;BFG
86 | Bahnhof Klotzsche;BFK
87 | Bahnhof Neustadt;BFN
88 | Bahnhof Reick;BFR
89 | Berggartenstraße;BGG
90 | Berggießhübler Straße;BGH
91 | Burgkstraße;BGK
92 | Burgenlandstraße;BGL
93 | Bürgerstraße;BGR
94 | Bergfelderweg;BGW
95 | Bahnhofstraße;BHF
96 | Bonhoefferplatz;BHP
97 | Berthold-Haupt-Straße;BHT
98 | Bischofsplatz;BIP
99 | Birkenhainer Straße;BIR
100 | Bischofsweg;BIW
101 | Birkenstraße;BKS
102 | Bergmannstraße;BMA
103 | Bahnhof Mitte;BMI
104 | Böhmertstraße;BMS
105 | Bf. Neustadt (Hansastraße);BNH
106 | Bönischplatz;BNP
107 | Bünaustraße;BNS
108 | Oberloschwitz;BOLO
109 | Boxdorfer Straße;BOX
110 | Bremer Straße;BRM
111 | Breitscheidstraße;BRS
112 | Brunnenweg;BRU
113 | Bedrich-Smetana-Straße;BSM
114 | Bautzner/Rothenburger Str.;BTZ
115 | Buchenstraße;BUC
116 | Bühlau Ullersdorfer Platz;BUE
117 | Bunsenstraße;BUN
118 | Betriebshof Walterstraße;BWA
119 | Weißer Hirsch;BWHI
120 | Bärwalder Straße;BWR
121 | Cäcilienstraße;CAC
122 | Calberlastraße;CAL
123 | Cämmerswalder Straße;CAM
124 | Carolaplatz;CAP
125 | C.-David-Friedrich-Straße;CDF
126 | Chamissostraße;CHA
127 | Chemnitzer Straße;CHE
128 | Clausen-Dahl-Straße;CLD
129 | Campingplatz Mockritz;CMO
130 | Conertplatz;CNP
131 | Cottaer Straße;COA
132 | Cossebauder Straße;COB
133 | Comeniusplatz;COP
134 | Corinthstraße;COR
135 | Coventrystraße;COV
136 | Coschütz;COZ
137 | Cossebaude Bahnhof;CSB
138 | Coschützer Straße;CSS
139 | Cunnersdorfer Straße;CUD
140 | Cunewalder Straße;CUW
141 | Clara-Viebig-Straße;CVI
142 | Clara-Zetkin-Straße;CZN
143 | Dahlienweg;DAH
144 | Dampfschiffstraße;DAM
145 | Dorothea-Erxleben-Straße;DEX
146 | Dorfhainer Straße;DFH
147 | Deutsches Hygiene-Museum;DHM
148 | Droste-Hülshoff-Straße;DHS
149 | Diakonissenkrankenhaus;DIK
150 | Dölzschener Straße;DLZ
151 | Dörnichtweg;DNW
152 | Dorfstraße;DOF
153 | Dohnaer Straße;DOH
154 | Dölzschen;DOL
155 | Dorfplatz Oberpoyritz;DOP
156 | Dornblüthstraße;DOR
157 | Dreyßigplatz;DRP
158 | Dora-Stock-Straße;DSS
159 | Dürerstraße;DUR
160 | Dammweg;DWE
161 | Erna-Berger-Straße;EBE
162 | Ebertplatz;EBP
163 | Eugen-Bracht-Straße;EBR
164 | Eisenbahnstraße;EBS
165 | Enno-Heidebroek-Straße;EHS
166 | Eichbergstraße;EIC
167 | Erich-Kästner-Straße;EKA
168 | Elisabethstraße;ELI
169 | Elsterweg;ELS
170 | ElbePark;EPK
171 | Eschebachstraße;ESB
172 | Elbschlösser;ESL
173 | Ernst-Toller-Straße;ETO
174 | Fabricestraße;FAS
175 | Hp. Freiberger Straße;FBG
176 | Fußweg nach Borthen;FBO
177 | Fetscherplatz;FEP
178 | Blasewitzer/Fetscherstraße;FET
179 | Flugzeugwerke;FGW
180 | Friedhof Leuben;FHL
181 | Fraunhofer-Inst.-Zentrum;FIZ
182 | Johannstadt Fähre;FJOF
183 | Frankenbergstraße;FKB
184 | Kleinzschachwitz, Fähre;FKLF
185 | Flensburger Straße;FLE
186 | Flughafenstraße;FLH
187 | Försterlingstraße;FLR
188 | Flughafen;FLU
189 | Flügelweg;FLW
190 | Fritz-Meinhardt-Straße;FME
191 | Fehrmannweg;FMW
192 | Neustadt, Fähre;FNEU
193 | Niederpoyritz, Fähre;FNPO
194 | Pillnitz, Fähre;FPIL
195 | Freiheit;FRE
196 | Friedensstraße;FRI
197 | Festspielhaus Hellerau;FSH
198 | Fernsehturm;FST
199 | Fontane-Center;FTC
200 | Tolkewitz, Fähre;FTOL
201 | Fürstenhainer Straße;FTS
202 | Fuchsberg;FUB
203 | Flughafen West;FWE
204 | Freibad Wostra;FWO
205 | Gabelsbergerstraße;GAB
206 | Gamigstraße;GAM
207 | Gasanstaltstraße;GAS
208 | Gondelweg;GDW
209 | Georg-Arnhold-Bad;GEA
210 | Geblerstraße;GEB
211 | Gerichtsstraße;GER
212 | Großenh./F.-Reuter-Straße;GFS
213 | Gustav-Freytag-Straße;GFT
214 | Gewerbegebiet Gittersee;GGG
215 | Großglocknerstraße;GGL
216 | Gewerbegebiet Kaditz;GKA
217 | Gottfried-Keller-Straße;GKE
218 | Görlitzer Straße;GLS
219 | Gompitzer Höhe;GMH
220 | Gombsener Straße;GMS
221 | Grüner Weg;GNW
222 | Gorbitzer Straße;GOB
223 | Gohlis;GOH
224 | Gönnsdorf;GON
225 | Gorbitz, Betriebshof;GOR
226 | Gottleubaer Straße;GOT
227 | Gohliser Weg;GOW
228 | Georg-Palitzsch-Straße;GPA
229 | Gret-Palucca-Straße;GPS
230 | Göppersdorfer Weg;GPW
231 | Grundstraße;GRD
232 | Grenzstraße;GRE
233 | Grillparzerstraße;GRI
234 | Btf. Gruna (Tiergartenstraße);GRN
235 | Gerokstraße;GRO
236 | Großenhainer Platz;GRP
237 | Gartenstraße;GRS
238 | Grunaer Weg;GRW
239 | Guerickestraße;GUE
240 | Güntzplatz;GUN
241 | Gustavheim;GUS
242 | Gutenbergstraße;GUT
243 | Gasthof Weißig;GWE
244 | St.-Benno-Gymnasium;GYM
245 | Hamburger Straße;HAM
246 | Hans-Oster-Straße;HAO
247 | Hellerberge;HBE
248 | Hauptbahnhof;HBF
249 | Hauptbahnhof Nord;HBN
250 | Heeresbäckerei;HBR
251 | Hutbergschule;HBS
252 | Hugo-Bürkner-Straße;HBU
253 | Hans-Dankner-Straße;HDA
254 | Hebbelplatz;HEB
255 | Heckenweg;HEC
256 | Heidefriedhof;HEF
257 | Hegereiterstraße;HEG
258 | Hepkeplatz;HEK
259 | Hellerau Kiefernweg;HEL
260 | Hepkestraße;HEP
261 | Zum Heiderand;HER
262 | Heidestraße;HES
263 | Hüfnerweg;HFW
264 | Hülße-Gymnasium;HGM
265 | Hutbergstraße;HGS
266 | Hellerhofstraße;HHO
267 | Hohe Straße;HHS
268 | Helmholzstraße;HHZ
269 | Hirtenstraße;HIR
270 | Hugo-Junkers-Ring;HJR
271 | Liststraße (Harkortstraße);HKT
272 | Höckendorfer Weg;HKW
273 | Hellersiedlung;HLS
274 | Hermann-Michel-Straße;HMI
275 | Hendrichstraße;HNS
276 | Hänichenweg;HNW
277 | Hohlweg;HOH
278 | Hornweg;HOR
279 | Heilbronner Straße;HOS
280 | Hp. Dobritz;HPD
281 | Heideparkstraße;HPK
282 | Hp. Plauen;HPL
283 | Hp. Pieschen;HPP
284 | Hp. Strehlen;HPS
285 | Hp. Weixdorf Bad;HPW
286 | Helena-Rott-Straße;HRS
287 | Hermann-Seidel-Straße;HSE
288 | Heinrich-Schütz-Straße;HSS
289 | Hp.Trachau;HTR
290 | Heinrich-Tessenow-Weg;HTW
291 | Hubertusplatz;HUB
292 | Hülßestraße;HUL
293 | Hüblerplatz;HUP
294 | Heinrich-Zille-Straße;HZS
295 | Industriegebiet Nord;IDN
296 | Infineon Nord;IFN
297 | Infineon Süd;IFS
298 | Ikarusweg;IKW
299 | Industriegelände;IND
300 | Innsbrucker Straße;INN
301 | Industriepark Klotzsche;IPK
302 | Johannes-Brahms-Straße;JBR
303 | Jacobistraße;JCS
304 | Jüngststraße;JGS
305 | Josef-Herrmann-Straße;JHE
306 | Johannisfriedhof;JHF
307 | Junghansstraße;JHS
308 | Johannstadt;JOH
309 | Josephinenstraße;JOP
310 | Julius-Otto-Straße;JOT
311 | Jägerpark;JPK
312 | Justizvollzugsanstalt;JUZ
313 | Julius-Vahlteich-Straße;JVA
314 | Jacob-Winter-Platz;JWP
315 | Kaditz Am Vorwerksfeld;KAD
316 | Kapellenweg;KAP
317 | Karcherallee;KAR
318 | Kasseler Straße;KAS
319 | Kauschaer Straße;KAU
320 | Kaditzer Straße;KDS
321 | Kelterei;KEL
322 | Keppgrundstraße;KEP
323 | Keulenbergstraße;KEU
324 | Krügerstraße;KGS
325 | Kongresszentrum;KGZ
326 | Krhs. Friedrichstadt;KHF
327 | Krhs. St. Joseph-Stift;KHJ
328 | Krankenhaus Neustadt;KHN
329 | Königsheimplatz;KHP
330 | Infineon;KIN
331 | Kirschenstraße;KIR
332 | Käthe-Kollwitz-Ufer;KKU
333 | Käthe-Kollwitz-Platz;KKW
334 | Kleestraße;KLE
335 | Kleinzschachwitz, Fähre;KLF
336 | Kolpingstraße;KLG
337 | Kleinnaundorfer Straße;KLN
338 | Klosterteichplatz;KLP
339 | Kölner Straße;KLS
340 | Klettestraße;KLT
341 | Karl-Laux-Straße;KLX
342 | Kleinzschachwitz, Freystraße;KLZ
343 | Karl-Marx-Straße;KMX
344 | Knappestraße;KNA
345 | Körnerplatz;KNP
346 | Koblenzer Straße;KOB
347 | Kohlsdorfer Landstraße;KOH
348 | Kopernikusstraße;KOP
349 | Koreanischer Platz;KOR
350 | Koloniestraße;KOS
351 | Kotteweg;KOT
352 | Kotzschweg;KOZ
353 | Kipsdorfer Straße;KPS
354 | Krebser Straße;KRB
355 | Krebser Straße Nord;KRN
356 | Kretschmerstraße;KRT
357 | Karlshagener Weg;KRW
358 | Kurzer Schritt;KSC
359 | Kadenstraße;KSE
360 | Kastanienstraße;KST
361 | Künstlerhaus;KTN
362 | Kurt-Tucholsky-Straße;KTS
363 | Kaitzer Straße;KTZ
364 | Kurhausstraße;KUR
365 | Laibacher Straße;LAI
366 | Lassallestraße;LAS
367 | Lauterbacher Straße;LAU
368 | Laubegast;LBG
369 | Leubnitzer Höhe;LBH
370 | Leiblstraße;LBL
371 | Leubener Straße;LBN
372 | Liebenauer Straße;LBS
373 | Landesdirektion;LDD
374 | Anton-/Leipziger Straße;LEI
375 | Lenneplatz;LEN
376 | Lengefelder Straße;LFS
377 | Lene-Glatzer-Straße;LGL
378 | Ludwig-Hartmann-Straße;LHA
379 | Lipsiusstraße;LIP
380 | Liststraße;LIS
381 | Lise-Meitner-Straße;LME
382 | Lockwitz;LOC
383 | Louisenstraße;LOI
384 | Lohmener Straße;LOM
385 | Lößnitzstraße;LON
386 | Lohrmannstraße;LOR
387 | Lößnitzweg;LOW
388 | Ludwig-Renn-Allee;LRA
389 | Liebstädter Straße;LST
390 | Leutewitz;LTW
391 | Ludwigstraße;LUD
392 | Luga;LUG
393 | Marienallee;MAA
394 | Marienberger Straße;MAB
395 | Malerstraße;MAL
396 | Manitiusstraße;MAN
397 | Merianplatz;MAP
398 | Maxstraße;MAX
399 | Moritzburger Platz;MBP
400 | Messe, Gleisschleife;MEG
401 | Messering (Halle 1);MEH
402 | Mengsstraße;MEN
403 | Merbitzer Straße;MER
404 | MESSE DRESDEN;MES
405 | Meußlitzer Straße;MEU
406 | Mansfelder Straße;MFS
407 | Maxim-Gorki-Straße;MGS
408 | Mohorner Straße;MHS
409 | Mickten;MIC
410 | Michaelisstraße;MIS
411 | Markusfriedhof;MKF
412 | Mühlenstraße;MLS
413 | Moosleite;MLW
414 | Mockritz;MOC
415 | M.-Oeder-Straße;MOE
416 | Mockritzer Straße;MOK
417 | Mommsenstraße;MOM
418 | Martin-Opitz-Straße;MOP
419 | Mordgrundbrücke;MOR
420 | Mosenstraße;MOS
421 | Moritzburger Weg;MOW
422 | Malterstraße;MTR
423 | Mockethaler Straße;MTS
424 | Münzteichweg;MTW
425 | Mügelner Straße;MUG
426 | Münchner Platz;MUP
427 | Marie-Wittich-Straße;MWI
428 | Nätherstraße;NAE
429 | Neuer Annenfriedhof;NAF
430 | Neuostra;NEA
431 | Neubertstraße;NEU
432 | Niedergohlis Dorfstraße;NGD
433 | Niedergohlis Südstraße;NGS
434 | Alter Postweg;NIC
435 | Nickerner Weg;NIW
436 | Neuländer Straße;NLS
437 | Neustädter Markt;NMT
438 | Neunimptscher Straße;NNI
439 | Nordstraße;NOR
440 | Bahnhof Niedersedlitz;NSD
441 | Niedersedlitzer Platz;NSP
442 | Niedersedlitzer Straße;NST
443 | Niederseidewitzer Weg;NSW
444 | Nöthnitzer Straße;NTN
445 | Nürnberger Platz;NUP
446 | Niederwartha;NWA
447 | Niederwaldplatz;NWP
448 | Niederwaldstraße;NWS
449 | Oberauer Straße;OBE
450 | Ockerwitz;OCW
451 | Otto-Dix-Ring;ODX
452 | Oederaner Straße;OED
453 | Oehmestraße;OEH
454 | P+R Ostragehege;OGP
455 | Obergohlis;OGS
456 | Ockerwitzer Straße;OKW
457 | Oskar-Maune-Straße;OMA
458 | Omsewitz;OMS
459 | Otto-Pilz-Straße;OPI
460 | Oschatzer Straße;OSC
461 | Ob. Station Schwebebahn;OSS
462 | Overbeckstraße;OVE
463 | Palaisplatz;PAP
464 | Plauenscher Ring;PAR
465 | Prof.-Billroth-Straße;PBI
466 | Putbuser Weg;PBW
467 | Pennrich;PEN
468 | Pennricher Straße;PER
469 | Pferderennbahn;PFB
470 | Pfeifferhannsstraße;PFH
471 | Pfotenhauerstraße;PFO
472 | Prager Straße;PGS
473 | Proschhübelstraße;PHS
474 | Pillnitz;PIL
475 | Pirnaischer Platz;PIP
476 | Pillnitzer Platz;PLP
477 | Plauen, Rathaus;PLR
478 | Platanenstraße;PLT
479 | Permoserstraße;PMS
480 | Podemusstraße;POD
481 | Pohlandplatz;POH
482 | Postplatz;POS
483 | Pappritz;PPR
484 | Prellerstraße;PRE
485 | Kaufpark Nickern;PRL
486 | Prohlis;PRO
487 | Prof.-Ricker-Straße;PRS
488 | Pestalozziplatz;PST
489 | Plattleite;PTL
490 | Putjatinplatz;PTP
491 | Pulsnitzer Straße;PUL
492 | Querallee;QUE
493 | Quohrener Straße;QUO
494 | Räcknitzhöhe;RAC
495 | Rähnitzer Allee;RAL
496 | Rankestraße;RAN
497 | Rauensteinstraße;RAU
498 | Robert-Sterl-Straße;RBS
499 | Reichenhaller Straße;RCS
500 | Radeberger Straße;RDB
501 | Radeberger Straße Süd;RDS
502 | Regensburger Straße;REG
503 | Reichenbachstraße;REI
504 | Rennplatzstraße;REN
505 | Rethelstraße;RET
506 | Riegelplatz;RIE
507 | Rißweg;RIS
508 | Reitbahnstraße;RIT
509 | Rathaus Klotzsche;RKL
510 | Rosa-Luxemburg-Platz;RLP
511 | Rudolf-Leonhard-Straße;RLS
512 | Reineckeweg;RNW
513 | Rohrbahn;ROB
514 | Rochwitz, Bühlauer Straße;ROC
515 | Rossendorfer Straße;ROD
516 | Rosenstraße;ROS
517 | Rottwerndorfer Straße;ROT
518 | Rathaus Pillnitz;RPI
519 | Plauen, Rathaus;RPL
520 | Rathaus Pieschen;RPN
521 | Roseggerstraße;RSG
522 | Reisstraße;RSS
523 | Rathaus Leuben;RTL
524 | Rathausstraße;RTS
525 | Rüdesheimer Straße;RUD
526 | Rubensweg;RUW
527 | Sachsenallee;SAA
528 | Saarstraße;SAR
529 | Saßnitzer Straße;SAS
530 | Saxoniastraße;SAX
531 | Schanzenstraße;SAZ
532 | Scharfenberger Straße;SBG
533 | Straßburger Platz;SBP
534 | Schule Gompitz;SCG
535 | Schweriner Straße;SCH
536 | Schaufußstraße;SCU
537 | Südstraße;SDS
538 | Seidnitzcenter;SEC
539 | Seidnitzer Weg;SEI
540 | Semmelweisstraße;SEM
541 | Seewiesenweg;SEW
542 | Stuttgarter Straße;SGS
543 | Stadtgutstraße;SGU
544 | Sagarder Weg;SGW
545 | Saalhausener Straße;SHA
546 | Schwimmhalle Bühlau;SHB
547 | Schwimmhalle Freiberger Pl.;SHF
548 | Schwimmhalle Klotzsche;SHK
549 | Schillerstraße;SHL
550 | Schillerplatz;SIP
551 | Schlehenstraße;SLE
552 | Schillingstraße;SLI
553 | Selliner Straße;SLS
554 | Schlüterstraße;SLT
555 | Staats- und Unibibliothek;SLUB
556 | Schönaer Straße;SNA
557 | Schneebergstraße;SNS
558 | Sosaer Straße;SOS
559 | Sobrigauer Weg;SOW
560 | St.-Pauli-Friedhof;SPF
561 | Spitzhausstraße;SPH
562 | Spitzwegstraße;SPI
563 | Spenerstraße;SPS
564 | Sörnewitzer Straße;SRN
565 | Struppener Straße;SRU
566 | Staffelsteinstraße;SSS
567 | Scharfensteinstraße;SST
568 | Stralsunder Straße;SSU
569 | Steglichstraße;STE
570 | Stauffenbergallee;STF
571 | Straße des 17.Juni;STJ
572 | Striesener Straße;STN
573 | Strehlener Platz;STP
574 | Stephanstraße;STS
575 | Staats- und Unibibliothek;SUB
576 | Südhöhe;SUE
577 | Schunckstraße;SUK
578 | Schulstraße;SUL
579 | Schurichtstraße;SUR
580 | Südvorstadt;SVS
581 | Schiffswerft Laubegast;SWL
582 | Synagoge;SYN
583 | Schweizer Straße;SZS
584 | Tannenstraße;TAN
585 | Trachauer Straße;TAS
586 | Taubenberg;TAU
587 | Tatzberg;TBG
588 | Tübinger Straße;TBS
589 | Theilestraße;TEI
590 | Tharandter Straße;THA
591 | Theaterplatz;THE
592 | Thäterstraße;THS
593 | Tiergartenstraße;TIE
594 | Trinitatisplatz;TIP
595 | Thomas-Mann-Straße;TMS
596 | Tännichtstraße;TNS
597 | Tornaer Straße;TON
598 | Troppauer Straße;TPS
599 | Betriebshof Trachenberge;TRB
600 | Tronitzer Straße;TRO
601 | Trachenberger Platz;TRP
602 | Trattendorfer Straße;TRS
603 | TU Dresden;TU
604 | Technische Universität;TUD
605 | Uhlandstraße;UHL
606 | Universitätsklinikum;UKD
607 | Urnenhain;UNH
608 | Urnenstraße;URN
609 | Veilchenstraße;VEI
610 | Van-Gogh-Straße;VGO
611 | Vollmarstraße;VOL
612 | Vorwerkstraße;VOW
613 | Wächterstraße;WAC
614 | Wasaplatz;WAS
615 | Wilhelm-Busch-Straße Ost;WBO
616 | Würzburger Straße;WBR
617 | Wilhelm-Busch-Straße;WBU
618 | Wachbergstraße;WCH
619 | Weidentalstraße;WDS
620 | Webergasse;WEB
621 | Westendstraße;WEE
622 | Werftstraße;WEF
623 | Weißig (Einkaufszentrum);WEI
624 | Wernerstraße;WER
625 | Wägnerstraße;WGS
626 | Wieckestraße;WIE
627 | Wilschdorf Industriegebiet;WIG
628 | Wilhelminenstraße;WIL
629 | Wilder Mann;WIM
630 | Winterbergstraße;WIN
631 | Wilischstraße;WIS
632 | Wittenberger Straße;WIT
633 | Wilschdorfer Landstraße;WLS
634 | Wilder-Mann-Straße;WMS
635 | Windmühlenweg;WMW
636 | Wölfnitz;WOL
637 | Wölfnitzer Ring;WOR
638 | Wostra;WOS
639 | Weberplatz;WPL
640 | Walpurgisstraße;WPS
641 | Weißdornstraße;WSD
642 | Washingtonstraße;WSH
643 | Waldschlößchen;WSO
644 | Weißeritzstraße;WSR
645 | Waldschlößchenstraße;WSS
646 | Waltherstraße;WTH
647 | Waldteichstraße;WTS
648 | Wurzener Straße;WUZ
649 | Wasserwerk Tolkewitz;WWT
650 | Weixdorf;WXD
651 | Zeithainer Straße;ZEH
652 | Zur Elbinsel;ZEI
653 | Zellescher Weg;ZEL
654 | Zschonergrundmühle;ZGM
655 | Zachengrundring;ZGR
656 | Zum Hutbergblick;ZHB
657 | Zur Neuen Brücke;ZNB
658 | Zinnowitzer Straße;ZNW
659 | Zoo;ZOO
660 | Zur Steinhöhe;ZSH
661 | Zschonergrundstraße;ZSO
662 | Zschierener Straße;ZSS
663 | Zschertnitz;ZTZ
664 | Zum Windkanal;ZUW
665 | Zweibrüderweg;ZWE
666 | Zwinglistraße;ZWI
667 | Zwickauer Straße;ZWU
668 | Zschertnitzer Straße;ZZN
669 |
--------------------------------------------------------------------------------
/kuerzel/kuerzel_umland.csv:
--------------------------------------------------------------------------------
1 | Bonnewitz, Bonnewitz;BON
2 | Borthen, Borthen;BTN
3 | An der Triebe, Boxdorf (Moritzburg);ADT
4 | Am Grunde, Boxdorf (Moritzburg);AGD
5 | Am Weiher, Boxdorf (Moritzburg);AMW
6 | Baumwiese, Boxdorf (Moritzburg);BAW
7 | Bebelplatz, Boxdorf (Moritzburg);BEB
8 | Schule Boxdorf, Boxdorf (Moritzburg);BSC
9 | Ernst-Wagner-Straße, Boxdorf (Moritzburg);EWA
10 | Feuerwehr Boxdorf, Boxdorf (Moritzburg);FBX
11 | Querweg, Boxdorf (Moritzburg);QEW
12 | Auerstraße, Coswig (b Dresden);AUE
13 | Coswig Zentrum/Börse, Coswig (b Dresden);CWB
14 | Salzstraße VGM, Coswig (b Dresden);EVSA
15 | Radebeuler Straße, Coswig (b Dresden);RAD
16 | Rathaus Coswig, Coswig (b Dresden);RCW
17 | Steinbacher Weg, Coswig (b Dresden);SBW
18 | Salzstraße, Coswig (b Dresden);SLZ
19 | Am Dathepark, Freital;ADA
20 | Am Windberg, Freital;AWI
21 | Busbahnhof Deuben, Freital;BBD
22 | Burgker Straße, Freital;BUR
23 | Meßweg, Freital;MEW
24 | Neumarkt, Freital;NEM
25 | Platz des Friedens, Freital;PDF
26 | Burgk, Schule, Freital;SCB
27 | Schachtstraße, Freital;SCS
28 | Schule Kleinnaundorf, Freital;SKN
29 | Steigerstraße, Freital;STG
30 | Windbergallee, Freital;AWI
31 | Burgk, Zschiedge, Freital;ZSC
32 | Gombsen, Gombsen;GBS
33 | Neugombsen, Gombsen;NGO
34 | Rudolf-Walther-Straße, Gompitz;RWS
35 | Autobahnmeisterei, Goppeln;ABM
36 | Goppeln, Goppeln;GOP
37 | Borsbergstraße, Graupa;BOB
38 | Bonnewitzer Straße, Graupa;BWS
39 | Tschaikowskiplatz, Graupa;GRA
40 | Tiefer Grund, Graupa;TGR
41 | Dresdner Straße, Heidenau;DRD
42 | Bf. Heidenau, Heidenau;HDN
43 | K.-Kollwitz-Straße, Heidenau;KKS
44 | Haußmannplatz, Kreischa;HAP
45 | Klinikum Kreischa, Kreischa;KLK
46 | Kreischa, Kreischa;KRE
47 | Dorfplatz Pesterwitz, Pesterwitz;DFP
48 | Obere Straße, Pesterwitz;OBS
49 | Pesterwitz, Pesterwitz;PES
50 | Wurgwitzer Straße, Pesterwitz;WWS
51 | Zum Weinberg, Pesterwitz;ZWB
52 | Altserkowitz, Radebeul;ASE
53 | Bergblick, Radebeul;BBL
54 | Borstraße, Radebeul;BOR
55 | Dr.-Külz-Straße, Radebeul;DKU
56 | Eduard-Bilz-Straße, Radebeul;EBI
57 | Eisenbahnbrücke, Radebeul;EIS
58 | Fichtestraße, Radebeul;FIS
59 | Flemmingstraße, Radebeul;FLM
60 | Forststraße, Radebeul;FOR
61 | Fritz-Schulze-Straße, Radebeul;FSR
62 | Gutenbergstraße, Radebeul;GBG
63 | Gerhart-Hauptmann-Straße, Radebeul;GHA
64 | Gradsteg, Radebeul;GST
65 | Hauptstraße, Radebeul;HPT
66 | Hospiz, Radebeul;HRD
67 | Hp. Radebeul-Weintraube, Radebeul;HWT
68 | Johannisbergstraße, Radebeul;JHA
69 | Kaufland, Radebeul;KLR
70 | Landesbühnen Sachsen, Radebeul;LDB
71 | Moritzburger Straße, Radebeul;MOG
72 | Nizzastraße, Radebeul;NIZ
73 | Radebeul Ost, Radebeul;RBO
74 | Radebeul West, Radebeul;RBW
75 | Reichsstraße, Radebeul;RES
76 | Schildenstraße, Radebeul;SIL
77 | Schloß Wackerbarth, Radebeul;SWA
78 | Wasastraße, Radebeul;WAA
79 | Zillerstraße, Radebeul;ZIL
80 | Zinzendorfstraße, Radebeul;ZIZ
81 | Röhrsdorf, Röhrsdorf (b Pirna);ROE
82 | Fußweg nach Sobrigen, Sobrigau;FSO
83 | Hummelmühle, Sobrigau;HUM
84 | Sechserhaus, Sobrigau;SHS
85 | Florian-Geyer-Weg, Weinböhla;EFYW
86 | Haltepunkt Weinböhla, Weinböhla;EHWB
87 | Weinböhla Kirchplatz, Weinböhla;EWBK
88 | Gellertstraße, Weinböhla;GES
89 | Köhlerstraße, Weinböhla;KOL
90 | Weinböhla, Weinböhla;WBL
91 |
--------------------------------------------------------------------------------
/stations/csv2geojson.py:
--------------------------------------------------------------------------------
1 | import csv
2 | import json
3 |
4 | stations = []
5 |
6 | with open('stations.csv') as csv_file:
7 | reader = csv.reader(csv_file, delimiter=';')
8 | for row in reader:
9 | stations.append(row)
10 |
11 | # [['Nummer', 'Name mit Ort', 'Name ohne Ort', 'Ort', 'Tarifzone 1 ', 'Tarifzone 2', 'Tarifzone 3', 'WGS84_X', 'WGS84_Y'],
12 | # ['de:14612:1', 'Dresden Bahnhof Mitte', 'Bahnhof Mitte', 'Dresden', '0100', '', '', '13,723395', '51,055642'],
13 |
14 | geostations = []
15 | for station in stations[1:]:
16 | feature = {
17 | "type": "Feature",
18 | "properties": {
19 | "number": station[0],
20 | "nameWithCity": station[1],
21 | "name": station[2],
22 | "city": station[3],
23 | "tariffZone1": station[4],
24 | "tariffZone2": station[5],
25 | "tariffZone3": station[6]
26 | },
27 | "geometry": {
28 | "type": "Point",
29 | "coordinates": [
30 | float(station[7].replace(',', '.')),
31 | float(station[8].replace(',', '.'))
32 | ]
33 | }
34 | }
35 | geostations.append(feature)
36 |
37 | geojson = {
38 | "type": "FeatureCollection",
39 | "features": geostations
40 | }
41 |
42 | with open('stations.json', 'w') as geojson_file:
43 | geojson_file.write(json.dumps(geojson))
--------------------------------------------------------------------------------