Proposal:Traffic signal details
Traffic signal details | |
---|---|
Proposal status: | Draft (under way) |
Proposed by: | ManuelB701 |
Tagging: | traffic_signal=*
|
Applies to: | node |
Definition: | Detailed tagging of traffic signals |
Statistics: |
|
Draft started: | 2025-06-11 |
Proposal
The proposal expands the way one is able to tag the individual traffic signals on OSM. Goal of it is to denote the existence of traffic signals for certain vehicle modes, which states the signals can be, which signals effect only a certain direction and alongside a couple other additions.
Rationale
The tagging for traffic signals is currently limited because one is only able to tell that a traffic signal exist and for what it's used for but not the states, directions and for which vehicles it applies.
For this reason, the proposal adds additional tags for traffic signals.
In rare cases, a signal only applies to non-general traffic such as a traffic signal which only applies for a bus but not for other vehicles (e.g. access to a bus-only road).
In addition, the tagging also is beneficial for OpenRailwayMap because multiple (tram) signals are often placed next to each other (e.g. one for each turn) and allow for tagging in greater details.
Tagging
The tagging is a mixture of turn tagging, transport mode suffixes and lane tagging.
In general. The individual signals are separated the following:
|
is the group separator (a group being signals which affect a single lane only): Used to denote the individual signals on a per-lane basis;
is the head separator (a "head" being a collection of multiple lights): Differentiates the individual signals for a single lane (or for all lanes if no group separator exists).,
is the unit separator: Further classifies a single signal such as which states it has or which lights are installed.
To specify, here is a list of tags to formulate:
traffic_signals:<traffic_mode>
- Denotes which signals are designated for which traffic mode. For example, if a bicycle signal exists, you use traffic_signal:bicycle and if one for buses exist, you use traffic_signal:bus instead. traffic_signal:vehicle also is valid and is used in specific cases to tell that certain lanes lack general vehicle lights (e.g. bus-only lanes).
Valid values areno
(lack of signal) andyes
(signal dedicated to a mode)—there is nodesignated
noronly
and any instance thereof should be replaced byyes
if not replaced altogether.traffic_signals[:<traffic_mode>]:states
- Contains the different states a signal can be in (when active). Keep in mind that deactivated also is a state since not all signals are active all the time (e.g. an emergency signal which is off by default). Accepts generic values such asgo
,stop
andoff
but country-specific values with their codes also are valid and may be preferred.
The individual states are comma separated.
traffic_signals[:<traffic_mode>]:turn
- Denote the turn arrows for the individual signals with values similar toturn=*
. If a single signal has multiple arrows, separate them by commas (this is because multiple signals can be placed next to each other). Default isnone
Note that this tagging is separate from turn lanes the signals are connected to a highway because not all signals have all turn lanes installed e.g. a general signal which effects a through and right turn lane is tagged without this key (it also simplifies the data consumption).traffic_signals:fallback
- Used to denote a fallback in case the signals have been disabled or is faulty and to avoid double penalties because of separately enteredhighway=traffic_signals
and ahighway=give_way
/highway=stop
. Possible values includenone
,give_way
andstop
. Default is country dependent.- In general, the need to specify a certain direction depends on the connected highway: It can be dropped if the signals are unidirectional (e.g. installed on a one-way or
traffic_signal:direction=*
isn’tboth
) or if the signals are the same for both directions. In a very unlikely situation where there are different set of lights in both directions, one can suffix the differences with :forward and :backward.
Other tags (partially inspired by OpenRailwayMap:
traffic_signals[:<traffic_mode>]:PT_priority=requested;off
- Denotes the existence of a priority signal for buses. This should only be used on thehighway=traffic_signal
which can show the signal request state, not the signals which affects the signal request (see also OpenRailwayMap/Tagging Trams in Germany).
bus or psv
Depending on how the local laws, bus signals aren't exclusive to buses because they also apply to other vehicles on that lane such as taxis.
- In Germany, bus signals also are valid for taxis if they're permitted onto a bus lane so the preferred tagging for them is
psv
[1]
Known limitations
This tagging only works properly on separately mapped signals and for signals on linear ways because these are unambiguous. For traffic signals which have been mapped at an intersection node, this tagging cannot work because the individual states are too ambiguous i.e. one cannot determine which tags apply to which signal.
Examples

Tagging:
highway=traffic_signals
traffic_signals:psv=yes
traffic_signals:psv:states=DE-BOStrab:F1;DE-BOStrab:F0
traffic_signal:psv:PT_priority=requested;off
traffic_signals:bicycle=yes
More to come...
Features/Pages affected
highway=traffic_signals
traffic_signals:turn=*
- (already created in preparation to and older proposal)traffic_signals:states=*
- Relevant traffic modes such as
traffic_signals:bus=*
andtraffic_signals:bicycle=*
External discussions
Comments
Please comment on the discussion page.