Poll: Should alternating traffic/parking lanes be included in the lanes=* count?

If an on-street curbside parking lane alternates between parking and a general-purpose traffic lane depending on time of day, when should that lane be included in the lanes=* count?

Assume the lane is delineated only by standard dashed lines (no painted parking bay markings) and narrow enough that parked vehicles prevent through traffic, requiring drivers to mostly use the adjacent lane to pass. Using conditional restrictions:

Example 1 - daytime traffic lane, overnight parking lane

  • parking:right=lane
  • parking:right:restriction=no_parking
  • parking:right:restriction:conditional=none @ 20:00-08:00

Example 2 - daytime parking lane, overnight traffic lane

  • parking:right=lane
  • parking:right:restriction=none
  • parking:right:restriction:conditional=no_parking @ 20:00-08:00
Should this variable parking/traffic lane be included in lanes=*?
  • Never - only permanent traffic lanes count
  • If it is open and usable by traffic during peak/rush hours[1]
  • If it is open and usable by traffic during most daytime/business hours[2]
  • If it is open and usable by traffic more than half the day
  • Always - if it can function as a traffic lane at any time
0 voters

Now consider a variant of the same scenario, but where parking spaces are marked:

Should this variable parking/traffic lane be included in lanes=* if it has painted parking spaces/bays?
  • Same answer as before
  • It may be included if parking utilization is typically low (lane remains passable when parking is allowed)
  • It should never be included
  • N/A – I answered ‘Always’ above, that lane should always affect the lanes=* count
0 voters

And finally:

Should lanes:conditional=* also be added to reflect changes in the number of usable traffic lanes at certain times?
  • Yes
  • No
0 voters

  1. According to local conventions, open to discussion. ↩︎

  2. According to local conventions, open to discussion. ↩︎

I strongly suggest using lanes:conditional for this. And the imperative for :conditional is to map the exceptions as they are written.

This means:

  1. If the parking is by default not allowed, but explicitly allowed at certain times: lanes includes all lanes and lanes:conditional contains the reduced number
  2. If the parking is allowed by default, but explicitly forbidden at certain times: lanes contains only the reduced number of lanes with lanes:conditional including the parking lanes.

This keeps the conditionals aligned too, which is quite nice.

Example 1:

parking:right=lane
parking:right:restriction=no_parking
parking:right:restriction:conditional=none @ 20:00-08:00
lanes=X+1
lanes:conditional=X @ 20:00-08:00

Example 2:

parking:right=lane
parking:right:restriction=none
parking:right:restriction:conditional=no_parking @ 20:00-08:00
lanes=X
lanes:conditional=X+1 @ 20:00-08:00
3 Likes

I think it depends what happens if parking is allowed but if no one is parked there, can you still use it as a traffic lane?

Using lanes:conditional to reduce the traffic lanes due to parking would be okay if during the parking times you’re not allowed to or it’s not used as a through traffic lane, but if you can, and is used it as a through traffic lane if no one has parked there yet, then it should still be included in the lanes count.

1 Like

My interpretation is lanes represents the count of possibly usable lanes for through traffic, but not guaranteed to be usable (which would depend on if cars are parked there or not), ie. the maximum lanes available. The other interpretation is that lanes represents lanes that are guaranteed to be usable for through traffic, although more may open up if no one parked there, ie. the minimum lanes available.

See previous discussions Tagging lanes that you can park or drive in

1 Like

I want to dispute this - main_tag and main_tag:conditional is best set in way, so that data consumer processing only main_tag fails less disastrously.

For example, if you have footway open to general public once a year then it likely makes sense to set access=private access:conditional=... no matter how sign phrased it.

The same for parking lanes.

4 Likes

I don’t know much about traffic law outside of Western Europe, but I think lanes should be defined simply by the total number of lanes (excluding parking bays of course), regardless of typical usage. To me, putting anything else in lanes seems like a short-sighted way of tagging, catering to a specific use case (routers aren’t the only data consumers; you can also use OSM e.g. for statistical analysis). The number of lanes is not equivalent to a road’s capacity, and if routers want to know more about the amount of space available, they could check if parking:*=lane is set.

One example of an advantage of this “include all lanes” approach: Traffic rules might differ depending on the number of total lanes. For example in Germany, on this 4-lane street, crossing the central line for overtaking is prohibited. If the same road had 2 lanes + off-carriageway parking, then there would be no such restriction on the central line. This is what I meant by “short-sighted”: We’d be losing basic information about the road if we don’t use the “include all lanes” approach.

I don’t know any streets that have both lane markings and narrower parking markings, so I can’t say anything about that.

1 Like

That’s because the lanes are marked (a significant difference in german law). But for lanes, whether there are lane markings should not affect the tag.
This also highlights the fact that “Fahrstreifen” (literally driving lanes) are not equivalent to OSM lanes. Otherwise, just about any residential street would have 4 lanes (two of which are more or less permanently used for parking).

Another interesting case: 4 lanes + street-side parking on the right. If we include the parking, we have 5 lanes total (all marked), so German law dictates that the center lane cannot be used for the first few meters (until left side parking makes the road 6 lanes wide). Of course that’s not entirely true - parking lanes are not considered to be part of the carriageway per German law. Could you tell?

The photo you provided shows parking spots that would be considered parking bays (parking:right=street_side) in OSM. I don’t think anyone would argue that they should be considered part of the lanes count. The key lane_markings can be used to indicate whether there are lane markings or not, so I don’t see the problem with that. (In any case, it was just an example, Germany isn’t the only country with lane-count-specific rules.)

I should have mentioned that. What I am asking about is when something like parking:[side]=lane becomes a traffic lane at certain times. In my area (Brazil), most street parking is parking:[side]=lane. In low traffic areas, street parking is generally unrestricted. In high traffic areas, street parking is generally restricted during most business hours. In the transition areas, street parking restrictions increase gradually as needed, first prohibiting parking only during the rush hour. So, the exact threshold/criterion one uses results in different lane counts for streets that look mostly the same, apart from signage and (sometimes) parking markings.

When thinking of how lane assist may use that information, if the curbside parking lane is included in the lane count, then vehicle:lanes:conditional may be needed to make sure it won’t tell the driver to use that lane when they can’t, unless we expect lane assist to parse parking:* tags, which might lead to incorrect results when the curbside lanes are wide enough to fit both parked and moving cars side by side. If it is not included, then lane assist will show fewer lanes than what the driver is seeing marked on the road, which may also confuse the driver.

Then there’s the question of how some apps may choose to interpret lanes=1. For example, a router could choose to assume a lower speed if oneway=no, or a renderer might want to draw the way slightly thinner than normal for that way type.

I see them as a subset of variable-access lanes and would tag them as such (i.e. include all useable lanes but also add access:lanes=*|variable and also access:lanes:conditional=* if the condition is known).

On this, =variable is debated Talk:Variable-access lanes - OpenStreetMap Wiki

2 Likes