diff --git a/cycle_infrastructure.json b/cycle_infrastructure.json
new file mode 100644
index 0000000..fdf1ab0
--- /dev/null
+++ b/cycle_infrastructure.json
@@ -0,0 +1,130 @@
+{
+ "type": "overpass",
+ "query": {
+ "14": [
+ "(",
+ "way[highway=cycleway];",
+ ")"
+ ],
+ "16": [
+ "(",
+ "way[highway][highway!~'^(motorway.*|trunk.*|footway|service|steps|platform|corridor)$'][bicycle!=no];",
+ "way[highway~'^(cycleway|living_street)$'];",
+ "way[bicycle~'^(yes|designated)$'];",
+ "way[cycleway];",
+ ")"
+ ]
+ },
+ "feature": {
+ "pre": [
+ "{% set forward = false %}",
+ "{% set backward = false %}",
+ "{% set cycleway = tags.cycleway|split(';') %}",
+ "{% set road_type = const[tags.highway] ? tags.highway : 'default' %}",
+ "{% set oneway = attribute(tags, 'oneway:bicycle')|default(tags.oneway) %}",
+ "{% if tags.highway == 'path' and tags.bicycle == 'designated' %}{% set road_type = 'cycleway' %}{% endif %}",
+ "{% if oneway in ['yes', '1'] %}{% set forward = road_type %}{% elseif oneway in ['-1'] %}{% set backward = road_type %}{% else %}{% set forward = road_type %}{% set backward = road_type %}{% endif %}",
+ "{% for c in cycleway %}",
+ " {% if c in ['opposite', 'opposite_lane', 'opposite_track'] %}{% set backward = c|slice(9)|default(road_type) %}{% endif %}",
+ " {% if const[c] %}{% if oneway in ['yes', '1', '-1'] %}{% set forward = c %}{% else %}{% set forward = c %}{% set backward = c %}{% endif %}{% endif %}",
+ "{% endfor %}"
+ ],
+ "body": [
+ "{{ keyTrans('highway') }}: {{ tagTrans('highway', tags.highway) }}
",
+ "{% if tags.cycleway %}{{ keyTrans('cycleway') }}: {% for c in cycleway %}{{ tagTrans('cycleway', c) }} {% endfor %}
{% endif %}",
+ "{% if tags.surface %}{{ keyTrans('surface') }}: {{ tagTrans('surface', tags.surface) }}
{% endif %}"
+ ],
+ "markerSymbol": null,
+ "listMarkerSymbol": "line",
+ "styles": "{% if forward and backward and forward == backward %}default{% else %}{% if forward %},forward{% endif %}{% if backward %},backward{% endif %}{% endif %}",
+ "style": {
+ "color": "{{ const[forward].color }}",
+ "fill": "{% if tags.area == 'yes' %}true{% else %}false{% endif %}",
+ "width": "{% if tags.area == 'yes' %}0{% else %}{{ const[forward].width }}{% endif %}"
+ },
+ "style:forward": {
+ "width": "0",
+ "fill": "false",
+ "pattern": "arrowHead",
+ "pattern-offset": "8",
+ "pattern-repeat": "60",
+ "pattern-polygon": "true",
+ "pattern-pixelSize": "9",
+ "pattern-angleCorrection": "0",
+ "pattern-path-width": "0",
+ "pattern-path-color": "{{ const[forward].color }}",
+ "pattern-path-fillOpacity": "1",
+ "pattern-lineOffset": "0",
+ "pattern2": "dash",
+ "pattern2-offset": "50",
+ "pattern2-repeat": "60",
+ "pattern2-pixelSize": "22",
+ "pattern2-path-width": "{{ const[forward].width }}",
+ "pattern2-path-color": "{{ const[forward].color }}",
+ "pattern2-lineOffset": "0",
+ "pattern2-path-lineCap": "butt",
+ "pattern2-path-fillOpacity": "1"
+ },
+ "style:backward": {
+ "width": "0",
+ "fill": "false",
+ "pattern": "arrowHead",
+ "pattern-offset": "10",
+ "pattern-repeat": "60",
+ "pattern-polygon": "true",
+ "pattern-pixelSize": "9",
+ "pattern-angleCorrection": "180",
+ "pattern-path-width": "0",
+ "pattern-path-color": "{{ const[backward].color }}",
+ "pattern-path-fillOpacity": "1",
+ "pattern-lineOffset": "0",
+ "pattern2": "dash",
+ "pattern2-offset": "25",
+ "pattern2-repeat": "60",
+ "pattern2-pixelSize": "22",
+ "pattern2-path-width": "{{ const[backward].width }}",
+ "pattern2-path-color": "{{ const[backward].color }}",
+ "pattern2-lineOffset": "0",
+ "pattern2-path-lineCap": "butt",
+ "pattern2-path-fillOpacity": "1"
+ }
+ },
+ "const": {
+ "cycleway": {
+ "width": "3",
+ "color": "#005f00"
+ },
+ "track": {
+ "width": "3",
+ "color": "#005f00"
+ },
+ "lane": {
+ "width": "3",
+ "color": "#00af00"
+ },
+ "share_busway": {
+ "width": "3",
+ "color": "#5f0000"
+ },
+ "footway": {
+ "width": "3",
+ "color": "#005faf"
+ },
+ "path": {
+ "width": "3",
+ "color": "#005faf"
+ },
+ "pedestrian": {
+ "width": "4",
+ "color": "#00afaf"
+ },
+ "living_street": {
+ "width": "4",
+ "color": "#005f5f"
+ },
+ "default": {
+ "width": "4",
+ "color": "#000000"
+ }
+ }
+}
diff --git a/index.json b/index.json
index e2c2824..282faa9 100644
--- a/index.json
+++ b/index.json
@@ -176,6 +176,9 @@
{
"id": "cycle_amenities"
},
+ {
+ "id": "cycle_infrastructure"
+ },
{
"id": "cycle_routes"
}
diff --git a/lang/en.json b/lang/en.json
index 03ed02d..5db4d23 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -23,6 +23,7 @@
"category:culture": "Culture",
"category:culture_religion": "Culture and Religion",
"category:cycle_amenities": "Amenities",
+ "category:cycle_infrastructure": "Cycling Infrastructure",
"category:cycle_routes": "Cycle Routes",
"category:developable_areas": "Developable Areas",
"category:developments": "Planning and Construction",