OpenStreetMap User's Diaries
Heritage railways and bikes on board: four changesets, two modelling questions
I build Tisseur de Voies, a site that computes loops where you ride one way and take the train back.
Heritage railways fit that model well, because many of them carry bikes for free in a dedicated van,
where regular regional trains count them. Trying to use them, I found the same situation almost
everywhere: the tracks are in OSM, the service line is not. A data consumer sees a railway, with no
I build Tisseur de Voies, a site that computes loops where you ride one way and take the train back.
Heritage railways fit that model well, because many of them carry bikes for free in a dedicated van,
where regular regional trains count them. Trying to use them, I found the same situation almost
everywhere: the tracks are in OSM, the service line is not. A data consumer sees a railway, with no
way to tell that a train runs on it, where it stops, or who operates it. So I started adding them,
one line at a time.
What I have contributed so far:
- Le Mastrou, Ardèche, 10 August
(changeset 187233238): two
route=train
relations, one per direction, plus their route_master.
- Velay Express, Haute-Loire, 12 August
(changeset 187362618): the same, with
bicycle=limited on both directions.
- Chemin de Fer de la Baie de Somme, 19 September
(changeset 189261499). Here two relations
already existed, but as
route=railway, with from and to swapped with respect to the
geometry. I retagged them route=train, named them after the operator’s own routes, and filled in
operator.
- Le Grand Large, the same day
(changeset 189262951), the creation behind my
first question.
1. One journey sold end to end, but two trains and a 200 m walk
The Chemin de Fer de la Baie de Somme sells three journeys on its metre-gauge network: « Entre Terre
et Prés-Salés » between Le Crotoy and Saint-Valery, « Les Bas-Champs » between Saint-Valery and
Cayeux-sur-Mer, and « Le Grand Large », Le Crotoy to Cayeux in 1 h 35. The third one combines the
other two, and the change happens at Saint-Valery between two stations two hundred metres apart, on
foot.
I mapped it as a third route=train relation. Its ways form a continuous chain from end to end,
since the track does link the two Saint-Valery stations (I added the sixty metres that were missing
along the quay), and yet no single train runs the whole thing. That is what bothers me, and I would
rather raise it than let someone find it.
A route_master grouping the two short journeys would match what the trains actually run, at the
cost of losing the single ticketed, timetabled journey that exists end to end. Leaving it out of OSM
entirely hides the only itinerary that crosses the whole network. How do you handle this elsewhere,
a walking transfer inside a single commercial product?
2. Declared stops, when the station node sits away from the track
On these lines, some stations are mapped as a railway=station node on the station building, a few
dozen metres from the rails. Anyone looking for stops by walking the nodes of the member ways misses
them. That is exactly what happened to me on Velay Express, where Saint-Agrève, the end of the line
that matters most for a loop, was nowhere to be found.
So I listed the stations as role=stop members of the relation, including those whose node is off
the track. The list becomes explicit, and a data consumer no longer has to infer it from topology.
This departs from the letter of PTv2, where role=stop expects a public_transport=stop_position
on the way, these relations being tagged public_transport:version=1. On a heritage line, should I
also add a stop_position on the track facing each building, or is the declared list enough?
What it adds up to
These four changesets show up directly in the data I publish:
four bike loops with a heritage-train return, on Tisseur de Voies.
The Baie de Somme one, 29 kilometres of which 28 on signed cycle routes, did not exist before the
19 September relation. Alignments and stations come from OSM, the cycle routes from OSM and the
French national reference.
Corrections welcome, including on the first point. If the right answer is to delete the « Le Grand
Large » relation, I will delete it.
Nicolas
I build Tisseur de Voies, a site that computes loops where you ride one way and take the train back. Heritage railways fit that model well, because many of them carry bikes for free in a dedicated van, where regular regional trains count them. Trying to use them, I found the same situation almost everywhere: the tracks are in OSM, the service line is not. A data consumer sees a railway, with no
I build Tisseur de Voies, a site that computes loops where you ride one way and take the train back. Heritage railways fit that model well, because many of them carry bikes for free in a dedicated van, where regular regional trains count them. Trying to use them, I found the same situation almost everywhere: the tracks are in OSM, the service line is not. A data consumer sees a railway, with no way to tell that a train runs on it, where it stops, or who operates it. So I started adding them, one line at a time.
What I have contributed so far:
- Le Mastrou, Ardèche, 10 August
(changeset 187233238): two
route=trainrelations, one per direction, plus theirroute_master. - Velay Express, Haute-Loire, 12 August
(changeset 187362618): the same, with
bicycle=limitedon both directions. - Chemin de Fer de la Baie de Somme, 19 September
(changeset 189261499). Here two relations
already existed, but as
route=railway, withfromandtoswapped with respect to the geometry. I retagged themroute=train, named them after the operator’s own routes, and filled inoperator. - Le Grand Large, the same day (changeset 189262951), the creation behind my first question.
1. One journey sold end to end, but two trains and a 200 m walk
The Chemin de Fer de la Baie de Somme sells three journeys on its metre-gauge network: « Entre Terre et Prés-Salés » between Le Crotoy and Saint-Valery, « Les Bas-Champs » between Saint-Valery and Cayeux-sur-Mer, and « Le Grand Large », Le Crotoy to Cayeux in 1 h 35. The third one combines the other two, and the change happens at Saint-Valery between two stations two hundred metres apart, on foot.
I mapped it as a third route=train relation. Its ways form a continuous chain from end to end,
since the track does link the two Saint-Valery stations (I added the sixty metres that were missing
along the quay), and yet no single train runs the whole thing. That is what bothers me, and I would
rather raise it than let someone find it.
A route_master grouping the two short journeys would match what the trains actually run, at the
cost of losing the single ticketed, timetabled journey that exists end to end. Leaving it out of OSM
entirely hides the only itinerary that crosses the whole network. How do you handle this elsewhere,
a walking transfer inside a single commercial product?
2. Declared stops, when the station node sits away from the track
On these lines, some stations are mapped as a railway=station node on the station building, a few
dozen metres from the rails. Anyone looking for stops by walking the nodes of the member ways misses
them. That is exactly what happened to me on Velay Express, where Saint-Agrève, the end of the line
that matters most for a loop, was nowhere to be found.
So I listed the stations as role=stop members of the relation, including those whose node is off
the track. The list becomes explicit, and a data consumer no longer has to infer it from topology.
This departs from the letter of PTv2, where role=stop expects a public_transport=stop_position
on the way, these relations being tagged public_transport:version=1. On a heritage line, should I
also add a stop_position on the track facing each building, or is the declared list enough?
What it adds up to
These four changesets show up directly in the data I publish: four bike loops with a heritage-train return, on Tisseur de Voies. The Baie de Somme one, 29 kilometres of which 28 on signed cycle routes, did not exist before the 19 September relation. Alignments and stations come from OSM, the cycle routes from OSM and the French national reference.
Corrections welcome, including on the first point. If the right answer is to delete the « Le Grand Large » relation, I will delete it.
Nicolas
OpenStreetMap Blogs






























