OpenStreetMap logo OpenStreetMap

Contraflow HOV lanes

Posted by pluton_od on 5 July 2023 in English.

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): https://www.openstreetmap.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 https://www.openstreetmap.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:
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
hgv:lanes=no|no|yes|yes|yes
lanes=5
turn:lanes=||||merge_to_left

it now also needs

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:

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.

Location: North Commons, Quincy, Norfolk County, Massachusetts, 02269, United States

Discussion

Comment from Kovoschiz on 6 July 2023 at 10:19

  1. opening_hours= is usually not considered on roads. This may be a case where highway:conditional=motorway @ (Mo-Fr 05:00-10:00) is correct, as the separate roadway doesn’t exist outside those times. Unfortunately, you still need highway=motorway for compatibility. Furthermore, due to how overriding works, you need to specific *:conditional=no @ (Mo-Fr 05:00-10:00) for each mode, as access:conditional=no @ (Mo-Fr 05:00-10:00) or motor_vehicle:conditional=no @ (Mo-Fr 05:00-10:00) will be overrideen by hov=designated etc. So it’s still not as simple as you think, and there’s advantage in 2 except for suffixing *:backward:*= .
  2. hov:minimum:conditional=2 @ (Mo-Fr 05:00-10:00) is not required. hov:minimum=2 @ (Mo-Fr 05:00-10:00) is always true.

Comment from Kovoschiz on 6 July 2023 at 10:21

JOSM parallel tool is fast. What’s slow may be including them in the route=road , and any route=bus affected?

Comment from Kovoschiz on 6 July 2023 at 10:35

  • =no @ (Mo-Fr 10:00-05:00) may be overridden Need to check routers to confirm.

Comment from pluton_od on 6 July 2023 at 16:48

Kovoschiz, thanks for the comments!

highway:conditional does make sense in this case, however I agree with you, routers will probably ignore it w/o highway.

Furthermore, due to how overriding works, you need to specific *:conditional=no @ (Mo-Fr 05:00-10:00) for each mode, as access:conditional=no @ (Mo-Fr 05:00-10:00) or motor_vehicle:conditional=no @ (Mo-Fr 05:00-10:00) will be overrideen by hov=designated etc.

Why would you set access:conditional=no @ … during the times when the lane is present? If hov=designated overrides it, should it be tagged access=no (always) and hov:conditional = designated @ … (during certain times)? Or do you mean, since opening_hours doesn’t work here, I should use *:conditional for each tag of the lane instead of plain tags (except ref, name)?

JOSM parallel tool is fast. What’s slow may be including them in the route=road, and any route=bus affected?

Yes, I realized that the parallel tool makes it much faster. Still, this part contains of ~40 not always straight road segments in each direction, each of which needs to be duplicated, aligned and tagged.

Overall, I should probably post this to the community forum to have more feedback.

Comment from Kovoschiz on 7 July 2023 at 04:08

Typo there. Yes, hov:conditional=designated @ (05:00-10:00) could be more reliable. I forgot to consider this. Still, it doesn’t show the default of HOV being allowed during its usage nicely. In other cases where it applies the majority of time, hov=designated will be used as the default. So for better understanding,

Comment from Kovoschiz on 7 July 2023 at 04:09

Should consult the community, and check how routers order the rules.

Comment from RKCook on 12 December 2023 at 20:39

Pluton_od.

I see you have marked up a lot of hov lanes. I have a question on HOV lanes that are only designated during rush hour.

Specifically I-75 in southern Oakland County, Michigan for a weird political reason just opened up its first HOV lane in the state. The previously unopened leftmost lane of the freeway which was added as part of a reconstruction over the past five years was just repainted and opened as an HOV lane from 6-9a and 3-6p M-F.

Of note is that anyone is allowed to drive in the lane during other 138 hours of the week and the lane markings actually allow cars to move freely in and out of that HOV lane.

I already followed changed the lanes on the freeway from 3 to 4 [or 5 where (de-)acceleration] were already present and followed the hov:lanes guidelines .

However I did not yet put the time restrictions in place since I could not find guidance on this and couldn’t find an obvious template. Though this post is similar.

Anyhow, as HOV vehicles are always allowed in lane 4 and normal vehicles that are not during the designated time (the motor_vehicles=no * piece of the guideline)… I think I should change

motor_vehicles:lanes=no||| to motor_vehicles:lanes:conditional=no @ (Mo-Fr 06:00,15:00-18:00)|||

What do you think?

Comment from pluton_od on 13 December 2023 at 17:53

Hi RKCook.

My understanding is that since the lane is HOV only during certain times, the HOV lane-specifying tags (hov:lanes, motor_vehicle:lanes, maybe bus:lanes, motorcycle:lanes, etc.) need to be conditional for those times, then the default will be non-HOV:

  • hov:lanes=designated||| => hov:lanes:conditional=designated||| @ (Mo-Fr 06:00-09:00,15:00-18:00);
  • motor_vehicles:lanes=no||| => motor_vehicles:lanes:conditional=no||| @ (Mo-Fr 06:00-09:00,15:00-18:00).

Comment from RKCook on 19 December 2023 at 01:31

Thanks! This has been done exactly as you suggested. https://www.openstreetmap.org/changeset/145272352

Log in to leave a comment