I would like a convert a relation (e.g. https://openstreetmap.org/relation/2851613) to a list of coordinates that can be displayed on a map, potentially using geojson. I ported over this converter https://wiki.openstreetmap.org/wiki/Relations/Relations_to_GPX (the converted code is at https://github.com/e-mission/e-mission-eval-public-data/blob/master/spec_creation/autofill_eval_spec.py#L71) and it works iff the relations are sane.
However, many relations are malformed. Although the relation spec https://wiki.openstreetmap.org/wiki/Relation says that the members have to be ordered, this relation for the route of bus #52 (https://www.openstreetmap.org/relation/8094017) has the following way order
Way West El Camino Real (516422275) as forward
Way Castro Street (417101895) as forward
Way North El Monte Avenue (52869637) as forward
which is clearly incorrect since since the 52 goes from Castro to El Monte via El Camino. So if I use the algorithm above, I end up with a map like so
At the same time, OSM displays the route without any zigzags, so it is clearly able to order the relation members correctly even if they are not ordered originally.
In response to @neogeomat, I looked at the nodes displayed by overpass and the nodes displayed by the reconstruction algorithm above for a correctly created relation, and it looks like overpass returns fewer nodes than the algorithm above.
Does anybody know how OSM displays relations, or have a pointer to an algorithm that deals gracefully with malformed relations?
osmtogeojson
before - thank you for the pointer. Since it is used by the overpass turbo project, it does look super promising. Unfortunately, I came up with a workaround so I don't have time to explore this right now. Would you like to submit this as an answer so that I can accept it after I try it out and you can get the points?