diff --git a/footways.yaml b/footways.yaml new file mode 100644 index 0000000..0b39fda --- /dev/null +++ b/footways.yaml @@ -0,0 +1,434 @@ +query: + 15: | + ( + way[highway~"^(footway|pedestrian|steps|path|platform)$"]; + way[highway=cycleway][foot~"^(yes|designated)$"]; + way[footway]; + way[sidewalk~"^(yes|both|left|right|no|none)$"]; + way["sidewalk:left"~"(yes|no|separate)$"]; + way["sidewalk:right"~"(yes|no|separate)$"]; + way["sidewalk:both"~"(yes|no|separate)$"]; + nwr["railway"="platform"]; + node[highway=crossing]; + ) +feature: + pre: | + {% set sides = ['default'] %} + {% set sidewalk_left = null %}{% set sidewalk_right = null %} + {% set category = tags.highway %} + + {% if attribute(tags, 'sidewalk:both') == 'yes' or tags.sidewalk in ['yes', 'both', 'left', 'both', 'right'] or tags.footway == 'sidewalk' %} + {% set category = 'sidewalk' %} + {% endif %} + + {% if tags.highway in ['pedestrian', 'footway','steps','path','cycleway','platform'] %} + {% set sides = sides|merge(['main']) %} + {% endif %} + + {% if tags.railway in ['platform'] %} + {% set sides = sides|merge(['main']) %} + {% set category = 'platform' %} + {% endif %} + + {% set foot = false %} + {% if tags.highway not in ['pedestrian', 'footway', 'path'] and tags.foot in ['yes', 'designated'] %} + {% set foot = tags.foot %} + {% set sides = sides|merge(['foot']) %} + {% endif %} + + {% if tags.footway == 'crossing' %} + {% set category = 'crossing' %} + {% endif %} + + {% if tags.sidewalk in ['no', 'none'] %} + {% set sidewalk_left = 'no' %} + {% set sidewalk_right = 'no' %} + {% set sides = sides|merge(['leftr', 'rightr']) %} + {% endif %} + + {% if attribute(tags, 'sidewalk:both') %} + {% set sidewalk_left = attribute(tags, 'sidewalk:both') %} + {% set sides = sides|merge(['leftr', 'rightr']) %} + {% endif %} + + {% if attribute(tags, 'sidewalk:left') %} + {% set sidewalk_left = attribute(tags, 'sidewalk:left') %} + {% set sides = sides|merge(['leftr']) %} + {% endif %} + + {% if attribute(tags, 'sidewalk:left') == 'yes' or attribute(tags, 'sidewalk:both') == 'yes' or tags.sidewalk in ['left', 'both'] %} + {% set sidewalk_left = 'yes' %} + {% set sides = sides|merge(['leftr', 'left']) %} + {% endif %} + + {% if attribute(tags, 'sidewalk:right') %} + {% set sidewalk_right = attribute(tags, 'sidewalk:right') %} + {% set sides = sides|merge(['rightr']) %} + {% endif %} + + {% if attribute(tags, 'sidewalk:right') == 'yes' or attribute(tags, 'sidewalk:both') == 'yes' or tags.sidewalk in ['right', 'both'] %} + {% set sidewalk_right = 'yes' %} + {% set sides = sides|merge(['rightr', 'right']) %} + {% endif %} + + {% if type == 'node' %} + {% set sides = ['node'] %} + {% endif %} + description: | + {% if tags.footway %} + {{ tagTrans('footway', tags.footway) }} + {% elseif tags.highway %} + {% if tags.highway in ['path', 'cycleway'] and tags.segregated %} + {{ tagTrans('highway', 'cycleway segregated=' ~ tags.segregated) }} + {% else %} + {{ tagTrans('highway', tags.highway) }} + {% endif %} + {% elseif tags.railway %} + {{ tagTrans('railway', tags.railway) }} + {% endif %} + body: | + + markerSymbol: "" + listMarkerSymbol: | + {% if tags.area == 'yes' %} + polygon + {% elseif 'node' in sides %} + {{ markerCircle({ width: 0, radius: 5, fillOpacity: 1, fill: true, color: const.categories[category].color }) }} + {% else %} + {{ markerLine({ + 'styles': sides|join(','), + 'style:main': { + width: foot and tags.segregated == 'yes' ? 2 : const.categories[category].width|default(3), + color: const.categories[category].color, + dashArray: tags.highway == 'steps' or (foot and tags.segregated != 'yes') ? '3,3' : '', + lineCap: tags.highway == 'steps' or (foot and tags.segregated != 'yes') ? 'butt' : 'round', + offset: foot and tags.segregated == 'yes' ? 1 : 0 + }, + 'style:foot': { + fill: false, + width: foot and tags.segregated == 'yes' ? 2 : 3, + color: const.categories.footway.color, + dashArray: foot and tags.segregated != 'yes' ? '3,3' : '', + dashOffset: 3, + lineCap: foot and tags.segregated != 'yes' ? 'butt' : 'round', + offset: foot and tags.segregated == 'yes' ? -1 : 0 + }, + 'style:left': { + width: 3, + offset: -6, + color: const.categories.sidewalk.color + }, + 'style:right': { + width: 3, + offset: 6, + color: const.categories.sidewalk.color + }, + 'style:leftr': { + width: sidewalk_left ? 5 : 0, + offset: -2.5, + opacity: 0.3, + dashArray: '1,10', + lineCap: butt, + color: sidewalk_left in ['no', 'none'] ? '#000000' : const.categories.sidewalk.color + }, + 'style:rightr': { + width: sidewalk_right ? 5 : 0, + offset: 2.5, + opacity: 0.3, + dashArray: '1,10', + lineCap: butt, + color: sidewalk_left in ['no', 'none'] ? '#000000' : const.categories.sidewalk.color + }, + }) }} + {% endif %} + style: + opacity: 0 + fillOpacity: 0 + width: 5 + style:node: + width: 0 + radius: 5 + fillOpacity: 1 + fill: true + color: | + {{ const.categories[category].color }} + style:main: + fill: | + {% if tags.area == 'yes' %}true{% else %}false{% endif %} + width: | + {% if tags.area == 'yes' %} + 1 + {% elseif foot and tags.segregated == 'yes' %} + 2 + {% else %} + {{ const.categories[category].width|default(3) }} + {% endif %} + color: | + {{ const.categories[category].color }} + dashArray: | + {% if tags.highway == 'steps' or (foot and tags.segregated != 'yes') %} + 3,3 + {% endif %} + lineCap: | + {% if tags.highway == 'steps' or (foot and tags.segregated != 'yes') %}butt{% else %}round{% endif %} + offset: | + {% if foot and tags.segregated == 'yes' %}1{% else %}0{% endif %} + style:foot: + fill: false + width: | + {% if foot and tags.segregated == 'yes' %} + 2 + {% else %} + 3 + {% endif %} + color: | + {{ const.categories.footway.color }} + dashArray: | + {% if foot and tags.segregated != 'yes' %} + 3,3 + {% endif %} + dashOffset: 3 + lineCap: | + {% if foot and tags.segregated != 'yes' %}butt{% else %}round{% endif %} + offset: | + {% if foot and tags.segregated == 'yes' %}-1{% else %}0{% endif %} + style:left: + width: 3 + offset: | + {{ -5 / map.metersPerPixel }} + color: | + {{ const.categories.sidewalk.color }} + style:right: + width: 3 + offset: | + {{ 5 / map.metersPerPixel }} + color: | + {{ const.categories.sidewalk.color }} + + style:leftr: + width: | + {{ sidewalk_left ? 5 / map.metersPerPixel : 0 }} + offset: | + {{ -2.5 / map.metersPerPixel }} + opacity: 0.3 + dashArray: '1,10' + lineCap: butt + color: | + {{ sidewalk_left in ['no', 'none'] ? '#000000' : const.categories.sidewalk.color }} + + style:rightr: + width: | + {{ sidewalk_right ? 5 / map.metersPerPixel : 0 }} + offset: | + {{ 2.5 / map.metersPerPixel }} + opacity: 0.3 + dashArray: '1,10' + lineCap: butt + color: | + {{ sidewalk_right in ['no', 'none'] ? '#000000' : const.categories.sidewalk.color }} + + styles: | + {{ sides|join(',') }} +info: | + + {% for k, d in const.categories if k != 'cycleway' %} + + + + + {% endfor %} + + + + + + + + + + + + + {% for k, d in const.sidewalks %} + + + + + {% endfor %} +
{{ markerLine({ + width: d.width|default(3), + color: d.color, + dashArray: d.dashArray + }) }}{{ tagTrans(d.key|default('highway'), k) }}
{{ markerCircle({ + width: 0, + radius: 5, + fillOpacity: 1, + fill: true, + color: const.categories.crossing.color + }) }}{{ tagTrans('highway', 'crossing') }}
{{ markerLine({ + styles: 'default,foot', + style: { + width: 4, + color: const.categories.cycleway.color, + dashArray: '3,3' + }, + 'style:foot': { + width: 4, + color: const.categories.footway.color, + dashArray: '3,3', + dashOffset: 3 + } + }) }}{{ tagTrans('highway', 'cycleway segregated=no') }}
{{ markerLine({ + styles: 'default,foot', + style: { + width: 2, + color: const.categories.cycleway.color, + offset: -1 + }, + 'style:foot': { + width: 2, + color: const.categories.footway.color, + offset: 1 + } + }) }}{{ tagTrans('highway', 'cycleway segregated=yes') }}
{{ markerLine({ + styles: d.styles, + 'style:leftr': { + width: 9, + offset: -1, + opacity: 0.3, + dashArray: '1,10', + lineCap: butt, + color: d.color + }, + 'style:left': { + width: 3, + offset: -7, + color: d.color + } + }) }}{{ tagTrans('sidewalk', k) }}
+const: + categories: + sidewalk: + color: '#ff007f' + key: footway + pedestrian: + color: '#ff00c8' + width: 5 + footway: + color: '#ab00ff' + path: + color: '#ee922d' + steps: + color: '#ab00ff' + dashArray: '3,3' + crossing: + color: '#964e00' + cycleway: + color: '#002aff' + platform: + key: railway + color: '#00ff00' + sidewalks: + 'yes': + color: '#ff007f' + styles: 'leftr,left' + 'separate': + color: '#ff007f' + styles: 'leftr' + 'no': + color: '#000000' + styles: 'leftr' diff --git a/index.json b/index.json index 6f11775..556f750 100644 --- a/index.json +++ b/index.json @@ -157,6 +157,12 @@ }, { "id": "hiking_routes" + }, + { + "id": "footways" + }, + { + "id": "kerbs" } ] }, diff --git a/kerbs.yaml b/kerbs.yaml new file mode 100644 index 0000000..f21b7d7 --- /dev/null +++ b/kerbs.yaml @@ -0,0 +1,85 @@ +query: + 14: (way[kerb];way[barrier=kerb];node[kerb];node[barrier=kerb];) +feature: + pre: | + {% set kerb = 'unknown' %} + {% if const.kerb[tags.kerb] %} + {% set kerb = tags.kerb %} + {% endif %} + + description: | + {{ tagTrans('barrier', 'kerb') }} + body: | + + markerSymbol: + listMarkerSymbol: | + {% if type == 'way' %} + line + {% else %} + {{ markerCircle({ radius: 5, width: 2, fillOpacity: 1, fillColor: const.kerb[kerb], color: const.wheelchair[wheelchair] }) }} + {% endif %} + details: | + {% if tags.kerb and tags.kerb != 'yes' %}{{ tagTrans('kerb', tags.kerb) }}{% endif %} + {% if tags.height %}({{ tags.height }}){% endif %} + styles: | + {% if type == 'way' %} + default,marker + {% else %} + node + {% endif %} + style: + color: | + {{ const.kerb[kerb] }} + fill: | + {{ type == 'way' ? false : true }} + radius: 4 + fillOpacity: 1 + width: 2 + style:marker: + color: | + {{ const.kerb[kerb] }} + offset: 2 + width: 2 + fill: false + dashArray: '2,9' + style:node: + fillColor: | + {{ const.kerb[kerb] }} + fill: true + radius: 6 + fillOpacity: 1 + width: 1 + color: black + {{ const.wheelchair[wheelchair] }} +info: | + {{ tagTrans('barrier', 'kerb') }}: + + {% for v, color in const.kerb %} + + + + + {% endfor %} +
+ {{ markerLine({ styles: 'default,marker', style: { width: 2, color: color }, 'style:marker': { width: 2, offset: 2, color: color, dashArray: '2,9'} } ) }} + {{ markerCircle({ radius: 4, width: 1, fillOpacity: 1, fillColor: color, color: 'black' }) }} + {{ v == 'unknown' ? trans('unknown') : tagTrans('kerb', v) }}
+const: + kerb: + flush: '#00af00' + lowered: '#007f7f' + no: '#000000' + raised: '#af0000' + rolled: '#af7f00' + unknown: '#7f7f7f' + wheelchair: + designated: '#00ff7f' + yes: '#00ff00' + no: '#ff0000' + limited: '#ffff00' + unknown: '#ffffff' diff --git a/lang/en.json b/lang/en.json index 4cf78c5..99f651c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -33,6 +33,7 @@ "category:energy": "Energy", "category:financial": "Financial", "category:fixme": "Fix Me", + "category:footways": "Footways", "category:gastro": "Gastronomy", "category:gastro-smoking": "Smokefree Gastronomy", "category:health": "Health", @@ -42,6 +43,7 @@ "category:index": "Index of Categories", "category:infrastructure": "Infrastructure", "category:internet": "Internet access", + "category:kerbs": "Kerbs", "category:law": "Law", "category:leisure": "Leisure", "category:leisure_sport_shopping": "Leisure, Sport and Shopping",