HOV lanes
According to wiki, hov=lane is
“Deprecated and nonstandard. If seen on a way, this value should be removed; instead, hov:lanes=* is the preferred tagging for HOV access restrictions per lane.”
This makes sense as with this value, it’s not clear which lanes require HOV. There were ~8k road segments with the value, all in the US. I’ve systematically replaced them with the more specific hov:lanes, here’s a history graph: https://taghistory.raifer.tech/?#***/hov/lane. Some of the ways already had hov:lanes, so I removed hov=lane; the majority had a comment in note:lanes like “left lane is hov” (probably from an import), so I used it to set the lanes; and for the rest, I checked the images (Bing/Mapbox/Mapillary) to set the correct lanes. All the changes were done manually (often in bulk).
One more complicated case was in Alexandria, VA where two streets have their right lanes designated to HOV during certain times. Mapillary allowed me to update those correctly with a tag like hov:lanes:forward:conditional = ||designated @ (Mo-Fr 16:00-18:00): osm.org/changeset/137988567.
Contraflow HOV lanes near Boston
The last 80 segments are the most complicated yet. They are for a part of I-93 south of Boston, MA: https://overpass-turbo.eu/s/1wXB. The complication comes from this: note:lanes = during rush hours, 5 lanes (left one hov) in peak direction and 3 in off-peak direction. This is confirmed by Southeast Expressway HOV lane, whereas Boston I-93 HOV Lane has an image of it.
I’ve mapped the permanent barriers between the directions in osm.org/changeset/138024161.
I see two ways of mapping the HOV lane:
As a separate way along the interstate
but in the opposite direction. Even though it’s one lane of the already mapped road (in the opposite direction), there is always a physical separation (present when the lane is open), so it makes sense to map it separately; also there is no interaction of these two directions. Tagging is simpler with this approach:
- for the HOV lane:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
bus=designated change=no hgv=no highway=motorway horse=no hov:minimum=2 hov=designated lanes=1 maxspeed=55 mph maxweight=5 motorcycle=designated name=Southeast Expressway HOV Lane oneway=yes opening_hours=Mo-Fr 05:00-10:00 ref=I 93;US 1;MA 3 shoulder=no trailer=no
— opening_hours is important; I’m not sure how else to indicate that this lane is present only during certain hours.
- the regular road needs to indicate fewer lanes, meaning if it has
1 2 3
hgv:lanes=no|no|yes|yes|yes lanes=5 turn:lanes=||||merge_to_left
it now also needs
1 2 3
hgv:lanes:conditional=no|yes|yes|yes @ (Mo-Fr 05:00-10:00) lanes:conditional=4 @ (Mo-Fr 05:00-10:00) turn:lanes:conditional=|||merge_to_left @ (Mo-Fr 05:00-10:00)
These new lanes need to be mapped accurately parallel to the road and added to the road relations, which is not a fast process. Yes, the result would look unusual — two extra roads in the opposite direction along the highway.
As conditional tags on the interstate
This is simpler in mapping, but would create a lot of extra conditional tags because the road wouldn’t be one way and the extra, HOV tags would be mapped as *:backward:conditional. An example segment would go from 23 to 35 tags:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
attribution=Office of Geographic and Environmental Information (MassGIS) bicycle=no bus:backward:conditional=designated @ (Mo-Fr 05:00-10:00) change:lanes:backward:conditional=no @ (Mo-Fr 05:00-10:00) change:lanes:forward:conditional=not_left|yes|yes|yes @ (Mo-Fr 05:00-10:00) condition=good foot=no hazmat=designated hgv:backward:conditional=no @ (Mo-Fr 05:00-10:00) hgv:lanes:forward:conditional=no|yes|yes|yes @ (Mo-Fr 05:00-10:00) hgv:lanes=no|no|yes|yes|yes hgv=designated highway=motorway horse=no hov:backward:conditional=designated @ (Mo-Fr 05:00-10:00) hov:minimum:conditional=2 @ (Mo-Fr 05:00-10:00) lanes:backward:conditional=1 @ (Mo-Fr 05:00-10:00) lanes:forward:conditional=4 @ (Mo-Fr 05:00-10:00) lanes=5 massgis:way_id=152796 maxspeed=55 mph maxweight:backward:conditional=5 @ (Mo-Fr 05:00-10:00) motorcycle:backward:conditional=designated @ (Mo-Fr 05:00-10:00) name=Southeast Expressway oneway:conditional=no @ (Mo-Fr 05:00-10:00) oneway=yes placement=right_of:2 ref=I 93;US 1;MA 3 shoulder:backward:conditional=no @ (Mo-Fr 05:00-10:00) source=massgis_import_v0.1_20071009092358 surface=asphalt trailer:backward:conditional=no @ (Mo-Fr 05:00-10:00) turn:lanes:forward:conditional=|||merge_to_left @ (Mo-Fr 05:00-10:00) turn:lanes=||||merge_to_left width=61.0
I doubt that any program would parse all this information, and it would be confusing to humans too.
I’m going to follow the first approach, carefully mapping and tagging the HOV lanes separately. Please comment if you have any ideas about this.