Changes between Version 47 and Version 69 of Styles/Lane_and_Road_Attributes
- Timestamp:
- (multiple changes)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Styles/Lane_and_Road_Attributes
v47 v69 1 1 [[TranslatedPages]] 2 = Lanes and Road Attributes mappaint style 2 [[PageOutline(2-10)]] 3 = [[Image(icon.svg,48,link=,middle,inline,margin-right=20)]] Lanes and Road Attributes mappaint style 3 4 4 5 This style visualizes a number of lane and road specific attributes. Namely common variants of the following tags are considered: 5 6 * [[osmwiki:Key:lanes|lanes]]: Number of lanes for motorized traffic. 6 * [[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. 7 8 * [[osmwiki:Key:change|change]]: Allowed resp. forbidden lane changes. 8 9 * [[osmwiki:Key:turn|turn]]: Indication of turning lanes, including preliminary support for values hook_right and hook_left (this might change!) 9 * [[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. 10 11 * [[osmwiki:Key:bicycle|bicycle:lanes]]: Dedicated bicycle lanes. 11 12 * [[osmwiki:Key:bus|bus:lanes]]: Dedicated bus lanes. … … 18 19 * [[osmwiki:Proposed_features/highway=junction|highway=junction]]: Can be used to indicate the outline of a junction and group together all features of it. 19 20 * [[osmwiki:Relation:enforcement|Relation enforcement]]: The to and from members of such relations are highlighted 20 * [[osmwiki:Key:traffic_sign|traffic_sign]]: Traffic signs for speed limits and overtaking are displayed if tagged with traffic_sign=maxspeed/overtaking andmaxspeed=<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. 21 22 * [[osmwiki:Key:hov|hov:lanes]]: Dedicated HOV lanes. The minimum requirement can be specified by hov:minimum (supported values: 2 and 3) 22 23 * [[osmwiki:Relation:destination_sign|Relation destination_sign]]: Experimental and very limited support! 23 24 * [[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! 24 27 25 28 Furthermore: 26 * Common suffixes like :forward ,:backward, :left, :right: and :bothas 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. 27 30 * Some common tagging errors are detected and displayed, e.g. inconsistent number of lane-dependent values and typos in the keys turn and change. 28 * The style also supports '''left-hand traffic'''; see section Settings. 29 30 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 33 Use 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]. 31 34 32 35 To '''report bugs or provide feedback''' send [[osmwiki:User:Imagic|me a message]]. 33 36 34 === Settings 35 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!) 36 * The settings '''carriage.way.backward''', '''carriage.way.forward''' and '''carriage.way.both_ways''' specify the colour of the respective lanes. 37 * The settings '''sidewalk''', '''cycletrack''' and '''combined.sidewalk.and.cycletrack''' specify the colour of the sidewalk, a cycletrack and a combined sidewalk and cycletrack 38 * 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. 39 * If '''boolean.use.svg''' is set to white, the markings for turning lanes are rendered more precisely. '''If you run into memory problems, set this to black.''' 40 * 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. 41 42 === Known limitations/bugs 43 * [[ticket:8429|A bug in JOSM]] leads sometimes to rendering artefacts. 37 == Settings 38 Some 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 51 52 == Known limitations/bugs 53 * [[ticket:8429|A bug in JOSM]] leads sometimes to rendering artifacts. 44 54 * Left-hand traffic is nearly untested. Please provide feedback. 45 * Roads with oneway=-1 may lead to incorrect results. Please provide feedback. 46 * 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`. 47 57 * In forward and backward direction a maximum of eight lanes and for lanes in both directions a maximum of four lanes is displayed. 48 49 === Acknowledgments 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) 60 61 == Acknowledgments 50 62 * To Wolfgang Hinsch who created a first style which visualizes many lane-specific features. Before I saw his style I wouldn't believe that this is possible. 51 63 * To Paul Hartmann who implemented some desperately needed extensions for JOSM which made the implementation of this style a lot easier and improved performance significantly. 52 64 * To all who provided valuable feedback during the creation of this style. 53 65 54 == =Preset55 An appropriate preset for lane attributes is available at [wiki :Presets/LaneAttributes Lane Attributes].66 == Preset 67 An appropriate preset for lane attributes is available at [wikitr:/Presets/LaneAttributes Lane Attributes]. 56 68 57 69 == Screenshot 58 [[Image(Screenshot_Style_Lane_and_Road_Attributes.jpeg)]] 70 [[Image(Screenshot_Style_Lane_and_Road_Attributes.jpeg,link=)]] 59 71 60 72 == Code … … 63 75 #!style type="mapcss" 64 76 65 66 meta{77 meta 78 { 67 79 title: "Lane and road attributes"; 68 80 description: "Visualization of lanes, width, turn lanes, changing the lane, destination, lighting and street lamps, sidewalk, cycletracks, bicycle lanes, bus lanes, psv lanes."; 69 link: "http://josm.openstreetmap.de/wiki/Styles/Lane_and_Road_Attributes"; 81 link: "https://josm.openstreetmap.de/wiki/Styles/Lane_and_Road_Attributes"; 70 82 author: "Martin Vonwald"; 71 version: "2. 6-[[revision]]_[[date]]";83 version: "2.10-[[revision]]_[[date]]"; 72 84 license: "CC-BY-SA"; 85 icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNyAxOCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTM4NSAtNTI0LjM2KSI+PHBhdGggZmlsbD0iIzIwMmQyMCIgZD0ibSAzODUgNTI0LjM2IGggMTcgdiAxOCBoIC0xNyB6Ii8+PGcgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLXdpZHRoPSIxLjgiPjxwYXRoIGQ9Im0gMzg3LjUgNTI1LjI2IHYgMTYuMiIgc3Ryb2tlPSIjZTRlN2U0Ii8+PHBhdGggZD0ibSAzOTkuNSA1MjUuMjYgdiAxNi4yIiBzdHJva2U9IiNlNWU3ZTUiLz48L2c+PHBhdGggZD0ibSAzOTMuNSA1MjYuMzYgdiA0IiBzdHJva2U9IiNlNWU3ZTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjciLz48L2c+PHBhdGggZD0ibSAzOTMuNSA1MzUuMzYgdiA0IiBmaWxsPSIjZTRlN2U0IiBzdHJva2U9IiNlNWU3ZTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjciLz48L2c+PC9zdmc+"; 73 86 min-josm-version: "7287"; 74 87 } … … 78 91 title: "Fahrspur- und Straßenattribute"; 79 92 description: "Anzeige von Fahrspuren, Breite, Abbiegespuren, Spurwechsel, Zielangaben, Beleuchtung inkl. Straßenlampen, Gehsteig/Bürgersteig, Radwege, Fahrradspuren, Busspuren, Öffi-Spuren."; 93 link: "https://josm.openstreetmap.de/wiki/De:Styles/Lane_and_Road_Attributes"; 80 94 } 81 95 … … 119 133 ugly_use_svg_turn: Boolean_use_svg_for_turning_markings#FFFFFF; 120 134 style_use_svg_turn: eval(red(prop(ugly_use_svg_turn)))=1; 135 ugly_png_turn_variant: Integer_PNG_turn_variant#000000; 136 style_png_turn_variant: eval(round(blue(prop((ugly_png_turn_variant)))*256)); 121 137 ugly_use_svg_destination: Boolean_use_svg_for_destination#FFFFFF; 122 138 style_use_svg_destination: eval(red(prop(ugly_use_svg_destination)))=1; … … 432 448 way["turn:forward"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;)*$",tag("turn:forward"))?prop(data_error):"invalid turn:forward value"); } 433 449 way["turn:backward"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;)*$",tag("turn:backward"))?prop(data_error):"invalid turn:backward value"); } 450 way["turn:both_ways"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;)*$",tag("turn:both_ways"))?prop(data_error):"invalid turn:both_ways value"); } 434 451 way["turn:lanes"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;|\\|)*$",tag("turn:lanes"))?prop(data_error):"invalid turn:lanes value"); } 435 452 way["turn:lanes:forward"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;|\\|)*$",tag("turn:lanes:forward"))?prop(data_error):"invalid turn:lanes:forward value"); } 436 453 way["turn:lanes:backward"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;|\\|)*$",tag("turn:lanes:backward"))?prop(data_error):"invalid turn:lanes:backward value"); } 454 way["turn:lanes:both_ways"] { data_error: eval(regexp_test("^(none|through|left|slight_left|sharp_left|hook_left|right|slight_right|sharp_right|hook_right|merge_to_left|merge_to_right|reverse|;|\\|)*$",tag("turn:lanes:both_ways"))?prop(data_error):"invalid turn:lanes:both_ways value"); } 437 455 438 456 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ … … 456 474 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 457 475 ( 458 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png" :"images/turn forward reverse lefthand.png"):476 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")): 459 477 ( 460 regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 461 concat("images/turn forward ",prop(t),".png") 478 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 479 concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png") 462 480 ) 463 481 ) … … 467 485 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 468 486 ( 469 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png" :"images/turn forward reverse lefthand.png"):487 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")): 470 488 ( 471 regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 472 concat("images/turn forward ",prop(t),".png") 489 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 490 concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png") 473 491 ) 474 492 ) … … 478 496 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 479 497 ( 480 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png" :"images/turn forward reverse lefthand.png"):498 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")): 481 499 ( 482 regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 483 concat("images/turn forward ",prop(t),".png") 500 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 501 concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png") 484 502 ) 485 503 ) … … 489 507 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 490 508 ( 491 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png" :"images/turn forward reverse lefthand.png"):509 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")): 492 510 ( 493 regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 494 concat("images/turn forward ",prop(t),".png") 511 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 512 concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png") 495 513 ) 496 514 ) … … 500 518 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 501 519 ( 502 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png" :"images/turn forward reverse lefthand.png"):520 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")): 503 521 ( 504 regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 505 concat("images/turn forward ",prop(t),".png") 522 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 523 concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png") 506 524 ) 507 525 ) … … 511 529 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 512 530 ( 513 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png" :"images/turn forward reverse lefthand.png"):531 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")): 514 532 ( 515 regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 516 concat("images/turn forward ",prop(t),".png") 533 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 534 concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png") 517 535 ) 518 536 ) … … 522 540 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 523 541 ( 524 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png" :"images/turn forward reverse lefthand.png"):542 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")): 525 543 ( 526 regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 527 concat("images/turn forward ",prop(t),".png") 544 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 545 concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png") 528 546 ) 529 547 ) … … 533 551 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 534 552 ( 535 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?"images/turn forward reverse righthand.png" :"images/turn forward reverse lefthand.png"):553 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward reverse lefthand.png")): 536 554 ( 537 regexp_test(".*;.*",prop(t))?concat("images/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 538 concat("images/turn forward ",prop(t),".png") 555 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 556 concat("images/png/turn-",prop(style_png_turn_variant),"/turn forward ",prop(t),".png") 539 557 ) 540 558 ) … … 569 587 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 570 588 ( 571 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")? "images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):589 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")): 572 590 ( 573 regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 574 concat("images/turn backward ",prop(t),".png") 591 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 592 concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png") 575 593 ) 576 594 ) … … 580 598 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 581 599 ( 582 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")? "images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):600 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")): 583 601 ( 584 regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 585 concat("images/turn backward ",prop(t),".png") 602 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 603 concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png") 586 604 ) 587 605 ) … … 591 609 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 592 610 ( 593 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")? "images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):611 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")): 594 612 ( 595 regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 596 concat("images/turn backward ",prop(t),".png") 613 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 614 concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png") 597 615 ) 598 616 ) … … 602 620 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 603 621 ( 604 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")? "images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):622 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")): 605 623 ( 606 regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 607 concat("images/turn backward ",prop(t),".png") 624 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 625 concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png") 608 626 ) 609 627 ) … … 613 631 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 614 632 ( 615 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")? "images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):633 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")): 616 634 ( 617 regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 618 concat("images/turn backward ",prop(t),".png") 635 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 636 concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png") 619 637 ) 620 638 ) … … 624 642 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 625 643 ( 626 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")? "images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):644 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")): 627 645 ( 628 regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 629 concat("images/turn backward ",prop(t),".png") 646 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 647 concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png") 630 648 ) 631 649 ) … … 635 653 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 636 654 ( 637 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")? "images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):655 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")): 638 656 ( 639 regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 640 concat("images/turn backward ",prop(t),".png") 657 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 658 concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png") 641 659 ) 642 660 ) … … 646 664 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 647 665 ( 648 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")? "images/turn backward reverse righthand.png":"images/turn backward reverse lefthand.png"):666 (prop(t)="reverse")?(prop(style_right_hand_traffic,"default")?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse righthand.png"):concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward reverse lefthand.png")): 649 667 ( 650 regexp_test(".*;.*",prop(t))?concat("images/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 651 concat("images/turn backward ",prop(t),".png") 668 regexp_test(".*;.*",prop(t))?concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",regexp_test(".*left.*",prop(t))?"left":"",regexp_test(".*through.*",prop(t))?"through":"",regexp_test(".*right.*",prop(t))?"right":"",".png"): 669 concat("images/png/turn-",prop(style_png_turn_variant),"/turn backward ",prop(t),".png") 652 670 ) 653 671 ) … … 997 1015 } 998 1016 1017 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 1018 /* Both-way lanes (SVG) */ 1019 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 1020 way|z17-[is_prop_set(ok)][prop(style_use_svg_turn)]["turn:lanes:both_ways"], 1021 way|z17-[is_prop_set(ok)][prop(style_use_svg_turn)]["turn:both_ways"] 1022 { 1023 temp: eval(cond(has_tag_key("turn:lanes:both_ways"),tag("turn:lanes:both_ways"),tag("turn:both_ways"))); 1024 temp_list: eval(split("|",prop(temp))); 1025 temp_length: eval(length(prop(temp_list))); 1026 1027 turn_image_bothways_1: ""; t: eval(get(prop(temp_list),0)); t_scale: 1.0; 1028 t_test: eval(regexp_test("^(.*;)*through(;.*)*$",prop(t))); turn_image_bothways_1: eval(prop(t_test)?prop(turn_svg_through_forward): prop(turn_image_bothways_1)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1029 t_scale_after_through: eval(prop(t_scale)); 1030 t_test: eval(regexp_test("^(.*;)*slight_right(;.*)*$",prop(t))); turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_right_forward),"</g>"):prop(turn_image_bothways_1)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1031 t_test: eval(regexp_test("^(.*;)*right(;.*)*$",prop(t))); turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_right_forward),"</g>"): prop(turn_image_bothways_1)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1032 t_test: eval(regexp_test("^(.*;)*sharp_right(;.*)*$",prop(t))); turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_right_forward),"</g>"): prop(turn_image_bothways_1)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1033 t_scale: eval(prop(t_scale_after_through)); 1034 t_test: eval(regexp_test("^(.*;)*slight_left(;.*)*$",prop(t))); turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_left_forward),"</g>"): prop(turn_image_bothways_1)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1035 t_test: eval(regexp_test("^(.*;)*left(;.*)*$",prop(t))); turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_left_forward),"</g>"): prop(turn_image_bothways_1)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1036 t_test: eval(regexp_test("^(.*;)*sharp_left(;.*)*$",prop(t))); turn_image_bothways_1: eval(prop(t_test)?concat(prop(turn_image_bothways_1),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_left_forward),"</g>"): prop(turn_image_bothways_1)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1037 turn_image_bothways_1: eval(regexp_test("^(.*;)*reverse(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),(prop(style_right_hand_traffic)?prop(turn_svg_reverse_right_hand_forward):prop(turn_svg_reverse_left_hand_forward))):prop(turn_image_bothways_1)); 1038 turn_image_bothways_1: eval(regexp_test("^(.*;)*merge_to_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),prop(turn_svg_merge_to_right_forward)):prop(turn_image_bothways_1)); 1039 turn_image_bothways_1: eval(regexp_test("^(.*;)*merge_to_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),prop(turn_svg_merge_to_left_forward)):prop(turn_image_bothways_1)); 1040 turn_image_bothways_1: eval(regexp_test("^(.*;)*hook_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),prop(turn_svg_hook_right_forward)):prop(turn_image_bothways_1)); 1041 turn_image_bothways_1: eval(regexp_test("^(.*;)*hook_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_1),prop(turn_svg_hook_left_forward)):prop(turn_image_bothways_1)); 1042 turn_image_bothways_1: eval((prop(turn_image_bothways_1)="")?prop(unset_property):concat("data:image/svg+xml,<svg width='200px' height='50px'><g fill-opacity='",prop(style_markings_opacity),"'>",prop(turn_image_bothways_1),"</g><g fill-opacity='",prop(style_markings_opacity),"' transform='rotate(180 50 25) translate(-100 0)'>",prop(turn_image_bothways_1),"</g></svg>")); 1043 1044 turn_image_bothways_2: ""; t: eval(get(prop(temp_list),1)); t_scale: 1.0; 1045 t_test: eval(regexp_test("^(.*;)*through(;.*)*$",prop(t))); turn_image_bothways_2: eval(prop(t_test)?prop(turn_svg_through_forward): prop(turn_image_bothways_2)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1046 t_scale_after_through: eval(prop(t_scale)); 1047 t_test: eval(regexp_test("^(.*;)*slight_right(;.*)*$",prop(t))); turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_right_forward),"</g>"):prop(turn_image_bothways_2)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1048 t_test: eval(regexp_test("^(.*;)*right(;.*)*$",prop(t))); turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_right_forward),"</g>"): prop(turn_image_bothways_2)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1049 t_test: eval(regexp_test("^(.*;)*sharp_right(;.*)*$",prop(t))); turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_right_forward),"</g>"): prop(turn_image_bothways_2)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1050 t_scale: eval(prop(t_scale_after_through)); 1051 t_test: eval(regexp_test("^(.*;)*slight_left(;.*)*$",prop(t))); turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_left_forward),"</g>"): prop(turn_image_bothways_2)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1052 t_test: eval(regexp_test("^(.*;)*left(;.*)*$",prop(t))); turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_left_forward),"</g>"): prop(turn_image_bothways_2)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1053 t_test: eval(regexp_test("^(.*;)*sharp_left(;.*)*$",prop(t))); turn_image_bothways_2: eval(prop(t_test)?concat(prop(turn_image_bothways_2),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_left_forward),"</g>"): prop(turn_image_bothways_2)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1054 turn_image_bothways_2: eval(regexp_test("^(.*;)*reverse(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),(prop(style_right_hand_traffic)?prop(turn_svg_reverse_right_hand_forward):prop(turn_svg_reverse_left_hand_forward))):prop(turn_image_bothways_2)); 1055 turn_image_bothways_2: eval(regexp_test("^(.*;)*merge_to_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),prop(turn_svg_merge_to_right_forward)):prop(turn_image_bothways_2)); 1056 turn_image_bothways_2: eval(regexp_test("^(.*;)*merge_to_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),prop(turn_svg_merge_to_left_forward)):prop(turn_image_bothways_2)); 1057 turn_image_bothways_2: eval(regexp_test("^(.*;)*hook_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),prop(turn_svg_hook_right_forward)):prop(turn_image_bothways_2)); 1058 turn_image_bothways_2: eval(regexp_test("^(.*;)*hook_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_2),prop(turn_svg_hook_left_forward)):prop(turn_image_bothways_2)); 1059 turn_image_bothways_2: eval((prop(turn_image_bothways_2)="")?prop(unset_property):concat("data:image/svg+xml,<svg width='200px' height='50px'><g fill-opacity='",prop(style_markings_opacity),"'>",prop(turn_image_bothways_2),"</g><g fill-opacity='",prop(style_markings_opacity),"' transform='rotate(180 50 25) translate(-100 0)'>",prop(turn_image_bothways_2),"</g></svg>")); 1060 1061 turn_image_bothways_3: ""; t: eval(get(prop(temp_list),2)); t_scale: 1.0; 1062 t_test: eval(regexp_test("^(.*;)*through(;.*)*$",prop(t))); turn_image_bothways_3: eval(prop(t_test)?prop(turn_svg_through_forward): prop(turn_image_bothways_3)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1063 t_scale_after_through: eval(prop(t_scale)); 1064 t_test: eval(regexp_test("^(.*;)*slight_right(;.*)*$",prop(t))); turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_right_forward),"</g>"):prop(turn_image_bothways_3)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1065 t_test: eval(regexp_test("^(.*;)*right(;.*)*$",prop(t))); turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_right_forward),"</g>"): prop(turn_image_bothways_3)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1066 t_test: eval(regexp_test("^(.*;)*sharp_right(;.*)*$",prop(t))); turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_right_forward),"</g>"): prop(turn_image_bothways_3)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1067 t_scale: eval(prop(t_scale_after_through)); 1068 t_test: eval(regexp_test("^(.*;)*slight_left(;.*)*$",prop(t))); turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_left_forward),"</g>"): prop(turn_image_bothways_3)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1069 t_test: eval(regexp_test("^(.*;)*left(;.*)*$",prop(t))); turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_left_forward),"</g>"): prop(turn_image_bothways_3)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1070 t_test: eval(regexp_test("^(.*;)*sharp_left(;.*)*$",prop(t))); turn_image_bothways_3: eval(prop(t_test)?concat(prop(turn_image_bothways_3),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_left_forward),"</g>"): prop(turn_image_bothways_3)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1071 turn_image_bothways_3: eval(regexp_test("^(.*;)*reverse(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),(prop(style_right_hand_traffic)?prop(turn_svg_reverse_right_hand_forward):prop(turn_svg_reverse_left_hand_forward))):prop(turn_image_bothways_3)); 1072 turn_image_bothways_3: eval(regexp_test("^(.*;)*merge_to_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),prop(turn_svg_merge_to_right_forward)):prop(turn_image_bothways_3)); 1073 turn_image_bothways_3: eval(regexp_test("^(.*;)*merge_to_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),prop(turn_svg_merge_to_left_forward)):prop(turn_image_bothways_3)); 1074 turn_image_bothways_3: eval(regexp_test("^(.*;)*hook_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),prop(turn_svg_hook_right_forward)):prop(turn_image_bothways_3)); 1075 turn_image_bothways_3: eval(regexp_test("^(.*;)*hook_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_3),prop(turn_svg_hook_left_forward)):prop(turn_image_bothways_3)); 1076 turn_image_bothways_3: eval((prop(turn_image_bothways_3)="")?prop(unset_property):concat("data:image/svg+xml,<svg width='200px' height='50px'><g fill-opacity='",prop(style_markings_opacity),"'>",prop(turn_image_bothways_3),"</g><g fill-opacity='",prop(style_markings_opacity),"' transform='rotate(180 50 25) translate(-100 0)'>",prop(turn_image_bothways_3),"</g></svg>")); 1077 1078 turn_image_bothways_4: ""; t: eval(get(prop(temp_list),3)); t_scale: 1.0; 1079 t_test: eval(regexp_test("^(.*;)*through(;.*)*$",prop(t))); turn_image_bothways_4: eval(prop(t_test)?prop(turn_svg_through_forward): prop(turn_image_bothways_4)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1080 t_scale_after_through: eval(prop(t_scale)); 1081 t_test: eval(regexp_test("^(.*;)*slight_right(;.*)*$",prop(t))); turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_right_forward),"</g>"):prop(turn_image_bothways_4)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1082 t_test: eval(regexp_test("^(.*;)*right(;.*)*$",prop(t))); turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_right_forward),"</g>"): prop(turn_image_bothways_4)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1083 t_test: eval(regexp_test("^(.*;)*sharp_right(;.*)*$",prop(t))); turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_right_forward),"</g>"): prop(turn_image_bothways_4)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1084 t_scale: eval(prop(t_scale_after_through)); 1085 t_test: eval(regexp_test("^(.*;)*slight_left(;.*)*$",prop(t))); turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_slight_left_forward),"</g>"): prop(turn_image_bothways_4)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1086 t_test: eval(regexp_test("^(.*;)*left(;.*)*$",prop(t))); turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_left_forward),"</g>"): prop(turn_image_bothways_4)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1087 t_test: eval(regexp_test("^(.*;)*sharp_left(;.*)*$",prop(t))); turn_image_bothways_4: eval(prop(t_test)?concat(prop(turn_image_bothways_4),"<g transform='scale(",prop(t_scale)," 1.0)'>",prop(turn_svg_sharp_left_forward),"</g>"): prop(turn_image_bothways_4)); t_scale: eval(prop(t_test)?(prop(t_scale)*0.666):prop(t_scale)); 1088 turn_image_bothways_4: eval(regexp_test("^(.*;)*reverse(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),(prop(style_right_hand_traffic)?prop(turn_svg_reverse_right_hand_forward):prop(turn_svg_reverse_left_hand_forward))):prop(turn_image_bothways_4)); 1089 turn_image_bothways_4: eval(regexp_test("^(.*;)*merge_to_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),prop(turn_svg_merge_to_right_forward)):prop(turn_image_bothways_4)); 1090 turn_image_bothways_4: eval(regexp_test("^(.*;)*merge_to_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),prop(turn_svg_merge_to_left_forward)):prop(turn_image_bothways_4)); 1091 turn_image_bothways_4: eval(regexp_test("^(.*;)*hook_right(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),prop(turn_svg_hook_right_forward)):prop(turn_image_bothways_4)); 1092 turn_image_bothways_4: eval(regexp_test("^(.*;)*hook_left(;.*)*$",prop(t))?concat(prop(turn_image_bothways_4),prop(turn_svg_hook_left_forward)):prop(turn_image_bothways_4)); 1093 turn_image_bothways_4: eval((prop(turn_image_bothways_4)="")?prop(unset_property):concat("data:image/svg+xml,<svg width='200px' height='50px'><g fill-opacity='",prop(style_markings_opacity),"'>",prop(turn_image_bothways_4),"</g><g fill-opacity='",prop(style_markings_opacity),"' transform='rotate(180 50 25) translate(-100 0)'>",prop(turn_image_bothways_4),"</g></svg>")); 1094 } 1095 999 1096 /***************************************************************************************************************************************************/ 1000 1097 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ … … 1581 1678 } 1582 1679 1583 1680 /** 1681 * Convert width to meters 1682 */ 1683 way[width=~/^(\d+)'$/] { 1684 road_width: 0.3048 * get(regexp_match("^(\\d+)'$", tag(width)), 1); 1685 } 1686 way[width=~/^(\d+)"$/] { 1687 road_width: 0.0254 * get(regexp_match("^(\\d+)\"$", tag(width)), 1); 1688 } 1689 way[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 } 1693 way[width=~/^(\d+)(\.\d+)?$/] { 1694 road_width: tag(width); 1695 } 1584 1696 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 1585 1697 /* Determine the width of the lanes, road markings and the inner lane width */ … … 1588 1700 { 1589 1701 lane_min_width: 4; 1590 lane_default_width: eval(max(prop(lane_min_width),( has_tag_key(width)?((1.25*tag(width))/prop(lanes_all)):4)));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"))))); 1591 1703 change_allowed: list(6,9); 1592 1704 road_marking_width: 1; … … 1597 1709 { 1598 1710 lane_min_width: 8; 1599 lane_default_width: eval(max(prop(lane_min_width),( has_tag_key(width)?((2.5*tag(width))/prop(lanes_all)):8)));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"))))); 1600 1712 change_allowed: list(12,18); 1601 1713 road_marking_width: 2; … … 1606 1718 { 1607 1719 lane_min_width: 8; 1608 lane_default_width: eval(max(prop(lane_min_width),( has_tag_key(width)?((5*tag(width))/prop(lanes_all)):16)));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"))))); 1609 1721 change_allowed: list(24,36); 1610 1722 road_marking_width: 2; … … 1615 1727 { 1616 1728 lane_min_width: 8; 1617 lane_default_width: eval(max(prop(lane_min_width),( has_tag_key(width)?((10*tag(width))/prop(lanes_all)):32)));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"))))); 1618 1730 change_allowed: list(48,72); 1619 1731 road_marking_width: 2; … … 1624 1736 { 1625 1737 lane_min_width: 12; 1626 lane_default_width: eval(max(prop(lane_min_width),( has_tag_key(width)?((20*tag(width))/prop(lanes_all)):64)));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"))))); 1627 1739 change_allowed: list(96,144); 1628 1740 road_marking_width: 4; … … 1633 1745 { 1634 1746 lane_min_width: 20; 1635 lane_default_width: eval(max(prop(lane_min_width),( has_tag_key(width)?((40*tag(width))/prop(lanes_all)):128)));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"))))); 1636 1748 change_allowed: list(192,288); 1637 1749 road_marking_width: 6; … … 3028 3140 right-casing-dashes: eval(prop(change_bothways_1_right,"default")); 3029 3141 left-casing-dashes: eval(prop(change_bothways_1_left,"default")); 3142 repeat-image: eval(prop(turn_image_bothways_1,"default")); 3030 3143 3031 3144 opacity: 0.0; linecap: none; 3145 repeat-image-offset: eval(prop(offset)); 3146 repeat-image-height: eval(min(prop(lane_default_width,"default"),prop(width))); 3147 repeat-image-spacing: eval(prop(repeat-image-height) * 3); 3032 3148 right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default")); 3033 3149 left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default")); … … 3052 3168 right-casing-dashes: eval(prop(change_bothways_2_right,"default")); 3053 3169 left-casing-dashes: eval(prop(change_bothways_2_left,"default")); 3170 repeat-image: eval(prop(turn_image_bothways_2,"default")); 3054 3171 3055 3172 opacity: 0.0; linecap: none; 3173 repeat-image-offset: eval(prop(offset)); 3174 repeat-image-height: eval(min(prop(lane_default_width,"default"),prop(width))); 3175 repeat-image-spacing: eval(prop(repeat-image-height) * 3); 3056 3176 right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default")); 3057 3177 left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default")); … … 3076 3196 right-casing-dashes: eval(prop(change_bothways_3_right,"default")); 3077 3197 left-casing-dashes: eval(prop(change_bothways_3_left,"default")); 3198 repeat-image: eval(prop(turn_image_bothways_3,"default")); 3078 3199 3079 3200 opacity: 0.0; linecap: none; 3201 repeat-image-offset: eval(prop(offset)); 3202 repeat-image-height: eval(min(prop(lane_default_width,"default"),prop(width))); 3203 repeat-image-spacing: eval(prop(repeat-image-height) * 3); 3080 3204 right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default")); 3081 3205 left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default")); … … 3100 3224 right-casing-dashes: eval(prop(change_bothways_4_right,"default")); 3101 3225 left-casing-dashes: eval(prop(change_bothways_4_left,"default")); 3226 repeat-image: eval(prop(turn_image_bothways_4,"default")); 3102 3227 3103 3228 opacity: 0.0; linecap: none; 3229 repeat-image-offset: eval(prop(offset)); 3230 repeat-image-height: eval(min(prop(lane_default_width,"default"),prop(width))); 3231 repeat-image-spacing: eval(prop(repeat-image-height) * 3); 3104 3232 right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default")); 3105 3233 left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default")); … … 3120 3248 /***************************************************************************************************************************************************/ 3121 3249 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 3250 /* Railway rendering */ 3251 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 3252 /***************************************************************************************************************************************************/ 3253 way|z18-[railway=rail]::Railway_Way, 3254 way|z18-[railway=light_rail]::Railway_Way, 3255 way|z18-[railway=subway]::Railway_Way, 3256 way|z18-[railway=miniature]::Railway_Way, 3257 way|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 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 3294 /* Extra rendering for footways/cycleways if not already rendered */ 3295 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 3296 /***************************************************************************************************************************************************/ 3297 way|z17-[!is_prop_set(ok, "default")][highway=footway], 3298 way|z17-[!is_prop_set(ok, "default")][highway=cycleway] 3299 { 3300 width: eval(2*prop(pixel_per_metre,"default")); 3301 linecap: none; 3302 opacity: eval(prop("style_lane_opacity","default")); 3303 right-casing-width: eval(max(1,0.15*prop(pixel_per_metre,"default"))); right-casing-color: gray; 3304 left-casing-width: eval(max(1,0.15*prop(pixel_per_metre,"default"))); left-casing-color: gray; 3305 casing-linecap: none; 3306 temp: 0; 3307 temp: eval(prop(temp)+(((tag("highway")="footway") || ((has_tag_key("foot")) && (tag("foot") ="designated")))?1:0)); 3308 temp: eval(prop(temp)+(((tag("highway")="cycleway") || ((has_tag_key("bicycle")) && (tag("bicycle")="designated")))?2:0)); 3309 color: eval(get(prop(style_sidewalk_color,"default"),prop(temp))); 3310 } 3311 3312 /***************************************************************************************************************************************************/ 3313 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 3122 3314 /* Additional attributes/features */ 3123 3315 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ … … 3170 3362 symbol-fill-opacity: 0.05; 3171 3363 } 3172 3173 3364 3174 3365 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ … … 3418 3609 3419 3610 /* Now render the traffic sign */ 3420 node|z16-[!(prop(traffic_sign_svg)="")] 3421 { 3611 node|z16-[!(prop(traffic_sign_svg,"default")="")] 3612 { 3613 major-z-index: 5; /* JOSM added some default rendering, which interferes with this */ 3422 3614 icon-image: eval(concat("data:image/svg+xml,<svg width='100px' height='",prop(traffic_sign_top),"'>",prop(traffic_sign_svg),"</svg>")); 3423 3615 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 */ 3620 node|z16-[!(prop(traffic_sign_svg,"default")="")]::core_maxnodebg 3621 { 3622 symbol-shape: none; 3623 } 3624 node|z16-[!(prop(traffic_sign_svg,"default")="")]::core_maxnodefg 3625 { 3626 text: none; 3627 symbol-shape: none; 3424 3628 } 3425 3629 … … 3482 3686 way[destination:lanes:backward=~/,/] { data_error: "use ; instead of , to separate values"; } 3483 3687 3688 way["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"); } 3689 way["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"); } 3690 way["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"); } 3691 way["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"); } 3692 way["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"); } 3693 way["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"); } 3694 way["transit:both_ways"] { data_error: "use the relation instead of transit:both_ways"; } 3695 way["transit:lanes:both_ways"] { data_error: "use the relation instead of transit:lanes:both_ways"; } 3696 3484 3697 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 3485 3698 /* Disputed checks: disabled by default */ … … 3514 3727 } 3515 3728 3516 3517 3729 }}}
