Tagging of "skip-lane" roundabouts

Hello everyone,

I’d like to ask about the handling of roundabouts, where a “skip lane” is available, so that the drivers do not need to enter the roundabout.

In terms of traffic regulation, probably it is not against the rules to enter the roundabout even in these cases. But from end-user perspective, these are unnecessary maneuvers, and they might even lead to dangerous situations (with confusion of drivers).

You can see a typical type of such roundabout in this image. Blue is the right way of usage. Proposing the “red” scenario has the problem above (unnecessary, maybe dangerous, maybe even “prohibited”).


The problem with these - as I checked many examples in OSM in Europe - that it seems there is no generic rule or tagging, which allows the right and consequent usage of these roundabouts. Based on 13 examples both OSMR & Graphhopper (haven’t even checked Valhalla) proposed wrong routings in most cases. And in a random manner: once OSMR proposed the right route, once Graphhopper, once none.

Do you have any idea how these roundabouts should be (re)mapped for a consequent workaround? Tagging the skip lanes as priority roads (Key:priority_road - OpenStreetMap Wiki as yes_unposted) ? Adding a mandatory or prohibitory turn restriction (which is also debatable, as discussed above)? Or there is a specific tag for this, which might help? Or if not, it might be proposed?

Any help & ideas on this issue is appreciated!


I can not attach the entire pdf file, containing all examples. But here is a screenshot of it, showing some at least.

I would start from fixing routers, or at least reporting this as a problem to them. It seems that cost of crossing where you need to yield to traffic is ignored or set too low.

Also, can you post links as text in addition to image? Links in image are not clickable and retyping way code is a bit irritating. I am curious are routers that I am using going to work well there.

(maybe just increasing cost of yielding at crossing can break other things? so it is not necessarily trivial to solve, but I would at least try)

1 Like

Skip_lane_roundabout examples

Here are the examples available in a pdf.

Yes, we are also examining the engine-based fixing too, just wondering if there is a way to make it consequent tagging-wise as well

Are these roundabouts where incoming traffic should yield to traffic already on the roundabout? If so is that mapped properly?

I tried some of the examples you give in the .pdf (better just shared the link to the way) in Brouter:

All take the expected way.

The nice thing about Brouter is that if the routing is “wrong” you can easily see why.

Similarly, here’s the debugging map for OSRM’s default car profile, zoomed into that same roundabout in Tienen.

OSRM does prefer the roundabout over the slip lane. This approach has a posted speed limit of 90 km/h, while this exit has a posted speed limit of 70 km/h. The FOSSGIS car profile for OSRM assumes a speed of 85 km/h within the roundabout but only 40 km/h on the slip lane, based on the road classifications, since neither way has a tagged speed limit.

These fallback speeds, which FOSSGIS inherited from the main OSRM project, have been a source of problems for years. The speeds for highway=trunk essentially assume that this tag means expressway=yes, which is only the case in some countries like Germany. However, in an urban area elsewhere, highway=trunk doesn’t necessarily go any faster than highway=secondary.

Mapping a highway=give_way is a good idea, but OSRM hasn’t added support for highway=stop and highway=give_way:

1 Like

For straight-ahead “slip lane” with raised separation at three-way roundabouts, I don’t use =*_link . This won’t be done at continous-green lanes of T-intersections either. That’s the main flow. At least it can be considered a fork.
For eg Way: 95715340 | OpenStreetMap , it and the opposite shore right turn can also be considered part of A10. It doesn’t leave A10. Same logic should apply on both roundabouts and intersections. On interchanges, if a route turns, it shouldn’t change either. TOTSO - Roader's Digest: The SABRE Wiki
=*_link + ref= is not pretty, Then you get silly cases where even the terminal has =*_link on one side because it’s a restricted turn. Way: ‪Tower Hill‬ (‪156043623‬) | OpenStreetMap


I would start from fixing routers, or at least reporting this as a problem to them. It seems that cost of crossing where you need to yield to traffic is ignored or set too low.

+1, if you may legally use both ways there is not much to be tagged, it is a question of interpreting the data as desired in the router.

I know a case around here where there is a bypass but as it is shorter than the roundabout it works as desired out of the box: https://www.openstreetmap.org/directions?engine=fossgis_osrm_car&route=41.87756%2C12.49177%3B41.87936%2C12.48993#map=17/41.87824/12.49059

Hello all,

Thank you for the ideas from all of you!
@Minh_Nguyen : my concern with the highway=give_way or highway=stop signs (even if they will be implemented for affecting route calculation by navi engines, e.g. the OSRM) that they are supposed to be only tagged, if they are physically available, aren’t they? In many cases, they are not placed at roundabout forks, they are just “ex lege” (yielding according to the rules, before entering).

@Kovoschiz : do you mean that using highway=*_link is not the ideal approach for mapping the slip lanes? For all the roundabouts I checked, this was the case, so it was consequent. Even more consequent than mapping the enter/exit forks of roundabouts (in some cases, they are *link, in other cases, they are simpy primary, tertiary, trunk, etc. roads).

