User:Fkv/lane mapping draft

From OpenStreetMap Wiki
Jump to navigation Jump to search

This approach aims to separate lane definitions, lane properties, and routing properties.


  • Allow lanewise routing.
  • Allow display of lanes and other parts of a road on navigation devices, VR applications, etc.
  • Allow routing not only for motor vehicles, but for cyclists, pedestrians, and others too.
  • Avoid relations.
  • Get along with few tags and concise values.


  • Be intelligible to everyone without looking at documentation.


lane definition

This syntax is derived from [1]. Lanes are ordered from left to right, looking in way direction.

lanes=[<separator>] <lane> [<separator>...] ...
<lane> = <lane_value> ["+" <lane_value> ...]
<lane_value> = {<unidirectional_value> | <bidirectional_value> | <parking>} [<timespec>]
<unidirectional_value> = n | l | sl | s | sr | r | a | d | c | b | t | w ... Normal/Left/SlightLeft/Streight/SlightRight/Right/Acceleration/Deceleration/biCycle/Bus/Taxi/railWay(or tramWay)
     - lower case for way direction, upper case for opposite direction
    - the distincion n/s/sl/s/sr/r/a/d matters for displaying, not for routing
<bidirectional_value> = p
<parking> = P [<degrees>]
<timespec> = "[" <value as in opening_hours=*> "]"

<separator>= one of the following:
   . ... no visible lane separation
   , ... guidance (Leitlinie) or hazard warning line (Warnlinie), lane change or overtaking permitted
   | ... continuous line (Sperrlinie), lane change prohibited
   ,| ... dashed + continuous line, overtaking permitted from left side
   |, ... continuous + dashed line, overtaking permitted from right side
   || ... double continuous line, lane change prohibited
   # ... hatched area (Sperrfläche), no usage permitted
   <> ... (angle brackets are literals) unspecified constructional lane separation
   <grass> ... (angle brackets are literals) separated by grass verge; instead of "grass" any barrier=* or surface=* value is permitted

lane properties

shorthand writing

Values are separated by commas.

per-lane writing

connecting lanes for lane-wise routing

Only lanes with traffic in respective direction are taken into account.

lane_matching=<lane> [ "," ...]
<lane>=[<target_road_lanes> ["/" ...]]
<target_road_lanes>=[<way_nr>] ["." <lane_nr> ["+" ...]]
<way_nr> ... 0=U-turn, 1=mostleft continuation, 2=second left, etc., default is 1
<lane_nr> ... 1=mostleft lane, 2=second left lane, etc., default ist all

For opposite to way direction, lane_matching:backward=* is used.