Identifying segments of road that are approaching a roundabout

As part of the project we are working on, we are providing “callouts” in a mobile app for visually impaired users when they approach road intersections of any type. We are now trying to tackle more complex intersections such as “roundabouts” and “4-way intersections” (that we see more of in the U.S.).

E.g. https://www.openstreetmap.org/edit#map=17/51.45949/-0.96827

For roundabouts I have noticed that segments of the road that form the “circular way” that is the entire roundabout itself has a tag

But if a pedestrian is “walking” and approaching a roundabout and is situated on a segment of road that is “linked” to the roundabout, the tag “junction=roundabout” is not used for the segment of road that they are on, even though the segment of road is joined (and therefore has a junction with) the roundabout.

We were thinking that if we could identify a section of road that was joined to a roundabout (as opposed to being part of a roundabout) then we can inform the user in the app that they are approaching a roundabout intersection.

Are there other ways of uniquely identifying such segments?

Similarly a user that is in the U.S. will be approaching a 4-way intersection.
E.g. https://www.openstreetmap.org/edit?relation=237868#map=18/47.61744/-122.20050

Is there anything that uniquely identifies a 4-way intersection?

I think that is for the application to deduce for itself.

Do note that roundabout is a bit overused; not every circular arrangements of roads is actually a roundabout.

@hadw - that is indeed the question. I am looking for tags or properties that are commonly used for segments of road that join with a roundabout. In order for the application to “deduce” this programmatically, what does OSM surface to make that possible?

From what I can see, there is nothing obvious about a segment of road connected to a “roundabout” and a segment of road not connected with a roundabout. Unless I am missing something.

It shares a node with a road marked junction=roundabout (or, and recursively, shares a node with a road that has less than a certain cumulative distance from an node shared with junction=roundabout.

There is currently no commonly used tag for traffic circles, so, if you wanted to announce these, you would need to use more complex heuristics.

You probably need a heuristic based on distance: so buffer roundabouts by distance x, detect where they intersect incoming roads and generate some feature in your DB to mark the call out.

For larger roundabouts where the incoming road ‘flares’ out the two flares are often mapped as separate oneway road segments. However, there is no guarantee that these are mapped in detail, so you probably need a more robust approach as suggested above.

Note that OSM based routing packages I use for driving, such as Maps.me and Navit must implement this because they will say “take the third exit from the roundabout” as I approach it. Check out what tools such as graphhopper and OSRM do in these circumstances.

Implicit in what SK53 is saying is that, if your application cannot compute that a road leads to a roundabout, on the fly, you should pre-compute this information and store it in a place only used for your application, either on your own server, or in the user’s device. I strongly suspect that most routing applications actually pre-compute information that is not in primary data.

@hadw @sk53

Thanks for the good feedback. I will be sharing this with the dev guys.