Proposal:Road marking revision
Road marking revision | |
---|---|
Proposal status: | Voting (under way) ![]() |
Proposed by: | Supaplex030 |
Tagging: | road_marking=* stroke=* pattern=* arrow=* symbol=*
|
Applies to: | ![]() ![]() ![]() |
Definition: | Improving existing approaches for mapping road markings as separate features. |
Statistics: |
|
Draft started: | 2025-04-18 |
RFC start: | 2025-06-01 |
Vote start: | 2025-06-27 00:00:00 (UTC) |
Vote end: | 2025-07-10 23:59:59 (UTC) |
Proposal


Road markings are a common part of roads all over the world. Even though road markings are not one of the "typical" things we map in OSM (since we mostly capture their meaning rather than the markings themselves), there are situations or needs where explicitely mapping them with OSM is helpful.
For some time now, there has been a wiki page with suggestions for road marking values, which were initially used by a single mapper. The suggested values do not seem to follow any particular system, but are a collection of rather overspecific values merging function and styling of markings. Nevertheless this tagging is used continuously, especially for mapping stop lines (of which over 35,000 have already been mapped using this scheme). The aim of this proposal is to reorganize the road markings scheme by introducing easier to use categories, making it more applicable to mappers and data consumers.
Note: Usually it is not necessary to map road markings as separate features, as long as their meaning is reflected in the data through appropriate tags. Typical tags that are indicated by road markings are turn:lanes=*
, overtaking=*
, change=*
or crossing:markings=*
, for example. The presence of lane markings on a road can be specified with lane_markings=*
on the highway line (as well as the number of lanes themselves by counting lanes=*
).
Even for rendering, using the tags mentioned above in combination with further information like placement=*
or width:lanes=*
is sufficient to render exactly representations of road markings. Nevertheless, there may be situations in which it makes sense for some mappers to explicitly map road markings (as the increasing use of the existing schema shows). One use case could be, for example, the cartographic representation of intersections or other complex roadway situations, which up to now can only be represented in OSM in a highly generalized form without being able to identify the detailed layout of the roadway areas.
Rationale
The existing in-use documentation of the road_marking=*
key unsystematically lists a large number of different values that describe the type and appearance of markings very specifically (e.g. dashed_yield_line
or solid_stop_line
). The open-ended approach makes it difficult to interpret the values, in some cases even colors are used as part of the value "in the wild". The list would become longer and less interpretable over time if usage grows in countries all over the world with their different types and styles of road markings. On the other hand, there are suggested values like dash
that are also hard to interpret because they could be lane, centerline, edge or crossing lines, for example.
Therefore, this proposal aims to categorize road markings into more generic classes and provide a set of additional attributes to further describe their style and meaning. One difficulty in categorizing road markings is that it can be based either on the function of a marking (e.g. stop line, lane divider, edge of carriageway, crossing edge...) or on its design (dashed line, double solid line, shark's teeth...). Both classifications have advantages and disadvantages, e.g. the design is identifiable even if the meaning is not known. Data users, on the other hand, may be more interested in the function (e.g. distinguishing between solid stop lines and solid lane dividers). This proposal tries to avoid the conflict by proposing functionally oriented, but very generic values that are easy to identify and can be specified using sub-tags.
Tagging / How to map
The road markings key is intended for mapping road markings as separate features, i.e. with their own geometry (and not, for example, on a highway line).[note 1]
Depending on the category, road markings can be mapped as lines, points or areas. Add road_marking=*
with one of the values listed below as well as further specifying tags if needed, e.g. for styles (line strokes, area patterns) and physical properties. In many cases, road markings have an influence on other tags, which should always be aligned (see the references in the table below).
If road markings are mapped in a location where the areas of roads and streets are also mapped with area:highway=*
, the road markings are always mapped in addition, i.e. "on" the carriageway areas.
Typical Values
Illustration | Value | Geometry | Description | Interdependence with other tags |
---|---|---|---|---|
Describing linear markings | ||||
![]() |
road_marking=stop_line
|
![]() ![]() |
A stop line e.g. in front of a traffic signal, traffic sign or (other) junctions. Can be mapped as a line following its real location, or alternatively as a point on the highway line. |
highway=stop highway=give_way highway=traffic_signals
|
![]() |
road_marking=lane_divider
|
![]() |
Lane markings to demarcate individual lanes.
|
lane_markings=* lanes=* change=* overtaking=*
|
![]() |
road_marking=edge_line
|
![]() |
Marking the edge/boundary of the carriageway.
|
|
![]() |
road_marking=crossing_edge
|
![]() |
Edge/border markings of pedestrian or cycleway crossings.
|
crossing:markings=*
|
Describing areal markings | ||||
![]() |
road_marking=restriction
|
![]() |
Neutral areas or restriction markings, like gore chevron or no-parking markings. |
parking:side parking:side: restriction=*
|
![]() |
road_marking=crossing
|
![]() |
The (areal) marking of a crossing to map the extent of crossing markings or colored surfaces in detail. Note: In general, tags like
|
crossing:markings=*
|
Describing symbolic markings | ||||
road_marking=arrow
|
![]() |
An arrow, usually to indicate turn directions, but also for indicate driving or oneway directions or overtaking hints. In contrast to other symbolic road markings, arrows are mapped as lines (instead of points) by most mappers. It is therefore recommended to map arrows as a simple line between two points corresponding to the length and direction of a single arrow with the line starting at the "foot" (base) of the arrow.
|
turn:lanes=*
| |
road_marking=traffic_sign
|
![]() |
An equivalent of a traffic sign applied as a road marking.
|
traffic_sign=* maxspeed=* hazard=*
| |
![]() |
road_marking=text
|
![]() |
Lettering on the road surface like "BUS", "SLOW" or "King St.".
|
lanes=* (like lanes:bus=* )access=* (like bus:lanes=* )hazard=*
|
![]() |
road_marking=symbol
|
![]() |
A symbol or pictogram applied as a road marking.
|
e.g. cycleway=*
|
Additional attributes
Stroke, pattern and symbol styling
Use the tags stroke=*
(for ways), pattern=*
(for areas), arrow=*
(for arrows) and symbol=*
(for symbols) to further describe the design of road markings:
stroke=*
Use stroke=*
to describe the style of linear road markings.
Some line attributes like stroke=sharks_teeth
are "directed" and therefore dependent on the line direction. In this case, the stroke elements are considered to "point to the right" from the line direction (in case of shark's teeth, the tips of the teeth point to the right).
Double lane markings with different stroke styles on each side can be specified with stroke:left=*
and stroke:right=*
(seen in the line direction).
-
stroke=solid
-
stroke=dashed
-
stroke=double_solid
-
stroke=double_dashed
-
stroke=sharks_teeth
Deprending on line direction. -
stroke=zigzag
pattern=*
Use pattern=*
to describe the style of areal road markings.
arrow=*
Use arrow=*
with the common values known from turn=*
to specify the form of an road_marking=arrow
(like left
, through
, through;right
, merge_to_left
, reverse
, ...). In rarer cases, arrow markings may also show icons known from restriction=*
(like no_u_turn
, no_right_turn
).
Examples:
symbol=*
Use symbol=*
to describe the style/form of symbolic road markings (road_marking=symbol
). Use a generic term such as bicycle
, pedestrian
, hov
(see hov=*
) or airport
(see also destination:symbol=*
). (Note: In this case, symbol=*
is used homonymously with the existing use of symbol=*
for the human readable equivalent of osmc:symbol=*
, describing route symbols that are used as waymarkers or on guideposts. In the context of road markings, however, symbol=*
fits ideally into existing schemes such as destination:symbol=*
.)
Examples:
Other additional attributes
There is a bunch of tags that can provide additional information describing the size or other physical properties of road markings:
width=*
, especially for linear road markings to distinguish narrow from wide markings,colour=*
, e.g. whether there arewhite
oryellow
markings,direction=*
on nodes to specify where the markings are facing to,length=*
on nodes to specify the size of symbolic road markings (besidewidth=*
).
Others could be added if needed, but aren't part of this proposal, like the technical form (paint, plastic/thermoplastic/tape, surface (like markings made from (paving) stones), studs) or, related to that, material=*
(plastic, metal, stone...).
Examples
![]() |
Shark's teeth stop lines at a junction. |
![]() |
Neutral area at an exit ramp forming a theoretical gore. |
![]() |
Marking at a bus stop to raise attention and prevent cars from stopping. |
![]() |
A pattern on a junction that can be driven over but it is not allowed to stop within it (see also box junction).
|
![]() |
Colored road surface on a bike lane, intended as a warning indicator on a crossing. |
![]() |
A yellow centerline with dashed lines on one side and a solid line on the other. Note: Do not use
|
![]() |
Wavy lane markings around a zebra crossing.
|
![]() |
Turn lanes marked with arrows... ...from left to right separated by lane markings... ...and two different neutral areas |
![]() |
Destination markings (arrow, text, symbol) near an intersection.
|
Footnotes
- ↑ The use of styling attributes to specify road markings on
highway=*
lines is out of scope of this proposal, but can be developed subsequently (e.g. the use oflanes=2
+lane_markings=yes
+lane_markings:stroke=dashed
).
External discussions
- Discussion page of the existing road_marking documentation.
- Newer discussion in the community forum about mapping junction and gore road markings.
- (RFC) Feature Proposal – Road marking revision
Comments
Please comment on the discussion page.
Voting
- Log in to the wiki if you are not already logged in.
- Scroll back down and click "Edit source" next to the title "Voting". Copy and paste the appropriate code from this table on its own line at the bottom of the text area:
To get this output | you type | Description |
---|---|---|
{{vote|yes}} --~~~~
|
Feel free to also explain why you support the proposal! | |
{{vote|no}} reason --~~~~
|
Replace reason with your reason(s) for voting no. | |
{{vote|abstain}} comments --~~~~
|
If you don't want to vote yes or no but do have something to say. Replace comments with your comments. |
~~~~
automatically inserts your name and the current date.For more types of votes you can cast, see Template:Vote. See also how vote outcome is processed.
I approve this proposal. --Pavvv (talk) 22:37, 27 June 2025 (UTC)
I approve this proposal. --Mueschel (talk) 07:21, 28 June 2025 (UTC)
I oppose this proposal. I can't see any real-world use case about this kind of micro-mapping that can't be handled through existing tags. And while I can see how standard values are necessary in general, it should be noted that nearly half of this key use are from two imports circa 2014 and 2017. Half of the key use nowadays is about a stop line or a give way, which can already respectively be mapped as
highway=stop
andhighway=give_way
. Right now I'd rather recommend against using this key if anything. --Lejun (talk) 11:15, 28 June 2025 (UTC)
- We have no relevance criteria at OSM for good reasons. So if you don't see any use cases in this tagging, then don't use it. Others obviously see them, otherwise they wouldn't have used this tagging. (I for example for renderings of intersections: example 1 | example 2.) --Supaplex030 (talk) 12:50, 28 June 2025 (UTC)
- @Lejun: One of the (stealth) imports you're referring to was mainly about stop lines at signalized intersections. However, these stop lines could not be represented as
highway=traffic_signals
due to the prominent local practice of staggered stop lines. – Minh Nguyễn 💬 21:01, 2 July 2025 (UTC)- I don't think rejecting a proposal for a physical feature makes sense, if the only criticism is "I cannot imagine a use case". --Dieterdreist (talk) 16:09, 3 July 2025 (UTC)
I approve this proposal. --Tordanik 13:22, 28 June 2025 (UTC)
I approve this proposal. --Broiledpeas (talk) 15:18, 28 June 2025 (UTC)
I approve this proposal. --Riiga (talk) 12:49, 30 June 2025 (UTC)
I approve this proposal. --Chris2map (talk) 15:20, 30 June 2025 (UTC)
I have comments but abstain from voting on this proposal. I feel like the micromapping is fairly complex and see limited use of it in general, especially. Certain features are very useful when added to existing features, however, such as on the highways themselves, stroke for
divider
andpattern
for the flush median proposal I drafted quite a while ago as well as certain other features like placingstop_line
nodes onto the ways (since they're sometimes further away than usual because of driveways or something). --ManuelB701 (talk) 09:43, 2 July 2025 (UTC)I approve this proposal. There are still some edge cases to iron out on the margins, like how to tag a crossing edge that doubles as a stop line (extremely common in California). Some raw tag values like
pattern=chessboard
will need translations into more idiomatic English (checkerboard or draughtboard) for editor preset fields. But overall this is a big step in the right direction compared to the messy table that we've been coping with for years now. I look forward to mass-retagging the import in my area that helped popularizeroad_marking=*
back in 2017. – Minh Nguyễn 💬 21:14, 2 July 2025 (UTC)I approve this proposal. --Dieterdreist (talk) 16:07, 3 July 2025 (UTC)
I approve this proposal. --Severin (talk) 08:01, 5 July 2025 (UTC)
I approve this proposal. --Marc Mongenet (talk) 10:17, 5 July 2025 (UTC)