I’ve manually replaced deprecated
hov=lane tags with
hov:lanes=* in the US over time, please see pluton_od's Diary | Contraflow HOV lanes | OpenStreetMap for more information. And I now have the last, most complicated case. I’m reposting a part of that diary here in order to consult the community how to map this in the best way.
The last 80 segments are the most complicated yet. They are for a part of I-93 south of Boston, MA: overpass turbo. 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 Changeset: 138024161 | OpenStreetMap.
I see two ways of mapping the HOV lane:
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:
- Once in the HOV lane, drivers do not have access to exits
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.
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 trying out the first approach locally, carefully mapping and tagging the HOV lanes separately. I can upload the
.osm file somewhere with what I have if anyone is interested how it looks.
User Kovoschiz in the comments adds this:
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=motorwayfor 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=designatedetc. So it’s still not as simple as you think, and there’s advantage in 2 except for suffixing
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.
Due to the overriding (I don’t know much about this), there may be a need to add extra tags to the separate lane: tag
access=no (always) and
hov:conditional = designated @ … (during certain times).
There are a few other comments there: pluton_od's Diary | Contraflow HOV lanes | OpenStreetMap.
What is the best way to map these HOV lanes?