[Talk-transit] Proposed Feature - RFC - Public Transport

Michael von Glasow michael at vonglasow.com
Thu Dec 9 00:49:48 GMT 2010

On 12/08/2010 08:44 PM, Dominik Mahrer (Teddy) wrote:
> Hello
> Yes, the Public Transport proposal is basically based on Oxomoa, but 
> in some details different.
> unified stoparea would "redefine" highway=bus_stop from beside the way 
> to on the way. I'm quite sure this would reject the proposal in a vote.
> unified stoparea and public transport can and do exist beside each 
> other. But you are right, it does not make sense to approve both 
> proposals.
> I do not care about which of the two proposals will be approved. But I 
> think it is time to get a more exact schema approved then the 
> fuzzy/non-existing schema (A railway station of 400m length and 20 
> platforms or a bus stop for 3 buses per direction of 50m length is 
> reduced to one node) we have now.
> Regards
> Teddych
> On 12/08/2010 06:02 PM, Oleksandr Vlasov wrote:
>> Dominik Mahrer (Teddy<teddy<at>  teddy.ch>  writes:
>>> I want to invite everyone to comment the (in central europe) already
>>> widely used new Public Transport Schema:
>>> http://wiki.openstreetmap.org/wiki/Proposed_features/Public_Transport
Good work - a few months ago I started mapping the public transportation 
network in Milan and started out by looking around how other cities were 
doing it. My aim was to use a tagging scheme which is easy to 
understand/learn, minimizes data entry effort (it makes a difference 
whether mapping a single line takes half an hour or two hours) and is 
supported by the common renderers.

The results of the research I did back then is at:


(unfortunately it is in Italian only, but maybe non-Italian speakers can 
still get some information on tagging out of it).

The differentiation between stop_position and platform elegantly solves 
the dilemma on the position of the node (on the way or next to it). For 
routing applications it is definitely more convenient if the node is 
part of the way. However, two stops located on either side of the road 
would thus collapse into one point and it would no longer be possible to 
tag explicitly one or the other. (For example: here in Milan each stop, 
i.e. pole, has a unique number, which I tag as ref. If there is a double 
tram stop, there is a single node but two numbers. Using only this 
single node, there is no easy way to tell which number belongs to which 
side of the road. Or another example: what if there is a shelter on one 
side of the road, but not on the other?)

In the new proposal I am missing some details on how to build relations:

1. Should the outward and return trip be represented as two separate 
relations, as a single relation or is that up to the mapper?

I would favor separate relations: The ways used may be different (a road 
with two physically separated lanes, or a labyrinth of one-way streets 
in a European city), and with one relation per direction it is easy to 
sort the ways and detect holes in the route.

2. Which members should the relation contain, and in which order?

My approach to this: all way segments, tagged as role=forward or 
role=backward. The way segments should be sorted; where a bus passes the 
same way twice, it should be added twice - this allows for easy 
verification if the route is complete. Additionally the relation should 
contain all stops, which must also be sorted (some rendering 
applications, e.g. sketch-route, need the correct order of all stops). 
Stops should not be mangled with the ways - either insert ways first, 
then stops, or vice versa. Again, this is for better overview and makes 
the process less error-prone.

3. Which data primitive should be added for stops?

My suggestion: the one which best identifies the actual position at 
which the vehicle stops (and passengers board). This can be either the 
platform, the stop position or the stop area relation. Given that the 
stop position is always a node while the platform may be a node or an 
area, the stop position is probably the less problematic one to use 
(some renderers already support the combination of role=stop, 
public_transport=stop_position). I would recommend against adding the 
stop group relation as stop, since this does not provide sufficient 
information as to where passengers can really board the vehicle (stop 
groups can be huge).

4. How are line variants mapped?

One relation for each variant? Or one relation for the common part and 
one for each alternative? Sincerely, this is where I'm myself at a loss. 
Imagine a bus line with the following stops: A - B - C - D - E1 - F1 - G 
- H - I - K.

Now as for the variants. It's a made-up example, but there are lines in 
Milan which are hardly better:
- Stops E1 and F1 are in a street which is regularly closed for the 
weekly market (suppose Wednesday from 6:00 to 16:00). During that time, 
the bus takes a detour, on which two other stops (E2 and F2) are located.
- The first courses in the morning (6:00 to 7:00) begin at B rather than 
at A. (For instance because B is near the depot.)
- Every second course ends at H; only the other half of the courses 
serve I and K.

That would leave us with a total of eight possible combinations:
* A - B - C - D - E1 - F1 - G - H - I - K (half the courses after 7:00 
except Wednesday before 16:00)
* A - B - C - D - E1 - F1 - G - H (the remaining courses after 7:00, 
except Wednesday before 16:00)
* B - C - D - E1 - F1 - G - H - I - K (half the morning courses, except 
* B - C - D - E1 - F1 - G - H (the remaining morning courses, except 
* A - B - C - D - E2 - F2 - G - H - I - K (half the courses Wednesday 
7:00 - 16:00)
* A - B - C - D - E2 - F2 - G - H (the remaining courses Wednesday 7:00 
- 16:00)
* B - C - D - E2 - F2 - G - H - I - K (half the Wednesday morning courses)
* B - C - D - E2 - F2 - G - H (the remaining Wednesday morning courses)

Looks confusing? And this is only one direction. Now imagine editing the 
relations for that... so far I've cheated and mapped only the main 
course (the equivalent of the first in this example).

As for pure telescope lines (first or last stops are omitted), we might 
resolve the problem by just marking them as such. For instance, we might 
change their role in the relation to stop:alt_from or stop:alt_to.

That would reduce the above example from 8 to 2 relations. B would be 
added as stop:alt_from, H would be added as stop:alt_to. (We could even 
handle the additional case of evening courses terminating at G.)

Drawbacks: this example does not express which of the combinations are 
"allowed" (some lines might serve either from A-H or B-K, but not A-K or 
B-H), and we have no information of which combination is served at a 
particular time. But it's enough for drawing maps and line sketches, and 
(with some limitations) routing. More detailed information would 
probably require a timetable - here I would hope for transiki to provide 
something useful someday.

OK, I admit that was a lot... but public transportation is a complex 
thing, as I suppose most of can tell from their own experience.


More information about the Talk-transit mailing list