Routing with multi-way roads

In this example there is a 2 lane road that is represented by two separate parallel ways having the same name, rather than a single way:

This creates a lot of complications because cross streets often change names when they meet Market St, and the inbetween road segment of the cross street might have the name of the upper or lower road, or might be unnamed.

During routing this creates several different issues; for example, in pedestrian mode where one can walk on either lane, the routing algorithm might switch sides from one lane to the other, which might create the following confusing directions:

“Start on Market St. Then turn right onto Cross Street, then turn left onto Market St, then continue on Market St.”

rather than,

“Start on Market St, then cross to the other side of the street, then continue.”

In this case I see “cycleway=lane” tag and I’m wondering what the most consistent overall way to detect these cases of multiple parallel ways that are really the same would be, when considering many different cities and perhaps countries.

Usually, we split highways only if there is a physical separation between the lanes. Here we have the double continuous yellow lines which is normally not enough for duplicating the ways (but we might have different rules between Europe and USA).
Merging both ways back to a single one might solve your pedestrian routing issue but it can also introduce new issues or additional mapping complexity in the turning left/right/U restrictions.
In your case, even if we keep the two ways, we have to improve our schema describing where the sidewalks are (left or right side) and where you can cross the road (either explicitely drawing a footway crossing the street for instance or a node tagged with the crossing keys).

Check some hints here:

  1. As you mention street crossings, I should point out that there are many street crossings here, such as

and the only tag they have is “highway=footway” which is the same as generally used to indicate a path through a park or something. This creates other complexities in routing because that screws up the verbal instructions when they are in fact just a street crossing, and I guess, should have been tagged with “highway=crossing”

Edit: I fixed them, so if my changes went live you might not see it this way.

  1. There is a physical separation (median) between these roads every hundred meters or so, so that makes sense. I think it’s ok to leave it as a two-way road. The fact that there are some two-way roads used means that I need to be able to handle them appropriately at some time or another anyway. The question is how I can reliably determine that two ways are part of the same two-way road.

ie, does the tag “cycleway=lane” on two ways that are nearby and roughly parallel catch ALL instances of two-way roads? What should my filter be?

The highway crossing tag is only used for the actual intersection point where the foot-way crosses the other highway. So the tagging of this way is correct, the only correction that should be done here is to tag the intersection nodes of the footway with the primary highway as highway=crossing.

Micha H.