Major problems with public_transport scheme

Hi all,

Sorry to post this in English, but although I can read German, my writing skills are lacking a bit, and it would take to much time to explain this in German. You may answer in German though, as I have no problem understanding and reading it.

The reason I am posting this in the German forum, is that the public_transport scheme seems to have its origin mainly in the German language countries, so I post here. Additionally, I had seen other recent discussion here related to railway tagging (e.g. ) with suggestion for changes, so it may be relevant to you all here.

As most of you probably know by now, I have been working on a completely new OSM renderer based on ArcGIS ( For this development effort, I have also been looking at the public_transport scheme as a source of data for rendering of railway/train stations.

Now I have noticed a couple of major issues in the scheme, that I would like to know your opinions about, as they seriously hamper rendering railway stations and their names:

  • 1A) Currently, the public_transport scheme distinguishes public_transport=station, and public_transport=stop_position as the major tags for defining “stops” where people can board a means of public transportation. Unfortunately, the current Wiki proposal, only puts the relevant modes of transport (train, subway, tram, bus etc.) on the public_transport=stop_position tagging scheme, and doesn’t associate any of this information with the public_transport=station tag. This means it is impossible to tell what type of “station” we are dealing with (better said, what modes of public transport are available: train, subway, tram etc.), e.g. is it a railway station, or just a bus station, or both???

  • 1B) There is a public_transport=stop_area relation tagging scheme that is supposed to solve the above issue by defining a “relation” that includes all features (station, platform, stop_position and more) associated with a “stop”, but this causes more problems:

  • Complex relations like this are not easily defined in some of the OSM editors, hence the public_transport=stop_area is likely not defined for most railway stations/“stops”, making it impossible to tell which public_transport=stop_position are associated with a certain public_transport=station

  • Deriving which modes of transport are associated with a public_transport=station tag becomes hideously complex for a renderer, as it requires to first determine what public_transport=stop_area relation is associated with a specific public_transport=station tag, then determine what public_transport=stop_position are associated with it, and finally what modes of transport each public_transport=stop_position has. From a practical point of view in rendering, with most renderers based on RDBMSs like PostGIS, this is particularly complex, requiring a major amount of coding and complex SQL queries, if it is even possible, since some renderers may not have access to the required relation information. This latter problem is one I encounter, since my OSM Renderer for ArcGIS can not access this relation information in any practical manner (it depends on ESRI’s "ArcGIS Editor for OSM, which doesn’t give me access to these relations directly, although it does store relation information in database fields).

    1. The tagging scheme / Wiki page includes train, subway, light_rail, monorail as valid modes of “train type” of transport to tag on a public_transport=stop_position. It omits “funicular”,“narrow_gauge” and “preserved” that are part of the existing scheme ( This is probably a conscious decision, as these are not necessarily a mode of transport distinct from train, but more a kind of “attributes” of a line, but at least for funicular, which is associated with a very particular type of “train”, it could be argued that this leads to a loss of information, while it also might be desirable in some cases to render narrow_gauge and preserved stations distinctly. Unfortunately, there is no substitute or alternative tag to document these in the public_transport scheme.

Please note that “abandoned”, “disused” and “construction” are not relevant here, as they are not a specific mode of transport, while funicular, narrow_gauge and preserved could, at least slightly, be argued to be “modes of transport” associable with a station… (although narrow_gauge could be implicitly captured by gauge=*, but gauge is not a tag for stations, but rather for the actual tracks: )

    1. No inherent way to tell “main” public_transportation=station from “minor” ones, as there is no tag in the public_transportation=station tagging scheme designed to “rank” the (admittedly arbitrary) “importance” of stations. E.g. the “old” railway scheme had railway=station and railway=halt, and there is the less used but documented station=* (station=subway, station=light_rail; ). These may not have been a ideal schemes either, but do allow some distinguishing of a minor halt from a major railway station with more facilities and transport modes, and associate specific symbology or labelling with it during rendering.
    1. Unclear from the Wiki how small railway stations (e.g. one track, small halt) actually should be mapped. It is likely people will only add a public_transportation=stop_position node, omitting a public_transportation=station. Unfortunately, this means the station is unlikely to receive any name label in rendering, because that would require to start labelling all public_transportation=stop_position nodes. While labelling public_transportation=stop_position is not invalid by itself, it does raise an issue with major “transportation hub” type railway stations, as railway stations may have many public_transportation=stop_position associated with them, on each single track along a platform, for routing purposes. This will cause a labelling mess… In addition, the name of the public_transportation=stop_position may not be appropriate for labelling, as it may contain additional info like platform name, and hence be unsuitable as a substitute of a proper name tag for a station. For an example of a station with quite a big number of public_transportation=stop_position nodes, see this Overpass Turbo query of Düsseldorf Hbf:

***** My suggestions *:

    1. Document in the Wiki that public_transport=station should - compulsory(!) - have associated train=yes, light_rail=yes, subway=yes, tram=yes, bus=yes etc. tags as appropriate to the station, so that it is possible to distinguish which modes of public transportation are available on the station without needing the public_transport=stop_position tags. Please note I am not suggesting here to stop using public_transport=stop_position, but to additionally tag the station with all its transport modes. This will make it far easier for renderers to provide proper symbology and labeling suited / adjusted to the particular type of “station”.
    1. Add some way to tag “funicular”, “narrow_gauge” or “preserved” with a public_transport=station, maybe simply by adding them as funicular=yes, narrow_gauge=yes and preserved=yes, similar to the other modes, but other suggestions are welcome to be discussed here.
    1. Maybe add - and document it properly in the wiki! - a new tag for ranking stations, e.g. with maybe a scale of 1 to 3 for the importance (please keep the amount of rankings to a minimum)? This could be used to label and show stations at specific scales, e.g. major transportation hubs servicing “intercity” or “express” trains already shown and labelled in 1:250K maps, while minor ones could only be shown from 1:25k and below.
    1. Document in the Wiki that each-and-every railway station, even if just a “halt” along a track without any other facilities, needs to have a public_transport=station node associated with it, even if this means duplicating some of the info associated with the corresponding public_transport=stop_position node. This will allow rendering of the station name, without causing a clutter on big main “transport hub” type railway stations, if the name tags of public_transport=stop_position nodes would be used instead.

What do you think about these issues and suggestions, and would do others possibly suggest? Any comments welcome. I realize there may be overlap with other recent or historic tagging discussions, feel free to point me to other relevant discussion links as well for further reading and ideas.


see also:

So, improvements are in the discussion phase.

Yes, thanks, I was aware of these threads and it is one of the reasons I posted here. I hope my suggestions are of some use too in these discussions, as I think they are supplementary to what is written in the other discussions, as I didn’t see the particular issues listed that I raise here, at least not the specifics about potential rendering problems they may cause.

This sounds like a good idea and a major improvement of the public transport scheme to me.

I’m not sure whether narrow_gauge and preserved really qualify as own ways of transport (even though they are currently used this way in the older railway=* scheme). After all, they are railways as well, although with particular properties - narrower gauge, historic status. Maybe one should rather use these properties as additional tags on the actual railway, and group them under train=yes. But I definitely agree that a funicular is not covered by the current scheme and should be added.

I don’t see any good way to obtain such kind of ranking for stations in an objective way, and there is probably little use if this ranking is done on a subjective basis.

While this may sound like a good idea for railway halts, I see some problems. How would one then distinguish between what used to be railway=station and railway=halt? Also, should one then do the same with bus stops? I see no particular difference between a railway halt without facilities and a bus stop, except for the way of transport.

Hi mboeringa,

Tram stops and bus stops are usually not mapped as public_transport=station. They are mapped as public_transport=stop_position + tram=yes.

Some values of railway=* belong both to the old public transport scheme and the young OpenRailwayMap tagging scheme for railway infrastructure.

Light rail stops/stations and railway stations/halts are mapped with both public_transport=stop_position + light_rail/train=yes on every position a train stops and as one single node railway=station/halt in the center of the facility. OpenRailwayMap tagging scheme wants to separate usage (public_transport=) from infrastructure (railway=*). Not every train or bus route is a public route. For example, in Karlsruhe there are two “private routes”. Bus line “KIT” between KIT Campus Süd (Universtät) and KIT Campus Nord (Forschungszentrum) which is operated by Karlsruher Verkehrsbetriebe. Two trains in the morning and two trains in the evenig of Karlsruhe light rail route S1/S11 run to/from KIT Campus Nord train station inside the fenced Campus Nord. Only personell of Campus Nord can use this trains between Linkenheim Frankfurter Straße and KIT Campus Nord. The train line is operated by Albtal-Verkehrsgesellschaft (a train company owned by municipality of Karlsruhe).

The use of this relations is more to say public transport routing software where users can interchange lines. ÖPNV-Karte shows yellow areas around all members of such relations. A lot of German train stations and halts (especially in rural areas) have no possibility to change to bus/tram because there is no bus station. That’s why these relations are mapped only at few stations.

Please note that “abandoned”, “disused” and “construction” are not relevant here, as they are not a specific mode of transport, while funicular, narrow_gauge and preserved could, at least slightly, be argued to be “modes of transport” associable with a station… (although narrow_gauge could be implicitly captured by gauge=*, but gauge is not a tag for stations, but rather for the actual tracks: )

railway=narrow_gauge is a synonym for railway=rail + gauge=<smaller than common gauge of this country/continent>. I hate this tag. Narrow gauge railway lines can be as important than 1435 mm railways. Just have a look who long trains between Chur and St. Moritz (Albulabahn of Rhätische Bahn) are and how often trains (long passenger trains with express freight carriages every hour, additional freight trains between) run on this line.

Preserved railways are no special type of train service. A lot of them does not have public transport (only steam trains on a few weekends). A few of them looks historic and has regular public trains (with steam locomotives!). I would not tag railway lines in Harz mountains railway=preserved (they have got new light signals and electronic signal boxes!) and Rügensche Bäderbahn (regular steam locomotive use). Stations of real preserved railway lines are mapped as railway=station/halt.

railway=halt is still in use and not deprecated for railway halts if they are no stations (i.e. have no switch(es)). railway=station is a still valid tag for railway stations (they are halts if they have no switches). Please attend that this does not correlate with the importance of the station. Jena-Paradies (ICE station) has no switches and is a halt hence. Jena-Göschwitz (no ICE station, but stop of all local trains) is a station. Another example is Hamburg-Dammtor which is a halt but stop of a lot of long and short distant trains. You can use railway:station_category=1/2/3/4/5/6/7. 1 means most important (stations like Frankfurt (Main) Hauptbahnhof, 7 for rural or unimportant halts (e.g. Ruthenbeck) See also

As said above, this problem does not exist because railway=station/halt is not deprecated.

Annotation: You might notice that large stations and a lot of stations in Berlin have two or three nodes tagged with railway=station/halt, e.g. Berlin Zoologischer Garten. There is the station of S-Bahn called “S Zoologischer Garten” and the station “Berlin Zoologischer Garten” where regional trains stop. They are two independent stations (railway mappers use the word “Betriebsstelle” usually used by Deutsche Bahn).

Bei meinem Post in der parallelen Diskussion über U-Bahnstationen (railway=subway_station) ist mir erst aufgefallen, dass das im Tagging-Schema gar nicht vorgesehen ist.

AFAIK, stop_area-Relations verbinden stop_positions und platforms von einem Verkehrsmittel. Beispiel: Berlin Friedrichstraße hätte dann fast ein halbes Dutzend von diesen Relationen: train, ligth_rail, subway, tram und bus. stop_area_group wurde früher benutzt, um verschiedene Verkehrsmittel zu verbinden.

Ich freu mich so. :smiley:


Ach, so…
Was ich eigentlich sagen wollte:
Ich finde es sinnvoll, public_transport=station flächendeckend zu verwenden.
Auch schon bei kleinen Angelegenheiten wie Straßenbahnhaltestellen. (auch wenn sich der Begriff “station” da seltsam anhört…)
In Bremen (Beispiel) sind die momentan so gemappt, dass es 2 nodes mit stop_position gibt und ohne railway=tram_stop. Und dazu in der Mitte einen node mit railway=tram_stop. Einerseits recht aufwändig, aber elegant, dass es einen node für die ganze Haltestelle gibt - und dazu hübsch, weil der Name eben nicht 2x gerendert wird, sondern nur 1x.

Ich drücke immer zu schnell auf “Submit”…
Also, dieser o.g. node “in der Mitte” wäre dann mit p_t=station (und tram=yes) zu taggen.

“station” geht von der Begrifflichkeit weit über das reine Halten von Zügen hinaus. Da sollten wir schon zu “halt” oder “stop” differenzieren. So wären Renderer auch in der Lage, verschiedene Symbole einzusetzen.

Hmmm…da mein englisch leider nur für small-talk reicht, habe ich bei der Problemdarstellung ein paar Verständnisschwierigkeiten.

Habe ich das richtig verstanden, das zu Bahnhöfen das Tag public_transport=station hinzugefügt werden soll, dies soll ergänzt werden mit
train=yes bei klassischen Bahnhöfen
light_rail=yes bei S-Bahnhöfen
tram=yes bei Straßenbahnhaltestellen
bus=yes bei Busbahnhöfen, auch bei normalen Haltestellen (z.B. auf dem Land wo in der Pampa nur ein Haltestellenschild steht?)

Desweiteren soll Station als eigener Node (NICHT: area) zu den jeweiligen Bahnhöfen/Haltestellen definiert werden, oder zusätzlich zum Node “stop_position”?

Soll dann bei großen Bahnhöfen je Verkehrsmittel ein eigener Node “Station” erfasst werden, oder ein Node, an dem sowohl U, S-Bahn, Regionalbahn etc. zusammengefasst?

Das bisherige Tagging soll ansonsten unverändert bleiben?

I dont think so. There is a pair of major tags in the public transport scheme: it is public_transport=stop_position und public_transport=platform. public_transport=station is only an addon to the scheme for mapping the area of local stations. If there is no station, there should be no public_transport=station.

Not “light_rail”. The text voted upon was changed after the vote.

That would be a train-only-solution and we would have public_transport=station everywhere without any real station in sight. I am against it.

It is possible to avoid mapping each and every stop_position without having fictuous stations or even stop_areas:

But rendering the names is a real problem as each of stop_position and platform may be omitted and the stop should be rendered anyway - but it shouldn’t be rendered twice if both are present. And they may even come without any name, as it may be omitted if there is a stop_area.

The only possibility for rendering without using the old highway=bus_stop, railway=station, railway=halt and railway=tram_stop is doing a complete analysis for the region to be mapped (thats what I’m programming just now) and creating an osm-like file which contains the information where PT-rendering needs it.