Problematic routing at complex intersection

I’m seeing some odd behaviour at the intersection below:

Richardson Street is a traffic calmed residential street that is part of Victoria, BC, Canada’s “AAA” cycling network. At this location, bicycles, buses, and emergency vehicles are allowed to go through, but cars are not. The actual intersection looks like this:

There are some problems with the data for the diamond (e.g, it’s marked as a “busway”) but they don’t keep the demo routing on OSM from working.

But there are problems with other tools. For example, OpenRouteService maps does this for cycling:

And OSMAnd on Android does this for cycling:

Interestingly, OSMAnd on Android will happy route through the diamond in the opposite direction!

I’ve looked at the data with JOSM, and have tried removing the turn restrictions, changing the segments around the diamond to “highway: residential”, and even deleting and recreating the lower segment. But when I download and convert the data so that I can try it out in OSMAnd I can see the changes but the routing still doesn’t work (and, yes, I disabled all overlapping maps).

Obviously, this isn’t an OSMAnd or a OpenRoutingService forum, but clearly there’s SOMETHING going on that’s causing multiple widely-used services to go haywire.

So, my question is: is there something weird going on here, and is there a canonical way of handling situations like this that is likely to be widely supported.

Thanks!

I’m not entirely sure about this, but can you rule out the possibility that OSMAnd is not calculating the route online (with the old and unchanged data)?

The intersection definitely looks pretty wild. But from my point of view, at least one problem is that there is a turn restriction that prohibits driving straight ahead from west to east without exceptions (for cyclists, etc.): Relation: 18952869 | OpenStreetMap

This relation is missing an except=bicycle;bus so that cyclists (and buses) are allowed to pass through here.

I consider this to be incorrect at this point, since not only buses but also cyclists are allowed to pass through, and in my view, it is no longer a busway but a highway=service with the corresponding motor_vehicle=no with bus=yes and bicycle=yes. Then, theoretically, one could also delete all these turn restrictions.

1 Like

I think that is only true for one of the 3 demo routing engines (OSRM). When I switch to Valhalla or GraphHopper I see the same result as you get on OsmAnd. So overall it looks like OSRM is the outlier and other tools are more of a consensus interpretation in this case.

I agree that it seems contradictory to have bicycle=designated on a busway. I don’t think “dedicated to buses, cyclists, and pedestrians” is in any way the same as “dedicated to buses”. But I admit there is not much mapping of busways where I live.

Thanks for the replies!

Yes, I’ve verified this by making changes and installing the map on my phone. Those changes take effect, so I must not be using the offline engine (as my settings indicate).

I tried adding bicycles and PSVs as exceptions, but that did not have any effect.

I then tried deleting all of the restrictions, after which my phone created a correct route. I then added just a west to east “no straight on” restriction and added exceptions for PSVs and bicycles. After that, my phone would no longer route bicycles through the intersection.

At this point it almost looks like exceptions to restrictions aren’t being honoured, but I find that difficult to believe!

I agree that this is not a “busway”, but for a different reason than you gave. Busways that allow bicycles are a done thing, as indicated by the “cycleway=share_busway” tag (see Tag:cycleway=share_busway - OpenStreetMap Wiki). However, this “busway” is only a few meters long, and the article on busways is pretty clear that they’re for substantial routes.

From what I’ve seen so far, the tagging that makes the most sense to me is to call it a residential road and add tags to indicate what’s allowed. I don’t think it’s a “highway=service” because it’s part of a AAA bike route and a bus route. Here’s the best I’ve come up with:

highway=residential
bicycle=designated
bus=yes
cycleway=shared_lane
emergency=yes
motor_vehicle=no

Following your suggestion, I tried removing the turn restrictions. Doing that makes the routing work on OSMAnd, so maybe that’s the best answer. I also tried adding a “no left turn” from Kipling Street to Richardson to see what would happen. The tags were:

except=bicycle;psv
restriction=no_left_turn
type=restriction

OSMAnd wouldn’t route a bicycle through a left turn, so something strange is definitely going on.

I have a question into the OSMAnd folks, and will update here if and when I get an answer.

2 Likes

I don’t: Support except=* for turn restrictions (bicycle) · Issue #3882 · osmandapp/OsmAnd · GitHub

2 Likes

Does the no entry sign at the back say “except buses and bicycles” similar to the no straight on sign? Because if so, the turn restriction is not needed because it just repeats what is already given or at the very least, it should be a single restriction=no_entry for each section instead.

1 Like

Note that cycleway=share_busway is typically used for shared bus lanes, rather than for bus-only road allowing also bicycles.

yes, it is confusingly named

2 Likes

This is actually cycling infrastructure that allows buses!

For that matter, cycleway=share_busway refers to busway=lane, an old way of denoting bus lanes before per-lane access was defined. It does not denote that bicycles are permitted on a highway=busway and really, can be thought of as a relic of the past (I’d even say, it can be deprecated because bicycle:lanes, while admittingly harder to parse, reflects reality much better, especially because it’s better to use :lanes for bus lanes in general) similar to cycleway=opposite which was used before oneway:bicycle=no was widespread in use. The other reason is that cycleway=*, at least for stuff which denotes the existence of bicycle infra rather than the type of highway=cycleway, is synonymous to cycleway:both=* i.e. denoting the existence of bicycle infra on both sides rather than bicycle infra in general.

Furthermore, if something is bicycle infrastructure first and foremost (including cycling lanes which permit buses), I avoid cycleway=share_busway and use bicycle=designated or variations thereof with bus=yes instead (in fact, if it were historically a widespread thing – and I’ve seen this in use, in fact –, busway=share_cycleway were to be used in this situation).

Given the fact that there is an open issue about it for OsmAnd, I assume that this is still the case.

1 Like