User:Polyglot/Bus stops and routes
Proposal for a simpler way of mapping public transport
- How can we describe bus stops in such a way that there is no limit to the amount of detail we can add, without ever needing to convert from a node to a way/area/relation? Or transfer tags from one node next to the way to a node on the way?
- What is the minimum we need to describe bus routes and make maps of them? If we want to get more mappers involved with mapping public transport, what I see happening in several places in Europe is too complex.
All we really want to know is where we can take the bus and how those buses get from one stop to the next.
The basic premise of this proposal is the use of 1 OSM object to represent a bus stop. For buses and trams a node next to the highway is what makes most sense.
Very often this node will start as:
To comply with the PT v2 scheme, we add:
And a mode of transport:
bus=yes trolley_bus=yes tram=yes
So far we have:
highway=bus_stop public_transport=platform bus=yes trolley_bus=yes
railway=tram_stop public_transport=platform tram=yes
highway=bus_stop railway=tram_stop public_transport=platform bus=yes tram=yes
If there is an actual platform (and you like to see it rendered), add a way or an area:
highway=platform tactile_paving=yes (optionally) wheelchair=yes (if it is (in part) heightened) area=yes (if mapped as a closedway)
At first I added public_transport=platform to these ways, but it's not strictly necessary for anything and some people get confused if there are 2 objects tagged public_transport=platform.
Of course we also need:
name ref operator network route_ref
And we could add:
bin=yes bench=yes shelter=yes
Although we can also map those as separate amenity=waste_basket, amenity=bench, amenity=shelter/shelter_type=public_transport objects.
I don't think it matters much that both the bus stop node makes a reference to the separate objects or not. I wouldn't remove bench=yes from the bus_stop node, simply because the waste_basket was mapped on its own separate node as well.
OK, so now we have nodes with all the relevant information about a bus stop. Let's use these nodes in the route=bus relations!
So what is all this talk about stop_position nodes, you ask? Well PT v2 wanted to unite people mapping bus stops as nodes on the highway with people who mapped them next to the highway. This seemed like a good idea at the time, but what we ended up with was a horribly complex scheme, where information is duplicated and thus harder to manage.
Some people will add the stop_position nodes to the routes, some will add the platform nodes and some will add both. Some will want to forgo the public_transport=platform nodes, or first convert them into platform ways (regardless of whether there is an actual platform) and add stop_position nodes and platform ways alternatingly.
If you want an answer to the question: how many stops does this variation of a line serve, you'll have to deduplicate those doubles first.
If you want to reorder the stops, you'll have twice as much work to do.
So please only add those highway=bus_stop/public_transport=platform nodes to the route relations, not the stop_postion nodes, not the platform ways.
If we do it that way, we only need name and the other details once. No need to add those details to the stop_position nodes.
Where I think the public_transport=stop_position nodes are definitely needed is at the start and the end of the itineraries. If the ways are split on those nodes, it allows to nicely describe where the bus starts its passenger route and where the last passengers get off.
All the other stop_position nodes in between are nice to have, but not crucial. No need to add them to the route relations and hence no need to duplicate the name tag to them.
Proposal for a simpler public_transport scheme based on PT v2
Platform node (mandatory)
|Platform Node placed where the passengers await the vehicle or where the pole is, if present.|
|ref||reference or id||optional||recommended when known|
|local_ref||Platform identifier||when applicable||max 2 characters, is rendered as part of the name since 2014)|
|route_ref||semicolon separated List of line identifiers||when known, either because operator's data is available, or because it was surveyed||no real need to remove this when all routes are mapped as relations. It can still be used during validation too.|
|bin||yes / no||optional|
|bench||yes / no||optional|
|passenger_information_display = yes / no||optional|
|shelter||yes / no||optional|
|ref:IFOPT||de:xxxx:xxxx:x:x||when known||replace de with actual country code|
|tactile_paving||yes / no||when applicable|
|wheelchair||yes / limited / no||optional|
Platform way (optional)
|Platform If there is an actual platform. .|
|tactile_paving||yes / no||if present|
|wheelchair||yes / limited / no||if elevated|
Stop Position (optional)
|Stop Position as a node on the highway, front of the vehicle|
|railway||mandatory||railway=station or halt or tram_stop, should only be mapped once for every station|
Stop Area (optional)
|Role||Referenced on||Mode of transport||Use||Remarks|
|stop||public_transport=stop_position||]||when applicable||Stop positions of vehicle|
|platform||public_transport=platform||when applicable||Passenger area|
|amenity=*||when applicable||ex.: shelter, bench, bicycle_parking|
|building||when applicable||station building|
Stop Area Group (optional)
|Stop Area Group|
|name||Stop group name||when applicable||avoid name collision with stop_area relations|
|Route One relation for each direction of travel and their variants.|
|public_transport:version||2||mandatory||obviously only for routes that follow PT v2 conventions|
|name||Tram 310: Bochum=>Witten||mandatory||Eigenname oder
Verkehrsmittel+Nummer+Routenhinweis z.B.: Bus CE64: Wuppertal=>Solingen Regel: Eindeutig aber kurzer Text
|ref||N19||mandatory||only line reference|
|from||Bochum Höntrop||mandatory||locality and stop name of first stop|
|via||Bochum Hbf||optional||only to distinguish between itinerary variants|
|network||VRR||when applicable||rowspan="2"||VRR#Betreibergesellschaften letzte Spalte.|
|wheelchair||yes / limited / no||optional|
|Relation members of route|
|platform / platform_exit_only / platform_entry_only||public_transport=platform||when applicable||stops appear in the correct order, twice if served twice|
|highway=xxx oder railway=xxx||mandatory||sequence of ways without gaps traveled in the correct order from=* .. to=*|
|type||route_master||mandatory||Neues Schema (PTv2)|
|Relation members of route_master|
|public_transport=route||mandatory||relations for all variations of a line