Changes between Version 55 and Version 69 of Styles/Lane_and_Road_Attributes


Ignore:
Timestamp:
(multiple changes)
Author:
(multiple changes)
Comment:
(multiple changes)

Legend:

Unmodified
Added
Removed
Modified
  • Styles/Lane_and_Road_Attributes

    v55 v69  
    11[[TranslatedPages]]
    22[[PageOutline(2-10)]]
    3 = [[Image(icon.svg,36,middle)]] Lanes and Road Attributes mappaint style
     3= [[Image(icon.svg,48,link=,middle,inline,margin-right=20)]] Lanes and Road Attributes mappaint style
    44
    55This style visualizes a number of lane and road specific attributes. Namely common variants of the following tags are considered:
    66* [[osmwiki:Key:lanes|lanes]]: Number of lanes for motorized traffic.
    7 * [[osmwiki:Key:width|width]]: The width of the carriageway. Lane-dependent width using width:lanes is fully supported.
     7* [[osmwiki:Key:width|width]]: The width of the carriageway. Lane-dependent width using `width:lanes` is fully supported.
    88* [[osmwiki:Key:change|change]]: Allowed resp. forbidden lane changes.
    99* [[osmwiki:Key:turn|turn]]: Indication of turning lanes, including preliminary support for values hook_right and hook_left (this might change!)
    10 * [[osmwiki:Key:cycleway|cycleway]]: Only cycle tracks are supported if specified with cycleway. Cycle lanes need bicycle:lanes=...|designated|... to be visible.
     10* [[osmwiki:Key:cycleway|cycleway]]: Only cycle tracks are supported if specified with cycleway. Cycle lanes need `bicycle:lanes=...|designated|...` to be visible.
    1111* [[osmwiki:Key:bicycle|bicycle:lanes]]: Dedicated bicycle lanes.
    1212* [[osmwiki:Key:bus|bus:lanes]]: Dedicated bus lanes.
     
    1919* [[osmwiki:Proposed_features/highway=junction|highway=junction]]: Can be used to indicate the outline of a junction and group together all features of it.
    2020* [[osmwiki:Relation:enforcement|Relation enforcement]]: The to and from members of such relations are highlighted
    21 * [[osmwiki:Key:traffic_sign|traffic_sign]]: Traffic signs for speed limits and overtaking are displayed if tagged with traffic_sign=maxspeed/overtaking and maxspeed=<limit> resp. overtaking=yes/no. The value implicit for maxspeed is interpreted as the end of the speed limit. Combinations like traffic_sign=maxspeed;overtaking are also supported.
     21* [[osmwiki:Key:traffic_sign|traffic_sign]]: Traffic signs for speed limits and overtaking are displayed if tagged with `traffic_sign=maxspeed/overtaking` and `maxspeed=<limit>` resp. `overtaking=yes/no.` The value implicit for `maxspeed` is interpreted as the end of the speed limit. Combinations like `traffic_sign=maxspeed;overtaking` are also supported.
    2222* [[osmwiki:Key:hov|hov:lanes]]: Dedicated HOV lanes. The minimum requirement can be specified by hov:minimum (supported values: 2 and 3)
    2323* [[osmwiki:Relation:destination_sign|Relation destination_sign]]: Experimental and very limited support!
    2424* [[osmwiki:Key:driving_side|driving_side]]: Used to specify the driving side of the traffic. This is only supported on ways.
     25* [[osmwiki:Key:railway|railway]]: Tracks of railways are rendered with limited support for gauge, embedded and electrified.
     26* [[osmwiki:Key:transit|transit]]: Specify how a lane continues in the next road segment. Only verification of valid values!
    2527
    2628Furthermore:
    27 * Common suffixes like :forward, :backward, :left, :right: and :both as well as the proposed :both_ways (for lanes in both directions) are supported where appropriate.
     29* Common suffixes like `:forward`, `:backward`, `:left`, `:right` and `:both` as well as the proposed `:both_ways` (for lanes in both directions) are supported where appropriate.
    2830* Some common tagging errors are detected and displayed, e.g. inconsistent number of lane-dependent values and typos in the keys turn and change.
    29 * The style also supports '''left-hand traffic'''; see section Settings.
    30 
    31 Use the [[Help/Dialog/MapPaint|Map Style Dialog]] to download and activate the style. A good starting point to see it in action is the [osmwww:#map=14/47.0705/15.4353 area around Graz in Austria].
     31* The style also supports '''left-hand traffic'''; see section Settings, below.
     32
     33Use the register [[JOSMImage(dialogs/mapstyle,24,link=,middle)]] [wikitr:/Help/Preferences/MapPaintPreference Map Paint Styles] in [[JOSMImage(preference)]] [wikitr:/Help/Action/Preferences Preferences] to download and activate the style. A good starting point to see it in action is the [osmwww:#map=14/47.0705/15.4353 area around Graz in Austria].
    3234
    3335To '''report bugs or provide feedback''' send [[osmwiki:User:Imagic|me a message]].
    3436
    3537== Settings
    36 Some settings of the style can be configured using Edit -> Preferences -> Display settings -> Colours. All settings start with mappaint.lane.and.road.attributes. Settings that contain the text "boolean" treat white as yes and any other color as no. Settings that contain the text "opacity" use the lightness to specify the opacity (the values for transparency or alpha are completely ignored!)
    37 * The settings '''carriage.way.backward''', '''carriage.way.forward''' and '''carriage.way.both_ways''' specify the colour of the respective lanes.
    38 * The settings '''sidewalk''', '''cycletrack''' and '''combined.sidewalk.and.cycletrack''' specify the colour of the sidewalk, a cycletrack and a combined sidewalk and cycletrack
    39 * If '''boolean.right.hand.traffic''' is set to white, lanes are rendered for right hand traffic, if set to black for left hand traffic and if set to anything else (which is now the default) the right- and left-hand traffic database from JOSM is used to automatically determine the side.
    40 * If '''boolean.use.svg.for.turning.markings''' is set to white, the markings for turning lanes are rendered more precisely. '''If you run into memory problems, set this to black.''' If this is set to black, the setting '''integer.png.turn.variant''' can be used to specify which set of png images should be used for turn markings. Currently two sets are supplied (value 000000 and 000001).
    41 * The settings '''opacity.lane''', '''opacity.markings''' and '''opacity.sidewalk''' specify the opacity of the lane background, road markings and the sidewalk background. If set to white they are opaque; if set to black they are completely transparent, any grey setting in between is treated an appropriate opacity.
     38Some settings of the style can be configured in [[JOSMImage(preference)]] [wikitr:/Help/Action/Preferences Preferences] in [[JOSMImage(preferences/color,24,link=,middle)]]  [wikitr:/Help/Preferences/ColorPreference Colors] or in [wikitr:/Help/Preferences/Advanced Advanded preferences]. All settings start with **`Paint Style Lane and Road Attributes: `**, respectively, **`clr.mappaint.lane and road attributes.`**. Settings that contain the text **`Boolean_`** treat `white` (`#FFFFFF`) as `yes` and any other color as `no`. Settings that contain the text **`Opacity_`** use the lightness to specify the opacity (the values for `transparency` or `alpha` are completely ignored!)
     39* The settings **`Carriage_way_backward`**, **`Carriage_way_forward`** and **`Carriage_way_bothways`** specify the color of the respective lanes.
     40* The settings **`Sidewalk`**, **`Cycletrack`** and **`Combined_sidewalk_and_cycletrack`** specify the color of the sidewalk, a cycletrack and a combined sidewalk and cycletrack
     41* **`No_access`** sets the color of the dashes if lane's value in `access:lanes[:forward/backward/both_ways]=*` is `no`
     42* If **`Boolean_right_hand_traffic`** is set to `white` (`#FFFFFF`), lanes are rendered for right hand traffic, if set to `black` (`#000000`) for left hand traffic and if set to anything else (which is now the default) the right- and left-hand traffic [wikitr:/left-right-hand-traffic database] from JOSM is used to automatically determine the side.
     43* If **`Boolean_use_svg_for_turning_markings`** is set to `white`, the markings for turning lanes are rendered more precisely. **If you run into memory problems, set this to `black`**.
     44 * If this is set to `black`, the setting **`Integer_PNG_turn_variant`** can be used to specify which set of png images should be used for turn markings. Currently two sets are supplied (value `#000000` and `#000001`).
     45* If **`Boolean_use_svg_for_destination`** is set to `white`, the destination texts are rendered more smoothly.
     46* The settings **`Opacity_lane`**, **`Opacity_markings`** and **`Opacity_sidewalk`** specify the opacity of the lane background, road markings and the sidewalk background. If set to `white` they are opaque; if set to `black` they are completely transparent, any `grey` setting in between is treated an appropriate opacity.
     47* If **`Boolean_show_warning`** is set to `white` warnings about `:lanes` tags are rendered
     48* If **`Boolean_show_error`** is set to `white` error about `:lanes` tags are rendered
     49* If **`Boolean_show_disputed`** is set to `white`, disputed warnings about non numerical values for `maxspeed` and missing tag `source:maxspeed` or its value not in format `<country code>:<context>` are rendered.
     50
    4251
    4352== Known limitations/bugs
    44 * [[ticket:8429|A bug in JOSM]] leads sometimes to rendering artefacts.
     53* [[ticket:8429|A bug in JOSM]] leads sometimes to rendering artifacts.
    4554* Left-hand traffic is nearly untested. Please provide feedback.
    46 * Roads with oneway=-1 may lead to incorrect results. Please provide feedback.
    47 * change:lanes without suffix is currently only supported on one-ways and for the special case of change:lanes=no|no.
     55* Roads with `oneway=-1` may lead to incorrect results. Please provide feedback.
     56* `change:lanes` without suffix is currently only supported on one-ways and for the special case of `change:lanes=no|no`.
    4857* In forward and backward direction a maximum of eight lanes and for lanes in both directions a maximum of four lanes is displayed.
     58* `turn:lanes` (without `forward` or `backward`) is only used when combined with `oneway=yes`.
     59* Width as shown in the mapview is not accurate (#8588)
    4960
    5061== Acknowledgments
     
    5465
    5566== Preset
    56 An appropriate preset for lane attributes is available at [wiki:Presets/LaneAttributes Lane Attributes].
     67An appropriate preset for lane attributes is available at [wikitr:/Presets/LaneAttributes Lane Attributes].
    5768
    5869== Screenshot
    59 [[Image(Screenshot_Style_Lane_and_Road_Attributes.jpeg)]]
     70[[Image(Screenshot_Style_Lane_and_Road_Attributes.jpeg,link=)]]
    6071
    6172== Code
     
    6879    title: "Lane and road attributes";
    6980    description: "Visualization of lanes, width, turn lanes, changing the lane, destination, lighting and street lamps, sidewalk, cycletracks, bicycle lanes, bus lanes, psv lanes.";
    70     link: "http://josm.openstreetmap.de/wiki/Styles/Lane_and_Road_Attributes";
     81    link: "https://josm.openstreetmap.de/wiki/Styles/Lane_and_Road_Attributes";
    7182    author: "Martin Vonwald";
    72     version: "2.9-[[revision]]_[[date]]";
     83    version: "2.10-[[revision]]_[[date]]";
    7384    license: "CC-BY-SA";
    7485    icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNyAxOCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTM4NSAtNTI0LjM2KSI+PHBhdGggZmlsbD0iIzIwMmQyMCIgZD0ibSAzODUgNTI0LjM2IGggMTcgdiAxOCBoIC0xNyB6Ii8+PGcgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLXdpZHRoPSIxLjgiPjxwYXRoIGQ9Im0gMzg3LjUgNTI1LjI2IHYgMTYuMiIgc3Ryb2tlPSIjZTRlN2U0Ii8+PHBhdGggZD0ibSAzOTkuNSA1MjUuMjYgdiAxNi4yIiBzdHJva2U9IiNlNWU3ZTUiLz48L2c+PHBhdGggZD0ibSAzOTMuNSA1MjYuMzYgdiA0IiBzdHJva2U9IiNlNWU3ZTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjciLz48L2c+PHBhdGggZD0ibSAzOTMuNSA1MzUuMzYgdiA0IiBmaWxsPSIjZTRlN2U0IiBzdHJva2U9IiNlNWU3ZTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjciLz48L2c+PC9zdmc+";
     
    8091    title: "Fahrspur- und Straßenattribute";
    8192    description: "Anzeige von Fahrspuren, Breite, Abbiegespuren, Spurwechsel, Zielangaben, Beleuchtung inkl. Straßenlampen, Gehsteig/Bürgersteig, Radwege, Fahrradspuren, Busspuren, Öffi-Spuren.";
    82     link: "http://josm.openstreetmap.de/wiki/De:Styles/Lane_and_Road_Attributes";
     93    link: "https://josm.openstreetmap.de/wiki/De:Styles/Lane_and_Road_Attributes";
    8394}
    8495
     
    16671678}
    16681679
    1669 
     1680/**
     1681 * Convert width to meters
     1682 */
     1683way[width=~/^(\d+)'$/] {
     1684  road_width: 0.3048 * get(regexp_match("^(\\d+)'$", tag(width)), 1);
     1685}
     1686way[width=~/^(\d+)"$/] {
     1687  road_width: 0.0254 * get(regexp_match("^(\\d+)\"$", tag(width)), 1);
     1688}
     1689way[width=~/^(\d+)'(\d+)"$/] {
     1690  _match: regexp_match("^(\\d+)'(\\d+)\"$", tag(width));
     1691  road_width: 0.3048 * get(prop(_match), 1) + 0.0254 * get(prop(_match), 2);
     1692}
     1693way[width=~/^(\d+)(\.\d+)?$/] {
     1694  road_width: tag(width);
     1695}
    16701696/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
    16711697/* Determine the width of the lanes, road markings and the inner lane width                                                                        */
     
    16741700{
    16751701    lane_min_width: 4;
    1676     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((prop(pixel_per_metre,"default")*tag(width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
     1702    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    16771703    change_allowed: list(6,9);
    16781704    road_marking_width: 1;
     
    16831709{
    16841710    lane_min_width: 8;
    1685     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((prop(pixel_per_metre,"default")*tag(width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
     1711    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    16861712    change_allowed: list(12,18);
    16871713    road_marking_width: 2;
     
    16921718{
    16931719    lane_min_width: 8;
    1694     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((prop(pixel_per_metre,"default")*tag(width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
     1720    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    16951721    change_allowed: list(24,36);
    16961722    road_marking_width: 2;
     
    17011727{
    17021728    lane_min_width: 8;
    1703     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((prop(pixel_per_metre,"default")*tag(width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
     1729    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    17041730    change_allowed: list(48,72);
    17051731    road_marking_width: 2;
     
    17101736{
    17111737    lane_min_width: 12;
    1712     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((prop(pixel_per_metre,"default")*tag(width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
     1738    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    17131739    change_allowed: list(96,144);
    17141740    road_marking_width: 4;
     
    17191745{
    17201746    lane_min_width: 20;
    1721     lane_default_width: eval(max(prop(lane_min_width),(has_tag_key(width)?((prop(pixel_per_metre,"default")*tag(width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
     1747    lane_default_width: eval(max(prop(lane_min_width),(is_prop_set(road_width)?((prop(pixel_per_metre,"default")*prop(road_width))/prop(lanes_all)):(3*prop(pixel_per_metre,"default")))));
    17221748    change_allowed: list(192,288);
    17231749    road_marking_width: 6;
     
    32223248/***************************************************************************************************************************************************/
    32233249/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     3250/* Railway rendering                                                                                                                               */
     3251/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     3252/***************************************************************************************************************************************************/
     3253way|z18-[railway=rail]::Railway_Way,
     3254way|z18-[railway=light_rail]::Railway_Way,
     3255way|z18-[railway=subway]::Railway_Way,
     3256way|z18-[railway=miniature]::Railway_Way,
     3257way|z18-[railway=tram]::Railway_Way
     3258{
     3259    /* Determine gauge (safety limits: 1 - 10000 mm) */
     3260    rail_gauge_list: eval(has_tag_key("gauge")?split(";",tag("gauge")):list(1435));
     3261    rail_gauge: eval(get(prop(rail_gauge_list),length(prop(rail_gauge_list))-1));
     3262    rail_gauge: eval(min(10000,cond(prop(rail_gauge)<1,1435,prop(rail_gauge))));
     3263 
     3264    /* Ties should be rendered in case standard and miniature railways; this might be override by the key embedded */
     3265    rail_show_ties: eval(cond(((tag("railway")=="rail") || (tag("railway")=="miniature")),yes,no));
     3266    rail_show_ties: eval(cond(has_tag_key("embedded"),cond(tag("embedded")=="no",yes,no),prop(rail_show_ties)));
     3267
     3268    /* Type of electrification:  */
     3269    /*    * rail -> show a yellow border on one rail */
     3270    /*    * contact_line -> show a contact line near the middle of the track */
     3271    rail_show_contact_line: eval(cond(has_tag_key("electrified"),cond(tag("electrified")="contact_line",yes,no),no));
     3272    rail_electrified_rail: eval(cond(has_tag_key("electrified"),cond(tag("electrified")="rail",yes,no),no));
     3273   
     3274    /* Make rails transparent within tunnels */
     3275    rail_image_opacity: eval(cond(((has_tag_key("tunnel")) && (tag("tunnel")=="yes")),0.2,0.8));
     3276   
     3277    /* Create image */
     3278    rail_image: eval(concat(
     3279                cond(prop(rail_show_ties),"<rect x='0' y='0' width='8' height='80' style='stroke:#301004; fill:#90300C;'/>",""),
     3280                "<line x1='0' y1= '8' x2='32' y2= '8' style='stroke:",cond(prop(rail_electrified_rail),"#FFFF00","#301004"),";'/>",
     3281                "<line x1='0' y1='10' x2='32' y2='10' style='stroke:#602008;stroke-width:3px'/>",
     3282                "<line x1='0' y1='12' x2='32' y2='12' style='stroke:#301004;'/>",
     3283                "<line x1='0' y1='67' x2='32' y2='67' style='stroke:#301004;'/>",
     3284                "<line x1='0' y1='69' x2='32' y2='69' style='stroke:#602008;stroke-width:3px'/>",
     3285                "<line x1='0' y1='71' x2='32' y2='71' style='stroke:#301004;'/>",
     3286                cond(prop(rail_show_contact_line),"<line x1='0' y1='35' x2='32' y2='35' style='stroke:#060200;'/>","")
     3287                ));   
     3288    repeat-image: concat("data:image/svg+xml,<svg width='32px' height='80px'><g fill-opacity='",prop(rail_image_opacity),"' opacity='",prop(rail_image_opacity),"'>",prop(rail_image),"</g></svg>");
     3289    repeat-image-height: eval(max(2,ceil((prop(rail_gauge)*prop(pixel_per_metre,"default"))*0.0012)));
     3290}
     3291
     3292/***************************************************************************************************************************************************/
     3293/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
    32243294/* Extra rendering for footways/cycleways if not already rendered                                                                                  */
    32253295/*-------------------------------------------------------------------------------------------------------------------------------------------------*/
     
    35393609
    35403610/* Now render the traffic sign */
    3541 node|z16-[!(prop(traffic_sign_svg)="")]
    3542 {
     3611node|z16-[!(prop(traffic_sign_svg,"default")="")]
     3612{
     3613    major-z-index: 5; /* JOSM added some default rendering, which interferes with this */
    35433614    icon-image: eval(concat("data:image/svg+xml,<svg width='100px' height='",prop(traffic_sign_top),"'>",prop(traffic_sign_svg),"</svg>"));
    35443615    icon-width: eval(max(12,prop(pixel_per_metre)));
     3616}
     3617
     3618/* Disable JOSMs default rendering (this is a hack and may fail at any time) */
     3619/* Make sure, that the selector is identical to the one that actually renders the traffic sign */
     3620node|z16-[!(prop(traffic_sign_svg,"default")="")]::core_maxnodebg
     3621{
     3622    symbol-shape: none;
     3623}
     3624node|z16-[!(prop(traffic_sign_svg,"default")="")]::core_maxnodefg
     3625{
     3626    text: none;
     3627    symbol-shape: none;
    35453628}
    35463629
     
    36033686way[destination:lanes:backward=~/,/]            { data_error:   "use ; instead of , to separate values"; }
    36043687
    3605 way["transit"] { data_error: eval(regexp_test("^(continue|split|split:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;)*$",tag("transit"))?prop(data_error):"invalid transit value"); }
    3606 way["transit:forward"] { data_error: eval(regexp_test("^(continue|split|split:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;)*$",tag("transit:forward"))?prop(data_error):"invalid transit:forward value"); }
    3607 way["transit:backward"] { data_error: eval(regexp_test("^(continue|split|split:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;)*$",tag("transit:backward"))?prop(data_error):"invalid transit:backward value"); }
    3608 way["transit:lanes"] { data_error: eval(regexp_test("^(continue|split|split:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;|\\|)*$",tag("transit:lanes"))?prop(data_error):"invalid transit:lanes value"); }
    3609 way["transit:lanes:forward"] { data_error: eval(regexp_test("^(continue|split|split:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;|\\|)*$",tag("transit:lanes:forward"))?prop(data_error):"invalid transit:lanes:forward value"); }
    3610 way["transit:lanes:backward"] { data_error: eval(regexp_test("^(continue|split|split:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;|\\|)*$",tag("transit:lanes:backward"))?prop(data_error):"invalid transit:lanes:backward value"); }
     3688way["transit"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;)*$",tag("transit"))?prop(data_error):"invalid transit value"); }
     3689way["transit:forward"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;)*$",tag("transit:forward"))?prop(data_error):"invalid transit:forward value"); }
     3690way["transit:backward"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;)*$",tag("transit:backward"))?prop(data_error):"invalid transit:backward value"); }
     3691way["transit:lanes"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;|\\|)*$",tag("transit:lanes"))?prop(data_error):"invalid transit:lanes value"); }
     3692way["transit:lanes:forward"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;|\\|)*$",tag("transit:lanes:forward"))?prop(data_error):"invalid transit:lanes:forward value"); }
     3693way["transit:lanes:backward"] { data_error: eval(regexp_test("^(continue|fork|fork:[3-9]|new_on_left|new_on_left:[2-9]|new_on_right|new_on_right:[2-9]|join_with_left|join_with_right|end|leave|;|\\|)*$",tag("transit:lanes:backward"))?prop(data_error):"invalid transit:lanes:backward value"); }
    36113694way["transit:both_ways"]                        { data_error:   "use the relation instead of transit:both_ways"; }
    36123695way["transit:lanes:both_ways"]                  { data_error:   "use the relation instead of transit:lanes:both_ways"; }