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
I strongly suggest using lanes:conditional for this. And the imperative for :conditional is to map the exceptions as they are written.
This means:
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
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.
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.
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.
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=privateaccess:conditional=... no matter how sign phrased it.
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.
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).