diff --git a/assets/layers/guidepost/guidepost.json b/assets/layers/guidepost/guidepost.json
index 6fd27bcc42..daa687c5dd 100644
--- a/assets/layers/guidepost/guidepost.json
+++ b/assets/layers/guidepost/guidepost.json
@@ -48,6 +48,50 @@
}
],
"tagRenderings": [
- "images"
+ "images",
+ {
+ "id": "type",
+ "question": {
+ "en": "What kind of routes are shown on this guidepost?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "bicycle=yes",
+ "ifnot": "bicycle=",
+ "then": {
+ "en": "This guidepost shows bicycle routes"
+ }
+ },
+ {
+ "if": "hiking=yes",
+ "ifnot": "hiking=",
+ "then": {
+ "en": "This guidepost shows hiking routes"
+ }
+ },
+ {
+ "if": "mtb=yes",
+ "ifnot": "mtb=",
+ "then": {
+ "en": "This guidepost shows mountain bike routes"
+ }
+ },
+ {
+ "if": "horse=yes",
+ "ifnot": "horse=",
+ "then": {
+ "en": "This guidepost shows horse riding routes"
+ }
+ },
+ {
+ "if": "ski=yes",
+ "ifnot": "ski=",
+ "then": {
+ "en": "This guidepost shows ski routes"
+ }
+ }
+ ]
+ }
]
-}
+}
\ No newline at end of file
diff --git a/assets/layers/route_marker/bicycle_route_marker.jpg b/assets/layers/route_marker/bicycle_route_marker.jpg
new file mode 100644
index 0000000000..6a576df9f8
Binary files /dev/null and b/assets/layers/route_marker/bicycle_route_marker.jpg differ
diff --git a/assets/layers/route_marker/bicycle_route_marker.jpg.license b/assets/layers/route_marker/bicycle_route_marker.jpg.license
new file mode 100644
index 0000000000..28cb665ca7
--- /dev/null
+++ b/assets/layers/route_marker/bicycle_route_marker.jpg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Segubi
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/layers/route_marker/license_info.json b/assets/layers/route_marker/license_info.json
new file mode 100644
index 0000000000..0786ccda38
--- /dev/null
+++ b/assets/layers/route_marker/license_info.json
@@ -0,0 +1,28 @@
+[
+ {
+ "path": "bicycle_route_marker.jpg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Segubi"
+ ],
+ "sources": [
+ "https://wiki.openstreetmap.org/wiki/File:Route_marker_Germany_Zwischenwegweiser_Radverkehrsnetz_NRW.jpg"
+ ]
+ },
+ {
+ "path": "route_marker.svg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Robin van der Linde"
+ ],
+ "sources": []
+ },
+ {
+ "path": "walking_route_marker.jpg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Robin van der Linde"
+ ],
+ "sources": []
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/route_marker/route_marker.json b/assets/layers/route_marker/route_marker.json
new file mode 100644
index 0000000000..39e4951958
--- /dev/null
+++ b/assets/layers/route_marker/route_marker.json
@@ -0,0 +1,97 @@
+{
+ "id": "route_marker",
+ "name": {
+ "en": "Route markers"
+ },
+ "description": {
+ "en": "Route markers are small markers often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route."
+ },
+ "source": {
+ "osmTags": "information=route_marker"
+ },
+ "minzoom": 14,
+ "presets": [
+ {
+ "title": {
+ "en": "a route marker"
+ },
+ "tags": [
+ "tourism=information",
+ "information=route_marker"
+ ],
+ "description": {
+ "en": "A route marker is a small marker often found along official hiking/cycling/riding/skiing routes to indicate the direction of the route."
+ },
+ "exampleImages": [
+ "./assets/layers/route_marker/bicycle_route_marker.jpg",
+ "./assets/layers/route_marker/walking_route_marker.jpg"
+ ]
+ }
+ ],
+ "deletion": true,
+ "allowMove": {
+ "enableImproveAccuracy": true,
+ "enableRelocation": false
+ },
+ "title": {
+ "render": {
+ "en": "Route marker"
+ }
+ },
+ "mapRendering": [
+ {
+ "location": [
+ "centroid",
+ "point"
+ ],
+ "icon": "./assets/layers/route_marker/route_marker.svg"
+ }
+ ],
+ "tagRenderings": [
+ "images",
+ {
+ "id": "type",
+ "question": {
+ "en": "For what kind of route is this marker?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "bicycle=yes",
+ "ifnot": "biycle=",
+ "then": {
+ "en": "This is a route marker for a bicycle route."
+ }
+ },
+ {
+ "if": "hiking=yes",
+ "ifnot": "hiking=",
+ "then": {
+ "en": "This is a route marker for a hiking route."
+ }
+ },
+ {
+ "if": "mtb=yes",
+ "ifnot": "mtb=",
+ "then": {
+ "en": "This is a route marker for a mountain bike route."
+ }
+ },
+ {
+ "if": "horse=yes",
+ "ifnot": "horse=",
+ "then": {
+ "en": "This is a route marker for a horse riding route."
+ }
+ },
+ {
+ "if": "ski=yes",
+ "ifnot": "ski=",
+ "then": {
+ "en": "This is a route marker for a ski route."
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/route_marker/route_marker.svg b/assets/layers/route_marker/route_marker.svg
new file mode 100644
index 0000000000..7dd5e4a1bd
--- /dev/null
+++ b/assets/layers/route_marker/route_marker.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/layers/route_marker/route_marker.svg.license b/assets/layers/route_marker/route_marker.svg.license
new file mode 100644
index 0000000000..75299f8845
--- /dev/null
+++ b/assets/layers/route_marker/route_marker.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/layers/route_marker/walking_route_marker.jpg b/assets/layers/route_marker/walking_route_marker.jpg
new file mode 100644
index 0000000000..65e20cb83e
Binary files /dev/null and b/assets/layers/route_marker/walking_route_marker.jpg differ
diff --git a/assets/layers/route_marker/walking_route_marker.jpg.license b/assets/layers/route_marker/walking_route_marker.jpg.license
new file mode 100644
index 0000000000..75299f8845
--- /dev/null
+++ b/assets/layers/route_marker/walking_route_marker.jpg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/layers/vending_machine/vending_machine.json b/assets/layers/vending_machine/vending_machine.json
index 8bb4e740b0..ca193086e2 100644
--- a/assets/layers/vending_machine/vending_machine.json
+++ b/assets/layers/vending_machine/vending_machine.json
@@ -525,15 +525,15 @@
},
{
"if": "vending=meat",
- "then": "./assets/layers/id_presets/temaki-meat.svg"
+ "then": "circle:white;./assets/layers/id_presets/temaki-meat.svg"
},
{
"if": "vending=fruit",
- "then": "./assets/layers/vending_machine/fruits.svg"
+ "then": "circle:white;./assets/layers/vending_machine/fruits.svg"
},
{
"if": "vending=strawberries",
- "then": "./assets/layers/vending_machine/strawberry.svg"
+ "then": "circle:white;./assets/layers/vending_machine/strawberry.svg"
},
{
"if": "vending=flowers",
@@ -678,7 +678,7 @@
"vending~.*meat.*"
]
},
- "then": "./assets/layers/id_presets/temaki-meat.svg"
+ "then": "circle:white;./assets/layers/id_presets/temaki-meat.svg"
},
{
"if": {
@@ -687,7 +687,7 @@
"vending~.*fruit.*"
]
},
- "then": "./assets/layers/vending_machine/fruits.svg"
+ "then": "circle:white;./assets/layers/vending_machine/fruits.svg"
},
{
"if": {
@@ -696,7 +696,7 @@
"vending~.*strawberries.*"
]
},
- "then": "./assets/layers/vending_machine/strawberry.svg"
+ "then": "circle:white;./assets/layers/vending_machine/strawberry.svg"
},
{
"if": {
diff --git a/assets/svg/cross.svg.license b/assets/svg/cross.svg.license
index 2452bee1e8..ed02883002 100644
--- a/assets/svg/cross.svg.license
+++ b/assets/svg/cross.svg.license
@@ -1,2 +1,2 @@
SPDX-FileCopyrightText: Pieter Vander Vennet
-SPDX-License-Identifier: CC0
\ No newline at end of file
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/themes/cyclenodes/cyclenodes.json b/assets/themes/cyclenodes/cyclenodes.json
index 5789a55cc5..8469389189 100644
--- a/assets/themes/cyclenodes/cyclenodes.json
+++ b/assets/themes/cyclenodes/cyclenodes.json
@@ -27,19 +27,14 @@
"startLat": 51.755515,
"startLon": 14.327545,
"startZoom": 11,
- "widenFactor": 0.05,
- "clustering": {
- "maxZoom": 11,
- "minNeededElements": 1000000
- },
"layers": [
{
"id": "node2node",
"name": {
- "en": "node to node links",
+ "en": "Node to node links",
"de": "Knotenpunktverbindungen",
"es": "enlaces nodo a nodo",
- "nl": "verbindingen van node naar node",
+ "nl": "Verbindingen van node naar node",
"fr": "liens noeud à noeud",
"ca": "enllaços node a node",
"cs": "propojení mezi uzly",
@@ -57,10 +52,10 @@
"minzoom": 12,
"title": {
"render": {
- "en": "node to node link",
+ "en": "Node to node link",
"de": "Knotenpunktverbindung",
"es": "enlace nodo a nodo",
- "nl": "node-naar-node verbinding",
+ "nl": "Node-naar-node verbinding",
"fr": "lien noeud à noeud",
"ca": "Enllaç node a node",
"cs": "propojení mezi uzly",
@@ -70,10 +65,10 @@
{
"if": "ref~*",
"then": {
- "en": "node to node link {ref}",
+ "en": "Node to node link {ref}",
"de": "Knotenpunktverbindung {ref}",
"es": "enlace nodo a nodo {ref}",
- "nl": "node-naar-node verbinding {ref}",
+ "nl": "Node-naar-node verbinding {ref}",
"fr": "lien noeud à noeud {ref}",
"ca": "Enllaç node a node {ref}",
"cs": "propojení mezi uzly {ref}",
@@ -90,36 +85,29 @@
],
"tagRenderings": [
{
- "question": {
- "en": "When was this node to node link last surveyed?",
- "de": "Wann wurde diese Knotenpunktverbindung zuletzt überprüft?",
- "es": "¿Cuándo se sondeó este enlace nodo a nodo por última vez?",
- "nl": "Wanneer werd deze node-naar-node verbinding het laast gesurveyed?",
- "fr": "Quand cette liaison de nœud à nœud a-t-elle été contrôlée sur le terrain pour la dernière fois ?",
- "ca": "Quan es va comprovar per última vegada aquest enllaç node a node presencialment?",
- "cs": "Kdy bylo toto propojení mezi uzly naposledy zkontrolováno?",
- "pl": "Kiedy ostatnio badano to połączenie węzła z węzłem?"
- },
- "render": {
- "en": "This node to node link was last surveyed on {survey:date}",
- "de": "Diese Knotenpunktverbindung wurde zuletzt am {survey:date} überprüft",
- "es": "Este enlace nodo a nodo se sondeó por última vez el {survey:date}",
- "nl": "Deze node-naar-node verbinding werd het laast gesurveyed op {survey:date}",
- "fr": "Cette lien de nœud à nœud a été vérifié sur le terrain le {survey:date}",
- "ca": "Aquest enllaç node a node es va sondejar per última vegada el {survey:date}",
- "cs": "Toto propojení mezi uzly bylo naposledy zkontrolováno dne {survey:date}",
- "pl": "To połączenie węzła z węzłem było ostatnio sprawdzane w dniu {survey:date}"
- },
- "freeform": {
- "key": "survey:date",
- "type": "date"
- },
- "mappings": [
- {
- "if": "survey:date:={_now:date}",
- "then": "Surveyed today!"
+ "builtin": "survey_date",
+ "override": {
+ "question": {
+ "en": "When was this node to node link last surveyed?",
+ "de": "Wann wurde diese Knotenpunktverbindung zuletzt überprüft?",
+ "es": "¿Cuándo se sondeó este enlace nodo a nodo por última vez?",
+ "nl": "Wanneer werd deze node-naar-node verbinding het laast gesurveyed?",
+ "fr": "Quand cette liaison de nœud à nœud a-t-elle été contrôlée sur le terrain pour la dernière fois ?",
+ "ca": "Quan es va comprovar per última vegada aquest enllaç node a node presencialment?",
+ "cs": "Kdy bylo toto propojení mezi uzly naposledy zkontrolováno?",
+ "pl": "Kiedy ostatnio badano to połączenie węzła z węzłem?"
+ },
+ "render": {
+ "en": "This node to node link was last surveyed on {survey:date}",
+ "de": "Diese Knotenpunktverbindung wurde zuletzt am {survey:date} überprüft",
+ "es": "Este enlace nodo a nodo se sondeó por última vez el {survey:date}",
+ "nl": "Deze node-naar-node verbinding werd het laast gesurveyed op {survey:date}",
+ "fr": "Cette lien de nœud à nœud a été vérifié sur le terrain le {survey:date}",
+ "ca": "Aquest enllaç node a node es va sondejar per última vegada el {survey:date}",
+ "cs": "Toto propojení mezi uzly bylo naposledy zkontrolováno dne {survey:date}",
+ "pl": "To połączenie węzła z węzłem było ostatnio sprawdzane w dniu {survey:date}"
}
- ],
+ },
"id": "node2node-survey:date"
},
"export_as_gpx"
@@ -128,12 +116,12 @@
{
"id": "node",
"name": {
- "en": "nodes",
+ "en": "Nodes",
"de": "Knotenpunkte",
"ca": "nodes",
"es": "nodos",
"nb_NO": "noder",
- "nl": "knooppunten",
+ "nl": "Knooppunten",
"fr": "noeuds",
"pa_PK": "نوڈ",
"cs": "uzly",
@@ -157,11 +145,11 @@
"mappings": [
{
"if": "rcn_ref~*",
- "then": "
{rcn_ref}
"
+ "then": "{rcn_ref}
"
},
{
"if": "rcn_ref=",
- "then": "?
"
+ "then": "?
"
}
]
}
@@ -170,11 +158,11 @@
"minzoom": 12,
"title": {
"render": {
- "en": "cycle node {rcn_ref}",
+ "en": "Cycle node {rcn_ref}",
"de": "Knotenpunkt {rcn_ref}",
"es": "nodo ciclista {rcn_ref}",
"nb_NO": "sykkelnode {rcn_ref}",
- "nl": "fietsknooppunt {rcn_ref}",
+ "nl": "Fietsknooppunt {rcn_ref}",
"fr": "nœud cycliste {rcn_ref}",
"ca": "node ciclista {rcn_ref}",
"cs": "uzel cyklu {rcn_ref}",
@@ -183,36 +171,48 @@
},
"tagRenderings": [
{
+ "id": "node-rxn_ref",
"question": {
- "en": "When was this cycle node last surveyed?",
- "de": "Wann wurde dieser Fahrradknotenpunkt zuletzt überprüft?",
- "es": "¿Cuándo fue sondeado este nodo ciclista por última vez?",
- "nl": "Wanneer is dit fietsknooppunt voor het laatst gecontroleerd?",
- "fr": "Quand ce nœud cyclable a-t-il été vérifié sur le terrain pour la dernière fois ?",
- "ca": "Quan va ser sondejat aquest node ciclista per última vegada?",
- "cs": "Kdy byl tento uzel cyklu naposledy zkontrolován?",
- "pl": "Kiedy ostatni raz badano ten węzeł rowerowy?"
- },
- "render": {
- "en": "This cycle node was last surveyed on {survey:date}",
- "de": "Dieser Fahrradknoten wurde zuletzt überprüft am {survey:date}",
- "es": "Este nodo ciclista se sondeó por última vez el {survey:date}",
- "nl": "Dit fietsknooppunt is voor het laatst gecontroleerd op {survey:date}",
- "fr": "Ce nœud cycliste a été verifié pour la dernière fois le {survey:date}",
- "ca": "Aquest node ciclista es va sondejar per última vegada el {survey:date}",
- "cs": "Tento uzel cyklu byl naposledy zkontrolován dne {survey:date}",
- "pl": "Ten węzeł rowerowy był ostatnio badany w dniu {survey:date}"
+ "en": "What is the reference number of this cycling node?",
+ "nl": "Wat is het referentienummer van dit fietsknooppunt?"
},
"freeform": {
- "key": "survey:date",
- "type": "date"
- },
- "mappings": [
- {
- "if": "survey:date:={_now:date}",
- "then": "Surveyed today!"
+ "key": "rcn_ref",
+ "type": "int",
+ "placeholder": {
+ "en": "e.g. 1",
+ "nl": "bijv. 1"
}
- ],
+ },
+ "render": {
+ "en": "This cycling node has reference number {rcn_ref}",
+ "nl": "Dit fietsknooppunt heeft referentienummer {rcn_ref}"
+ }
+ },
+ {
+ "builtin": "survey_date",
+ "override": {
+ "question": {
+ "en": "When was this cycle node last surveyed?",
+ "de": "Wann wurde dieser Fahrradknotenpunkt zuletzt überprüft?",
+ "es": "¿Cuándo fue sondeado este nodo ciclista por última vez?",
+ "nl": "Wanneer is dit fietsknooppunt voor het laatst gecontroleerd?",
+ "fr": "Quand ce nœud cyclable a-t-il été vérifié sur le terrain pour la dernière fois ?",
+ "ca": "Quan va ser sondejat aquest node ciclista per última vegada?",
+ "cs": "Kdy byl tento uzel cyklu naposledy zkontrolován?",
+ "pl": "Kiedy ostatni raz badano ten węzeł rowerowy?"
+ },
+ "render": {
+ "en": "This cycle node was last surveyed on {survey:date}",
+ "de": "Dieser Fahrradknoten wurde zuletzt überprüft am {survey:date}",
+ "es": "Este nodo ciclista se sondeó por última vez el {survey:date}",
+ "nl": "Dit fietsknooppunt is voor het laatst gecontroleerd op {survey:date}",
+ "fr": "Ce nœud cycliste a été verifié pour la dernière fois le {survey:date}",
+ "ca": "Aquest node ciclista es va sondejar per última vegada el {survey:date}",
+ "cs": "Tento uzel cyklu byl naposledy zkontrolován dne {survey:date}",
+ "pl": "Ten węzeł rowerowy był ostatnio badany w dniu {survey:date}"
+ }
+ },
"id": "node-survey:date"
},
{
@@ -238,12 +238,101 @@
},
"freeform": {
"key": "expected_rcn_route_relations",
- "type": "int"
+ "type": "int",
+ "placeholder": {
+ "en": "e.g. 3",
+ "nl": "bijv. 3"
+ }
},
"id": "node-expected_rcn_route_relations"
},
"images"
+ ],
+ "presets": [
+ {
+ "tags": [
+ "rcn_ref=?",
+ "network:type=node_network"
+ ],
+ "title": {
+ "en": "a cycling node",
+ "nl": "een fietsknooppunt"
+ },
+ "snapToLayer": [
+ "cycleways_and_roads"
+ ]
+ }
]
+ },
+ {
+ "builtin": [
+ "guidepost"
+ ],
+ "override": {
+ "minzoom": 16,
+ "source": {
+ "osmTags": {
+ "and": [
+ "information=guidepost",
+ "bicycle=yes"
+ ]
+ }
+ },
+ "presets": [
+ {
+ "tags": [
+ "tourism=information",
+ "information=guidepost",
+ "bicycle=yes"
+ ]
+ }
+ ],
+ "name": {
+ "en": "Cycling guideposts"
+ },
+ "title": {
+ "render": {
+ "en": "Cycling guidepost"
+ }
+ }
+ },
+ "hideTagRenderingsWithLabels": [
+ "type"
+ ]
+ },
+ {
+ "builtin": "route_marker",
+ "override": {
+ "minzoom": 16,
+ "mapRendering": [
+ {
+ "icon": "./assets/themes/cyclenodes/route_marker.svg"
+ }
+ ],
+ "presets": [
+ {
+ "tags": [
+ "tourism=information",
+ "information=route_marker",
+ "network:type=node_network",
+ "bicycle=yes"
+ ],
+ "title": {
+ "en": "a route marker for a node to node link"
+ },
+ "=exampleImages": [
+ "./assets/layers/route_marker/bicycle_route_marker.jpg"
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "builtin": "cycleways_and_roads",
+ "override": {
+ "name": null,
+ "shownByDefault": false
+ }
}
],
"credits": "Sebastian Kürten"
diff --git a/assets/themes/cyclenodes/license_info.json b/assets/themes/cyclenodes/license_info.json
index 469e824d72..faf7743b74 100644
--- a/assets/themes/cyclenodes/license_info.json
+++ b/assets/themes/cyclenodes/license_info.json
@@ -8,5 +8,16 @@
"sources": [
"https://github.com/mobanisto/MapComplete/commit/1aeb1fdb5b09908d67907f3c816152bfebfdcc79"
]
+ },
+ {
+ "path": "route_marker.svg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Robin van der Linde",
+ "MarianSigler"
+ ],
+ "sources": [
+ "https://commons.wikimedia.org/wiki/File:Sinnbild_Radfahrer,_StVO_1992.svg"
+ ]
}
]
\ No newline at end of file
diff --git a/assets/themes/cyclenodes/logo.svg b/assets/themes/cyclenodes/logo.svg
index 6a860858af..3d44d5d964 100644
--- a/assets/themes/cyclenodes/logo.svg
+++ b/assets/themes/cyclenodes/logo.svg
@@ -15,13 +15,13 @@
-
-
-
+
+
+
-
\ No newline at end of file
+
diff --git a/assets/themes/cyclenodes/route_marker.svg b/assets/themes/cyclenodes/route_marker.svg
new file mode 100644
index 0000000000..c5c49be16f
--- /dev/null
+++ b/assets/themes/cyclenodes/route_marker.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/themes/cyclenodes/route_marker.svg.license b/assets/themes/cyclenodes/route_marker.svg.license
new file mode 100644
index 0000000000..234c11e02e
--- /dev/null
+++ b/assets/themes/cyclenodes/route_marker.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde; MarianSigler
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/themes/walkingnodes/license_info.json b/assets/themes/walkingnodes/license_info.json
new file mode 100644
index 0000000000..ab0fef0f1d
--- /dev/null
+++ b/assets/themes/walkingnodes/license_info.json
@@ -0,0 +1,20 @@
+[
+ {
+ "path": "logo.svg",
+ "license": "GPL-3.0-only",
+ "authors": [
+ "sebkur"
+ ],
+ "sources": [
+ "https://github.com/mobanisto/MapComplete/commit/1aeb1fdb5b09908d67907f3c816152bfebfdcc79"
+ ]
+ },
+ {
+ "path": "route_marker.svg",
+ "license": "CC0-1.0",
+ "authors": [
+ "Robin van der Linde"
+ ],
+ "sources": []
+ }
+]
\ No newline at end of file
diff --git a/assets/themes/walkingnodes/logo.svg b/assets/themes/walkingnodes/logo.svg
new file mode 100644
index 0000000000..b685930769
--- /dev/null
+++ b/assets/themes/walkingnodes/logo.svg
@@ -0,0 +1,27 @@
+
+
diff --git a/assets/themes/walkingnodes/logo.svg.license b/assets/themes/walkingnodes/logo.svg.license
new file mode 100644
index 0000000000..3176633b82
--- /dev/null
+++ b/assets/themes/walkingnodes/logo.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: sebkur
+SPDX-License-Identifier: GPL-3.0-only
\ No newline at end of file
diff --git a/assets/themes/walkingnodes/route_marker.svg b/assets/themes/walkingnodes/route_marker.svg
new file mode 100644
index 0000000000..4679b92857
--- /dev/null
+++ b/assets/themes/walkingnodes/route_marker.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/themes/walkingnodes/route_marker.svg.license b/assets/themes/walkingnodes/route_marker.svg.license
new file mode 100644
index 0000000000..75299f8845
--- /dev/null
+++ b/assets/themes/walkingnodes/route_marker.svg.license
@@ -0,0 +1,2 @@
+SPDX-FileCopyrightText: Robin van der Linde
+SPDX-License-Identifier: CC0-1.0
\ No newline at end of file
diff --git a/assets/themes/walkingnodes/walkingnodes.json b/assets/themes/walkingnodes/walkingnodes.json
new file mode 100644
index 0000000000..b6df0d224f
--- /dev/null
+++ b/assets/themes/walkingnodes/walkingnodes.json
@@ -0,0 +1,293 @@
+{
+ "id": "walkingnodes",
+ "title": {
+ "en": "Walking Node Networks",
+ "nl": "Wandelknooppuntnetwerken"
+ },
+ "description": {
+ "en": "This map shows walking node networks and allows you to add new nodes easily",
+ "nl": "Deze kaart toont wandelknooppunten en laat je toe om eenvoudigweg nieuwe knooppunten toe te voegen"
+ },
+ "icon": "./assets/themes/walkingnodes/logo.svg",
+ "hideFromOverview": true,
+ "startLat": 51.755515,
+ "startLon": 14.327545,
+ "startZoom": 11,
+ "layers": [
+ {
+ "id": "node2node",
+ "name": {
+ "en": "Node to node links",
+ "de": "Knotenpunktverbindungen",
+ "es": "enlaces nodo a nodo",
+ "nl": "Verbindingen van node naar node",
+ "fr": "liens noeud à noeud",
+ "ca": "enllaços node a node",
+ "cs": "propojení mezi uzly",
+ "pl": "łącza węzeł do węzła"
+ },
+ "source": {
+ "osmTags": {
+ "and": [
+ "network=rwn",
+ "network:type=node_network",
+ "route=foot"
+ ]
+ }
+ },
+ "minzoom": 12,
+ "title": {
+ "render": {
+ "en": "Node to node link",
+ "de": "Knotenpunktverbindung",
+ "es": "enlace nodo a nodo",
+ "nl": "Node-naar-node verbinding",
+ "fr": "lien noeud à noeud",
+ "ca": "Enllaç node a node",
+ "cs": "propojení mezi uzly",
+ "pl": "połączenie węzła z węzłem"
+ },
+ "mappings": [
+ {
+ "if": "ref~*",
+ "then": {
+ "en": "Node to node link {ref}",
+ "de": "Knotenpunktverbindung {ref}",
+ "es": "enlace nodo a nodo {ref}",
+ "nl": "Node-naar-node verbinding {ref}",
+ "fr": "lien noeud à noeud {ref}",
+ "ca": "Enllaç node a node {ref}",
+ "cs": "propojení mezi uzly {ref}",
+ "pl": "połączenie węzła z węzłem {ref}"
+ }
+ }
+ ]
+ },
+ "mapRendering": [
+ {
+ "width": "4",
+ "color": "#452b29"
+ }
+ ],
+ "tagRenderings": [
+ {
+ "builtin": "survey_date",
+ "override": {
+ "question": {
+ "en": "When was this node to node link last surveyed?",
+ "de": "Wann wurde diese Knotenpunktverbindung zuletzt überprüft?",
+ "es": "¿Cuándo se sondeó este enlace nodo a nodo por última vez?",
+ "nl": "Wanneer werd deze node-naar-node verbinding het laast gesurveyed?",
+ "fr": "Quand cette liaison de nœud à nœud a-t-elle été contrôlée sur le terrain pour la dernière fois ?",
+ "ca": "Quan es va comprovar per última vegada aquest enllaç node a node presencialment?",
+ "cs": "Kdy bylo toto propojení mezi uzly naposledy zkontrolováno?",
+ "pl": "Kiedy ostatnio badano to połączenie węzła z węzłem?"
+ },
+ "render": {
+ "en": "This node to node link was last surveyed on {survey:date}",
+ "de": "Diese Knotenpunktverbindung wurde zuletzt am {survey:date} überprüft",
+ "es": "Este enlace nodo a nodo se sondeó por última vez el {survey:date}",
+ "nl": "Deze node-naar-node verbinding werd het laast gesurveyed op {survey:date}",
+ "fr": "Cette lien de nœud à nœud a été vérifié sur le terrain le {survey:date}",
+ "ca": "Aquest enllaç node a node es va sondejar per última vegada el {survey:date}",
+ "cs": "Toto propojení mezi uzly bylo naposledy zkontrolováno dne {survey:date}",
+ "pl": "To połączenie węzła z węzłem było ostatnio sprawdzane w dniu {survey:date}"
+ }
+ },
+ "id": "node2node-survey:date"
+ },
+ "export_as_gpx"
+ ]
+ },
+ {
+ "id": "node",
+ "name": {
+ "en": "Nodes",
+ "de": "Knotenpunkte",
+ "ca": "nodes",
+ "es": "nodos",
+ "nb_NO": "noder",
+ "nl": "Knooppunten",
+ "fr": "noeuds",
+ "pa_PK": "نوڈ",
+ "cs": "uzly",
+ "eu": "nodoak",
+ "pl": "węzły"
+ },
+ "source": {
+ "osmTags": {
+ "and": [
+ "rwn_ref~*"
+ ]
+ }
+ },
+ "mapRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "label": {
+ "mappings": [
+ {
+ "if": "rwn_ref~*",
+ "then": "{rwn_ref}
"
+ },
+ {
+ "if": "rwn_ref=",
+ "then": "?
"
+ }
+ ]
+ }
+ }
+ ],
+ "minzoom": 12,
+ "title": {
+ "render": {
+ "en": "Walking node {rwn_ref}",
+ "nl": "Wandelknooppunt {rwn_ref}"
+ }
+ },
+ "tagRenderings": [
+ {
+ "id": "node-rwn_ref",
+ "question": {
+ "en": "What is the reference number of this walking node?",
+ "nl": "Wat is het referentienummer van dit wandelknooppunt?"
+ },
+ "freeform": {
+ "key": "rwn_ref",
+ "type": "int",
+ "placeholder": {
+ "en": "e.g. 1",
+ "nl": "bijv. 1"
+ }
+ },
+ "render": {
+ "en": "This walking node has reference number {rwn_ref}",
+ "nl": "Dit wandelknooppunt heeft referentienummer {rwn_ref}"
+ }
+ },
+ {
+ "builtin": "survey_date",
+ "override": {
+ "question": {
+ "en": "When was this walking node last surveyed?",
+ "nl": "Wanneer is dit wandelknooppunt het laatst gesurveyed?"
+ },
+ "render": {
+ "en": "This walking node was last surveyed on {survey:date}",
+ "nl": "Dit wandelknooppunt werd het laatst gesurveyed op {survey:date}"
+ }
+ }
+ },
+ {
+ "question": {
+ "en": "How many other walking nodes does this node link to?",
+ "nl": "Met hoeveel andere wandelknooppunten heeft dit knooppunt een verbinding?"
+ },
+ "render": {
+ "en": "This node links to {expected_rwn_route_relations} other walking nodes.",
+ "nl": "Dit knooppunt verbindt met {expected_rwn_route_relations} andere wandelknooppunten."
+ },
+ "freeform": {
+ "key": "expected_rwn_route_relations",
+ "type": "int",
+ "placeholder": {
+ "en": "e.g. 3",
+ "nl": "bijv. 3"
+ }
+ },
+ "id": "node-expected_rwn_route_relations"
+ },
+ "images"
+ ],
+ "presets": [
+ {
+ "tags": [
+ "rwn_ref=?",
+ "network:type=node_network"
+ ],
+ "title": {
+ "en": "a walking node",
+ "nl": "een wandelknooppunt"
+ },
+ "snapToLayer": [
+ "cycleways_and_roads"
+ ]
+ }
+ ]
+ },
+ {
+ "builtin": [
+ "guidepost"
+ ],
+ "override": {
+ "minzoom": 16,
+ "source": {
+ "osmTags": {
+ "and": [
+ "information=guidepost",
+ "hiking=yes"
+ ]
+ }
+ },
+ "presets": [
+ {
+ "tags": [
+ "tourism=information",
+ "information=guidepost",
+ "hiking=yes"
+ ]
+ }
+ ],
+ "name": {
+ "en": "Hiking guideposts"
+ },
+ "title": {
+ "render": {
+ "en": "Hiking guidepost"
+ }
+ }
+ },
+ "hideTagRenderingsWithLabels": [
+ "type"
+ ]
+ },
+ {
+ "builtin": "route_marker",
+ "override": {
+ "minzoom": 16,
+ "mapRendering": [
+ {
+ "icon": "./assets/themes/walkingnodes/route_marker.svg"
+ }
+ ],
+ "presets": [
+ {
+ "tags": [
+ "tourism=information",
+ "information=route_marker",
+ "network:type=node_network",
+ "hiking=yes"
+ ],
+ "title": {
+ "en": "a route marker for a node to node link"
+ },
+ "=exampleImages": [
+ "./assets/layers/route_marker/walking_route_marker.jpg"
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "builtin": "cycleways_and_roads",
+ "override": {
+ "name": null,
+ "shownByDefault": false
+ }
+ }
+ ],
+ "credits": "Sebastian Kürten"
+}
\ No newline at end of file
diff --git a/langs/themes/ca.json b/langs/themes/ca.json
index 8a12460949..991a73b3d7 100644
--- a/langs/themes/ca.json
+++ b/langs/themes/ca.json
@@ -479,8 +479,10 @@
"name": "enllaços node a node",
"tagRenderings": {
"node2node-survey:date": {
- "question": "Quan es va comprovar per última vegada aquest enllaç node a node presencialment?",
- "render": "Aquest enllaç node a node es va sondejar per última vegada el {survey:date}"
+ "override": {
+ "question": "Quan es va comprovar per última vegada aquest enllaç node a node presencialment?",
+ "render": "Aquest enllaç node a node es va sondejar per última vegada el {survey:date}"
+ }
}
},
"title": {
@@ -500,8 +502,10 @@
"render": "Aquest node enllaça a {expected_rcn_route_relations} altres nodes ciclistes."
},
"node-survey:date": {
- "question": "Quan va ser sondejat aquest node ciclista per última vegada?",
- "render": "Aquest node ciclista es va sondejar per última vegada el {survey:date}"
+ "override": {
+ "question": "Quan va ser sondejat aquest node ciclista per última vegada?",
+ "render": "Aquest node ciclista es va sondejar per última vegada el {survey:date}"
+ }
}
},
"title": {
diff --git a/langs/themes/cs.json b/langs/themes/cs.json
index 5c2b7fb714..92bd971503 100644
--- a/langs/themes/cs.json
+++ b/langs/themes/cs.json
@@ -479,8 +479,10 @@
"name": "propojení mezi uzly",
"tagRenderings": {
"node2node-survey:date": {
- "question": "Kdy bylo toto propojení mezi uzly naposledy zkontrolováno?",
- "render": "Toto propojení mezi uzly bylo naposledy zkontrolováno dne {survey:date}"
+ "override": {
+ "question": "Kdy bylo toto propojení mezi uzly naposledy zkontrolováno?",
+ "render": "Toto propojení mezi uzly bylo naposledy zkontrolováno dne {survey:date}"
+ }
}
},
"title": {
@@ -500,8 +502,10 @@
"render": "Tento uzel je propojen s {expected_rcn_route_relations} dalšími uzly cyklu."
},
"node-survey:date": {
- "question": "Kdy byl tento uzel cyklu naposledy zkontrolován?",
- "render": "Tento uzel cyklu byl naposledy zkontrolován dne {survey:date}"
+ "override": {
+ "question": "Kdy byl tento uzel cyklu naposledy zkontrolován?",
+ "render": "Tento uzel cyklu byl naposledy zkontrolován dne {survey:date}"
+ }
}
},
"title": {
diff --git a/langs/themes/de.json b/langs/themes/de.json
index 099e67d1eb..400ddbdae7 100644
--- a/langs/themes/de.json
+++ b/langs/themes/de.json
@@ -479,8 +479,10 @@
"name": "Knotenpunktverbindungen",
"tagRenderings": {
"node2node-survey:date": {
- "question": "Wann wurde diese Knotenpunktverbindung zuletzt überprüft?",
- "render": "Diese Knotenpunktverbindung wurde zuletzt am {survey:date} überprüft"
+ "override": {
+ "question": "Wann wurde diese Knotenpunktverbindung zuletzt überprüft?",
+ "render": "Diese Knotenpunktverbindung wurde zuletzt am {survey:date} überprüft"
+ }
}
},
"title": {
@@ -500,8 +502,10 @@
"render": "Dieser Knoten ist mit {expected_rcn_route_relations} anderen Knoten des Fahrradknotenpunktnetzwerkes verbunden."
},
"node-survey:date": {
- "question": "Wann wurde dieser Fahrradknotenpunkt zuletzt überprüft?",
- "render": "Dieser Fahrradknoten wurde zuletzt überprüft am {survey:date}"
+ "override": {
+ "question": "Wann wurde dieser Fahrradknotenpunkt zuletzt überprüft?",
+ "render": "Dieser Fahrradknoten wurde zuletzt überprüft am {survey:date}"
+ }
}
},
"title": {
diff --git a/langs/themes/en.json b/langs/themes/en.json
index da64985f90..5326c1ec7e 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -476,36 +476,64 @@
"description": "This map shows cycle node networks and allows you to add new nodes easily",
"layers": {
"0": {
- "name": "node to node links",
+ "name": "Node to node links",
"tagRenderings": {
"node2node-survey:date": {
- "question": "When was this node to node link last surveyed?",
- "render": "This node to node link was last surveyed on {survey:date}"
+ "override": {
+ "question": "When was this node to node link last surveyed?",
+ "render": "This node to node link was last surveyed on {survey:date}"
+ }
}
},
"title": {
"mappings": {
"0": {
- "then": "node to node link {ref}"
+ "then": "Node to node link {ref}"
}
},
- "render": "node to node link"
+ "render": "Node to node link"
}
},
"1": {
- "name": "nodes",
+ "name": "Nodes",
+ "presets": {
+ "0": {
+ "title": "a cycling node"
+ }
+ },
"tagRenderings": {
"node-expected_rcn_route_relations": {
+ "freeform": {
+ "placeholder": "e.g. 3"
+ },
"question": "How many other cycle nodes does this node link to?",
"render": "This node links to {expected_rcn_route_relations} other cycle nodes."
},
+ "node-rxn_ref": {
+ "freeform": {
+ "placeholder": "e.g. 1"
+ },
+ "question": "What is the reference number of this cycling node?",
+ "render": "This cycling node has reference number {rcn_ref}"
+ },
"node-survey:date": {
- "question": "When was this cycle node last surveyed?",
- "render": "This cycle node was last surveyed on {survey:date}"
+ "override": {
+ "question": "When was this cycle node last surveyed?",
+ "render": "This cycle node was last surveyed on {survey:date}"
+ }
}
},
"title": {
- "render": "cycle node {rcn_ref}"
+ "render": "Cycle node {rcn_ref}"
+ }
+ },
+ "3": {
+ "override": {
+ "presets": {
+ "0": {
+ "title": "a route marker for a node to node link"
+ }
+ }
}
}
},
diff --git a/langs/themes/es.json b/langs/themes/es.json
index bc1269a2fc..771287a047 100644
--- a/langs/themes/es.json
+++ b/langs/themes/es.json
@@ -479,8 +479,10 @@
"name": "enlaces nodo a nodo",
"tagRenderings": {
"node2node-survey:date": {
- "question": "¿Cuándo se sondeó este enlace nodo a nodo por última vez?",
- "render": "Este enlace nodo a nodo se sondeó por última vez el {survey:date}"
+ "override": {
+ "question": "¿Cuándo se sondeó este enlace nodo a nodo por última vez?",
+ "render": "Este enlace nodo a nodo se sondeó por última vez el {survey:date}"
+ }
}
},
"title": {
@@ -500,8 +502,10 @@
"render": "Este nodo enlaza a {expected_rcn_route_relations} otros nodos ciclistas."
},
"node-survey:date": {
- "question": "¿Cuándo fue sondeado este nodo ciclista por última vez?",
- "render": "Este nodo ciclista se sondeó por última vez el {survey:date}"
+ "override": {
+ "question": "¿Cuándo fue sondeado este nodo ciclista por última vez?",
+ "render": "Este nodo ciclista se sondeó por última vez el {survey:date}"
+ }
}
},
"title": {
diff --git a/langs/themes/fr.json b/langs/themes/fr.json
index 21da83331b..f0b1cdea78 100644
--- a/langs/themes/fr.json
+++ b/langs/themes/fr.json
@@ -476,8 +476,10 @@
"name": "liens noeud à noeud",
"tagRenderings": {
"node2node-survey:date": {
- "question": "Quand cette liaison de nœud à nœud a-t-elle été contrôlée sur le terrain pour la dernière fois ?",
- "render": "Cette lien de nœud à nœud a été vérifié sur le terrain le {survey:date}"
+ "override": {
+ "question": "Quand cette liaison de nœud à nœud a-t-elle été contrôlée sur le terrain pour la dernière fois ?",
+ "render": "Cette lien de nœud à nœud a été vérifié sur le terrain le {survey:date}"
+ }
}
},
"title": {
@@ -497,8 +499,10 @@
"render": "Ce noeud est lié à {expected_rcn_route_relations} d'autres noeuds cyclistes."
},
"node-survey:date": {
- "question": "Quand ce nœud cyclable a-t-il été vérifié sur le terrain pour la dernière fois ?",
- "render": "Ce nœud cycliste a été verifié pour la dernière fois le {survey:date}"
+ "override": {
+ "question": "Quand ce nœud cyclable a-t-il été vérifié sur le terrain pour la dernière fois ?",
+ "render": "Ce nœud cycliste a été verifié pour la dernière fois le {survey:date}"
+ }
}
},
"title": {
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index 2affa3f475..774abe7379 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -427,36 +427,55 @@
"description": "Deze kaart toont fietsknooppunten en laat je toe om eenvoudigweg nieuwe knooppunten toe te voegen",
"layers": {
"0": {
- "name": "verbindingen van node naar node",
+ "name": "Verbindingen van node naar node",
"tagRenderings": {
"node2node-survey:date": {
- "question": "Wanneer werd deze node-naar-node verbinding het laast gesurveyed?",
- "render": "Deze node-naar-node verbinding werd het laast gesurveyed op {survey:date}"
+ "override": {
+ "question": "Wanneer werd deze node-naar-node verbinding het laast gesurveyed?",
+ "render": "Deze node-naar-node verbinding werd het laast gesurveyed op {survey:date}"
+ }
}
},
"title": {
"mappings": {
"0": {
- "then": "node-naar-node verbinding {ref}"
+ "then": "Node-naar-node verbinding {ref}"
}
},
- "render": "node-naar-node verbinding"
+ "render": "Node-naar-node verbinding"
}
},
"1": {
- "name": "knooppunten",
+ "name": "Knooppunten",
+ "presets": {
+ "0": {
+ "title": "een fietsknooppunt"
+ }
+ },
"tagRenderings": {
"node-expected_rcn_route_relations": {
+ "freeform": {
+ "placeholder": "bijv. 3"
+ },
"question": "Met hoeveel andere fietsknooppunten heeft dit knooppunt een verbinding?",
"render": "Dit knooppunt verbindt met {expected_rcn_route_relations} andere fietsknooppunten."
},
+ "node-rxn_ref": {
+ "freeform": {
+ "placeholder": "bijv. 1"
+ },
+ "question": "Wat is het referentienummer van dit fietsknooppunt?",
+ "render": "Dit fietsknooppunt heeft referentienummer {rcn_ref}"
+ },
"node-survey:date": {
- "question": "Wanneer is dit fietsknooppunt voor het laatst gecontroleerd?",
- "render": "Dit fietsknooppunt is voor het laatst gecontroleerd op {survey:date}"
+ "override": {
+ "question": "Wanneer is dit fietsknooppunt voor het laatst gecontroleerd?",
+ "render": "Dit fietsknooppunt is voor het laatst gecontroleerd op {survey:date}"
+ }
}
},
"title": {
- "render": "fietsknooppunt {rcn_ref}"
+ "render": "Fietsknooppunt {rcn_ref}"
}
}
},
diff --git a/langs/themes/pl.json b/langs/themes/pl.json
index e74f352649..075c3ed1ab 100644
--- a/langs/themes/pl.json
+++ b/langs/themes/pl.json
@@ -479,8 +479,10 @@
"name": "łącza węzeł do węzła",
"tagRenderings": {
"node2node-survey:date": {
- "question": "Kiedy ostatnio badano to połączenie węzła z węzłem?",
- "render": "To połączenie węzła z węzłem było ostatnio sprawdzane w dniu {survey:date}"
+ "override": {
+ "question": "Kiedy ostatnio badano to połączenie węzła z węzłem?",
+ "render": "To połączenie węzła z węzłem było ostatnio sprawdzane w dniu {survey:date}"
+ }
}
},
"title": {
@@ -500,8 +502,10 @@
"render": "Ten węzeł łączy się z innymi węzłami rowerowymi {expected_rcn_route_relations}."
},
"node-survey:date": {
- "question": "Kiedy ostatni raz badano ten węzeł rowerowy?",
- "render": "Ten węzeł rowerowy był ostatnio badany w dniu {survey:date}"
+ "override": {
+ "question": "Kiedy ostatni raz badano ten węzeł rowerowy?",
+ "render": "Ten węzeł rowerowy był ostatnio badany w dniu {survey:date}"
+ }
}
},
"title": {
diff --git a/src/Models/ThemeConfig/LayerConfig.ts b/src/Models/ThemeConfig/LayerConfig.ts
index 13e0b84ef2..42feb0ebfe 100644
--- a/src/Models/ThemeConfig/LayerConfig.ts
+++ b/src/Models/ThemeConfig/LayerConfig.ts
@@ -229,7 +229,11 @@ export default class LayerConfig extends WithContextLoader {
maxSnapDistance: undefined,
}
if (pr["preciseInput"] !== undefined) {
- throw "Layer " + this.id + " still uses the old 'preciseInput'-field"
+ throw (
+ "Layer " +
+ this.id +
+ " still uses the old 'preciseInput'-field. For snapping to layers, use 'snapToLayer' instead"
+ )
}
if (pr.snapToLayer !== undefined) {
let snapToLayers: string[]
@@ -520,7 +524,7 @@ export default class LayerConfig extends WithContextLoader {
neededTags = this.source.osmTags["and"]
}
- let tableRows = Utils.NoNull(
+ const tableRows = Utils.NoNull(
this.tagRenderings
.map((tr) => tr.FreeformValues())
.map((values) => {