|Total number of traffic lanes available for motorised traffic.|
|Used on these elements|
|Status: de facto|
|Tools for this tag|
Use the lanes=* key to tag how many traffic lanes there are on a highway. To tag individual lanes of a road, see the article about the lanes suffix. Count excludes cycle lanes and motorcycle lanes that do not permit a motor vehicle. For tagging cycle lanes see cycleway=*. For tagging motorcycle lanes see motorcycle=* or lanes.
Note that it is valid to tag lanes count also in case where lanes are not marked with paint on the surface
The lanes=* key should be used to specify the total number of of a road.
The following lanes should be included:
- General purpose traffic lanes suitable for vehicles wider than a motorbike.
- Bus lanes, that are reserved for public service vehicles (PSV), for example buses and taxis. Additionally to the total number of lanes, consider to tag the number of lanes for PSV with lanes:psv=*, lanes:bus=* and lanes:taxi=*.
- High-occupancy vehicle lanes (sometimes also called carpool lanes, commuter lanes, express lanes, transit lanes). The number of such lanes could be tagged using lanes:hov=*.
- Lanes that are available to traffic at certain restricted times, for example during the rush hour, indicated by variable message signs. These lanes are called shoulder=*.  (nl) in the Netherlands and Belgium, and (de) in Austria, Germany and Switzerland. The "smart lanes" concept in the United States is similar, repurposing the roadway's
- Longer slip-roads, for example on motorways and other fast major roads. Turning lanes for minor roads are not normally included. See turn=* for further details about tagging turning lanes.
And the following lanes should be excluded:
- Minor slip roads without a deceleration/acceleration lane, i.e. the main road is wider only because of the intersecting road.
- Lanes dedicated and marked for parking. Use parking:lane=* to provide information on if and how cars park.
- Bicycle lanes. Use the tag cycleway=lane for those.
- Emergency shoulder lanes. See shoulder=* for further details.
If the number of lanes changes it is necessary to split the OSM way. This should be done as soon as:
- a new lane has started (regardless of width), or
- a lane has finished disappearing (usually a merge with another lane)
width:lanes:start/end can be used to mark that a lane gradually gets narrower.
Remark for data consumers
Many ways have not yet been tagged with the total number of lanes at all points, but only with the number of through lanes of a longer section. Therefore, data consumers can mostly treat the lanes tag as a minimum rather than an exact number.
If there are no marked lanes, the key width=* can be used.
Lanes in different directions
If the lanes on a two way road are not distributed evenly between the driving directions, the keys lanes:forward=* and lanes:backward=* can be used in addition to the lanes tag. The key lanes:forward=* hereby refers to lanes which direction is equal to the direction of the OSM way, and lanes:backward=* to the opposite direction.
The lanes=* tag is widely misused to mean the lanes in each direction rather than the total lanes. If the mapper chooses to describe the forward and backward lanes, this potential ambiguity is avoided.
lanes:both_ways=* can be used for lanes which allow traffic in both directions, e.g., passing and center turn lanes.
See below for some examples of the usage of those keys.
Lanes reserved for specific vehicles
The number of lanes which are reserved for specific types of vehicles can be tagged by using the key
lanes and adding a suffix that indicates the transport mode from the key access=*, e.g. lanes:bus=1 for a single lane reserved for buses. If it is necessary to specify the direction of those lanes, add the suffix
:backward like in the previous section, i.e. lanes:taxi:forward=1 refers to single lane reserved for taxis in the same direction as the OSM way.
NOTE! The lanes:*=* key type can only be used to indicate the number of lanes that are reserved for a specific transport type on a way. It does not and cannot specify which lanes a transport type is restricted to.
If, for example, on a three lane motorway, heavy-good vehicles are restricted to the rightmost lane only, lanes:hgv=1 will not express that meaning! (lanes:hgv=1 means that hgv vehicles have one lane of the motorway reserved for them and doesn't specify which one, either.)
Restrictions for vehicles can be tagged using the
:lanes suffix and tagging scheme, e.g.
hgv:lanes=no|no|yes would restrict heavy-good vehicles to the rightmost lane.
Restrictions that only apply at certain times and days
For lanes that are restricted for parts of the day only, use the additional lanes conditions tag to indicate when the conditions apply. For example: lanes:bus:conditional=* or lanes:psv:conditional=*. See Conditional restrictions for more details.
No lane markings
Many narrow, cobblestone and rural roads do not have lane markings. Also, in some places, even broader roads that function as 4-laned highways may not have lane markings. To signify that a road has no lane markings, it is recommended to use an explicit tag like lane_markings=no or similar instead of an odd value for the lanes=* key like 0, 1.5 or none because the latter is ambiguous and may not be processed correctly by data consumers.
For narrow roads (without marked lanes) in particular, it is very useful to tag the width=* of the road, see below.
There exist roads with no marked lanes, which are two-way roads but without marked lanes and so narrow, that vehicles must slow down to pass each other. It is strongly recommended in such a case to tag the width of the carriageway using width=* (Note: do not mistake this with maxwidth=*). If the width varies a lot, the minimum width of the carriageway should be specified. If it is not possible or reasonable to determine the exact width, use an estimation and tag additionally source:width=estimated, e.g. as follows:
|lanes=2||A two-way residential road with two lanes. Consider additional tagging with parking:lane=*.|
|lanes=2 on the first line
lanes=2 on the second line
Each direction individually
|A dual 2-lane highway, represented by two ways as there is a physical divider between them (each with oneway=yes).|
|Two-way road without marked lanes, but it has 1 lane in each direction. White markings on sides are delineators indicating boundary of the road. These lines do not, however, mark the individual lanes, only the edge of the road, so lane_markings=no should be used.|
|A narrow two-way road without marked lanes and with an estimated width of four metres. It is not qualifying for tagging as road with two lanes as there is not enough space for vehicles to comfortably pass each other.|
|highway=passing_place (on the node)||A passing place on a road.|
|A cycleway with two marked lanes.|
depending on the country.
|A road with two lanes and a median. Depending on the country, special road restrictions may apply to the middle lane. If the middle lane can be considered a separate lane, using the suffix |
Assuming the OSM way runs from left to right
|A road with five lanes, whereas three lanes run in forward direction, i.e. in the same direction as the OSM way. The turning lanes should be tagged using turn=* on the way.|
lanes:bus:conditional=1 @ (Mo-Fr 07:00-19:00)
|A road with three lanes where the rightmost lane is dedicated to buses at the given time. The merging of the leftmost lane should be tagged with the key turn=*. See the article Conditional restrictions for an detailed explanation of the :conditional suffix.|
If for a two way road only the total lane count is tagged and this number is even, it is assumed that the lanes are allocated evenly to both driving directions (e.g. lanes=6 assumes the road has 3 lanes for each direction).
Although it is advisable to always add the lanes tag to roads with lanes, as usual data will be sometimes missing. It is usually reasonable for data consumer to try guessing. Data consumer may make any guesses, but following assumptions often work well:
|2||1||If the actual number of lanes is equal to the given assumption, the lane count is usually not tagged.|
|1||1||If the actual number of lanes is equal to the given assumption, the lane count is usually not tagged.|
|These should usually be mapped as two separate ways||2 or more||The actual number of lanes should always be tagged.|
Displaying the number of lanes
- To view the number of lanes in JOSM, a Lane and road attributes style is available. Alternatively, its routes plugin can be used with this lane coloring example.
- These Maperitive lane rules renders highway widths, lanes and offsets based on lanes=* and placement=*.
- OpenStreetMap detailed overlays generates a road overlay with lanes, cycleways, parking, and sidewalks rendered at higher zooms (16+). A slippy map version is available online.
- width=* for tagging the width of the carriageway
- source:width=* for specifying the source of the width
- access=* for transport modes and additional access restrictions
- parking:lane=* for parking lanes
- turn=* for turning lanes
- highway=passing_place for passing places
- shoulder=* pro krajinici
- Tagging of individual lanes and their properties
- Relation for linking the lanes of two road segments
- Abandoned proposal for turnlanes relation to describe complex geometry of lanes, supported by JOSM "turnlanes" plugin
- Abandoned proposal for lane tagging system using different delimiters
- Proposal for tagging the number of tracks of railways
- Proposal for the suffix :both_ways
- Proposed_features/lanes_General_Extension -
:lanes- Specify properties for each lane of a way
- Discussion on tagging
- Discussion on tagging, before the cleanup of this article in April 2012
- see discussion from June 2019 on tagging mailing list ( https://lists.openstreetmap.org/pipermail/tagging/2019-June/046002.html ) and discussion on German forum from September 2019 ( https://forum.openstreetmap.org/viewtopic.php?id=67330 ), additionally several remarks on the discussion page. The change to explicitly mentioning "marked" was made 2014 as result of another discussion in the German forum but not from anywhere else.