diff --git a/footways.yaml b/footways.yaml index 3fe0a0e..eaa4cee 100644 --- a/footways.yaml +++ b/footways.yaml @@ -66,39 +66,34 @@ feature: {% if tags.sidewalk in ['no', 'none'] %} {% set sidewalk_left = 'no' %} {% set sidewalk_right = 'no' %} - {% set sides = sides|merge(['leftr', 'rightr']) %} {% endif %} {% if tags.sidewalk == 'separate' %} {% set sidewalk_left = 'separate' %} {% set sidewalk_right = 'separate' %} - {% set sides = sides|merge(['leftr', 'rightr']) %} {% endif %} {% if attribute(tags, 'sidewalk:both') %} {% set sidewalk_left = attribute(tags, 'sidewalk:both') %} {% set sidewalk_right = 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']) %} + {% set sides = sides|merge(['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']) %} + {% set sides = sides|merge(['right']) %} {% endif %} {% if type == 'node' %} @@ -251,22 +246,6 @@ feature: 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_right in ['no', 'none'] ? '#000000' : const.categories.sidewalk.color - }, }) }} {% endif %} style: @@ -334,30 +313,6 @@ feature: color: | {{ const.categories.sidewalk.color }} - style:leftr: - fill: false - 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: - fill: false - 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: | @@ -435,27 +390,6 @@ info: | }) }}</td> <td>{{ tagTrans('highway', 'cycleway segregated=yes') }}</td> </tr> - {% for k, d in const.sidewalks %} - <tr> - <td>{{ 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 - } - }) }}</td> - <td>{{ tagTrans('sidewalk', k) }}</td> - </tr> - {% endfor %} </table> filter: access: diff --git a/index.json b/index.json index 2d2f924..de2b7e7 100644 --- a/index.json +++ b/index.json @@ -205,6 +205,9 @@ { "id": "footways" }, + { + "id": "street-sidewalks" + }, { "id": "kerbs" } diff --git a/lang/en.json b/lang/en.json index 07f7664..5fa5392 100644 --- a/lang/en.json +++ b/lang/en.json @@ -99,6 +99,7 @@ "category:financial": "Financial", "category:fixme": "Fix Me", "category:footways": "Footways", + "category:street-sidewalks": "Sidewalks of Streets", "category:gastro-smoking": "Smokefree Gastronomy", "category:gastro": "Gastronomy", "category:health": "Health", diff --git a/street-sidewalks.yaml b/street-sidewalks.yaml new file mode 100644 index 0000000..9df3293 --- /dev/null +++ b/street-sidewalks.yaml @@ -0,0 +1,446 @@ +query: + 15: | + ( + way[footway=sidewalk]; + way["area:highway"=sidewalk]; + relation["area:highway"=sidewalk]; + relation[type=multipolygon][highway=sidewalk]; + way[sidewalk~"^(yes|both|left|right|no|separate|none)$"]; + way["sidewalk:left"~"(yes|no|separate)$"]; + way["sidewalk:right"~"(yes|no|separate)$"]; + way["sidewalk:both"~"(yes|no|separate)$"]; + ) +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.footway == 'sidewalk' %} + {% set sides = sides|merge(['main']) %} + {% endif %} + + {% if tags.sidewalk in ['no', 'none'] %} + {% set sidewalk_left = 'no' %} + {% set sidewalk_right = 'no' %} + {% set sides = sides|merge(['leftr', 'rightr']) %} + {% endif %} + + {% if tags.sidewalk == 'separate' %} + {% set sidewalk_left = 'separate' %} + {% set sidewalk_right = 'separate' %} + {% set sides = sides|merge(['leftr', 'rightr']) %} + {% endif %} + + {% if attribute(tags, 'sidewalk:both') %} + {% set sidewalk_left = attribute(tags, 'sidewalk:both') %} + {% set sidewalk_right = 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 %} + + 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) }} + {% elseif attribute(tags, 'area:highway') %} + {{ tagTrans('highway', attribute(tags, 'area:highway')) }} + {% endif %} + body: | + <ul> + {% if attribute(tags, 'sidewalk:left')|default(attribute(tags, 'sidewalk:both')) or tags.sidewalk in ['left', 'both'] %} + <li>{{ keyTrans('sidewalk:left') }}:<ul> + <li>{{ tagTrans('sidewalk', attribute(tags, 'sidewalk:left')|default(attribute(tags, 'sidewalk:both'))) }}</li> + {% if attribute(tags, 'sidewalk:left:width')|default(attribute(tags, 'sidewalk:both:width')) %}<li> + <span class='key'>{{ keyTrans('width') }}:</span> + <span class='value'>{{ attribute(tags, 'sidewalk:left:width')|default(attribute(tags, 'sidewalk:both:width'))|formatUnit }}</span> + </li>{% endif %} + {% if attribute(tags, 'sidewalk:left:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair')) %}<li> + <span class='key'>{{ keyTrans('wheelchair') }}:</span> + <span class='value'>{{ tagTrans('wheelchair', attribute(tags, 'sidewalk:left:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair'))) }}</span> + </li>{% endif %} + {% if attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface')) %}<li> + <span class='key'>{{ keyTrans('surface') }}:</span> + <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:left:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface'))) }}</span> + </li>{% endif %} + {% if attribute(tags, 'sidewalk:left:tactile_paving') %}<li> + <span class='key'>{{ keyTrans('tactile_paving') }}:</span> + <span class='value'>{{ tagTrans('tactile_paving', attribute(tags, 'sidewalk:left:tactile_paving')|default(attribute(tags, 'sidewalk:both:tactile_paving'))) }}</span> + </li>{% endif %} + {% if attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness')) %}<li> + <span class='key'>{{ keyTrans('smoothness') }}:</span> + <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:left:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness'))) }}</span> + </li>{% endif %} + {% set v = attribute(tags, 'sidewalk:left:incline')|default(attribute(tags, 'sidewalk:both:incline'))|default(tags.incline) %} + {% if v %}<li> + <span class='key'>{{ keyTrans('incline') }}:</span> + <span class='value'>{{ v in ['up', 'down', 'yes'] ? tagTrans('incline', v) : v }}</span> + </li>{% endif %} + </ul></li> + {% endif %} + + {% if attribute(tags, 'sidewalk:right')|default(attribute(tags, 'sidewalk:both')) or tags.sidewalk in ['right', 'both'] %} + <li>{{ keyTrans('sidewalk:right') }}:<ul> + <li>{{ tagTrans('sidewalk', attribute(tags, 'sidewalk:right')|default(attribute(tags, 'sidewalk:both'))) }}</li> + {% if attribute(tags, 'sidewalk:right:width')|default(attribute(tags, 'sidewalk:both:width')) %}<li> + <span class='key'>{{ keyTrans('width') }}:</span> + <span class='value'>{{ attribute(tags, 'sidewalk:right:width')|default(attribute(tags, 'sidewalk:both:width'))|formatUnit }}</span> + </li>{% endif %} + {% if attribute(tags, 'sidewalk:right:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair')) %}<li> + <span class='key'>{{ keyTrans('wheelchair') }}:</span> + <span class='value'>{{ tagTrans('wheelchair', attribute(tags, 'sidewalk:right:wheelchair')|default(attribute(tags, 'sidewalk:both:wheelchair'))) }}</span> + </li>{% endif %} + {% if attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface')) %}<li> + <span class='key'>{{ keyTrans('surface') }}:</span> + <span class='value'>{{ tagTrans('surface', attribute(tags, 'sidewalk:right:surface')|default(attribute(tags, 'sidewalk:both:surface'))|default(attribute(tags, 'sidewalk:surface'))) }}</span> + </li>{% endif %} + {% if attribute(tags, 'sidewalk:right:tactile_paving') %}<li> + <span class='key'>{{ keyTrans('tactile_paving') }}:</span> + <span class='value'>{{ tagTrans('tactile_paving', attribute(tags, 'sidewalk:right:tactile_paving')|default(attribute(tags, 'sidewalk:both:tactile_paving'))) }}</span> + </li>{% endif %} + {% if attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness')) %}<li> + <span class='key'>{{ keyTrans('smoothness') }}:</span> + <span class='value'>{{ tagTrans('smoothness', attribute(tags, 'sidewalk:right:smoothness')|default(attribute(tags, 'sidewalk:both:smoothness'))|default(attribute(tags, 'sidewalk:smoothness'))) }}</span> + </li>{% endif %} + {% set v = attribute(tags, 'sidewalk:right:incline')|default(attribute(tags, 'sidewalk:both:incline'))|default(tags.incline) %} + {% if i %}<li> + <span class='key'>{{ keyTrans('incline') }}:</span> + <span class='value'>{{ v in ['up', 'down', 'yes'] ? tagTrans('incline', v) : v }}</span> + </li>{% endif %} + </ul></li> + {% endif %} + </ul> + markerSymbol: "" + listMarkerSymbol: | + {% if tags.area == 'yes' or tags.type == 'multipolygon' or attribute(tags, 'area:highway') %} + polygon + {% else %} + {{ markerLine({ + 'styles': sides|join(','), + 'style:main': { + width: cycleway and tags.segregated == 'yes' ? 2 : const.categories[category].width|default(3), + color: const.categories[category].color, + dashArray: tags.highway == 'steps' ? '3,3' : + cycleway and tags.segregated != 'yes' ? '8,8' : + '', + lineCap: tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') ? 'butt' : 'round', + offset: cycleway and tags.segregated == 'yes' ? 1 : 0 + }, + 'style:left': { + width: 3, + offset: -6, + color: const.sidewalks[sidewalk_left].color + }, + 'style:right': { + width: 3, + offset: 6, + color: const.sidewalks[sidewalk_right].color + }, + 'style:leftr': { + width: sidewalk_left ? 5 : 0, + offset: -2.5, + opacity: 0.3, + dashArray: '1,10', + lineCap: butt, + color: const.sidewalks[sidewalk_left].color + }, + 'style:rightr': { + width: sidewalk_right ? 5 : 0, + offset: 2.5, + opacity: 0.3, + dashArray: '1,10', + lineCap: butt, + color: const.sidewalks[sidewalk_right].color + }, + }) }} + {% endif %} + style: + opacity: 0 + fillOpacity: 0 + width: 5 + style:main: + fill: | + {% if tags.area == 'yes' or tags.type == 'multipolygon' or attribute(tags, 'area:highway') %}true{% else %}false{% endif %} + width: | + {% if attribute(tags, 'area:highway') %} + 0 + {% elseif tags.area == 'yes' or tags.type == 'multipolygon' %} + 1 + {% else %} + {{ const.categories[category].width|default(3) }} + {% endif %} + color: | + {{ const.categories[category].color }} + dashArray: | + {% if tags.highway == 'steps' %} + 3,3 + {% elseif cycleway and tags.segregated != 'yes' %} + 8,8 + {% endif %} + lineCap: | + {% if tags.highway == 'steps' or (cycleway and tags.segregated != 'yes') %}butt{% else %}round{% endif %} + + style:left: + fill: false + width: 3 + offset: | + {{ -5 / map.metersPerPixel }} + color: | + {{ const.sidewalks[sidewalk_left].color }} + + style:right: + fill: false + width: 3 + offset: | + {{ 5 / map.metersPerPixel }} + color: | + {{ const.sidewalks[sidewalk_right].color }} + + style:leftr: + fill: false + width: | + {{ sidewalk_left ? 5 / map.metersPerPixel : 0 }} + offset: | + {{ -2.5 / map.metersPerPixel }} + opacity: 0.5 + dashArray: '1,10' + lineCap: butt + color: | + {{ const.sidewalks[sidewalk_left].color }} + + style:rightr: + fill: false + width: | + {{ sidewalk_right ? 5 / map.metersPerPixel : 0 }} + offset: | + {{ 2.5 / map.metersPerPixel }} + opacity: 0.5 + dashArray: '1,10' + lineCap: butt + color: | + {{ const.sidewalks[sidewalk_right].color }} + + styles: | + {{ sides|join(',') }} +info: | + <table> + {% for k, d in const.categories if k != 'cycleway' %} + <tr> + <td>{{ markerLine({ + width: d.width|default(3), + color: d.color, + dashArray: d.dashArray + }) }}</td> + <td>{{ tagTrans(d.key|default('highway'), k) }}</td> + </tr> + {% endfor %} + {% for k, d in const.sidewalks %} + <tr> + <td>{{ 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 + } + }) }}</td> + <td>{{ tagTrans('sidewalk', k) }}</td> + </tr> + {% endfor %} + </table> +filter: + access: + name: '{{ keyTrans("access") }}' + type: select + placeholder: '<{{ trans("any value") }}>' + valueName: '{{ tagTrans("access", value) }}' + values: + 'yes': {} + private: {} + permissive: {} + customers: {} + discouraged: {} + '!': + name: <{{ trans('empty value') }}> + query: nwr[!access] + weight: -3 + '?': + name: <{{ trans("other") }}> + query: nwr[access]["access"!~"^(public|private|permissive|customers|discouraged|unknown|yes)$"] + weight: -2 + unknown: + name: '<{{ trans("unknown") }}>' + query: nwr["access"="unknown"] + weight: -1 + surface: + name: '{{ keyTrans("surface") }}' + type: select + placeholder: '<{{ trans("any value") }}>' + valueName: '{{ tagTrans("surface", value) }}' + query: | + {% if value == 'all_paved' %} + {% set value = "(paved|asphalt|chipseal|concrete|concrete:lanes|concrete:plates|paving_stones|sett|unhewn_cobblestone|cobblestone|metal|wood|rubber)" %} + {% elseif value == 'all_unpaved' %} + {% set value = "(unpaved|compacted|fine_gravel|gravel|rock|pebblestone|ground|dirt|earth|grass|grass_paver|mud|sand|woodchips|snow|ice|salt|clay)" %} + {% endif %} + + ( + nwr[!sidewalk][!"sidewalk:both"][!"sidewalk:right"][!"sidewalk:left"][surface~"^{{ value }}$"]; + nwr[~"sidewalk(:left|:right|:both|):surface"~"^{{ value }}$"]; + ) + values: + all_paved: + name: "<{{ tagTrans('surface', 'paved') }}>" + weight: -1 + all_unpaved: + name: "<{{ tagTrans('surface', 'unpaved') }}>" + weight: -1 + acrylic: {} + artificial_turf: {} + asphalt: {} + carpet: {} + chipseal: {} + clay: {} + cobblestone: {} + compacted: {} + concrete: {} + concrete:lanes: {} + concrete:plates: {} + dirt: {} + earth: {} + fine_gravel: {} + grass: {} + grass_paver: {} + gravel: {} + ground: {} + ice: {} + metal: {} + metal_grid: {} + mud: {} + paved: {} + paving_stones: {} + pebblestone: {} + rock: {} + rubber: {} + salt: {} + sand: {} + sett: {} + snow: {} + stepping_stones: {} + tartan: {} + unhewn_cobblestone: {} + unpaved: {} + wood: {} + woodchips: {} + '!': + name: <{{ trans('empty value') }}> + query: | + ( + nwr[!sidewalk][!"sidewalk:both"][!"sidewalk:right"][!"sidewalk:left"][!"surface"]; + nwr["sidewalk:left"="yes"][!"sidewalk:left:surface"]; + nwr["sidewalk:right"="yes"][!"sidewalk:right:surface"]; + nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:left:surface"]; + nwr["sidewalk:both"="yes"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:right:surface"]; + nwr["sidewalk"="left"][!"sidewalk:left:surface"]; + nwr["sidewalk"="right"][!"sidewalk:right:surface"]; + nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:left:surface"]; + nwr["sidewalk"="both"][!"sidewalk:both:surface"][!"sidewalk:surface"][!"sidewalk:right:surface"]; + ) + weight: -4 + '?': + name: <{{ trans("other") }}> + query: nwr[surface]["surface"!~"^(acrylic|artificial_turf|asphalt|carpet|chipseal|clay|cobblestone|compacted|concrete|concrete:lanes|concrete:plates|dirt|earth|fine_gravel|grass|grass_paver|gravel|ground|ice|metal|metal_grid|mud|paved|paving_stones|pebblestone|rock|rubber|salt|sand|sett|snow|stepping_stones|tartan|unhewn_cobblestone|unpaved|wood|woodchips)$"] + weight: -3 + unknown: + name: '<{{ trans("unknown") }}>' + weight: -2 + smoothness: + name: '{{ keyTrans("smoothness") }}' + type: select + placeholder: '<{{ trans("any value") }}>' + valueName: '{{ tagTrans("smoothness", value) }}' + query: '(nwr[smoothness="{{ value }}"];nwr[~"sidewalk:(left|right|both):smoothness"~"{{ value }}"];)' + values: + bad: {} + excellent: {} + good: {} + horrible: {} + impassable: {} + intermediate: {} + very_bad: {} + very_horrible: {} + '!': + name: <{{ trans('empty value') }}> + query: | + ( + nwr[!"smoothness"]; + nwr["sidewalk:left"="yes"][!"sidewalk:left:smoothness"]; + nwr["sidewalk:right"="yes"][!"sidewalk:right:smoothness"]; + nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:left:smoothness"]; + nwr["sidewalk:both"="yes"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:right:smoothness"]; + nwr["sidewalk"="left"][!"sidewalk:left:smoothness"]; + nwr["sidewalk"="right"][!"sidewalk:right:smoothness"]; + nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:left:smoothness"]; + nwr["sidewalk"="both"][!"sidewalk:both:smoothness"][!"sidewalk:smoothness"][!"sidewalk:right:smoothness"]; + ) + weight: -3 + '?': + name: <{{ trans("other") }}> + query: nwr[smoothness]["smoothness"!~"^(bad|excellent|good|horrible|impassable|intermediate|very_bad|very_horrible)$"] + weight: -2 + unknown: + name: '<{{ trans("unknown") }}>' + weight: -1 +const: + categories: + sidewalk: + color: '#ff007f' + key: footway + sidewalks: + 'separate': + color: '#ff007f' + styles: 'leftr' + 'yes': + color: '#af0000' + styles: 'leftr,left' + 'no': + color: '#000000' + styles: 'leftr'