Also @Minh_Nguyen : if maxspeed values are mapped for the complete roundabout (with its environment), it might improve the situation. But it should be also taken into account, that maybe even the *link road tagging will further affect it?

@dieterdreist : yes, that is the tricky situation with this routing. it is not necessarily against traffic rules. but they are still not the proper routes proposed, and might lead to dangerous situations in such roundabouts (drivers behind you do not necessarily expect that you take the first exit available, as it should be already taken with the slip lane)

I don’t buy the „dangerous“ argument, if there is a legal exit from the roundabout the drivers behind you must account for the possibility that you use them. This is as dangerous as any other situation. If the other alternative has fewer give way situations and is only marginally longer it should be preferred by a reasonable routing engine, and if not, using the roundabout may be preferable.

1 Like

Being “dangerous” is not the core of the problem, you are right, it is just a cultural phenomenon which appears depending on drivers’ or some country’s habits. This is not something that map and navi engine have to handle. If something is restricted, it shall be respected.

What they should handle, is a consistent usage of such roundabouts, preferably the slip lanes. And the key of this improvement is on the app side. I just wonder, if there is a mapping-related side of the issue, either with the maxspeed values, or the usage of *links (whether good or not) proposed. To make sure that on the tagging side everything is (properly) handled and the rest of the solution is on the routing engines

When it’s a straight-ahead lane on a three-way junction, or a numbered route or named street is turning, it’s not strictly a =*_link . Those are special cases.

I think this assumption is a mistake: junction=roundabout assumes that the traffic in the roundabout has right of way at the entrance, and the incoming traffic may have to wait. In addition, very few roundabouts (that I know of) are large enough to be driven through at the assumed speed for the respective road class.
No matter which road class highway=*, but with junction=roundabout requires a significant penalty in the routing (for the possible delay and waiting at the entrance, for two turns and the “curvy” passage.

If this is well balanced, the skip lane should be favoured.


Some other “mistakes”:

This ist not a *_link.

All parts of this roundabout are not a highway=trunk in my eyes. This is only primary.

The two links from Tamaškovičova to the roundabout are primary, not primary_link.

1 Like

I think Minh hit the nail on the head by pointing out that the “skip lane” is missing a maxspeed tag.

I looked at the OSRM code a while ago and from what I remember, when a maxspeed is set, this overrides any estimated speeds based on the road class: it doesn’t matter if it’s tagged as trunk or trunk_link or living_street if the maxspeed tag is set.

So in this example, you should just be able to set maxspeed and it should work. No changes to the OSRM code required, and the question if this should be tagged as trunk or trunk_link doesn’t matter.

Compare with here, where maxspeed is set and it does use the skip lane.

OSRM also has a concept of turn penalties based on the angle. I would guess that in most, if not all cases, the skip lane has “smoother” angles, so that should help too.

By the way, this map allows you to see where maxspeed is missing:

In most regions, highway=give_way can be indicated by either a sign or a road marking. In the case in Tienen that I looked at, there appear to be both a sign and road markings:

I don’t know whether this slip lane should have a tagged maxspeed or maxspeed:advisory or whether it should go untagged. Some countries have legal speed limits on slip lanes while others do not. I would think that, ideally, a router would model the deceleration to a near-complete stop if there’s a highway=give_way, or an acceleration or deceleration to the maxspeed of the subsequent way otherwise. But I don’t know of a router that does this currently.

1 Like

Agreed. In the U.S., many roundabouts have an advisory speed posted under the roundabout ahead warning sign, which we’d tag as maxspeed:advisory=* mph. But our coverage of these advisory speeds is probably quite lacking, so it would be nice if routers could apply a reasonable default.

OSRM also applies a turn penalty at each intersection node based on the turn angle. But the angles between roundabouts and their entrances and exits are always very gentle, so no penalty is ever applied in practice. There’s also a very slight penalty at any bend in a roadway, which adds up along a windy road, but roundabout approaches and exits are about as “windy” as any slip lane would be according to this heuristic.

Thanks again for the new insights. To sum up so far, it seems like the best approach besides fine-tuning the planning penalties of the engines is adding the maxspeed values by the right sources (which is useful anyhow).

And in terms of the highway=* tagging of slip lanes: the current wiki recommendation is using link roads (Highway link - OpenStreetMap Wiki), but this is something that might be reconsidered?

The highway=*_link tags are definitely appropriate for slip lanes and ramps. However, @Kovoschiz pointed out above that one of the lanes highlighted in the original post – the one going east to west – can be considered one of the main lanes rather than a slip lane. Tagging both the roundabout entrance and the through lane as non-link ways may be enough to convince OSRM to take the through lane; in that case, OSRM will emit an instruction to keep right at the fork in the road.

1 Like

OK, it’s clear now. So that was a special case, otherwise at most the examples the link usage is correct