From b7dce5f8ea635a56cbb66c0f3a74f523179318b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stephan=20B=C3=B6sch-Plepelits?= <skunk@cg.tuwien.ac.at>
Date: Tue, 14 Jan 2020 17:09:19 +0100
Subject: [PATCH] Lanes: mark parallel/diagonal/perpendicular parking

---
 lanes.json | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 53 insertions(+), 4 deletions(-)

diff --git a/lanes.json b/lanes.json
index 641dca0..16a4fd0 100644
--- a/lanes.json
+++ b/lanes.json
@@ -42,7 +42,7 @@
         ],
         "markerSymbol": null,
         "listMarkerSymbol": "line",
-        "styles": "{% if sidewalk_left %}sidewalk_left,{% endif %}{% if cycletrack_left %}cycletrack_left,{% endif %}{% if parking_left.width %}parking_left,{% endif %}{% if cyclelane_left %}cyclelane_left,{% endif %}{% if lanes == 1 %}lane1{% else %}{% for i in 1..lanes - 1 %}lane{{ i }},mark{{ i }},{% endfor %}lane{{ lanes }}{% endif %}{% if cyclelane_right %},cyclelane_right{% endif %}{% if parking_right.width %},parking_right{% endif %}{% if cycletrack_right %},cycletrack_right{% endif %}{% if sidewalk_right %},sidewalk_right{% endif %}",
+        "styles": "{% if sidewalk_left %}sidewalk_left,{% endif %}{% if cycletrack_left %}cycletrack_left,{% endif %}{% if parking_left.width %}parking_left,{% if parking_left.dashDistance %}parking_left_dash,{% if parking_left_type == 'diagonal' %}parking_left_dash_diag,{% endif %}{% endif %}{% endif %}{% if cyclelane_left %}cyclelane_left,{% endif %}{% if lanes == 1 %}lane1{% else %}{% for i in 1..lanes - 1 %}lane{{ i }},mark{{ i }},{% endfor %}lane{{ lanes }}{% endif %}{% if cyclelane_right %},cyclelane_right{% endif %}{% if parking_right.width %},parking_right{% if parking_right.dashDistance %},parking_right_dash{% if parking_right_type == 'diagonal' %},parking_right_dash_diag{% endif %}{% endif %}{% endif %}{% if cycletrack_right %},cycletrack_right{% endif %}{% if sidewalk_right %},sidewalk_right{% endif %}",
         "style": {
             "width": "{{ width }}",
             "pane": "casing",
@@ -60,6 +60,21 @@
             "offset": "{{ lanes_width / -2 - cyclelane_left - parking_left.width / 2 }}m",
             "pane": "casing"
         },
+        "style:parking_left_dash": {
+            "width": "{{ parking_left.width / (parking_left_type == 'diagonal' ? 2 : 1) }}m",
+            "color": "{{ parking_left.dashColor }}",
+            "offset": "{{ lanes_width / -2 - cyclelane_left - parking_left.width / 2 - (parking_left_type == 'diagonal' ? parking_left.width / 4 : 0) }}m",
+            "lineCap": "butt",
+            "dashArray": "1,{{ parking_left.dashDistance / map.metersPerPixel }}"
+        },
+        "style:parking_left_dash_diag": {
+            "width": "{{ parking_left.width / 2 }}m",
+            "color": "{{ parking_left.dashColor }}",
+            "offset": "{{ lanes_width / -2 - cyclelane_left - parking_left.width / 4 }}m",
+            "lineCap": "butt",
+            "dashArray": "1,{{ parking_left.dashDistance / map.metersPerPixel }}",
+            "dashOffset": "{{ 0.5 / map.metersPerPixel }}"
+        },
         "style:cyclelane_left": {
             "width": "2m",
             "color": "#af3f3f",
@@ -90,6 +105,21 @@
             "offset": "{{ lanes_width / 2 + cyclelane_right + parking_right.width / 2 }}m",
             "pane": "casing"
         },
+        "style:parking_right_dash": {
+            "width": "{{ parking_right.width / (parking_right_type == 'diagonal' ? 2 : 1) }}m",
+            "color": "{{ parking_right.dashColor }}",
+            "offset": "{{ lanes_width / 2 + cyclelane_right + parking_right.width / 2 + (parking_right_type == 'diagonal' ? parking_right.width / 4 : 0) }}m",
+            "lineCap": "butt",
+            "dashArray": "1,{{ parking_right.dashDistance / map.metersPerPixel }}"
+        },
+        "style:parking_right_dash_diag": {
+            "width": "{{ parking_right.width / 2 }}m",
+            "color": "{{ parking_right.dashColor }}",
+            "offset": "{{ lanes_width / 2 + cyclelane_right + parking_right.width / 4 }}m",
+            "lineCap": "butt",
+            "dashArray": "1,{{ parking_right.dashDistance / map.metersPerPixel }}",
+            "dashOffset": "{{ 0.5 / map.metersPerPixel }}"
+        },
         "style:sidewalk_right": {
             "width": "2m",
             "color": "#4f4fbf",
@@ -250,6 +280,18 @@
         "    <td>{{ keyTrans('parking:lane') }}</td>",
         "  </tr>",
         "  <tr>",
+        "    <td>{{ markerLine({ 'styles':'lane,mark', 'style:lane': { 'width': 5, 'color': 'orange' }, 'style:mark': { 'width': 5, 'color': const.parking.parallel.dashColor, 'dashArray': '1,10' } })|raw }}</td>",
+        "    <td>{{ keyTrans('parking:lane') }}: {{ tagTrans('parking:lane', 'parallel') }}</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerLine({ 'styles':'lane,mark1,mark2', 'style:lane': { 'width': 5, 'color': 'orange' }, 'style:mark1': { 'width': 2.5, 'color': const.parking.diagonal.dashColor, 'dashArray': '1,7', 'offset': 1.25 }, 'style:mark2': { 'width': 2.5, 'color': const.parking.diagonal.dashColor, 'dashArray': '1,7', 'dashOffset': '2', 'offset': -1.25 } })|raw }}</td>",
+        "    <td>{{ keyTrans('parking:lane') }}: {{ tagTrans('parking:lane', 'diagonal') }}</td>",
+        "  </tr>",
+        "  <tr>",
+        "    <td>{{ markerLine({ 'styles':'lane,mark', 'style:lane': { 'width': 5, 'color': 'orange' }, 'style:mark': { 'width': 5, 'color': const.parking.perpendicular.dashColor, 'dashArray': '1,6' } })|raw }}</td>",
+        "    <td>{{ keyTrans('parking:lane') }}: {{ tagTrans('parking:lane', 'perpendicular') }}</td>",
+        "  </tr>",
+        "  <tr>",
         "    <td>{{ markerLine({ 'width': 5, 'color': '#af3f3f' })|raw }}</td>",
         "    <td>{{ tagTrans('cycleway', 'lane') }}</td>",
         "  </tr>",
@@ -267,15 +309,22 @@
         "parking": {
             "parallel": {
                 "width": "2",
-                "color": "orange"
+                "color": "orange",
+                "dashColor": "blue",
+                "dashDistance": "4"
             },
             "diagonal": {
                 "width": "2.5",
-                "color": "orange"
+                "color": "orange",
+                "dashColor": "magenta",
+                "dashDistance": "3",
+                "dashType": "diagonal"
             },
             "perpendicular": {
                 "width": "3",
-                "color": "orange"
+                "color": "orange",
+                "dashColor": "red",
+                "dashDistance": "2.5"
             },
             "no_parking": {
                 "width": "0.5",