Changes between Version 41 and Version 69 of Styles/Lane_and_Road_Attributes
- Timestamp:
- (multiple changes)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Styles/Lane_and_Road_Attributes
v41 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. 12 * [[osmwiki:Key:psv|psv:lanes]]: Dedicated PSV (public service vehicle) lanes. 13 * [[osmwiki:Key:lanes:psv|psv:lanes]]: Dedicated PSV (public service vehicle) lanes. 13 14 * [[osmwiki:Key:placement|placement]]: Placement of the road relative to the OSM-way. The value transition is not supported. 14 15 * [[osmwiki:Tag:man_made=bridge|man_made=bridge]]: Used to indicate the outline of a bridge and group together all features of that bridge. … … 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, otherwise for left hand traffic. 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. 4-[[revision]]_[[date]]";83 version: "2.10-[[revision]]_[[date]]"; 72 84 license: "CC-BY-SA"; 73 min-josm-version: "6950"; 85 icon: "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNyAxOCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTM4NSAtNTI0LjM2KSI+PHBhdGggZmlsbD0iIzIwMmQyMCIgZD0ibSAzODUgNTI0LjM2IGggMTcgdiAxOCBoIC0xNyB6Ii8+PGcgZmlsbD0ibm9uZSI+PGcgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLXdpZHRoPSIxLjgiPjxwYXRoIGQ9Im0gMzg3LjUgNTI1LjI2IHYgMTYuMiIgc3Ryb2tlPSIjZTRlN2U0Ii8+PHBhdGggZD0ibSAzOTkuNSA1MjUuMjYgdiAxNi4yIiBzdHJva2U9IiNlNWU3ZTUiLz48L2c+PHBhdGggZD0ibSAzOTMuNSA1MjYuMzYgdiA0IiBzdHJva2U9IiNlNWU3ZTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjciLz48L2c+PHBhdGggZD0ibSAzOTMuNSA1MzUuMzYgdiA0IiBmaWxsPSIjZTRlN2U0IiBzdHJva2U9IiNlNWU3ZTUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIxLjciLz48L2c+PC9zdmc+"; 86 min-josm-version: "7287"; 74 87 } 75 88 … … 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 … … 97 111 style_show_disputed: no; /* Will be overriden by ugly hack below */ 98 112 style_use_svg_turn: yes; /* Will be overriden by ugly hack below */ 99 113 100 114 /* Ugly hack to make opacity configurable */ 101 115 ugly_lane_opacity: Opacity_lane#808080; … … 107 121 108 122 /* Ugly hack to make boolean configurable */ 109 ugly_right_hand_traffic: Boolean_right_hand_traffic#FFFFFF; 110 style_right_hand_traffic: eval(red(prop(ugly_right_hand_traffic)))=1; 123 ugly_right_hand_traffic: Boolean_right_hand_traffic#888888; 124 /*style_right_hand_traffic: eval(red(prop(ugly_right_hand_traffic)))=1;*/ 125 /*style_right_hand_traffic: eval(is_right_hand_traffic());*/ 126 style_right_hand_traffic: eval((red(prop(ugly_right_hand_traffic))=1)?yes:((red(prop(ugly_right_hand_traffic))=0)?no:is_right_hand_traffic())); 111 127 ugly_show_warnings: Boolean_show_warnings#FFFFFF; 112 128 style_show_warnings: eval(red(prop(ugly_show_warnings)))=1; … … 117 133 ugly_use_svg_turn: Boolean_use_svg_for_turning_markings#FFFFFF; 118 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)); 119 137 ugly_use_svg_destination: Boolean_use_svg_for_destination#FFFFFF; 120 138 style_use_svg_destination: eval(red(prop(ugly_use_svg_destination)))=1; … … 430 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"); } 431 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"); } 432 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"); } 433 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"); } 434 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"); } 435 455 436 456 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ … … 454 474 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 455 475 ( 456 (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")): 457 477 ( 458 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"): 459 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") 460 480 ) 461 481 ) … … 465 485 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 466 486 ( 467 (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")): 468 488 ( 469 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"): 470 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") 471 491 ) 472 492 ) … … 476 496 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 477 497 ( 478 (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")): 479 499 ( 480 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"): 481 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") 482 502 ) 483 503 ) … … 487 507 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 488 508 ( 489 (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")): 490 510 ( 491 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"): 492 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") 493 513 ) 494 514 ) … … 498 518 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 499 519 ( 500 (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")): 501 521 ( 502 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"): 503 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") 504 524 ) 505 525 ) … … 509 529 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 510 530 ( 511 (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")): 512 532 ( 513 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"): 514 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") 515 535 ) 516 536 ) … … 520 540 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 521 541 ( 522 (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")): 523 543 ( 524 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"): 525 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") 526 546 ) 527 547 ) … … 531 551 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 532 552 ( 533 (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")): 534 554 ( 535 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"): 536 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") 537 557 ) 538 558 ) … … 567 587 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 568 588 ( 569 (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")): 570 590 ( 571 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"): 572 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") 573 593 ) 574 594 ) … … 578 598 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 579 599 ( 580 (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")): 581 601 ( 582 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"): 583 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") 584 604 ) 585 605 ) … … 589 609 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 590 610 ( 591 (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")): 592 612 ( 593 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"): 594 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") 595 615 ) 596 616 ) … … 600 620 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 601 621 ( 602 (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")): 603 623 ( 604 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"): 605 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") 606 626 ) 607 627 ) … … 611 631 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 612 632 ( 613 (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")): 614 634 ( 615 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"): 616 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") 617 637 ) 618 638 ) … … 622 642 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 623 643 ( 624 (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")): 625 645 ( 626 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"): 627 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") 628 648 ) 629 649 ) … … 633 653 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 634 654 ( 635 (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")): 636 656 ( 637 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"): 638 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") 639 659 ) 640 660 ) … … 644 664 ((prop(t)="none") || (prop(t)=""))?prop(unset_property): 645 665 ( 646 (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")): 647 667 ( 648 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"): 649 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") 650 670 ) 651 671 ) … … 995 1015 } 996 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 997 1096 /***************************************************************************************************************************************************/ 998 1097 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ … … 1579 1678 } 1580 1679 1581 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 } 1582 1696 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 1583 1697 /* Determine the width of the lanes, road markings and the inner lane width */ … … 1586 1700 { 1587 1701 lane_min_width: 4; 1588 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"))))); 1589 1703 change_allowed: list(6,9); 1590 1704 road_marking_width: 1; … … 1595 1709 { 1596 1710 lane_min_width: 8; 1597 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"))))); 1598 1712 change_allowed: list(12,18); 1599 1713 road_marking_width: 2; … … 1604 1718 { 1605 1719 lane_min_width: 8; 1606 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"))))); 1607 1721 change_allowed: list(24,36); 1608 1722 road_marking_width: 2; … … 1613 1727 { 1614 1728 lane_min_width: 8; 1615 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"))))); 1616 1730 change_allowed: list(48,72); 1617 1731 road_marking_width: 2; … … 1622 1736 { 1623 1737 lane_min_width: 12; 1624 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"))))); 1625 1739 change_allowed: list(96,144); 1626 1740 road_marking_width: 4; … … 1631 1745 { 1632 1746 lane_min_width: 20; 1633 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"))))); 1634 1748 change_allowed: list(192,288); 1635 1749 road_marking_width: 6; … … 2153 2267 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 2154 2268 /***************************************************************************************************************************************************/ 2155 way[is_prop_set(ok)][is_prop_set(lanes_all)]::Ground 2269 way[is_prop_set(ok, "default")][is_prop_set(lanes_all, "default")]::Ground 2156 2270 { 2157 2271 linecap: none; … … 2165 2279 /* Sidewalk and cycletrack */ 2166 2280 way|z17- {} /* ATTENTION: For whatever reason this is needed, otherwise the following won't be interpreted correctly */ 2167 way|z17-[is_prop_set(ok)][is_prop_set(lanes_all)]::Ground 2281 way|z17-[is_prop_set(ok, "default")][is_prop_set(lanes_all, "default")]::Ground 2168 2282 { 2169 2283 /* Cycletrack in an one-way on the left side? */ … … 3026 3140 right-casing-dashes: eval(prop(change_bothways_1_right,"default")); 3027 3141 left-casing-dashes: eval(prop(change_bothways_1_left,"default")); 3142 repeat-image: eval(prop(turn_image_bothways_1,"default")); 3028 3143 3029 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); 3030 3148 right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default")); 3031 3149 left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default")); … … 3050 3168 right-casing-dashes: eval(prop(change_bothways_2_right,"default")); 3051 3169 left-casing-dashes: eval(prop(change_bothways_2_left,"default")); 3170 repeat-image: eval(prop(turn_image_bothways_2,"default")); 3052 3171 3053 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); 3054 3176 right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default")); 3055 3177 left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default")); … … 3074 3196 right-casing-dashes: eval(prop(change_bothways_3_right,"default")); 3075 3197 left-casing-dashes: eval(prop(change_bothways_3_left,"default")); 3198 repeat-image: eval(prop(turn_image_bothways_3,"default")); 3076 3199 3077 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); 3078 3204 right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default")); 3079 3205 left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default")); … … 3098 3224 right-casing-dashes: eval(prop(change_bothways_4_right,"default")); 3099 3225 left-casing-dashes: eval(prop(change_bothways_4_left,"default")); 3226 repeat-image: eval(prop(turn_image_bothways_4,"default")); 3100 3227 3101 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); 3102 3232 right-casing-width: prop(road_marking_width,"default"); right-casing-color: white; right-casing-opacity: eval(prop(style_markings_opacity,"default")); 3103 3233 left-casing-width: prop(road_marking_width,"default"); left-casing-color: white; left-casing-opacity: eval(prop(style_markings_opacity,"default")); … … 3118 3248 /***************************************************************************************************************************************************/ 3119 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 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 3120 3314 /* Additional attributes/features */ 3121 3315 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ … … 3168 3362 symbol-fill-opacity: 0.05; 3169 3363 } 3170 3171 3364 3172 3365 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ … … 3198 3391 /* Destination */ 3199 3392 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 3200 way|z17-[is_prop_set(ok)][destination][!prop(style_use_svg_destination)]::Destination 3393 way|z17-[is_prop_set(ok, "default")][destination][!prop(style_use_svg_destination, "default")]::Destination 3201 3394 { 3202 3395 text-offset: eval(prop("placement_offset","default")); … … 3207 3400 text-halo-radius: 2; text-halo-color: blue; text-halo-opacity: 0.3; 3208 3401 } 3209 way|z17-[is_prop_set(ok)]["destination:forward"][!prop(style_use_svg_destination)]::Destination_Forward 3402 way|z17-[is_prop_set(ok, "default")]["destination:forward"][!prop(style_use_svg_destination, "default")]::Destination_Forward 3210 3403 { 3211 3404 text-offset: eval(prop("placement_offset","default")+(eval(prop(lane_width_all,"default"))/4)); … … 3216 3409 text-halo-radius: 2; text-halo-color: blue; text-halo-opacity: 0.3; 3217 3410 } 3218 way|z17-[is_prop_set(ok)]["destination:backward"][!prop(style_use_svg_destination)]::Destination_Backward 3411 way|z17-[is_prop_set(ok, "default")]["destination:backward"][!prop(style_use_svg_destination, "default")]::Destination_Backward 3219 3412 { 3220 3413 text-offset: eval(prop("placement_offset","default")-(eval(prop(lane_width_all,"default"))/4)); … … 3228 3421 /* TODO: make opacity configurable */ 3229 3422 way{} /* If this is removed the following won't be interpreted */ 3230 way|z17-[is_prop_set(ok)][destination][prop(style_use_svg_destination)]::Destination 3423 way|z17-[is_prop_set(ok, "default")][destination][prop(style_use_svg_destination, "default")]::Destination 3231 3424 { 3232 3425 complete_destination: eval(get(split(";",tag(destination)),0)); … … 3244 3437 } 3245 3438 way{} /* If this is removed the following won't be interpreted */ 3246 way|z17-[is_prop_set(ok)]["destination:forward"][prop(style_use_svg_destination)]::Destination_Forward 3439 way|z17-[is_prop_set(ok, "default")]["destination:forward"][prop(style_use_svg_destination, "default")]::Destination_Forward 3247 3440 { 3248 3441 complete_destination: eval(get(split(";",tag("destination:forward")),0)); … … 3259 3452 } 3260 3453 way{} /* If this is removed the following won't be interpreted */ 3261 way|z17-[is_prop_set(ok)]["destination:backward"][prop(style_use_svg_destination)]::Destination_Backward 3454 way|z17-[is_prop_set(ok, "default")]["destination:backward"][prop(style_use_svg_destination, "default")]::Destination_Backward 3262 3455 { 3263 3456 complete_destination: eval(get(split(";",tag("destination:backward")),0)); … … 3277 3470 /* destination_sign relation (experimental support - only one sign per way is supported) */ 3278 3471 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ 3279 relation[is_prop_set(ok)][type="destination_sign"] >[role="to"] way|z17-::Destination_Sign 3472 relation[is_prop_set(ok, "default")][type="destination_sign"] >[role="to"] way|z17-::Destination_Sign 3280 3473 { 3281 3474 sign_font_size: 50; … … 3416 3609 3417 3610 /* Now render the traffic sign */ 3418 node|z16-[!(prop(traffic_sign_svg)="")] 3419 { 3611 node|z16-[!(prop(traffic_sign_svg,"default")="")] 3612 { 3613 major-z-index: 5; /* JOSM added some default rendering, which interferes with this */ 3420 3614 icon-image: eval(concat("data:image/svg+xml,<svg width='100px' height='",prop(traffic_sign_top),"'>",prop(traffic_sign_svg),"</svg>")); 3421 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; 3422 3628 } 3423 3629 … … 3458 3664 way["destination:forward:int_ref"] { data_error: "use destination:int_ref:forward"; } 3459 3665 way["destination:backward:int_ref"] { data_error: "use destination:int_ref:backward"; } 3460 way["destination:forward:s ign"]{ data_error: "use destination:sign:forward"; }3461 way["destination:backward:s ign"]{ data_error: "use destination:sign:backward"; }3666 way["destination:forward:symbol"] { data_error: "use destination:symbol:forward"; } 3667 way["destination:backward:symbol"] { data_error: "use destination:symbol:backward"; } 3462 3668 way["destination:forward:country"] { data_error: "use destination:country:forward"; } 3463 3669 way["destination:backward:country"] { data_error: "use destination:country:backward"; } 3670 3671 way["destination:sign"] { data_error: "use destination:symbol"; } 3672 way["destination:sign:forward"] { data_error: "use destination:symbol"; } 3673 way["destination:sign:backward"] { data_error: "use destination:symbol"; } 3674 way["destination:sign:lanes"] { data_error: "use destination:symbol"; } 3675 way["destination:sign:lanes:forward"] { data_error: "use destination:symbol"; } 3676 way["destination:sign:lanes:backward"] { data_error: "use destination:symbol"; } 3677 3678 way[destination=~/:\S/] { data_error: "use ; instead of : to separate values"; } 3679 way[destination:lanes=~/:\S/] { data_error: "use ; instead of : to separate values"; } 3680 way[destination:lanes:forward=~/:\S/] { data_error: "use ; instead of : to separate values"; } 3681 way[destination:lanes:backward=~/:\S/] { data_error: "use ; instead of : to separate values"; } 3682 3683 way[destination=~/,/] { data_error: "use ; instead of , to separate values"; } 3684 way[destination:lanes=~/,/] { data_error: "use ; instead of , to separate values"; } 3685 way[destination:lanes:forward=~/,/] { data_error: "use ; instead of , to separate values"; } 3686 way[destination:lanes:backward=~/,/] { data_error: "use ; instead of , to separate values"; } 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"; } 3464 3696 3465 3697 /*-------------------------------------------------------------------------------------------------------------------------------------------------*/ … … 3495 3727 } 3496 3728 3497 3498 3729 }}}
