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: |
+
+ {% if 'main' in sides or 'node' in sides %}
+ {% if tags.crossing %}-
+ {{ keyTrans('crossing') }}:
+ {{ tagTrans('crossing', tags.crossing) }}
+
{% endif %}
+ {% if tags.width %}-
+ {{ keyTrans('width') }}:
+ {{ tags.width|formatUnit }}
+
{% endif %}
+ {% if tags.wheelchair %}-
+ {{ keyTrans('wheelchair') }}:
+ {{ tagTrans('wheelchair', tags.wheelchair) }}
+
{% endif %}
+ {% if tags.surface %}-
+ {{ keyTrans('surface') }}:
+ {{ tagTrans('surface', tags.surface) }}
+
{% endif %}
+ {% if tags.tactile_paving %}-
+ {{ keyTrans('tactile_paving') }}:
+ {{ tagTrans('tactile_paving', tags.tactile_paving) }}
+
{% endif %}
+ {% if tags.smoothness %}-
+ {{ keyTrans('smoothness') }}:
+ {{ tagTrans('smoothness', tags.smoothness) }}
+
{% endif %}
+ {% set v = tags.incline %}
+ {% if v %}-
+ {{ keyTrans('incline') }}:
+ {{ v in ['up', 'down', 'yes'] ? tagTrans('incline', v) : v }}
+
{% endif %}
+ {% endif %}
+
+ {% if attribute(tags, 'sidewalk:left')|default(attribute(tags, 'sidewalk:both')) %}
+ - {{ keyTrans('sidewalk:left') }}:
+ - {{ tagTrans('sidewalk', attribute(tags, 'sidewalk:left')|default(attribute(tags, 'sidewalk:both'))) }}
+ {% if attribute(tags, 'sidewalk:left:width')|default(attribute(tags, 'sidewalk:both:width')) %}-
+ {{ keyTrans('width') }}:
+ {{ attribute(tags, 'sidewalk:left:width')|default(attribute(tags, 'sidewalk:both:width'))|formatUnit }}
+
{% endif %}
+ {% if attribute(tags, 'sidewalk:left:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair')) %}-
+ {{ keyTrans('wheelchair') }}:
+ {{ tagTrans('wheelchair', attribute(tags, 'sidewalk:left:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair'))) }}
+
{% endif %}
+ {% if attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface')) %}-
+ {{ keyTrans('surface') }}:
+ {{ tagTrans('surface', attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface'))) }}
+
{% endif %}
+ {% if attribute(tags, 'sidewalk:left:tactile_paving') %}-
+ {{ keyTrans('tactile_paving') }}:
+ {{ tagTrans('tactile_paving', attribute(tags, 'sidewalk:left:tactile_paving')|default(attribute(tags, 'sidewalk:both:tactile_paving'))) }}
+
{% endif %}
+ {% if attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness')) %}-
+ {{ keyTrans('smoothness') }}:
+ {{ tagTrans('smoothness', attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))) }}
+
{% endif %}
+ {% set v = attribute(tags, 'sidewalk:left:incline')|default(attribute(tags, 'sidewalk:both:incline'))|default(tags.incline) %}
+ {% if v %}-
+ {{ keyTrans('incline') }}:
+ {{ v in ['up', 'down', 'yes'] ? tagTrans('incline', v) : v }}
+
{% endif %}
+
+ {% endif %}
+
+ {% if attribute(tags, 'sidewalk:right')|default(attribute(tags, 'sidewalk:both')) %}
+ - {{ keyTrans('sidewalk:right') }}:
+ - {{ tagTrans('sidewalk', attribute(tags, 'sidewalk:right')|default(attribute(tags, 'sidewalk:both'))) }}
+ {% if attribute(tags, 'sidewalk:right:width')|default(attribute(tags, 'sidewalk:both:width')) %}-
+ {{ keyTrans('width') }}:
+ {{ attribute(tags, 'sidewalk:right:width')|default(attribute(tags, 'sidewalk:both:width'))|formatUnit }}
+
{% endif %}
+ {% if attribute(tags, 'sidewalk:right:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair')) %}-
+ {{ keyTrans('wheelchair') }}:
+ {{ tagTrans('wheelchair', attribute(tags, 'sidewalk:right:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair'))) }}
+
{% endif %}
+ {% if attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface')) %}-
+ {{ keyTrans('surface') }}:
+ {{ tagTrans('surface', attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface'))) }}
+
{% endif %}
+ {% if attribute(tags, 'sidewalk:right:tactile_paving') %}-
+ {{ keyTrans('tactile_paving') }}:
+ {{ tagTrans('tactile_paving', attribute(tags, 'sidewalk:right:tactile_paving')|default(attribute(tags, 'sidewalk:both:tactile_paving'))) }}
+
{% endif %}
+ {% if attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness')) %}-
+ {{ keyTrans('smoothness') }}:
+ {{ tagTrans('smoothness', attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))) }}
+
{% endif %}
+ {% set v = attribute(tags, 'sidewalk:right:incline')|default(attribute(tags, 'sidewalk:both:incline'))|default(tags.incline) %}
+ {% if i %}-
+ {{ keyTrans('incline') }}:
+ {{ v in ['up', 'down', 'yes'] ? tagTrans('incline', v) : v }}
+
{% endif %}
+
+ {% endif %}
+
+ 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' %}
+
+ {{ markerLine({
+ width: d.width|default(3),
+ color: d.color,
+ dashArray: d.dashArray
+ }) }} |
+ {{ tagTrans(d.key|default('highway'), k) }} |
+
+ {% endfor %}
+
+ {{ 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') }} |
+
+ {% for k, d in const.sidewalks %}
+
+ {{ 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) }} |
+
+ {% endfor %}
+
+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: |
+
+ - {{ keyTrans('kerb') }}: {{ tags.kerb ? tagTrans('kerb', tags.kerb) : trans('unknown') }}
+ - {{ keyTrans('wheelchair') }}: {{ tags.wheelchair ? tagTrans('wheelchair', tags.wheelchair) : trans('unknown') }}
+ - {{ keyTrans('tactile_paving') }}: {{ tags.tactile_paving ? tagTrans('tactile_paving', tags.tactile_paving) : trans('unknown') }}
+ - {{ keyTrans('height') }}: {{ 'height' in tags ? tags.height : trans('unknown') }}
+
+ 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 %}
+
+
+ {{ 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) }} |
+
+ {% endfor %}
+
+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",