From 18a1221dd4ebbce0034aaa5047299583f0e5cd4c Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 22 Sep 2021 16:46:25 +0200
Subject: [PATCH 01/65] Add parking fee to charging stations theme
---
.../charging_station.protojson | 20 +++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/assets/layers/charging_station/charging_station.protojson b/assets/layers/charging_station/charging_station.protojson
index ddc91b36a..7689ae905 100644
--- a/assets/layers/charging_station/charging_station.protojson
+++ b/assets/layers/charging_station/charging_station.protojson
@@ -523,6 +523,26 @@
}
}
]
+ },
+ {
+ "#": "Parking:fee",
+ "question": {
+ "en": "Does one have to pay a parking fee while charging?"
+ },
+ "mappings": [
+ {
+ "if": "parking:fee=no",
+ "then": {
+ "en": "No additional parking cost while charging"
+ }
+ },
+ {
+ "if": "parking:fee=yes",
+ "then": {
+ "en": "An additional parking fee should be paid while charging"
+ }
+ }
+ ]
}
],
"icon": {
From 73f76881c43b3d1c7bd70c41460ae03b27d18467 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 22 Sep 2021 16:58:25 +0200
Subject: [PATCH 02/65] Use same formatting as weblate for translation files
---
assets/layers/barrier/barrier.json | 574 +--
assets/layers/bench/bench.json | 1218 ++---
assets/layers/bench_at_pt/bench_at_pt.json | 276 +-
.../bicycle_library/bicycle_library.json | 528 +-
.../bicycle_tube_vending_machine.json | 448 +-
assets/layers/bike_cafe/bike_cafe.json | 670 +--
.../layers/bike_cleaning/bike_cleaning.json | 270 +-
.../bike_monitoring_station.json | 160 +-
assets/layers/bike_parking/bike_parking.json | 974 ++--
.../bike_repair_station.json | 1398 +++---
assets/layers/bike_shop/bike_shop.json | 1346 +++---
.../bike_themed_object.json | 138 +-
assets/layers/binocular/binocular.json | 196 +-
assets/layers/birdhide/birdhide.json | 570 +--
assets/layers/cafe_pub/cafe_pub.json | 356 +-
.../charging_station/charging_station.json | 4294 ++++++++---------
assets/layers/crossings/crossings.json | 620 +--
.../cycleways_and_roads.json | 2330 ++++-----
.../layers/defibrillator/defibrillator.json | 1050 ++--
assets/layers/direction/direction.json | 90 +-
.../layers/drinking_water/drinking_water.json | 306 +-
assets/layers/food/food.json | 1182 ++---
assets/layers/ghost_bike/ghost_bike.json | 358 +-
.../layers/grass_in_parks/grass_in_parks.json | 92 +-
.../information_board/information_board.json | 110 +-
assets/layers/map/map.json | 446 +-
.../layers/nature_reserve/nature_reserve.json | 906 ++--
.../observation_tower/observation_tower.json | 350 +-
assets/layers/parking/parking.json | 370 +-
assets/layers/picnic_table/picnic_table.json | 202 +-
assets/layers/play_forest/play_forest.json | 204 +-
assets/layers/playground/playground.json | 1024 ++--
.../public_bookcase/public_bookcase.json | 914 ++--
assets/layers/slow_roads/slow_roads.json | 484 +-
assets/layers/sport_pitch/sport_pitch.json | 966 ++--
.../surveillance_camera.json | 936 ++--
assets/layers/toilet/toilet.json | 770 +--
assets/layers/trail/trail.json | 388 +-
assets/layers/tree_node/tree_node.json | 1106 ++---
assets/layers/viewpoint/viewpoint.json | 130 +-
.../layers/village_green/village_green.json | 64 +-
.../visitor_information_centre.json | 120 +-
assets/layers/waste_basket/waste_basket.json | 228 +-
assets/layers/watermill/watermill.json | 322 +-
scripts/generateTranslations.ts | 2 +-
45 files changed, 14743 insertions(+), 14743 deletions(-)
diff --git a/assets/layers/barrier/barrier.json b/assets/layers/barrier/barrier.json
index e7cc75562..7c215f8f5 100644
--- a/assets/layers/barrier/barrier.json
+++ b/assets/layers/barrier/barrier.json
@@ -1,293 +1,293 @@
{
- "id": "barrier",
- "name": {
- "en": "Barriers",
- "nl": "Barrières"
- },
- "description": {
- "en": "Obstacles while cycling, such as bollards and cycle barriers",
- "nl": "Hindernissen tijdens het fietsen, zoals paaltjes en fietshekjes"
- },
- "source": {
- "osmTags": {
- "or": [
- "barrier=bollard",
- "barrier=cycle_barrier"
- ]
- }
- },
- "minzoom": 17,
- "title": {
- "render": {
- "en": "Barrier",
- "nl": "Barrière"
+ "id": "barrier",
+ "name": {
+ "en": "Barriers",
+ "nl": "Barrières"
},
- "mappings": [
- {
- "if": "barrier=bollard",
- "then": {
- "en": "Bollard",
- "nl": "Paaltje"
+ "description": {
+ "en": "Obstacles while cycling, such as bollards and cycle barriers",
+ "nl": "Hindernissen tijdens het fietsen, zoals paaltjes en fietshekjes"
+ },
+ "source": {
+ "osmTags": {
+ "or": [
+ "barrier=bollard",
+ "barrier=cycle_barrier"
+ ]
}
- },
- {
- "if": "barrier=cycle_barrier",
- "then": {
- "en": "Cycling Barrier",
- "nl": "Fietshekjes"
+ },
+ "minzoom": 17,
+ "title": {
+ "render": {
+ "en": "Barrier",
+ "nl": "Barrière"
+ },
+ "mappings": [
+ {
+ "if": "barrier=bollard",
+ "then": {
+ "en": "Bollard",
+ "nl": "Paaltje"
+ }
+ },
+ {
+ "if": "barrier=cycle_barrier",
+ "then": {
+ "en": "Cycling Barrier",
+ "nl": "Fietshekjes"
+ }
+ }
+ ]
+ },
+ "icon": "./assets/layers/barrier/barrier.svg",
+ "width": "5",
+ "presets": [
+ {
+ "title": {
+ "en": "Bollard",
+ "nl": "Paaltje"
+ },
+ "tags": [
+ "barrier=bollard"
+ ],
+ "description": {
+ "en": "A bollard in the road",
+ "nl": "Een paaltje in de weg"
+ },
+ "preciseInput": {
+ "preferredBackground": [
+ "photo"
+ ],
+ "snapToLayer": "cycleways_and_roads",
+ "maxSnapDistance": 25
+ }
+ },
+ {
+ "title": {
+ "en": "Cycle barrier",
+ "nl": "Fietshekjes"
+ },
+ "tags": [
+ "barrier=bollard"
+ ],
+ "description": {
+ "en": "Cycle barrier, slowing down cyclists",
+ "nl": "Fietshekjes, voor het afremmen van fietsers"
+ },
+ "preciseInput": {
+ "preferredBackground": [
+ "photo"
+ ],
+ "snapToLayer": "cycleways_and_roads",
+ "maxSnapDistance": 25
+ }
+ }
+ ],
+ "tagRenderings": [
+ {
+ "#": "bicycle=yes/no",
+ "question": {
+ "en": "Can a bicycle go past this barrier?",
+ "nl": "Kan een fietser langs deze barrière?"
+ },
+ "mappings": [
+ {
+ "if": "bicycle=yes",
+ "then": {
+ "en": "A cyclist can go past this.",
+ "nl": "Een fietser kan hier langs."
+ }
+ },
+ {
+ "if": "bicycle=no",
+ "then": {
+ "en": "A cyclist can not go past this.",
+ "nl": "Een fietser kan hier niet langs."
+ }
+ }
+ ]
+ },
+ {
+ "#": "Bollard type",
+ "question": {
+ "en": "What kind of bollard is this?",
+ "nl": "Wat voor soort paal is dit?"
+ },
+ "condition": "barrier=bollard",
+ "mappings": [
+ {
+ "if": "bollard=removable",
+ "then": {
+ "en": "Removable bollard",
+ "nl": "Verwijderbare paal"
+ }
+ },
+ {
+ "if": "bollard=fixed",
+ "then": {
+ "en": "Fixed bollard",
+ "nl": "Vaste paal"
+ }
+ },
+ {
+ "if": "bollard=foldable",
+ "then": {
+ "en": "Bollard that can be folded down",
+ "nl": "Paal die platgevouwen kan worden"
+ }
+ },
+ {
+ "if": "bollard=flexible",
+ "then": {
+ "en": "Flexible bollard, usually plastic",
+ "nl": "Flexibele paal, meestal plastic"
+ }
+ },
+ {
+ "if": "bollard=rising",
+ "then": {
+ "en": "Rising bollard",
+ "nl": "Verzonken poller"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Cycle barrier type",
+ "question": {
+ "en": "What kind of cycling barrier is this?",
+ "nl": "Wat voor fietshekjes zijn dit?"
+ },
+ "condition": "barrier=cycle_barrier",
+ "mappings": [
+ {
+ "if": "cycle_barrier:type=single",
+ "then": {
+ "en": "Single, just two barriers with a space inbetween ",
+ "nl": "Enkelvoudig, slechts twee hekjes met ruimte ertussen "
+ }
+ },
+ {
+ "if": "cycle_barrier:type=double",
+ "then": {
+ "en": "Double, two barriers behind each other ",
+ "nl": "Dubbel, twee hekjes achter elkaar "
+ }
+ },
+ {
+ "if": "cycle_barrier:type=triple",
+ "then": {
+ "en": "Triple, three barriers behind each other ",
+ "nl": "Drievoudig, drie hekjes achter elkaar "
+ }
+ },
+ {
+ "if": "cycle_barrier:type=squeeze",
+ "then": {
+ "en": "Squeeze gate, gap is smaller at top, than at the bottom ",
+ "nl": "Knijppoort, ruimte is smaller aan de top, dan aan de bodem "
+ }
+ }
+ ]
+ },
+ {
+ "#": "MaxWidth",
+ "render": {
+ "en": "Maximum width: {maxwidth:physical} m",
+ "nl": "Maximumbreedte: {maxwidth:physical} m"
+ },
+ "question": {
+ "en": "How wide is the gap left over besides the barrier?",
+ "nl": "Hoe breed is de ruimte naast de barrière?"
+ },
+ "condition": {
+ "and": [
+ "cycle_barrier:type!=double",
+ "cycle_barrier:type!=triple"
+ ]
+ },
+ "freeform": {
+ "key": "maxwidth:physical",
+ "type": "length",
+ "helperArgs": [
+ "20",
+ "map"
+ ]
+ }
+ },
+ {
+ "#": "Space between barrier (cyclebarrier)",
+ "render": {
+ "en": "Space between barriers (along the length of the road): {width:separation} m",
+ "nl": "Ruimte tussen barrières (langs de lengte van de weg): {width:separation} m"
+ },
+ "question": {
+ "en": "How much space is there between the barriers (along the length of the road)?",
+ "nl": "Hoeveel ruimte is er tussen de barrières (langs de lengte van de weg)?"
+ },
+ "condition": {
+ "or": [
+ "cycle_barrier:type=double",
+ "cycle_barrier:type=triple"
+ ]
+ },
+ "freeform": {
+ "key": "width:separation",
+ "type": "length",
+ "helperArgs": [
+ "21",
+ "map"
+ ]
+ }
+ },
+ {
+ "#": "Width of opening (cyclebarrier)",
+ "render": {
+ "en": "Width of opening: {width:opening} m",
+ "nl": "Breedte van de opening: {width:opening} m"
+ },
+ "question": {
+ "en": "How wide is the smallest opening next to the barriers?",
+ "nl": "Hoe breed is de smalste opening naast de barrières?"
+ },
+ "condition": {
+ "or": [
+ "cycle_barrier:type=double",
+ "cycle_barrier:type=triple"
+ ]
+ },
+ "freeform": {
+ "key": "width:opening",
+ "type": "length",
+ "helperArgs": [
+ "21",
+ "map"
+ ]
+ }
+ },
+ {
+ "#": "Overlap (cyclebarrier)",
+ "render": {
+ "en": "Overlap: {overlap} m"
+ },
+ "question": {
+ "en": "How much overlap do the barriers have?",
+ "nl": "Hoeveel overlappen de barrières?"
+ },
+ "condition": {
+ "or": [
+ "cycle_barrier:type=double",
+ "cycle_barrier:type=triple"
+ ]
+ },
+ "freeform": {
+ "key": "overlap",
+ "type": "length",
+ "helperArgs": [
+ "21",
+ "map"
+ ]
+ }
}
- }
]
- },
- "icon": "./assets/layers/barrier/barrier.svg",
- "width": "5",
- "presets": [
- {
- "title": {
- "en": "Bollard",
- "nl": "Paaltje"
- },
- "tags": [
- "barrier=bollard"
- ],
- "description": {
- "en": "A bollard in the road",
- "nl": "Een paaltje in de weg"
- },
- "preciseInput": {
- "preferredBackground": [
- "photo"
- ],
- "snapToLayer": "cycleways_and_roads",
- "maxSnapDistance": 25
- }
- },
- {
- "title": {
- "en": "Cycle barrier",
- "nl": "Fietshekjes"
- },
- "tags": [
- "barrier=bollard"
- ],
- "description": {
- "en": "Cycle barrier, slowing down cyclists",
- "nl": "Fietshekjes, voor het afremmen van fietsers"
- },
- "preciseInput": {
- "preferredBackground": [
- "photo"
- ],
- "snapToLayer": "cycleways_and_roads",
- "maxSnapDistance": 25
- }
- }
- ],
- "tagRenderings": [
- {
- "#": "bicycle=yes/no",
- "question": {
- "en": "Can a bicycle go past this barrier?",
- "nl": "Kan een fietser langs deze barrière?"
- },
- "mappings": [
- {
- "if": "bicycle=yes",
- "then": {
- "en": "A cyclist can go past this.",
- "nl": "Een fietser kan hier langs."
- }
- },
- {
- "if": "bicycle=no",
- "then": {
- "en": "A cyclist can not go past this.",
- "nl": "Een fietser kan hier niet langs."
- }
- }
- ]
- },
- {
- "#": "Bollard type",
- "question": {
- "en": "What kind of bollard is this?",
- "nl": "Wat voor soort paal is dit?"
- },
- "condition": "barrier=bollard",
- "mappings": [
- {
- "if": "bollard=removable",
- "then": {
- "en": "Removable bollard",
- "nl": "Verwijderbare paal"
- }
- },
- {
- "if": "bollard=fixed",
- "then": {
- "en": "Fixed bollard",
- "nl": "Vaste paal"
- }
- },
- {
- "if": "bollard=foldable",
- "then": {
- "en": "Bollard that can be folded down",
- "nl": "Paal die platgevouwen kan worden"
- }
- },
- {
- "if": "bollard=flexible",
- "then": {
- "en": "Flexible bollard, usually plastic",
- "nl": "Flexibele paal, meestal plastic"
- }
- },
- {
- "if": "bollard=rising",
- "then": {
- "en": "Rising bollard",
- "nl": "Verzonken poller"
- }
- }
- ]
- },
- {
- "#": "Cycle barrier type",
- "question": {
- "en": "What kind of cycling barrier is this?",
- "nl": "Wat voor fietshekjes zijn dit?"
- },
- "condition": "barrier=cycle_barrier",
- "mappings": [
- {
- "if": "cycle_barrier:type=single",
- "then": {
- "en": "Single, just two barriers with a space inbetween ",
- "nl": "Enkelvoudig, slechts twee hekjes met ruimte ertussen "
- }
- },
- {
- "if": "cycle_barrier:type=double",
- "then": {
- "en": "Double, two barriers behind each other ",
- "nl": "Dubbel, twee hekjes achter elkaar "
- }
- },
- {
- "if": "cycle_barrier:type=triple",
- "then": {
- "en": "Triple, three barriers behind each other ",
- "nl": "Drievoudig, drie hekjes achter elkaar "
- }
- },
- {
- "if": "cycle_barrier:type=squeeze",
- "then": {
- "en": "Squeeze gate, gap is smaller at top, than at the bottom ",
- "nl": "Knijppoort, ruimte is smaller aan de top, dan aan de bodem "
- }
- }
- ]
- },
- {
- "#": "MaxWidth",
- "render": {
- "en": "Maximum width: {maxwidth:physical} m",
- "nl": "Maximumbreedte: {maxwidth:physical} m"
- },
- "question": {
- "en": "How wide is the gap left over besides the barrier?",
- "nl": "Hoe breed is de ruimte naast de barrière?"
- },
- "condition": {
- "and": [
- "cycle_barrier:type!=double",
- "cycle_barrier:type!=triple"
- ]
- },
- "freeform": {
- "key": "maxwidth:physical",
- "type": "length",
- "helperArgs": [
- "20",
- "map"
- ]
- }
- },
- {
- "#": "Space between barrier (cyclebarrier)",
- "render": {
- "en": "Space between barriers (along the length of the road): {width:separation} m",
- "nl": "Ruimte tussen barrières (langs de lengte van de weg): {width:separation} m"
- },
- "question": {
- "en": "How much space is there between the barriers (along the length of the road)?",
- "nl": "Hoeveel ruimte is er tussen de barrières (langs de lengte van de weg)?"
- },
- "condition": {
- "or": [
- "cycle_barrier:type=double",
- "cycle_barrier:type=triple"
- ]
- },
- "freeform": {
- "key": "width:separation",
- "type": "length",
- "helperArgs": [
- "21",
- "map"
- ]
- }
- },
- {
- "#": "Width of opening (cyclebarrier)",
- "render": {
- "en": "Width of opening: {width:opening} m",
- "nl": "Breedte van de opening: {width:opening} m"
- },
- "question": {
- "en": "How wide is the smallest opening next to the barriers?",
- "nl": "Hoe breed is de smalste opening naast de barrières?"
- },
- "condition": {
- "or": [
- "cycle_barrier:type=double",
- "cycle_barrier:type=triple"
- ]
- },
- "freeform": {
- "key": "width:opening",
- "type": "length",
- "helperArgs": [
- "21",
- "map"
- ]
- }
- },
- {
- "#": "Overlap (cyclebarrier)",
- "render": {
- "en": "Overlap: {overlap} m"
- },
- "question": {
- "en": "How much overlap do the barriers have?",
- "nl": "Hoeveel overlappen de barrières?"
- },
- "condition": {
- "or": [
- "cycle_barrier:type=double",
- "cycle_barrier:type=triple"
- ]
- },
- "freeform": {
- "key": "overlap",
- "type": "length",
- "helperArgs": [
- "21",
- "map"
- ]
- }
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/bench/bench.json b/assets/layers/bench/bench.json
index a2cf274dd..a18a31723 100644
--- a/assets/layers/bench/bench.json
+++ b/assets/layers/bench/bench.json
@@ -1,614 +1,614 @@
{
- "id": "bench",
- "name": {
- "en": "Benches",
- "de": "Sitzbänke",
- "fr": "Bancs",
- "nl": "Zitbanken",
- "es": "Bancos",
- "hu": "Padok",
- "id": "Bangku",
- "it": "Panchine",
- "ru": "Скамейки",
- "zh_Hans": "长椅",
- "zh_Hant": "長椅",
- "nb_NO": "Benker",
- "fi": "Penkit",
- "pl": "Ławki",
- "pt_BR": "Bancos"
- },
- "minzoom": 17,
- "source": {
- "osmTags": "amenity=bench"
- },
- "wayHandling": 1,
- "title": {
- "render": {
- "en": "Bench",
- "de": "Sitzbank",
- "fr": "Banc",
- "nl": "Zitbank",
- "es": "Banco",
- "hu": "Pad",
- "id": "Bangku",
- "it": "Panchina",
- "ru": "Скамейка",
- "zh_Hans": "长椅",
- "zh_Hant": "長椅",
- "nb_NO": "Benk",
- "fi": "Penkki",
- "pl": "Ławka",
- "pt_BR": "Banco"
- }
- },
- "tagRenderings": [
- "images",
- {
- "render": {
- "en": "Backrest",
- "de": "Rückenlehne",
- "fr": "Dossier",
- "nl": "Rugleuning",
- "es": "Respaldo",
- "hu": "Háttámla",
- "id": "Sandaran",
- "it": "Schienale",
- "ru": "Спинка",
- "zh_Hans": "靠背",
- "zh_Hant": "靠背",
- "nb_NO": "Rygglene",
- "fi": "Selkänoja",
- "pl": "Oparcie",
- "pt_BR": "Encosto"
- },
- "freeform": {
- "key": "backrest"
- },
- "mappings": [
- {
- "if": "backrest=yes",
- "then": {
- "en": "Backrest: Yes",
- "de": "Rückenlehne: Ja",
- "fr": "Dossier : Oui",
- "nl": "Heeft een rugleuning",
- "es": "Respaldo: Si",
- "hu": "Háttámla: Igen",
- "id": "Sandaran: Ya",
- "it": "Schienale: Sì",
- "ru": "Со спинкой",
- "zh_Hans": "靠背:有",
- "zh_Hant": "靠背:有",
- "nb_NO": "Rygglene: Ja",
- "fi": "Selkänoja: kyllä",
- "pl": "Oparcie: Tak",
- "pt_BR": "Encosto: Sim"
- }
- },
- {
- "if": "backrest=no",
- "then": {
- "en": "Backrest: No",
- "de": "Rückenlehne: Nein",
- "fr": "Dossier : Non",
- "nl": "Rugleuning ontbreekt",
- "es": "Respaldo: No",
- "hu": "Háttámla: Nem",
- "id": "Sandaran: Tidak",
- "it": "Schienale: No",
- "ru": "Без спинки",
- "zh_Hans": "靠背:无",
- "zh_Hant": "靠背:無",
- "nb_NO": "Rygglene: Nei",
- "fi": "Selkänoja: ei",
- "pl": "Oparcie: Nie",
- "pt_BR": "Encosto: Não"
- }
- }
- ],
- "question": {
- "en": "Does this bench have a backrest?",
- "de": "Hat diese Bank eine Rückenlehne?",
- "fr": "Ce banc dispose-t-il d'un dossier ?",
- "nl": "Heeft deze zitbank een rugleuning?",
- "es": "¿Este banco tiene un respaldo?",
- "hu": "Van háttámlája ennek a padnak?",
- "id": "Apakah bangku ini memiliki sandaran?",
- "it": "Questa panchina ha lo schienale?",
- "ru": "Есть ли у этой скамейки спинка?",
- "zh_Hans": "这个长椅有靠背吗?",
- "zh_Hant": "這個長椅是否有靠背?",
- "nb_NO": "Har denne beken et rygglene?",
- "pl": "Czy ta ławka ma oparcie?",
- "pt_BR": "Este assento tem um escosto?"
- }
- },
- {
- "render": {
- "en": "{seats} seats",
- "de": "{seats} Sitzplätze",
- "fr": "{seats} places",
- "nl": "{seats} zitplaatsen",
- "es": "{seats} asientos",
- "hu": "{seats} ülőhely",
- "id": "{seats} kursi",
- "it": "{seats} posti",
- "ru": "{seats} мест",
- "zh_Hant": "{seats} 座位數",
- "nb_NO": "{seats} seter",
- "pl": "{seats} siedzeń",
- "pt_BR": "{seats} assentos"
- },
- "freeform": {
- "key": "seats",
- "type": "nat"
- },
- "question": {
- "en": "How many seats does this bench have?",
- "de": "Wie viele Sitzplätze hat diese Bank?",
- "fr": "De combien de places dispose ce banc ?",
- "nl": "Hoeveel zitplaatsen heeft deze bank?",
- "es": "¿Cuántos asientos tiene este banco?",
- "hu": "Hány ülőhely van ezen a padon?",
- "it": "Quanti posti ha questa panchina?",
- "ru": "Сколько мест на этой скамейке?",
- "zh_Hans": "这个长椅有几个座位?",
- "zh_Hant": "這個長椅有幾個位子?",
- "nb_NO": "Hvor mange sitteplasser har denne benken?",
- "pl": "Ile siedzeń ma ta ławka?",
- "pt_BR": "Quantos assentos este banco tem?"
- }
- },
- {
- "render": {
- "en": "Material: {material}",
- "de": "Material: {material}",
- "fr": "Matériau : {material}",
- "nl": "Gemaakt van {material}",
- "es": "Material: {material}",
- "hu": "Anyag: {material}",
- "it": "Materiale: {material}",
- "ru": "Материал: {material}",
- "zh_Hanå¨s": "材质: {material}",
- "zh_Hant": "材質:{material}",
- "nb_NO": "Materiale: {material}",
- "fi": "Materiaali: {material}",
- "zh_Hans": "材质: {material}",
- "pl": "Materiał: {material}",
- "pt_BR": "Material: {material}"
- },
- "freeform": {
- "key": "material",
- "addExtraTags": []
- },
- "mappings": [
- {
- "if": "material=wood",
- "then": {
- "en": "Material: wood",
- "de": "Material: Holz",
- "fr": "Matériau : bois",
- "nl": "Gemaakt uit hout",
- "es": "Material: madera",
- "hu": "Anyag: fa",
- "it": "Materiale: legno",
- "ru": "Материал: дерево",
- "zh_Hans": "材质:木",
- "nb_NO": "Materiale: tre",
- "zh_Hant": "材質:木頭",
- "pt_BR": "Material: madeira",
- "fi": "Materiaali: puu",
- "pl": "Materiał: drewno"
- }
- },
- {
- "if": "material=metal",
- "then": {
- "en": "Material: metal",
- "de": "Material: Metall",
- "fr": "Matériau : métal",
- "nl": "Gemaakt uit metaal",
- "es": "Material: metal",
- "hu": "Anyag: fém",
- "it": "Materiale: metallo",
- "ru": "Материал: металл",
- "zh_Hans": "材质:金属",
- "nb_NO": "Materiale: metall",
- "zh_Hant": "材質:金屬",
- "pl": "Materiał: metal",
- "pt_BR": "Material: metal"
- }
- },
- {
- "if": "material=stone",
- "then": {
- "en": "Material: stone",
- "de": "Material: Stein",
- "fr": "Matériau : pierre",
- "nl": "Gemaakt uit steen",
- "es": "Material: piedra",
- "hu": "Anyag: kő",
- "it": "Materiale: pietra",
- "ru": "Материал: камень",
- "zh_Hans": "材质:石头",
- "nb_NO": "Materiale: stein",
- "zh_Hant": "材質:石頭",
- "pt_BR": "Material: pedra",
- "fi": "Materiaali: kivi",
- "pl": "Materiał: kamień"
- }
- },
- {
- "if": "material=concrete",
- "then": {
- "en": "Material: concrete",
- "de": "Material: Beton",
- "fr": "Matériau : béton",
- "nl": "Gemaakt uit beton",
- "es": "Material: concreto",
- "hu": "Anyag: beton",
- "it": "Materiale: cemento",
- "ru": "Материал: бетон",
- "zh_Hans": "材质:混凝土",
- "nb_NO": "Materiale: betong",
- "zh_Hant": "材質:水泥",
- "pt_BR": "Material: concreto",
- "fi": "Materiaali: betoni",
- "pl": "Materiał: beton"
- }
- },
- {
- "if": "material=plastic",
- "then": {
- "en": "Material: plastic",
- "de": "Material: Kunststoff",
- "fr": "Matériau : plastique",
- "nl": "Gemaakt uit plastiek",
- "es": "Material: plastico",
- "hu": "Anyag: műanyag",
- "it": "Materiale: plastica",
- "ru": "Материал: пластик",
- "zh_Hans": "材质:塑料",
- "nb_NO": "Materiale: plastikk",
- "zh_Hant": "材質:塑膠",
- "pt_BR": "Material: plástico",
- "fi": "Materiaali: muovi",
- "pl": "Materiał: plastik"
- }
- },
- {
- "if": "material=steel",
- "then": {
- "en": "Material: steel",
- "de": "Material: Stahl",
- "fr": "Matériau : acier",
- "nl": "Gemaakt uit staal",
- "es": "Material: acero",
- "hu": "Anyag: acél",
- "it": "Materiale: acciaio",
- "ru": "Материал: сталь",
- "zh_Hans": "材质:不锈钢",
- "nb_NO": "Materiale: stål",
- "zh_Hant": "材質:鋼鐵",
- "pt_BR": "Material: aço",
- "fi": "Materiaali: teräs",
- "pl": "Materiał: stal"
- }
- }
- ],
- "question": {
- "en": "What is the bench (seating) made from?",
- "de": "Aus welchem Material besteht die Sitzbank (Sitzfläche)?",
- "fr": "De quel matériau ce banc est-il fait ?",
- "nl": "Uit welk materiaal is het zitgedeelte van deze zitbank gemaakt?",
- "hu": "Miből van a pad (ülő része)?",
- "it": "Di che materiale è fatta questa panchina?",
- "zh_Hans": "这个长椅(或座椅)是用什么材料做的?",
- "ru": "Из какого материала сделана скамейка?",
- "zh_Hant": "這個長椅 (座位) 是什麼做的?",
- "pt_BR": "De que é feito o banco (assento)?",
- "pl": "Z czego wykonana jest ławka (siedzisko)?"
- }
- },
- {
- "question": {
- "en": "In which direction are you looking when sitting on the bench?",
- "de": "In welche Richtung schaut man, wenn man auf der Bank sitzt?",
- "nl": "In welke richting kijk je wanneer je op deze zitbank zit?",
- "fr": "Dans quelle direction regardez-vous quand vous êtes assis sur le banc ?",
- "hu": "Milyen irányba néz a pad?",
- "it": "In che direzione si guarda quando si è seduti su questa panchina?",
- "ru": "В каком направлении вы смотрите, когда сидите на скамейке?",
- "zh_Hans": "坐在长椅上的时候你目视的方向是哪边?",
- "zh_Hant": "坐在長椅時是面對那個方向?",
- "pt_BR": "Em que direção você olha quando está sentado no banco?",
- "pl": "W jakim kierunku patrzysz siedząc na ławce?"
- },
- "render": {
- "en": "When sitting on the bench, one looks towards {direction}°.",
- "de": "Wenn man auf der Bank sitzt, schaut man in Richtung {direction}°.",
- "nl": "Wanneer je op deze bank zit, dan kijk je in {direction}°.",
- "fr": "Assis sur le banc, on regarde vers {direction}°.",
- "hu": "A pad {direction}° felé néz.",
- "it": "Quando si è seduti su questa panchina, si guarda verso {direction}°.",
- "zh_Hans": "坐在长椅上的时候目视方向为 {direction}°方位。",
- "ru": "Сидя на скамейке, вы смотрите в сторону {direction}°.",
- "zh_Hant": "當坐在長椅時,那個人朝向 {direction}°。",
- "pl": "Siedząc na ławce, patrzy się w kierunku {direction}°.",
- "pt_BR": "Ao sentar-se no banco, olha-se para {direction} °."
- },
- "freeform": {
- "key": "direction",
- "type": "direction"
- }
- },
- {
- "render": {
- "en": "Colour: {colour}",
- "de": "Farbe: {colour}",
- "fr": "Couleur : {colour}",
- "nl": "Kleur: {colour}",
- "hu": "Szín: {colour}",
- "it": "Colore: {colour}",
- "ru": "Цвет: {colour}",
- "id": "Warna: {colour}",
- "zh_Hans": "颜色: {colour}",
- "zh_Hant": "顏色:{colour}",
- "nb_NO": "Farge: {colour}",
- "pt_BR": "Cor: {colour}",
- "fi": "Väri: {colour}",
- "pl": "Kolor: {colour}"
- },
- "question": {
- "en": "Which colour does this bench have?",
- "de": "Welche Farbe hat diese Sitzbank?",
- "fr": "Quelle est la couleur de ce banc ?",
- "nl": "Welke kleur heeft deze zitbank?",
- "hu": "Milyen színű a pad?",
- "it": "Di che colore è questa panchina?",
- "ru": "Какого цвета скамейка?",
- "zh_Hans": "这个长椅是什么颜色的?",
- "zh_Hant": "這個長椅是什麼顏色的?",
- "pt_BR": "Qual a cor dessa bancada?",
- "pl": "Jaki kolor ma ta ławka?"
- },
- "freeform": {
- "key": "colour",
- "type": "color"
- },
- "mappings": [
- {
- "if": "colour=brown",
- "then": {
- "en": "Colour: brown",
- "de": "Farbe: braun",
- "fr": "Couleur : marron",
- "nl": "De kleur is bruin",
- "hu": "Szín: barna",
- "it": "Colore: marrone",
- "ru": "Цвет: коричневый",
- "zh_Hans": "颜色:棕",
- "zh_Hant": "顏色:棕色",
- "nb_NO": "Farge: brun",
- "pt_BR": "Cor: marrom",
- "fi": "Väri: ruskea",
- "pl": "Kolor: brązowy"
- }
- },
- {
- "if": "colour=green",
- "then": {
- "en": "Colour: green",
- "de": "Farbe: grün",
- "fr": "Couleur : verte",
- "nl": "De kleur is groen",
- "hu": "Szín: zöld",
- "it": "Colore: verde",
- "ru": "Цвет: зеленый",
- "zh_Hans": "颜色:绿",
- "zh_Hant": "顏色:綠色",
- "nb_NO": "Farge: grønn",
- "pt_BR": "Cor: verde",
- "fi": "Väri: vihreä",
- "pl": "Kolor: zielony"
- }
- },
- {
- "if": "colour=gray",
- "then": {
- "en": "Colour: gray",
- "de": "Farbe: grau",
- "fr": "Couleur : gris",
- "nl": "De kleur is grijs",
- "hu": "Szín: szürke",
- "it": "Colore: grigio",
- "ru": "Цвет: серый",
- "zh_Hans": "颜色:灰",
- "zh_Hant": "顏色:灰色",
- "nb_NO": "Farge: grå",
- "pt_BR": "Cor: cinza",
- "fi": "Väri: harmaa",
- "pl": "Kolor: szary"
- }
- },
- {
- "if": "colour=white",
- "then": {
- "en": "Colour: white",
- "de": "Farbe: weiß",
- "fr": "Couleur : blanc",
- "nl": "De kleur is wit",
- "hu": "Szín: fehér",
- "it": "Colore: bianco",
- "ru": "Цвет: белый",
- "zh_Hans": "颜色:白",
- "zh_Hant": "顏色:白色",
- "nb_NO": "Farge: hvit",
- "pt_BR": "Cor: branco",
- "fi": "Väri: valkoinen",
- "pl": "Kolor: biały"
- }
- },
- {
- "if": "colour=red",
- "then": {
- "en": "Colour: red",
- "de": "Farbe: rot",
- "fr": "Couleur : rouge",
- "nl": "De kleur is rood",
- "hu": "Szín: piros",
- "it": "Colore: rosso",
- "ru": "Цвет: красный",
- "zh_Hans": "颜色:红",
- "zh_Hant": "顏色:紅色",
- "nb_NO": "Farge: rød",
- "pt_BR": "Cor: vermelho",
- "fi": "Väri: punainen",
- "pl": "Kolor: czerwony"
- }
- },
- {
- "if": "colour=black",
- "then": {
- "en": "Colour: black",
- "de": "Farbe: schwarz",
- "fr": "Couleur : noire",
- "nl": "De kleur is zwart",
- "hu": "Szín: fekete",
- "it": "Colore: nero",
- "ru": "Цвет: чёрный",
- "zh_Hans": "颜色:黑",
- "zh_Hant": "顏色:黑色",
- "nb_NO": "Farge: svart",
- "pt_BR": "Cor: preto",
- "fi": "Väri: musta",
- "pl": "Kolor: czarny"
- }
- },
- {
- "if": "colour=blue",
- "then": {
- "en": "Colour: blue",
- "de": "Farbe: blau",
- "fr": "Couleur : bleu",
- "nl": "De kleur is blauw",
- "hu": "Szín: kék",
- "it": "Colore: blu",
- "ru": "Цвет: синий",
- "zh_Hans": "颜色:蓝",
- "zh_Hant": "顏色:藍色",
- "nb_NO": "Farge: blå",
- "pt_BR": "Cor: azul",
- "fi": "Väri: sininen",
- "pl": "Kolor: niebieski"
- }
- },
- {
- "if": "colour=yellow",
- "then": {
- "en": "Colour: yellow",
- "de": "Farbe: gelb",
- "fr": "Couleur : jaune",
- "nl": "De kleur is geel",
- "hu": "Szín: sárga",
- "it": "Colore: giallo",
- "ru": "Цвет: желтый",
- "zh_Hans": "颜色:黄",
- "zh_Hant": "顏色:黃色",
- "nb_NO": "Farge: gul",
- "pt_BR": "Cor: amarelo",
- "fi": "Väri: keltainen",
- "pl": "Kolor: żółty"
- }
- }
- ]
- },
- {
- "question": {
- "en": "When was this bench last surveyed?",
- "nl": "Wanneer is deze laatste bank laatst gesurveyed?",
- "fr": "Quand ce banc a-t-il été contrôlé pour la dernière fois ?",
- "it": "Quando è stata verificata l’ultima volta questa panchina?",
- "zh_Hans": "上次对这个长椅实地调查是什么时候?",
- "de": "Wann wurde diese Bank zuletzt überprüft?",
- "ru": "Когда последний раз обследовали эту скамейку?",
- "zh_Hant": "上一次探察長椅是什麼時候?",
- "pt_BR": "Quando esta bancada foi pesquisada pela última vez?",
- "pl": "Kiedy ostatnio badano tę ławkę?"
- },
- "render": {
- "en": "This bench was last surveyed on {survey:date}",
- "nl": "Deze bank is laatst gesurveyd op {survey:date}",
- "fr": "Ce banc a été contrôlé pour la dernière fois le {survey:date}",
- "it": "Questa panchina è stata controllata l’ultima volta in data {survey:date}",
- "zh_Hans": "这个长椅于 {survey:date}最后一次实地调查",
- "de": "Diese Bank wurde zuletzt überprüft am {survey:date}",
- "ru": "Последний раз обследование этой скамейки проводилось {survey:date}",
- "zh_Hant": "這個長椅最後是在 {survey:date} 探查的",
- "pt_BR": "Esta bancada foi pesquisada pela última vez em {survey:date}",
- "pl": "Ławka ta była ostatnio badana w dniu {survey:date}"
- },
- "freeform": {
- "key": "survey:date",
- "type": "date"
- },
- "mappings": [
- {
- "if": "survey:date:={_now:date}",
- "then": "Surveyed today!"
- }
- ]
- }
- ],
- "icon": {
- "render": "circle:#FE6F32;./assets/layers/bench/bench.svg"
- },
- "iconSize": {
- "render": "35,35,center"
- },
- "color": {
- "render": "#00f"
- },
- "presets": [
- {
- "tags": [
- "amenity=bench"
- ],
- "title": {
- "en": "Bench",
- "de": "Sitzbank",
- "fr": "Banc",
- "nl": "Zitbank",
- "es": "Banco",
- "it": "Panchina",
- "ru": "Скамейка",
+ "id": "bench",
+ "name": {
+ "en": "Benches",
+ "de": "Sitzbänke",
+ "fr": "Bancs",
+ "nl": "Zitbanken",
+ "es": "Bancos",
+ "hu": "Padok",
"id": "Bangku",
+ "it": "Panchine",
+ "ru": "Скамейки",
"zh_Hans": "长椅",
- "nb_NO": "Benk",
"zh_Hant": "長椅",
- "pt_BR": "Banco",
- "fi": "Penkki",
- "pl": "Ławka"
- },
- "description": {
- "en": "Add a new bench",
- "de": "Neue Sitzbank eintragen",
- "fr": "Ajouter un nouveau banc",
- "nl": "Voeg een nieuwe zitbank toe",
- "es": "Añadir un nuevo banco",
- "hu": "Pad hozzáadása",
- "it": "Aggiungi una nuova panchina",
- "ru": "Добавить новую скамейку",
- "zh_Hans": "增加一个新的长椅",
- "nb_NO": "Legg til en ny benk",
- "zh_Hant": "新增長椅",
- "pt_BR": "Adicionar um novo banco",
- "fi": "Lisää uusi penkki",
- "pl": "Dodaj nową ławkę"
- },
- "presiceInput": {
- "preferredBackground": "photo"
- }
- }
- ]
+ "nb_NO": "Benker",
+ "fi": "Penkit",
+ "pl": "Ławki",
+ "pt_BR": "Bancos"
+ },
+ "minzoom": 17,
+ "source": {
+ "osmTags": "amenity=bench"
+ },
+ "wayHandling": 1,
+ "title": {
+ "render": {
+ "en": "Bench",
+ "de": "Sitzbank",
+ "fr": "Banc",
+ "nl": "Zitbank",
+ "es": "Banco",
+ "hu": "Pad",
+ "id": "Bangku",
+ "it": "Panchina",
+ "ru": "Скамейка",
+ "zh_Hans": "长椅",
+ "zh_Hant": "長椅",
+ "nb_NO": "Benk",
+ "fi": "Penkki",
+ "pl": "Ławka",
+ "pt_BR": "Banco"
+ }
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "render": {
+ "en": "Backrest",
+ "de": "Rückenlehne",
+ "fr": "Dossier",
+ "nl": "Rugleuning",
+ "es": "Respaldo",
+ "hu": "Háttámla",
+ "id": "Sandaran",
+ "it": "Schienale",
+ "ru": "Спинка",
+ "zh_Hans": "靠背",
+ "zh_Hant": "靠背",
+ "nb_NO": "Rygglene",
+ "fi": "Selkänoja",
+ "pl": "Oparcie",
+ "pt_BR": "Encosto"
+ },
+ "freeform": {
+ "key": "backrest"
+ },
+ "mappings": [
+ {
+ "if": "backrest=yes",
+ "then": {
+ "en": "Backrest: Yes",
+ "de": "Rückenlehne: Ja",
+ "fr": "Dossier : Oui",
+ "nl": "Heeft een rugleuning",
+ "es": "Respaldo: Si",
+ "hu": "Háttámla: Igen",
+ "id": "Sandaran: Ya",
+ "it": "Schienale: Sì",
+ "ru": "Со спинкой",
+ "zh_Hans": "靠背:有",
+ "zh_Hant": "靠背:有",
+ "nb_NO": "Rygglene: Ja",
+ "fi": "Selkänoja: kyllä",
+ "pl": "Oparcie: Tak",
+ "pt_BR": "Encosto: Sim"
+ }
+ },
+ {
+ "if": "backrest=no",
+ "then": {
+ "en": "Backrest: No",
+ "de": "Rückenlehne: Nein",
+ "fr": "Dossier : Non",
+ "nl": "Rugleuning ontbreekt",
+ "es": "Respaldo: No",
+ "hu": "Háttámla: Nem",
+ "id": "Sandaran: Tidak",
+ "it": "Schienale: No",
+ "ru": "Без спинки",
+ "zh_Hans": "靠背:无",
+ "zh_Hant": "靠背:無",
+ "nb_NO": "Rygglene: Nei",
+ "fi": "Selkänoja: ei",
+ "pl": "Oparcie: Nie",
+ "pt_BR": "Encosto: Não"
+ }
+ }
+ ],
+ "question": {
+ "en": "Does this bench have a backrest?",
+ "de": "Hat diese Bank eine Rückenlehne?",
+ "fr": "Ce banc dispose-t-il d'un dossier ?",
+ "nl": "Heeft deze zitbank een rugleuning?",
+ "es": "¿Este banco tiene un respaldo?",
+ "hu": "Van háttámlája ennek a padnak?",
+ "id": "Apakah bangku ini memiliki sandaran?",
+ "it": "Questa panchina ha lo schienale?",
+ "ru": "Есть ли у этой скамейки спинка?",
+ "zh_Hans": "这个长椅有靠背吗?",
+ "zh_Hant": "這個長椅是否有靠背?",
+ "nb_NO": "Har denne beken et rygglene?",
+ "pl": "Czy ta ławka ma oparcie?",
+ "pt_BR": "Este assento tem um escosto?"
+ }
+ },
+ {
+ "render": {
+ "en": "{seats} seats",
+ "de": "{seats} Sitzplätze",
+ "fr": "{seats} places",
+ "nl": "{seats} zitplaatsen",
+ "es": "{seats} asientos",
+ "hu": "{seats} ülőhely",
+ "id": "{seats} kursi",
+ "it": "{seats} posti",
+ "ru": "{seats} мест",
+ "zh_Hant": "{seats} 座位數",
+ "nb_NO": "{seats} seter",
+ "pl": "{seats} siedzeń",
+ "pt_BR": "{seats} assentos"
+ },
+ "freeform": {
+ "key": "seats",
+ "type": "nat"
+ },
+ "question": {
+ "en": "How many seats does this bench have?",
+ "de": "Wie viele Sitzplätze hat diese Bank?",
+ "fr": "De combien de places dispose ce banc ?",
+ "nl": "Hoeveel zitplaatsen heeft deze bank?",
+ "es": "¿Cuántos asientos tiene este banco?",
+ "hu": "Hány ülőhely van ezen a padon?",
+ "it": "Quanti posti ha questa panchina?",
+ "ru": "Сколько мест на этой скамейке?",
+ "zh_Hans": "这个长椅有几个座位?",
+ "zh_Hant": "這個長椅有幾個位子?",
+ "nb_NO": "Hvor mange sitteplasser har denne benken?",
+ "pl": "Ile siedzeń ma ta ławka?",
+ "pt_BR": "Quantos assentos este banco tem?"
+ }
+ },
+ {
+ "render": {
+ "en": "Material: {material}",
+ "de": "Material: {material}",
+ "fr": "Matériau : {material}",
+ "nl": "Gemaakt van {material}",
+ "es": "Material: {material}",
+ "hu": "Anyag: {material}",
+ "it": "Materiale: {material}",
+ "ru": "Материал: {material}",
+ "zh_Hanå¨s": "材质: {material}",
+ "zh_Hant": "材質:{material}",
+ "nb_NO": "Materiale: {material}",
+ "fi": "Materiaali: {material}",
+ "zh_Hans": "材质: {material}",
+ "pl": "Materiał: {material}",
+ "pt_BR": "Material: {material}"
+ },
+ "freeform": {
+ "key": "material",
+ "addExtraTags": []
+ },
+ "mappings": [
+ {
+ "if": "material=wood",
+ "then": {
+ "en": "Material: wood",
+ "de": "Material: Holz",
+ "fr": "Matériau : bois",
+ "nl": "Gemaakt uit hout",
+ "es": "Material: madera",
+ "hu": "Anyag: fa",
+ "it": "Materiale: legno",
+ "ru": "Материал: дерево",
+ "zh_Hans": "材质:木",
+ "nb_NO": "Materiale: tre",
+ "zh_Hant": "材質:木頭",
+ "pt_BR": "Material: madeira",
+ "fi": "Materiaali: puu",
+ "pl": "Materiał: drewno"
+ }
+ },
+ {
+ "if": "material=metal",
+ "then": {
+ "en": "Material: metal",
+ "de": "Material: Metall",
+ "fr": "Matériau : métal",
+ "nl": "Gemaakt uit metaal",
+ "es": "Material: metal",
+ "hu": "Anyag: fém",
+ "it": "Materiale: metallo",
+ "ru": "Материал: металл",
+ "zh_Hans": "材质:金属",
+ "nb_NO": "Materiale: metall",
+ "zh_Hant": "材質:金屬",
+ "pl": "Materiał: metal",
+ "pt_BR": "Material: metal"
+ }
+ },
+ {
+ "if": "material=stone",
+ "then": {
+ "en": "Material: stone",
+ "de": "Material: Stein",
+ "fr": "Matériau : pierre",
+ "nl": "Gemaakt uit steen",
+ "es": "Material: piedra",
+ "hu": "Anyag: kő",
+ "it": "Materiale: pietra",
+ "ru": "Материал: камень",
+ "zh_Hans": "材质:石头",
+ "nb_NO": "Materiale: stein",
+ "zh_Hant": "材質:石頭",
+ "pt_BR": "Material: pedra",
+ "fi": "Materiaali: kivi",
+ "pl": "Materiał: kamień"
+ }
+ },
+ {
+ "if": "material=concrete",
+ "then": {
+ "en": "Material: concrete",
+ "de": "Material: Beton",
+ "fr": "Matériau : béton",
+ "nl": "Gemaakt uit beton",
+ "es": "Material: concreto",
+ "hu": "Anyag: beton",
+ "it": "Materiale: cemento",
+ "ru": "Материал: бетон",
+ "zh_Hans": "材质:混凝土",
+ "nb_NO": "Materiale: betong",
+ "zh_Hant": "材質:水泥",
+ "pt_BR": "Material: concreto",
+ "fi": "Materiaali: betoni",
+ "pl": "Materiał: beton"
+ }
+ },
+ {
+ "if": "material=plastic",
+ "then": {
+ "en": "Material: plastic",
+ "de": "Material: Kunststoff",
+ "fr": "Matériau : plastique",
+ "nl": "Gemaakt uit plastiek",
+ "es": "Material: plastico",
+ "hu": "Anyag: műanyag",
+ "it": "Materiale: plastica",
+ "ru": "Материал: пластик",
+ "zh_Hans": "材质:塑料",
+ "nb_NO": "Materiale: plastikk",
+ "zh_Hant": "材質:塑膠",
+ "pt_BR": "Material: plástico",
+ "fi": "Materiaali: muovi",
+ "pl": "Materiał: plastik"
+ }
+ },
+ {
+ "if": "material=steel",
+ "then": {
+ "en": "Material: steel",
+ "de": "Material: Stahl",
+ "fr": "Matériau : acier",
+ "nl": "Gemaakt uit staal",
+ "es": "Material: acero",
+ "hu": "Anyag: acél",
+ "it": "Materiale: acciaio",
+ "ru": "Материал: сталь",
+ "zh_Hans": "材质:不锈钢",
+ "nb_NO": "Materiale: stål",
+ "zh_Hant": "材質:鋼鐵",
+ "pt_BR": "Material: aço",
+ "fi": "Materiaali: teräs",
+ "pl": "Materiał: stal"
+ }
+ }
+ ],
+ "question": {
+ "en": "What is the bench (seating) made from?",
+ "de": "Aus welchem Material besteht die Sitzbank (Sitzfläche)?",
+ "fr": "De quel matériau ce banc est-il fait ?",
+ "nl": "Uit welk materiaal is het zitgedeelte van deze zitbank gemaakt?",
+ "hu": "Miből van a pad (ülő része)?",
+ "it": "Di che materiale è fatta questa panchina?",
+ "zh_Hans": "这个长椅(或座椅)是用什么材料做的?",
+ "ru": "Из какого материала сделана скамейка?",
+ "zh_Hant": "這個長椅 (座位) 是什麼做的?",
+ "pt_BR": "De que é feito o banco (assento)?",
+ "pl": "Z czego wykonana jest ławka (siedzisko)?"
+ }
+ },
+ {
+ "question": {
+ "en": "In which direction are you looking when sitting on the bench?",
+ "de": "In welche Richtung schaut man, wenn man auf der Bank sitzt?",
+ "nl": "In welke richting kijk je wanneer je op deze zitbank zit?",
+ "fr": "Dans quelle direction regardez-vous quand vous êtes assis sur le banc ?",
+ "hu": "Milyen irányba néz a pad?",
+ "it": "In che direzione si guarda quando si è seduti su questa panchina?",
+ "ru": "В каком направлении вы смотрите, когда сидите на скамейке?",
+ "zh_Hans": "坐在长椅上的时候你目视的方向是哪边?",
+ "zh_Hant": "坐在長椅時是面對那個方向?",
+ "pt_BR": "Em que direção você olha quando está sentado no banco?",
+ "pl": "W jakim kierunku patrzysz siedząc na ławce?"
+ },
+ "render": {
+ "en": "When sitting on the bench, one looks towards {direction}°.",
+ "de": "Wenn man auf der Bank sitzt, schaut man in Richtung {direction}°.",
+ "nl": "Wanneer je op deze bank zit, dan kijk je in {direction}°.",
+ "fr": "Assis sur le banc, on regarde vers {direction}°.",
+ "hu": "A pad {direction}° felé néz.",
+ "it": "Quando si è seduti su questa panchina, si guarda verso {direction}°.",
+ "zh_Hans": "坐在长椅上的时候目视方向为 {direction}°方位。",
+ "ru": "Сидя на скамейке, вы смотрите в сторону {direction}°.",
+ "zh_Hant": "當坐在長椅時,那個人朝向 {direction}°。",
+ "pl": "Siedząc na ławce, patrzy się w kierunku {direction}°.",
+ "pt_BR": "Ao sentar-se no banco, olha-se para {direction} °."
+ },
+ "freeform": {
+ "key": "direction",
+ "type": "direction"
+ }
+ },
+ {
+ "render": {
+ "en": "Colour: {colour}",
+ "de": "Farbe: {colour}",
+ "fr": "Couleur : {colour}",
+ "nl": "Kleur: {colour}",
+ "hu": "Szín: {colour}",
+ "it": "Colore: {colour}",
+ "ru": "Цвет: {colour}",
+ "id": "Warna: {colour}",
+ "zh_Hans": "颜色: {colour}",
+ "zh_Hant": "顏色:{colour}",
+ "nb_NO": "Farge: {colour}",
+ "pt_BR": "Cor: {colour}",
+ "fi": "Väri: {colour}",
+ "pl": "Kolor: {colour}"
+ },
+ "question": {
+ "en": "Which colour does this bench have?",
+ "de": "Welche Farbe hat diese Sitzbank?",
+ "fr": "Quelle est la couleur de ce banc ?",
+ "nl": "Welke kleur heeft deze zitbank?",
+ "hu": "Milyen színű a pad?",
+ "it": "Di che colore è questa panchina?",
+ "ru": "Какого цвета скамейка?",
+ "zh_Hans": "这个长椅是什么颜色的?",
+ "zh_Hant": "這個長椅是什麼顏色的?",
+ "pt_BR": "Qual a cor dessa bancada?",
+ "pl": "Jaki kolor ma ta ławka?"
+ },
+ "freeform": {
+ "key": "colour",
+ "type": "color"
+ },
+ "mappings": [
+ {
+ "if": "colour=brown",
+ "then": {
+ "en": "Colour: brown",
+ "de": "Farbe: braun",
+ "fr": "Couleur : marron",
+ "nl": "De kleur is bruin",
+ "hu": "Szín: barna",
+ "it": "Colore: marrone",
+ "ru": "Цвет: коричневый",
+ "zh_Hans": "颜色:棕",
+ "zh_Hant": "顏色:棕色",
+ "nb_NO": "Farge: brun",
+ "pt_BR": "Cor: marrom",
+ "fi": "Väri: ruskea",
+ "pl": "Kolor: brązowy"
+ }
+ },
+ {
+ "if": "colour=green",
+ "then": {
+ "en": "Colour: green",
+ "de": "Farbe: grün",
+ "fr": "Couleur : verte",
+ "nl": "De kleur is groen",
+ "hu": "Szín: zöld",
+ "it": "Colore: verde",
+ "ru": "Цвет: зеленый",
+ "zh_Hans": "颜色:绿",
+ "zh_Hant": "顏色:綠色",
+ "nb_NO": "Farge: grønn",
+ "pt_BR": "Cor: verde",
+ "fi": "Väri: vihreä",
+ "pl": "Kolor: zielony"
+ }
+ },
+ {
+ "if": "colour=gray",
+ "then": {
+ "en": "Colour: gray",
+ "de": "Farbe: grau",
+ "fr": "Couleur : gris",
+ "nl": "De kleur is grijs",
+ "hu": "Szín: szürke",
+ "it": "Colore: grigio",
+ "ru": "Цвет: серый",
+ "zh_Hans": "颜色:灰",
+ "zh_Hant": "顏色:灰色",
+ "nb_NO": "Farge: grå",
+ "pt_BR": "Cor: cinza",
+ "fi": "Väri: harmaa",
+ "pl": "Kolor: szary"
+ }
+ },
+ {
+ "if": "colour=white",
+ "then": {
+ "en": "Colour: white",
+ "de": "Farbe: weiß",
+ "fr": "Couleur : blanc",
+ "nl": "De kleur is wit",
+ "hu": "Szín: fehér",
+ "it": "Colore: bianco",
+ "ru": "Цвет: белый",
+ "zh_Hans": "颜色:白",
+ "zh_Hant": "顏色:白色",
+ "nb_NO": "Farge: hvit",
+ "pt_BR": "Cor: branco",
+ "fi": "Väri: valkoinen",
+ "pl": "Kolor: biały"
+ }
+ },
+ {
+ "if": "colour=red",
+ "then": {
+ "en": "Colour: red",
+ "de": "Farbe: rot",
+ "fr": "Couleur : rouge",
+ "nl": "De kleur is rood",
+ "hu": "Szín: piros",
+ "it": "Colore: rosso",
+ "ru": "Цвет: красный",
+ "zh_Hans": "颜色:红",
+ "zh_Hant": "顏色:紅色",
+ "nb_NO": "Farge: rød",
+ "pt_BR": "Cor: vermelho",
+ "fi": "Väri: punainen",
+ "pl": "Kolor: czerwony"
+ }
+ },
+ {
+ "if": "colour=black",
+ "then": {
+ "en": "Colour: black",
+ "de": "Farbe: schwarz",
+ "fr": "Couleur : noire",
+ "nl": "De kleur is zwart",
+ "hu": "Szín: fekete",
+ "it": "Colore: nero",
+ "ru": "Цвет: чёрный",
+ "zh_Hans": "颜色:黑",
+ "zh_Hant": "顏色:黑色",
+ "nb_NO": "Farge: svart",
+ "pt_BR": "Cor: preto",
+ "fi": "Väri: musta",
+ "pl": "Kolor: czarny"
+ }
+ },
+ {
+ "if": "colour=blue",
+ "then": {
+ "en": "Colour: blue",
+ "de": "Farbe: blau",
+ "fr": "Couleur : bleu",
+ "nl": "De kleur is blauw",
+ "hu": "Szín: kék",
+ "it": "Colore: blu",
+ "ru": "Цвет: синий",
+ "zh_Hans": "颜色:蓝",
+ "zh_Hant": "顏色:藍色",
+ "nb_NO": "Farge: blå",
+ "pt_BR": "Cor: azul",
+ "fi": "Väri: sininen",
+ "pl": "Kolor: niebieski"
+ }
+ },
+ {
+ "if": "colour=yellow",
+ "then": {
+ "en": "Colour: yellow",
+ "de": "Farbe: gelb",
+ "fr": "Couleur : jaune",
+ "nl": "De kleur is geel",
+ "hu": "Szín: sárga",
+ "it": "Colore: giallo",
+ "ru": "Цвет: желтый",
+ "zh_Hans": "颜色:黄",
+ "zh_Hant": "顏色:黃色",
+ "nb_NO": "Farge: gul",
+ "pt_BR": "Cor: amarelo",
+ "fi": "Väri: keltainen",
+ "pl": "Kolor: żółty"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "When was this bench last surveyed?",
+ "nl": "Wanneer is deze laatste bank laatst gesurveyed?",
+ "fr": "Quand ce banc a-t-il été contrôlé pour la dernière fois ?",
+ "it": "Quando è stata verificata l’ultima volta questa panchina?",
+ "zh_Hans": "上次对这个长椅实地调查是什么时候?",
+ "de": "Wann wurde diese Bank zuletzt überprüft?",
+ "ru": "Когда последний раз обследовали эту скамейку?",
+ "zh_Hant": "上一次探察長椅是什麼時候?",
+ "pt_BR": "Quando esta bancada foi pesquisada pela última vez?",
+ "pl": "Kiedy ostatnio badano tę ławkę?"
+ },
+ "render": {
+ "en": "This bench was last surveyed on {survey:date}",
+ "nl": "Deze bank is laatst gesurveyd op {survey:date}",
+ "fr": "Ce banc a été contrôlé pour la dernière fois le {survey:date}",
+ "it": "Questa panchina è stata controllata l’ultima volta in data {survey:date}",
+ "zh_Hans": "这个长椅于 {survey:date}最后一次实地调查",
+ "de": "Diese Bank wurde zuletzt überprüft am {survey:date}",
+ "ru": "Последний раз обследование этой скамейки проводилось {survey:date}",
+ "zh_Hant": "這個長椅最後是在 {survey:date} 探查的",
+ "pt_BR": "Esta bancada foi pesquisada pela última vez em {survey:date}",
+ "pl": "Ławka ta była ostatnio badana w dniu {survey:date}"
+ },
+ "freeform": {
+ "key": "survey:date",
+ "type": "date"
+ },
+ "mappings": [
+ {
+ "if": "survey:date:={_now:date}",
+ "then": "Surveyed today!"
+ }
+ ]
+ }
+ ],
+ "icon": {
+ "render": "circle:#FE6F32;./assets/layers/bench/bench.svg"
+ },
+ "iconSize": {
+ "render": "35,35,center"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": [
+ {
+ "tags": [
+ "amenity=bench"
+ ],
+ "title": {
+ "en": "Bench",
+ "de": "Sitzbank",
+ "fr": "Banc",
+ "nl": "Zitbank",
+ "es": "Banco",
+ "it": "Panchina",
+ "ru": "Скамейка",
+ "id": "Bangku",
+ "zh_Hans": "长椅",
+ "nb_NO": "Benk",
+ "zh_Hant": "長椅",
+ "pt_BR": "Banco",
+ "fi": "Penkki",
+ "pl": "Ławka"
+ },
+ "description": {
+ "en": "Add a new bench",
+ "de": "Neue Sitzbank eintragen",
+ "fr": "Ajouter un nouveau banc",
+ "nl": "Voeg een nieuwe zitbank toe",
+ "es": "Añadir un nuevo banco",
+ "hu": "Pad hozzáadása",
+ "it": "Aggiungi una nuova panchina",
+ "ru": "Добавить новую скамейку",
+ "zh_Hans": "增加一个新的长椅",
+ "nb_NO": "Legg til en ny benk",
+ "zh_Hant": "新增長椅",
+ "pt_BR": "Adicionar um novo banco",
+ "fi": "Lisää uusi penkki",
+ "pl": "Dodaj nową ławkę"
+ },
+ "presiceInput": {
+ "preferredBackground": "photo"
+ }
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/bench_at_pt/bench_at_pt.json b/assets/layers/bench_at_pt/bench_at_pt.json
index ff184b187..e585bae45 100644
--- a/assets/layers/bench_at_pt/bench_at_pt.json
+++ b/assets/layers/bench_at_pt/bench_at_pt.json
@@ -1,145 +1,145 @@
{
- "id": "bench_at_pt",
- "name": {
- "en": "Benches at public transport stops",
- "de": "Sitzbänke bei Haltestellen",
- "fr": "Bancs des arrêts de transport en commun",
- "nl": "Zitbanken aan bushaltes",
- "es": "Bancos en una parada de transporte público",
- "hu": "Padok megállókban",
- "it": "Panchine alle fermate del trasporto pubblico",
- "ru": "Скамейки на остановках общественного транспорта",
- "zh_Hans": "在公交站点的长椅",
- "nb_NO": "Benker",
- "zh_Hant": "大眾運輸站點的長椅",
- "pt_BR": "Bancos em pontos de transporte público",
- "pl": "Ławki na przystankach komunikacji miejskiej"
- },
- "minzoom": 14,
- "source": {
- "osmTags": {
- "or": [
- "bench=yes",
- "bench=stand_up_bench"
- ]
- }
- },
- "title": {
- "render": {
- "en": "Bench",
- "de": "Sitzbank",
- "fr": "Banc",
- "nl": "Zitbank",
- "es": "Banco",
- "hu": "Pad",
- "it": "Panchina",
- "ru": "Скамейка",
- "id": "Bangku",
- "zh_Hans": "长椅",
- "nb_NO": "Benk",
- "zh_Hant": "長椅",
- "pt_BR": "Banco",
- "fi": "Penkki",
- "pl": "Ławka"
+ "id": "bench_at_pt",
+ "name": {
+ "en": "Benches at public transport stops",
+ "de": "Sitzbänke bei Haltestellen",
+ "fr": "Bancs des arrêts de transport en commun",
+ "nl": "Zitbanken aan bushaltes",
+ "es": "Bancos en una parada de transporte público",
+ "hu": "Padok megállókban",
+ "it": "Panchine alle fermate del trasporto pubblico",
+ "ru": "Скамейки на остановках общественного транспорта",
+ "zh_Hans": "在公交站点的长椅",
+ "nb_NO": "Benker",
+ "zh_Hant": "大眾運輸站點的長椅",
+ "pt_BR": "Bancos em pontos de transporte público",
+ "pl": "Ławki na przystankach komunikacji miejskiej"
},
- "mappings": [
- {
- "if": {
- "or": [
- "public_transport=platform",
- "railway=platform",
- "highway=bus_stop"
- ]
- },
- "then": {
- "en": "Bench at public transport stop",
- "de": "Sitzbank bei Haltestelle",
- "fr": "Banc d'un arrêt de transport en commun",
- "nl": "Zitbank aan een bushalte",
- "hu": "Pad megállóban",
- "it": "Panchina alla fermata del trasporto pubblico",
- "ru": "Скамейка на остановке общественного транспорта",
- "zh_Hans": "在公交站点的长椅",
- "zh_Hant": "大眾運輸站點的長椅",
- "pt_BR": "Banco em ponto de transporte público",
- "pl": "Ławka na przystanku komunikacji miejskiej"
+ "minzoom": 14,
+ "source": {
+ "osmTags": {
+ "or": [
+ "bench=yes",
+ "bench=stand_up_bench"
+ ]
}
- },
- {
- "if": {
- "and": [
- "amenity=shelter"
- ]
- },
- "then": {
- "en": "Bench in shelter",
- "de": "Sitzbank in Unterstand",
- "fr": "Banc dans un abri",
- "nl": "Zitbank in een schuilhokje",
- "hu": "Pad fedett helyen",
- "it": "Panchina in un riparo",
- "zh_Hans": "在庇护所的长椅",
- "ru": "Скамейка в укрытии",
- "zh_Hant": "涼亭內的長椅",
- "pt_BR": "Banco em abrigo"
- }
- }
- ]
- },
- "tagRenderings": [
- "images",
- {
- "render": {
- "en": "{name}",
- "de": "{name}",
- "fr": "{name}",
- "nl": "{name}",
- "hu": "{name}",
- "it": "{name}",
- "ru": "{name}",
- "id": "{name}",
- "zh_Hans": "{name}",
- "zh_Hant": "{name}",
- "pt_BR": "{name}",
- "fi": "{name}",
- "pl": "{name}"
- },
- "freeform": {
- "key": "name"
- }
},
- {
- "render": {
- "en": "Stand up bench",
- "de": "Stehbank",
- "fr": "Banc assis debout",
- "nl": "Leunbank",
- "it": "Panca in piedi",
- "zh_Hans": "站立长凳",
- "ru": "Встаньте на скамейке",
- "zh_Hant": "站立長椅"
- },
- "freeform": {
- "key": "bench",
- "addExtraTags": []
- },
- "condition": {
- "and": [
- "bench=stand_up_bench"
+ "title": {
+ "render": {
+ "en": "Bench",
+ "de": "Sitzbank",
+ "fr": "Banc",
+ "nl": "Zitbank",
+ "es": "Banco",
+ "hu": "Pad",
+ "it": "Panchina",
+ "ru": "Скамейка",
+ "id": "Bangku",
+ "zh_Hans": "长椅",
+ "nb_NO": "Benk",
+ "zh_Hant": "長椅",
+ "pt_BR": "Banco",
+ "fi": "Penkki",
+ "pl": "Ławka"
+ },
+ "mappings": [
+ {
+ "if": {
+ "or": [
+ "public_transport=platform",
+ "railway=platform",
+ "highway=bus_stop"
+ ]
+ },
+ "then": {
+ "en": "Bench at public transport stop",
+ "de": "Sitzbank bei Haltestelle",
+ "fr": "Banc d'un arrêt de transport en commun",
+ "nl": "Zitbank aan een bushalte",
+ "hu": "Pad megállóban",
+ "it": "Panchina alla fermata del trasporto pubblico",
+ "ru": "Скамейка на остановке общественного транспорта",
+ "zh_Hans": "在公交站点的长椅",
+ "zh_Hant": "大眾運輸站點的長椅",
+ "pt_BR": "Banco em ponto de transporte público",
+ "pl": "Ławka na przystanku komunikacji miejskiej"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "amenity=shelter"
+ ]
+ },
+ "then": {
+ "en": "Bench in shelter",
+ "de": "Sitzbank in Unterstand",
+ "fr": "Banc dans un abri",
+ "nl": "Zitbank in een schuilhokje",
+ "hu": "Pad fedett helyen",
+ "it": "Panchina in un riparo",
+ "zh_Hans": "在庇护所的长椅",
+ "ru": "Скамейка в укрытии",
+ "zh_Hant": "涼亭內的長椅",
+ "pt_BR": "Banco em abrigo"
+ }
+ }
]
- }
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "render": {
+ "en": "{name}",
+ "de": "{name}",
+ "fr": "{name}",
+ "nl": "{name}",
+ "hu": "{name}",
+ "it": "{name}",
+ "ru": "{name}",
+ "id": "{name}",
+ "zh_Hans": "{name}",
+ "zh_Hant": "{name}",
+ "pt_BR": "{name}",
+ "fi": "{name}",
+ "pl": "{name}"
+ },
+ "freeform": {
+ "key": "name"
+ }
+ },
+ {
+ "render": {
+ "en": "Stand up bench",
+ "de": "Stehbank",
+ "fr": "Banc assis debout",
+ "nl": "Leunbank",
+ "it": "Panca in piedi",
+ "zh_Hans": "站立长凳",
+ "ru": "Встаньте на скамейке",
+ "zh_Hant": "站立長椅"
+ },
+ "freeform": {
+ "key": "bench",
+ "addExtraTags": []
+ },
+ "condition": {
+ "and": [
+ "bench=stand_up_bench"
+ ]
+ }
+ }
+ ],
+ "icon": {
+ "render": "./assets/themes/benches/bench_public_transport.svg"
+ },
+ "width": {
+ "render": "8"
+ },
+ "iconSize": {
+ "render": "35,35,center"
+ },
+ "color": {
+ "render": "#00f"
}
- ],
- "icon": {
- "render": "./assets/themes/benches/bench_public_transport.svg"
- },
- "width": {
- "render": "8"
- },
- "iconSize": {
- "render": "35,35,center"
- },
- "color": {
- "render": "#00f"
- }
}
\ No newline at end of file
diff --git a/assets/layers/bicycle_library/bicycle_library.json b/assets/layers/bicycle_library/bicycle_library.json
index 589cf99ec..f2751c175 100644
--- a/assets/layers/bicycle_library/bicycle_library.json
+++ b/assets/layers/bicycle_library/bicycle_library.json
@@ -1,268 +1,268 @@
{
- "id": "bicycle_library",
- "name": {
- "en": "Bicycle library",
- "nl": "Fietsbibliotheek",
- "fr": "Vélothèque",
- "it": "Bici in prestito",
- "ru": "Велосипедная библиотека",
- "zh_Hant": "單車圖書館",
- "pt_BR": "Biblioteca de bicicleta"
- },
- "minzoom": 8,
- "source": {
- "osmTags": "amenity=bicycle_library"
- },
- "title": {
- "render": {
- "en": "Bicycle library",
- "nl": "Fietsbibliotheek",
- "fr": "Vélothèque",
- "it": "Bici in prestito",
- "ru": "Велосипедная библиотека",
- "zh_Hant": "單車圖書館",
- "pt_BR": "Biblioteca de bicicleta"
- },
- "mappings": [
- {
- "if": "name~*",
- "then": "{name}"
- }
- ]
- },
- "titleIcons": [
- {
- "condition": {
- "or": [
- "service:bicycle:pump=yes",
- "service:bicycle:pump=separate"
- ]
- },
- "render": ""
- },
- "defaults"
- ],
- "description": {
- "en": "A facility where bicycles can be lent for longer period of times",
- "nl": "Een plaats waar men voor langere tijd een fiets kan lenen",
- "fr": "Un lieu où des vélos peuvent être empruntés pour un temps plus long",
- "hu": "Létesítmény, ahonnan kerékpár kölcsönözhető hosszabb időre",
- "it": "Una struttura dove le biciclette possono essere prestate per periodi di tempo più lunghi",
- "de": "Eine Einrichtung, in der Fahrräder für längere Zeit geliehen werden können",
- "ru": "Учреждение, где велосипед может быть арендован на более длительный срок",
- "zh_Hant": "能夠長期租用單車的設施",
- "pt_BR": "Uma instalação onde as bicicletas podem ser emprestadas por períodos mais longos",
- "pl": "Obiekt, w którym rowery można wypożyczyć na dłuższy okres"
- },
- "tagRenderings": [
- "images",
- {
- "question": {
- "en": "What is the name of this bicycle library?",
- "nl": "Wat is de naam van deze fietsbieb?",
- "fr": "Quel est le nom de cette vélothèque ?",
- "it": "Qual è il nome di questo “bici in prestito”?",
- "ru": "Как называется эта велосипедная библиотека?",
- "nb_NO": "Hva heter dette sykkelbiblioteket?",
- "zh_Hant": "這個單車圖書館的名稱是?",
- "pt_BR": "Qual o nome desta biblioteca de bicicleta?"
- },
- "render": {
- "en": "This bicycle library is called {name}",
- "nl": "Deze fietsbieb heet {name}",
- "fr": "Cette vélothèque s'appelle {name}",
- "it": "Il “bici in prestito” è chiamato {name}",
- "ru": "Эта велосипедная библиотека называется {name}",
- "nb_NO": "Dette sykkelbiblioteket heter {name}",
- "zh_Hant": "這個單車圖書館叫做 {name}",
- "pt_BR": "Esta biblioteca de bicicleta é chamada de {name}"
- },
- "freeform": {
- "key": "name"
- }
- },
- "website",
- "phone",
- "email",
- "opening_hours",
- {
- "question": {
- "en": "How much does lending a bicycle cost?",
- "nl": "Hoeveel kost het huren van een fiets?",
- "fr": "Combien coûte l'emprunt d'un vélo ?",
- "hu": "Mennyibe kerül egy kerékpár kölcsönzése?",
- "it": "Quanto costa il prestito di una bicicletta?",
- "ru": "Сколько стоит прокат велосипеда?",
- "de": "Wie viel kostet das Ausleihen eines Fahrrads?",
- "nb_NO": "Hvor mye koster det å leie en sykkel?",
- "zh_Hant": "租用單車的費用多少?",
- "pt_BR": "Quanto custa um empréstimo de bicicleta?"
- },
- "render": {
- "en": "Lending a bicycle costs {charge}",
- "nl": "Een fiets huren kost {charge}",
- "fr": "Emprunter un vélo coûte {charge}",
- "hu": "Egy kerékpár kölcsönzése {charge}",
- "it": "Il prestito di una bicicletta costa {charge}",
- "ru": "Стоимость аренды велосипеда {charge}",
- "de": "Das Ausleihen eines Fahrrads kostet {charge}",
- "nb_NO": "Sykkelleie koster {charge}",
- "zh_Hant": "租借單車需要 {charge}",
- "pt_BR": "Custos de empréstimo de bicicleta {charge}"
- },
- "freeform": {
- "key": "charge",
- "addExtraTags": [
- "fee=yes"
- ]
- },
- "mappings": [
- {
- "if": {
- "and": [
- "fee=no",
- "charge="
- ]
- },
- "then": {
- "en": "Lending a bicycle is free",
- "nl": "Een fiets huren is gratis",
- "fr": "L'emprunt de vélo est gratuit",
- "hu": "A kerékpárkölcsönzés ingyenes",
- "it": "Il prestito di una bicicletta è gratuito",
- "de": "Das Ausleihen eines Fahrrads ist kostenlos",
- "ru": "Прокат велосипедов бесплатен",
- "nb_NO": "Det er gratis å leie en sykkel",
- "zh_Hant": "租借單車免費",
- "pt_BR": "Emprestar uma bicicleta é grátis"
- }
- },
- {
- "if": {
- "and": [
- "fee=yes",
- "charge=€20warranty + €20/year"
- ]
- },
- "then": {
- "en": "Lending a bicycle costs €20/year and €20 warranty",
- "nl": "Een fiets huren kost €20/jaar en €20 waarborg",
- "fr": "Emprunter un vélo coûte 20 €/an et 20 € de garantie",
- "it": "Il prestito di una bicicletta costa 20 €/anno più 20 € di garanzia",
- "de": "Das Ausleihen eines Fahrrads kostet 20€ pro Jahr und 20€ Gebühr",
- "zh_Hant": "租借單車價錢 €20/year 與 €20 保證金",
- "ru": "Прокат велосипеда стоит €20/год и €20 залог",
- "pt_BR": "Emprestar uma bicicleta custa €20/ano e €20 de garantia"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Who can lend bicycles here?",
- "nl": "Voor wie worden hier fietsen aangeboden?",
- "fr": "Qui peut emprunter des vélos ici ?",
- "hu": "Ki kölcsönözhet itt kerékpárt?",
- "it": "Chi può prendere in prestito le biciclette qua?",
- "zh_Hans": "谁可以从这里借自行车?",
- "de": "Wer kann hier Fahrräder ausleihen?",
- "ru": "Кто здесь может арендовать велосипед?",
- "zh_Hant": "誰可以在這裡租單車?",
- "pt_BR": "Quem pode emprestar bicicletas aqui?"
- },
- "multiAnswer": true,
- "mappings": [
- {
- "if": "bicycle_library:for=child",
- "then": {
- "nl": "Aanbod voor kinderen",
- "en": "Bikes for children available",
- "fr": "Vélos pour enfants disponibles",
- "hu": "",
- "it": "Sono disponibili biciclette per bambini",
- "de": "Fahrräder für Kinder verfügbar",
- "ru": "Доступны детские велосипеды",
- "zh_Hant": "提供兒童單車",
- "pt_BR": "Bicicletas para crianças disponíveis"
- }
- },
- {
- "if": "bicycle_library:for=adult",
- "then": {
- "nl": "Aanbod voor volwassenen",
- "en": "Bikes for adult available",
- "fr": "Vélos pour adultes disponibles",
- "it": "Sono disponibili biciclette per adulti",
- "de": "Fahrräder für Erwachsene verfügbar",
- "ru": "Доступны велосипеды для взрослых",
- "zh_Hant": "有提供成人單車",
- "pt_BR": "Bicicletas para adulto disponíveis"
- }
- },
- {
- "if": "bicycle_library:for=disabled",
- "then": {
- "nl": "Aanbod voor personen met een handicap",
- "en": "Bikes for disabled persons available",
- "fr": "Vélos pour personnes handicapées disponibles",
- "it": "Sono disponibili biciclette per disabili",
- "de": "Fahrräder für Behinderte verfügbar",
- "ru": "Доступны велосипеды для людей с ограниченными возможностями",
- "zh_Hant": "有提供行動不便人士的單車",
- "pt_BR": "Bicicletas para deficientes físicos disponíveis"
- }
- }
- ]
- },
- "description"
- ],
- "presets": [
- {
- "title": {
- "en": "Fietsbibliotheek",
- "nl": "Bicycle library",
- "ru": "Велосипедная библиотека",
- "zh_Hant": "自行車圖書館 ( Fietsbibliotheek)",
- "it": "Bici in prestito",
+ "id": "bicycle_library",
+ "name": {
+ "en": "Bicycle library",
+ "nl": "Fietsbibliotheek",
"fr": "Vélothèque",
- "pt_BR": "Biblioteca de bicicletas"
- },
- "tags": [
- "amenity=bicycle_library"
- ],
- "description": {
- "nl": "Een fietsbieb heeft een collectie fietsen die leden mogen lenen",
- "en": "A bicycle library has a collection of bikes which can be lent",
- "fr": "Une vélothèque a une flotte de vélos qui peuvent être empruntés",
- "it": "Una ciclo-teca o «bici in prestito» ha una collezione di bici che possno essere prestate",
- "ru": "В велосипедной библиотеке есть велосипеды для аренды",
- "zh_Hant": "單車圖書館有一大批單車供人租借"
- }
- }
- ],
- "icon": {
- "render": "pin:#22ff55;./assets/layers/bicycle_library/bicycle_library.svg"
- },
- "iconOverlays": [
- {
- "if": "opening_hours~*",
- "then": "isOpen",
- "badge": true
+ "it": "Bici in prestito",
+ "ru": "Велосипедная библиотека",
+ "zh_Hant": "單車圖書館",
+ "pt_BR": "Biblioteca de bicicleta"
},
- {
- "if": "service:bicycle:pump=yes",
- "then": "circle:#e2783d;./assets/layers/bike_repair_station/pump.svg",
- "badge": true
- }
- ],
- "width": {
- "render": "1"
- },
- "iconSize": {
- "render": "50,50,bottom"
- },
- "color": {
- "render": "#c00"
- },
- "wayHandling": 2
+ "minzoom": 8,
+ "source": {
+ "osmTags": "amenity=bicycle_library"
+ },
+ "title": {
+ "render": {
+ "en": "Bicycle library",
+ "nl": "Fietsbibliotheek",
+ "fr": "Vélothèque",
+ "it": "Bici in prestito",
+ "ru": "Велосипедная библиотека",
+ "zh_Hant": "單車圖書館",
+ "pt_BR": "Biblioteca de bicicleta"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": "{name}"
+ }
+ ]
+ },
+ "titleIcons": [
+ {
+ "condition": {
+ "or": [
+ "service:bicycle:pump=yes",
+ "service:bicycle:pump=separate"
+ ]
+ },
+ "render": ""
+ },
+ "defaults"
+ ],
+ "description": {
+ "en": "A facility where bicycles can be lent for longer period of times",
+ "nl": "Een plaats waar men voor langere tijd een fiets kan lenen",
+ "fr": "Un lieu où des vélos peuvent être empruntés pour un temps plus long",
+ "hu": "Létesítmény, ahonnan kerékpár kölcsönözhető hosszabb időre",
+ "it": "Una struttura dove le biciclette possono essere prestate per periodi di tempo più lunghi",
+ "de": "Eine Einrichtung, in der Fahrräder für längere Zeit geliehen werden können",
+ "ru": "Учреждение, где велосипед может быть арендован на более длительный срок",
+ "zh_Hant": "能夠長期租用單車的設施",
+ "pt_BR": "Uma instalação onde as bicicletas podem ser emprestadas por períodos mais longos",
+ "pl": "Obiekt, w którym rowery można wypożyczyć na dłuższy okres"
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "en": "What is the name of this bicycle library?",
+ "nl": "Wat is de naam van deze fietsbieb?",
+ "fr": "Quel est le nom de cette vélothèque ?",
+ "it": "Qual è il nome di questo “bici in prestito”?",
+ "ru": "Как называется эта велосипедная библиотека?",
+ "nb_NO": "Hva heter dette sykkelbiblioteket?",
+ "zh_Hant": "這個單車圖書館的名稱是?",
+ "pt_BR": "Qual o nome desta biblioteca de bicicleta?"
+ },
+ "render": {
+ "en": "This bicycle library is called {name}",
+ "nl": "Deze fietsbieb heet {name}",
+ "fr": "Cette vélothèque s'appelle {name}",
+ "it": "Il “bici in prestito” è chiamato {name}",
+ "ru": "Эта велосипедная библиотека называется {name}",
+ "nb_NO": "Dette sykkelbiblioteket heter {name}",
+ "zh_Hant": "這個單車圖書館叫做 {name}",
+ "pt_BR": "Esta biblioteca de bicicleta é chamada de {name}"
+ },
+ "freeform": {
+ "key": "name"
+ }
+ },
+ "website",
+ "phone",
+ "email",
+ "opening_hours",
+ {
+ "question": {
+ "en": "How much does lending a bicycle cost?",
+ "nl": "Hoeveel kost het huren van een fiets?",
+ "fr": "Combien coûte l'emprunt d'un vélo ?",
+ "hu": "Mennyibe kerül egy kerékpár kölcsönzése?",
+ "it": "Quanto costa il prestito di una bicicletta?",
+ "ru": "Сколько стоит прокат велосипеда?",
+ "de": "Wie viel kostet das Ausleihen eines Fahrrads?",
+ "nb_NO": "Hvor mye koster det å leie en sykkel?",
+ "zh_Hant": "租用單車的費用多少?",
+ "pt_BR": "Quanto custa um empréstimo de bicicleta?"
+ },
+ "render": {
+ "en": "Lending a bicycle costs {charge}",
+ "nl": "Een fiets huren kost {charge}",
+ "fr": "Emprunter un vélo coûte {charge}",
+ "hu": "Egy kerékpár kölcsönzése {charge}",
+ "it": "Il prestito di una bicicletta costa {charge}",
+ "ru": "Стоимость аренды велосипеда {charge}",
+ "de": "Das Ausleihen eines Fahrrads kostet {charge}",
+ "nb_NO": "Sykkelleie koster {charge}",
+ "zh_Hant": "租借單車需要 {charge}",
+ "pt_BR": "Custos de empréstimo de bicicleta {charge}"
+ },
+ "freeform": {
+ "key": "charge",
+ "addExtraTags": [
+ "fee=yes"
+ ]
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "fee=no",
+ "charge="
+ ]
+ },
+ "then": {
+ "en": "Lending a bicycle is free",
+ "nl": "Een fiets huren is gratis",
+ "fr": "L'emprunt de vélo est gratuit",
+ "hu": "A kerékpárkölcsönzés ingyenes",
+ "it": "Il prestito di una bicicletta è gratuito",
+ "de": "Das Ausleihen eines Fahrrads ist kostenlos",
+ "ru": "Прокат велосипедов бесплатен",
+ "nb_NO": "Det er gratis å leie en sykkel",
+ "zh_Hant": "租借單車免費",
+ "pt_BR": "Emprestar uma bicicleta é grátis"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "fee=yes",
+ "charge=€20warranty + €20/year"
+ ]
+ },
+ "then": {
+ "en": "Lending a bicycle costs €20/year and €20 warranty",
+ "nl": "Een fiets huren kost €20/jaar en €20 waarborg",
+ "fr": "Emprunter un vélo coûte 20 €/an et 20 € de garantie",
+ "it": "Il prestito di una bicicletta costa 20 €/anno più 20 € di garanzia",
+ "de": "Das Ausleihen eines Fahrrads kostet 20€ pro Jahr und 20€ Gebühr",
+ "zh_Hant": "租借單車價錢 €20/year 與 €20 保證金",
+ "ru": "Прокат велосипеда стоит €20/год и €20 залог",
+ "pt_BR": "Emprestar uma bicicleta custa €20/ano e €20 de garantia"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Who can lend bicycles here?",
+ "nl": "Voor wie worden hier fietsen aangeboden?",
+ "fr": "Qui peut emprunter des vélos ici ?",
+ "hu": "Ki kölcsönözhet itt kerékpárt?",
+ "it": "Chi può prendere in prestito le biciclette qua?",
+ "zh_Hans": "谁可以从这里借自行车?",
+ "de": "Wer kann hier Fahrräder ausleihen?",
+ "ru": "Кто здесь может арендовать велосипед?",
+ "zh_Hant": "誰可以在這裡租單車?",
+ "pt_BR": "Quem pode emprestar bicicletas aqui?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "bicycle_library:for=child",
+ "then": {
+ "nl": "Aanbod voor kinderen",
+ "en": "Bikes for children available",
+ "fr": "Vélos pour enfants disponibles",
+ "hu": "",
+ "it": "Sono disponibili biciclette per bambini",
+ "de": "Fahrräder für Kinder verfügbar",
+ "ru": "Доступны детские велосипеды",
+ "zh_Hant": "提供兒童單車",
+ "pt_BR": "Bicicletas para crianças disponíveis"
+ }
+ },
+ {
+ "if": "bicycle_library:for=adult",
+ "then": {
+ "nl": "Aanbod voor volwassenen",
+ "en": "Bikes for adult available",
+ "fr": "Vélos pour adultes disponibles",
+ "it": "Sono disponibili biciclette per adulti",
+ "de": "Fahrräder für Erwachsene verfügbar",
+ "ru": "Доступны велосипеды для взрослых",
+ "zh_Hant": "有提供成人單車",
+ "pt_BR": "Bicicletas para adulto disponíveis"
+ }
+ },
+ {
+ "if": "bicycle_library:for=disabled",
+ "then": {
+ "nl": "Aanbod voor personen met een handicap",
+ "en": "Bikes for disabled persons available",
+ "fr": "Vélos pour personnes handicapées disponibles",
+ "it": "Sono disponibili biciclette per disabili",
+ "de": "Fahrräder für Behinderte verfügbar",
+ "ru": "Доступны велосипеды для людей с ограниченными возможностями",
+ "zh_Hant": "有提供行動不便人士的單車",
+ "pt_BR": "Bicicletas para deficientes físicos disponíveis"
+ }
+ }
+ ]
+ },
+ "description"
+ ],
+ "presets": [
+ {
+ "title": {
+ "en": "Fietsbibliotheek",
+ "nl": "Bicycle library",
+ "ru": "Велосипедная библиотека",
+ "zh_Hant": "自行車圖書館 ( Fietsbibliotheek)",
+ "it": "Bici in prestito",
+ "fr": "Vélothèque",
+ "pt_BR": "Biblioteca de bicicletas"
+ },
+ "tags": [
+ "amenity=bicycle_library"
+ ],
+ "description": {
+ "nl": "Een fietsbieb heeft een collectie fietsen die leden mogen lenen",
+ "en": "A bicycle library has a collection of bikes which can be lent",
+ "fr": "Une vélothèque a une flotte de vélos qui peuvent être empruntés",
+ "it": "Una ciclo-teca o «bici in prestito» ha una collezione di bici che possno essere prestate",
+ "ru": "В велосипедной библиотеке есть велосипеды для аренды",
+ "zh_Hant": "單車圖書館有一大批單車供人租借"
+ }
+ }
+ ],
+ "icon": {
+ "render": "pin:#22ff55;./assets/layers/bicycle_library/bicycle_library.svg"
+ },
+ "iconOverlays": [
+ {
+ "if": "opening_hours~*",
+ "then": "isOpen",
+ "badge": true
+ },
+ {
+ "if": "service:bicycle:pump=yes",
+ "then": "circle:#e2783d;./assets/layers/bike_repair_station/pump.svg",
+ "badge": true
+ }
+ ],
+ "width": {
+ "render": "1"
+ },
+ "iconSize": {
+ "render": "50,50,bottom"
+ },
+ "color": {
+ "render": "#c00"
+ },
+ "wayHandling": 2
}
\ No newline at end of file
diff --git a/assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json b/assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json
index d7aede718..44c088518 100644
--- a/assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json
+++ b/assets/layers/bicycle_tube_vending_machine/bicycle_tube_vending_machine.json
@@ -1,69 +1,6 @@
{
- "id": "bicycle_tube_vending_machine",
- "name": {
- "en": "Bicycle tube vending machine",
- "nl": "Fietsbanden-verkoopsautomaat",
- "fr": "Distributeur automatique de chambre à air de vélo",
- "it": "Distributore automatico di camere d’aria per bici",
- "de": "Fahrradschlauch-Automat",
- "ru": "Торговый автомат для велосипедистов",
- "zh_Hant": "自行車內胎自動售貨機",
- "pt_BR": "Máquina de venda automática de tubos de bicicleta"
- },
- "title": {
- "render": {
- "en": "Bicycle tube vending machine",
- "nl": "Fietsbanden-verkoopsautomaat",
- "fr": "Distributeur automatique de chambre à air de vélo",
- "it": "Distributore automatico di camere d’aria per bici",
- "de": "Fahrradschlauch-Automat",
- "ru": "Торговый автомат для велосипедистов",
- "zh_Hant": "自行車內胎自動售貨機",
- "pt_BR": "Máquina de venda automática de tubos de bicicleta"
- },
- "mappings": [
- {
- "if": "name~*",
- "then": "Bicycle tube vending machine {name}"
- }
- ]
- },
- "titleIcons": [
- {
- "render": "",
- "condition": "operator=De Fietsambassade Gent"
- },
- "defaults"
- ],
- "icon": {
- "render": "pin:#ffffff;./assets/layers/bicycle_tube_vending_machine/pinIcon.svg"
- },
- "iconOverlays": [
- {
- "if": {
- "or": [
- "operational_status=broken",
- "operational_status=closed"
- ]
- },
- "then": "close:#c33",
- "badge": true
- }
- ],
- "iconSize": "50,50,bottom",
- "source": {
- "osmTags": {
- "and": [
- "amenity=vending_machine",
- "vending~.*bicycle_tube.*"
- ]
- }
- },
- "minzoom": 13,
- "wayHandling": 2,
- "presets": [
- {
- "title": {
+ "id": "bicycle_tube_vending_machine",
+ "name": {
"en": "Bicycle tube vending machine",
"nl": "Fietsbanden-verkoopsautomaat",
"fr": "Distributeur automatique de chambre à air de vélo",
@@ -72,183 +9,246 @@
"ru": "Торговый автомат для велосипедистов",
"zh_Hant": "自行車內胎自動售貨機",
"pt_BR": "Máquina de venda automática de tubos de bicicleta"
- },
- "tags": [
- "amenity=vending_machine",
- "vending=bicycle_tube",
- "vending:bicycle_tube=yes"
- ]
- }
- ],
- "color": "#6bc4f7",
- "tagRenderings": [
- "images",
- {
- "#": "Still in use?",
- "question": {
- "en": "Is this vending machine still operational?",
- "nl": "Is deze verkoopsautomaat nog steeds werkende?",
- "fr": "Cette machine est-elle encore opérationelle ?",
- "it": "Questo distributore automatico funziona ancora?",
- "ru": "Этот торговый автомат все еще работает?",
- "de": "Ist dieser Automat noch in Betrieb?",
- "zh_Hant": "這個自動販賣機仍有運作嗎?",
- "pt_BR": "Esta máquina de venda automática ainda está operacional?"
- },
- "render": {
- "en": "The operational status is {operational_status",
- "nl": "Deze verkoopsautomaat is {operational_status}",
- "fr": "L'état opérationnel est {operational_status}",
- "it": "Lo stato operativo è {operational_status}",
- "de": "Der Betriebszustand ist {operational_status",
- "ru": "Рабочий статус: {operational_status",
- "zh_Hant": "運作狀態是 {operational_status",
- "pt_BR": "O estado operacional é: {operational_status"
- },
- "freeform": {
- "key": "operational_status"
- },
- "mappings": [
- {
- "if": "operational_status=",
- "then": {
- "en": "This vending machine works",
- "nl": "Deze verkoopsautomaat werkt",
- "fr": "Le distributeur automatique fonctionne",
- "hu": "Az automata működik",
- "it": "Il distributore automatico funziona",
- "ru": "Этот торговый автомат работает",
- "zh_Hans": "这个借还机正常工作",
- "de": "Dieser Automat funktioniert",
- "zh_Hant": "這個自動販賣機仍運作",
- "pt_BR": "Esta máquina de venda automática funciona"
- }
- },
- {
- "if": "operational_status=broken",
- "then": {
- "en": "This vending machine is broken",
- "nl": "Deze verkoopsautomaat is kapot",
- "fr": "Le distributeur automatique est en panne",
- "hu": "Az automata elromlott",
- "it": "Il distributore automatico è guasto",
- "ru": "Этот торговый автомат сломан",
- "zh_Hans": "这个借还机已经损坏",
- "de": "Dieser Automat ist kaputt",
- "zh_Hant": "這個自動販賣機沒有運作了",
- "pt_BR": "Esta máquina de venda automática está quebrada"
- }
- },
- {
- "if": "operational_status=closed",
- "then": {
- "en": "This vending machine is closed",
- "nl": "Deze verkoopsautomaat is uitgeschakeld",
- "fr": "Le distributeur automatique est fermé",
- "hu": "Az automata zárva van",
- "it": "Il distributore automatico è spento",
- "ru": "Этот торговый автомат закрыт",
- "zh_Hans": "这个借还机被关闭了",
- "de": "Dieser Automat ist geschlossen",
- "zh_Hant": "這個自動販賣機已經關閉了",
- "pt_BR": "Esta máquina de venda automática está fechada"
- }
- }
- ]
},
- {
- "question": "How much does a bicycle tube cost?",
- "render": "A bicycle tube costs {charge}",
- "freeform": {
- "key": "charge"
- }
+ "title": {
+ "render": {
+ "en": "Bicycle tube vending machine",
+ "nl": "Fietsbanden-verkoopsautomaat",
+ "fr": "Distributeur automatique de chambre à air de vélo",
+ "it": "Distributore automatico di camere d’aria per bici",
+ "de": "Fahrradschlauch-Automat",
+ "ru": "Торговый автомат для велосипедистов",
+ "zh_Hant": "自行車內胎自動售貨機",
+ "pt_BR": "Máquina de venda automática de tubos de bicicleta"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": "Bicycle tube vending machine {name}"
+ }
+ ]
},
- {
- "question": "How can one pay at this tube vending machine?",
- "mappings": [
+ "titleIcons": [
{
- "if": "payment:coins=yes",
- "ifnot": "payment:coins=no",
- "then": "Payment with coins is possible"
+ "render": "",
+ "condition": "operator=De Fietsambassade Gent"
},
- {
- "if": "payment:notes=yes",
- "ifnot": "payment:notes=no",
- "then": "Payment with notes is possible"
- },
- {
- "if": "payment:cards=yes",
- "ifnot": "payment:cards=no",
- "then": "Payment with cards is possible"
- }
- ],
- "multiAnswer": true
+ "defaults"
+ ],
+ "icon": {
+ "render": "pin:#ffffff;./assets/layers/bicycle_tube_vending_machine/pinIcon.svg"
},
- {
- "question": "Which brand of tubes are sold here?",
- "freeform": {
- "key": "brand"
- },
- "render": "{brand} tubes are sold here",
- "mappings": [
+ "iconOverlays": [
{
- "if": "brand=Continental",
- "then": "Continental tubes are sold here"
- },
- {
- "if": "brand=Schwalbe",
- "then": "Schwalbe tubes are sold here"
+ "if": {
+ "or": [
+ "operational_status=broken",
+ "operational_status=closed"
+ ]
+ },
+ "then": "close:#c33",
+ "badge": true
+ }
+ ],
+ "iconSize": "50,50,bottom",
+ "source": {
+ "osmTags": {
+ "and": [
+ "amenity=vending_machine",
+ "vending~.*bicycle_tube.*"
+ ]
}
- ],
- "multiAnswer": true
},
- {
- "question": "Who maintains this vending machine?",
- "render": "This vending machine is maintained by {operator}",
- "mappings": [
+ "minzoom": 13,
+ "wayHandling": 2,
+ "presets": [
{
- "if": "operator=Schwalbe",
- "then": "Maintained by Schwalbe"
- },
- {
- "if": "operator=Continental",
- "then": "Maintained by Continental"
+ "title": {
+ "en": "Bicycle tube vending machine",
+ "nl": "Fietsbanden-verkoopsautomaat",
+ "fr": "Distributeur automatique de chambre à air de vélo",
+ "it": "Distributore automatico di camere d’aria per bici",
+ "de": "Fahrradschlauch-Automat",
+ "ru": "Торговый автомат для велосипедистов",
+ "zh_Hant": "自行車內胎自動售貨機",
+ "pt_BR": "Máquina de venda automática de tubos de bicicleta"
+ },
+ "tags": [
+ "amenity=vending_machine",
+ "vending=bicycle_tube",
+ "vending:bicycle_tube=yes"
+ ]
}
- ],
- "freeform": {
- "key": "operator"
- }
- },
- {
- "question": "Are other bicycle bicycle accessories sold here?",
- "mappings": [
+ ],
+ "color": "#6bc4f7",
+ "tagRenderings": [
+ "images",
{
- "if": "vending:bicycle_light=yes",
- "ifnot": "vending:bicycle_light=no",
- "then": "Bicycle lights are sold here"
+ "#": "Still in use?",
+ "question": {
+ "en": "Is this vending machine still operational?",
+ "nl": "Is deze verkoopsautomaat nog steeds werkende?",
+ "fr": "Cette machine est-elle encore opérationelle ?",
+ "it": "Questo distributore automatico funziona ancora?",
+ "ru": "Этот торговый автомат все еще работает?",
+ "de": "Ist dieser Automat noch in Betrieb?",
+ "zh_Hant": "這個自動販賣機仍有運作嗎?",
+ "pt_BR": "Esta máquina de venda automática ainda está operacional?"
+ },
+ "render": {
+ "en": "The operational status is {operational_status",
+ "nl": "Deze verkoopsautomaat is {operational_status}",
+ "fr": "L'état opérationnel est {operational_status}",
+ "it": "Lo stato operativo è {operational_status}",
+ "de": "Der Betriebszustand ist {operational_status",
+ "ru": "Рабочий статус: {operational_status",
+ "zh_Hant": "運作狀態是 {operational_status",
+ "pt_BR": "O estado operacional é: {operational_status"
+ },
+ "freeform": {
+ "key": "operational_status"
+ },
+ "mappings": [
+ {
+ "if": "operational_status=",
+ "then": {
+ "en": "This vending machine works",
+ "nl": "Deze verkoopsautomaat werkt",
+ "fr": "Le distributeur automatique fonctionne",
+ "hu": "Az automata működik",
+ "it": "Il distributore automatico funziona",
+ "ru": "Этот торговый автомат работает",
+ "zh_Hans": "这个借还机正常工作",
+ "de": "Dieser Automat funktioniert",
+ "zh_Hant": "這個自動販賣機仍運作",
+ "pt_BR": "Esta máquina de venda automática funciona"
+ }
+ },
+ {
+ "if": "operational_status=broken",
+ "then": {
+ "en": "This vending machine is broken",
+ "nl": "Deze verkoopsautomaat is kapot",
+ "fr": "Le distributeur automatique est en panne",
+ "hu": "Az automata elromlott",
+ "it": "Il distributore automatico è guasto",
+ "ru": "Этот торговый автомат сломан",
+ "zh_Hans": "这个借还机已经损坏",
+ "de": "Dieser Automat ist kaputt",
+ "zh_Hant": "這個自動販賣機沒有運作了",
+ "pt_BR": "Esta máquina de venda automática está quebrada"
+ }
+ },
+ {
+ "if": "operational_status=closed",
+ "then": {
+ "en": "This vending machine is closed",
+ "nl": "Deze verkoopsautomaat is uitgeschakeld",
+ "fr": "Le distributeur automatique est fermé",
+ "hu": "Az automata zárva van",
+ "it": "Il distributore automatico è spento",
+ "ru": "Этот торговый автомат закрыт",
+ "zh_Hans": "这个借还机被关闭了",
+ "de": "Dieser Automat ist geschlossen",
+ "zh_Hant": "這個自動販賣機已經關閉了",
+ "pt_BR": "Esta máquina de venda automática está fechada"
+ }
+ }
+ ]
},
{
- "if": "vending:gloves=yes",
- "ifnot": "vending:gloves=no",
- "then": "Gloves are sold here"
+ "question": "How much does a bicycle tube cost?",
+ "render": "A bicycle tube costs {charge}",
+ "freeform": {
+ "key": "charge"
+ }
},
{
- "if": "vending:bicycle_repair_kit=yes",
- "ifnot": "vending:bicycle_repair_kit=no",
- "then": "Bicycle repair kits are sold here"
+ "question": "How can one pay at this tube vending machine?",
+ "mappings": [
+ {
+ "if": "payment:coins=yes",
+ "ifnot": "payment:coins=no",
+ "then": "Payment with coins is possible"
+ },
+ {
+ "if": "payment:notes=yes",
+ "ifnot": "payment:notes=no",
+ "then": "Payment with notes is possible"
+ },
+ {
+ "if": "payment:cards=yes",
+ "ifnot": "payment:cards=no",
+ "then": "Payment with cards is possible"
+ }
+ ],
+ "multiAnswer": true
},
{
- "if": "vending:bicycle_pump=yes",
- "ifnot": "vending:bicycle_pump=no",
- "then": "Bicycle pumps are sold here"
+ "question": "Which brand of tubes are sold here?",
+ "freeform": {
+ "key": "brand"
+ },
+ "render": "{brand} tubes are sold here",
+ "mappings": [
+ {
+ "if": "brand=Continental",
+ "then": "Continental tubes are sold here"
+ },
+ {
+ "if": "brand=Schwalbe",
+ "then": "Schwalbe tubes are sold here"
+ }
+ ],
+ "multiAnswer": true
},
{
- "if": "vending:bicycle_lock=yes",
- "ifnot": "vending:bicycle_lock=no",
- "then": "Bicycle locks are sold here"
+ "question": "Who maintains this vending machine?",
+ "render": "This vending machine is maintained by {operator}",
+ "mappings": [
+ {
+ "if": "operator=Schwalbe",
+ "then": "Maintained by Schwalbe"
+ },
+ {
+ "if": "operator=Continental",
+ "then": "Maintained by Continental"
+ }
+ ],
+ "freeform": {
+ "key": "operator"
+ }
+ },
+ {
+ "question": "Are other bicycle bicycle accessories sold here?",
+ "mappings": [
+ {
+ "if": "vending:bicycle_light=yes",
+ "ifnot": "vending:bicycle_light=no",
+ "then": "Bicycle lights are sold here"
+ },
+ {
+ "if": "vending:gloves=yes",
+ "ifnot": "vending:gloves=no",
+ "then": "Gloves are sold here"
+ },
+ {
+ "if": "vending:bicycle_repair_kit=yes",
+ "ifnot": "vending:bicycle_repair_kit=no",
+ "then": "Bicycle repair kits are sold here"
+ },
+ {
+ "if": "vending:bicycle_pump=yes",
+ "ifnot": "vending:bicycle_pump=no",
+ "then": "Bicycle pumps are sold here"
+ },
+ {
+ "if": "vending:bicycle_lock=yes",
+ "ifnot": "vending:bicycle_lock=no",
+ "then": "Bicycle locks are sold here"
+ }
+ ],
+ "multiAnswer": true
}
- ],
- "multiAnswer": true
- }
- ]
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/bike_cafe/bike_cafe.json b/assets/layers/bike_cafe/bike_cafe.json
index 111a4bc28..93b07cd19 100644
--- a/assets/layers/bike_cafe/bike_cafe.json
+++ b/assets/layers/bike_cafe/bike_cafe.json
@@ -1,344 +1,344 @@
{
- "id": "bike_cafe",
- "name": {
- "en": "Bike cafe",
- "nl": "Fietscafé",
- "fr": "Café vélo",
- "gl": "Café de ciclistas",
- "de": "Fahrrad-Café",
- "it": "Caffè in bici",
- "zh_Hans": "自行车咖啡",
- "ru": "Велосипедное кафе",
- "zh_Hant": "單車咖啡廳",
- "pt_BR": "Café de bicicletas"
- },
- "minzoom": 13,
- "source": {
- "osmTags": {
- "and": [
- {
- "or": [
- "amenity=pub",
- "amenity=bar",
- "amenity=cafe",
- "amenity=restaurant"
- ]
- },
- {
- "#": "Note the double tilde in 'service:bicycle' which interprets the key as regex too",
- "or": [
- "pub=cycling",
- "pub=bicycle",
- "theme=cycling",
- "theme=bicycle",
- "service:bicycle:.*~~*"
- ]
- }
- ]
- }
- },
- "title": {
- "render": {
- "en": "Bike cafe",
- "nl": "Fietscafé",
- "fr": "Café Vélo",
- "gl": "Café de ciclistas",
- "de": "Fahrrad-Café",
- "it": "Caffè in bici",
- "zh_Hans": "自行车咖啡",
- "ru": "Велосипедное кафе",
- "zh_Hant": "單車咖啡廳",
- "pt_BR": "Café de bicicleta"
- },
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "en": "Bike cafe {name}",
- "nl": "Fietscafé {name}",
- "fr": "Café Vélo {name}",
- "gl": "Café de ciclistas {name}",
- "de": "Fahrrad-Café {name}",
- "it": "Caffè in bici {name}",
- "zh_Hans": "自行车咖啡 {name}",
- "ru": "Велосипедное кафе {name}",
- "zh_Hant": "單車咖啡廳{name}",
- "pt_BR": "Café de bicicleta {name}"
- }
- }
- ]
- },
- "tagRenderings": [
- "images",
- {
- "question": {
- "en": "What is the name of this bike cafe?",
- "nl": "Wat is de naam van dit fietscafé?",
- "fr": "Quel est le nom de ce Café vélo ?",
- "gl": "Cal é o nome deste café de ciclistas?",
- "de": "Wie heißt dieses Fahrrad-Café?",
- "it": "Qual è il nome di questo caffè in bici?",
- "zh_Hans": "这个自行车咖啡的名字是什么?",
- "ru": "Как называется это байк-кафе?",
- "zh_Hant": "這個單車咖啡廳的名稱是?",
- "pt_BR": "Qual o nome deste café de bicicleta?"
- },
- "render": {
- "en": "This bike cafe is called {name}",
- "nl": "Dit fietscafé heet {name}",
- "fr": "Ce Café vélo s'appelle {name}",
- "gl": "Este café de ciclistas chámase {name}",
- "de": "Dieses Fahrrad-Café heißt {name}",
- "it": "Questo caffè in bici è chiamato {name}",
- "zh_Hans": "这家自行车咖啡叫做 {name}",
- "ru": "Это велосипедное кафе называется {name}",
- "zh_Hant": "這個單車咖啡廳叫做 {name}",
- "pt_BR": "Este café de bicicleta se chama {name}"
- },
- "freeform": {
- "key": "name"
- }
- },
- {
- "question": {
- "en": "Does this bike cafe offer a bike pump for use by anyone?",
- "nl": "Biedt dit fietscafé een fietspomp aan voor iedereen?",
- "fr": "Est-ce que ce Café vélo propose une pompe en libre accès ?",
- "gl": "Este café de ciclistas ofrece unha bomba de ar para que calquera persoa poida usala?",
- "de": "Bietet dieses Fahrrad-Café eine Fahrradpumpe an, die von jedem benutzt werden kann?",
- "it": "Questo caffè in bici offre una pompa per bici che chiunque può utilizzare?",
- "zh_Hans": "这家自行车咖啡为每个使用者提供打气筒吗?",
- "ru": "Есть ли в этом велосипедном кафе велосипедный насос для всеобщего использования?",
- "zh_Hant": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬嗎?"
- },
- "mappings": [
- {
- "if": "service:bicycle:pump=yes",
- "then": {
- "en": "This bike cafe offers a bike pump for anyone",
- "nl": "Dit fietscafé biedt een fietspomp aan voor eender wie",
- "fr": "Ce Café vélo offre une pompe en libre accès",
- "gl": "Este café de ciclistas ofrece unha bomba de ar",
- "de": "Dieses Fahrrad-Café bietet eine Fahrradpumpe an, die von jedem benutzt werden kann",
- "it": "Questo caffè in bici offre una pompa per bici liberamente utilizzabile",
- "zh_Hans": "这家自行车咖啡为每个人提供打气筒",
- "zh_Hant": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬",
- "ru": "В этом велосипедном кафе есть велосипедный насос для всеобщего использования"
- }
- },
- {
- "if": "service:bicycle:pump=no",
- "then": {
- "en": "This bike cafe doesn't offer a bike pump for anyone",
- "nl": "Dit fietscafé biedt geen fietspomp aan voor iedereen",
- "fr": "Ce Café vélo n'offre pas de pompe en libre accès",
- "gl": "Este café de ciclistas non ofrece unha bomba de ar",
- "de": "Dieses Fahrrad-Café bietet keine Fahrradpumpe an, die von jedem benutzt werden kann",
- "it": "Questo caffè in bici non offre una pompa per bici liberamente utilizzabile",
- "zh_Hans": "这家自行车咖啡不为每个人提供打气筒",
- "zh_Hant": "這個單車咖啡廳並沒有為所有人提供單車打氣甬",
- "ru": "В этом велосипедном кафе нет велосипедного насоса для всеобщего использования"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Are there tools here to repair your own bike?",
- "nl": "Biedt dit fietscafé gereedschap aan om je fiets zelf te herstellen?",
- "fr": "Est-ce qu'il y a des outils pour réparer soi-même son vélo ?",
- "gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta?",
- "de": "Gibt es hier Werkzeuge, um das eigene Fahrrad zu reparieren?",
- "it": "Ci sono degli strumenti per riparare la propria bicicletta?",
- "zh_Hans": "这里有供你修车用的工具吗?",
- "zh_Hant": "這裡是否有工具修理你的單車嗎?",
- "ru": "Есть ли здесь инструменты для починки вашего велосипеда?",
- "pt_BR": "Há ferramentas aqui para consertar sua bicicleta?"
- },
- "mappings": [
- {
- "if": "service:bicycle:diy=yes",
- "then": {
- "en": "This bike cafe offers tools for DIY repair",
- "nl": "Dit fietscafé biedt gereedschap aan om je fiets zelf te herstellen",
- "fr": "Ce Café vélo propose des outils pour réparer son vélo soi-même",
- "gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta",
- "de": "Dieses Fahrrad-Café bietet Werkzeuge für die selbständige Reparatur an",
- "it": "Questo caffè in bici fornisce degli attrezzi per la riparazione fai-da-te",
- "zh_Hans": "这家自行车咖啡为DIY修理者提供工具",
- "zh_Hant": "這個單車咖啡廳提供工具讓你修理",
- "ru": "В этом велосипедном кафе есть инструменты для починки своего велосипеда",
- "pt_BR": "Este café de bicicleta oferece ferramentas de reparo faça você mesmo"
- }
- },
- {
- "if": "service:bicycle:diy=no",
- "then": {
- "en": "This bike cafe doesn't offer tools for DIY repair",
- "nl": "Dit fietscafé biedt geen gereedschap aan om je fiets zelf te herstellen",
- "fr": "Ce Café vélo ne propose pas d'outils pour réparer son vélo soi-même",
- "gl": "Non hai ferramentas aquí para arranxar a túa propia bicicleta",
- "de": "Dieses Fahrrad-Café bietet keine Werkzeuge für die selbständige Reparatur an",
- "it": "Questo caffè in bici non fornisce degli attrezzi per la riparazione fai-da-te",
- "zh_Hans": "这家自行车咖啡不为DIY修理者提供工具",
- "zh_Hant": "這個單車咖啡廳並沒有提供工具讓你修理",
- "ru": "В этом велосипедном кафе нет инструментов для починки своего велосипеда",
- "pt_BR": "Este café de bicicleta não oferece ferramentas de reparo faça você mesmo"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does this bike cafe repair bikes?",
- "nl": "Herstelt dit fietscafé fietsen?",
- "fr": "Est-ce que ce Café vélo répare les vélos ?",
- "gl": "Este café de ciclistas arranxa bicicletas?",
- "de": "Repariert dieses Fahrrad-Café Fahrräder?",
- "it": "Questo caffè in bici ripara le bici?",
- "zh_Hans": "这家自行车咖啡t提供修车服务吗?",
- "zh_Hant": "這個單車咖啡廳是否能修理單車?",
- "ru": "Есть ли услуги ремонта велосипедов в этом велосипедном кафе?",
- "pt_BR": "Este café de bicicleta conserta bicicletas?"
- },
- "mappings": [
- {
- "if": "service:bicycle:repair=yes",
- "then": {
- "en": "This bike cafe repairs bikes",
- "nl": "Dit fietscafé herstelt fietsen",
- "fr": "Ce Café vélo répare les vélos",
- "gl": "Este café de ciclistas arranxa bicicletas",
- "de": "Dieses Fahrrad-Café repariert Fahrräder",
- "it": "Questo caffè in bici ripara le bici",
- "zh_Hans": "这家自行车咖啡可以修车",
- "zh_Hant": "這個單車咖啡廳修理單車",
- "ru": "В этом велосипедном кафе есть услуги ремонта велосипедов",
- "pt_BR": "Este café de bicicleta conserta bicicletas"
- }
- },
- {
- "if": "service:bicycle:repair=no",
- "then": {
- "en": "This bike cafe doesn't repair bikes",
- "nl": "Dit fietscafé herstelt geen fietsen",
- "fr": "Ce Café vélo ne répare pas les vélos",
- "gl": "Este café de ciclistas non arranxa bicicletas",
- "de": "Dieses Fahrrad-Café repariert keine Fahrräder",
- "it": "Questo caffè in bici non ripara le bici",
- "zh_Hans": "这家自行车咖啡不能修车",
- "zh_Hant": "這個單車咖啡廳並不修理單車",
- "ru": "В этом велосипедном кафе нет услуг ремонта велосипедов",
- "pt_BR": "Este café de bicicleta não conserta bicicletas"
- }
- }
- ]
- },
- {
- "question": {
- "en": "What is the website of {name}?",
- "nl": "Wat is de website van {name}?",
- "fr": "Quel est le site web de {name} ?",
- "gl": "Cal é a páxina web de {name}?",
- "de": "Was ist die Webseite von {name}?",
- "it": "Qual è il sito web di {name}?",
- "ru": "Какой сайт у {name}?",
- "zh_Hans": "{name}的网站是什么?",
- "zh_Hant": "{name} 的網站是?",
- "pt_BR": "Qual o website de {name}?"
- },
- "render": "{website}",
- "freeform": {
- "key": "website"
- }
- },
- {
- "question": {
- "en": "What is the phone number of {name}?",
- "nl": "Wat is het telefoonnummer van {name}?",
- "fr": "Quel est le numéro de téléphone de {name} ?",
- "gl": "Cal é o número de teléfono de {name}?",
- "de": "Wie lautet die Telefonnummer von {name}?",
- "it": "Qual è il numero di telefono di {name}?",
- "ru": "Какой номер телефона у {name}?",
- "zh_Hans": "{name}的电话号码是什么?",
- "zh_Hant": "{name} 的電話號碼是?",
- "pt_BR": "Qual o número de telefone de {name}?"
- },
- "render": "{phone}",
- "freeform": {
- "key": "phone",
- "type": "phone"
- }
- },
- {
- "question": {
- "en": "What is the email address of {name}?",
- "nl": "Wat is het email-adres van {name}?",
- "fr": "Quelle est l'adresse électronique de {name} ?",
- "gl": "Cal é o enderezo de correo electrónico de {name}?",
- "de": "Wie lautet die E-Mail-Adresse von {name}?",
- "it": "Qual è l’indirizzo email di {name}?",
- "ru": "Какой адрес электронной почты у {name}?",
- "zh_Hans": "{name}的电子邮箱是什么?",
- "zh_Hant": "{name} 的電子郵件地址是?",
- "pt_BR": "Qual o endereço de email de {name}?"
- },
- "render": "{email}",
- "freeform": {
- "key": "email",
- "type": "email"
- }
- },
- {
- "question": {
- "en": "When it this bike café opened?",
- "nl": "Wanneer is dit fietscafé geopend?",
- "fr": "Quand ce Café vélo est-t-il ouvert ?",
- "it": "Quando è aperto questo caffè in bici?",
- "zh_Hans": "这家自行车咖啡什么时候开门营业?",
- "zh_Hant": "何時這個單車咖啡廳營運?",
- "ru": "Каков режим работы этого велосипедного кафе?",
- "pt_BR": "Quando este café de bicicleta abre?"
- },
- "render": "{opening_hours_table(opening_hours)}",
- "freeform": {
- "key": "opening_hours",
- "type": "opening_hours"
- }
- }
- ],
- "icon": {
- "render": "./assets/layers/bike_cafe/bike_cafe.svg"
- },
- "width": {
- "render": "2"
- },
- "iconSize": {
- "render": "50,50,bottom"
- },
- "color": {
- "render": "#694E2D"
- },
- "presets": [
- {
- "title": {
+ "id": "bike_cafe",
+ "name": {
"en": "Bike cafe",
"nl": "Fietscafé",
- "fr": "Café Vélo",
+ "fr": "Café vélo",
"gl": "Café de ciclistas",
"de": "Fahrrad-Café",
"it": "Caffè in bici",
"zh_Hans": "自行车咖啡",
- "zh_Hant": "單車咖啡廳",
"ru": "Велосипедное кафе",
- "pt_BR": "Café de bicicleta"
- },
- "tags": [
- "amenity=pub",
- "pub=cycling"
- ]
- }
- ],
- "wayHandling": 2
+ "zh_Hant": "單車咖啡廳",
+ "pt_BR": "Café de bicicletas"
+ },
+ "minzoom": 13,
+ "source": {
+ "osmTags": {
+ "and": [
+ {
+ "or": [
+ "amenity=pub",
+ "amenity=bar",
+ "amenity=cafe",
+ "amenity=restaurant"
+ ]
+ },
+ {
+ "#": "Note the double tilde in 'service:bicycle' which interprets the key as regex too",
+ "or": [
+ "pub=cycling",
+ "pub=bicycle",
+ "theme=cycling",
+ "theme=bicycle",
+ "service:bicycle:.*~~*"
+ ]
+ }
+ ]
+ }
+ },
+ "title": {
+ "render": {
+ "en": "Bike cafe",
+ "nl": "Fietscafé",
+ "fr": "Café Vélo",
+ "gl": "Café de ciclistas",
+ "de": "Fahrrad-Café",
+ "it": "Caffè in bici",
+ "zh_Hans": "自行车咖啡",
+ "ru": "Велосипедное кафе",
+ "zh_Hant": "單車咖啡廳",
+ "pt_BR": "Café de bicicleta"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "en": "Bike cafe {name}",
+ "nl": "Fietscafé {name}",
+ "fr": "Café Vélo {name}",
+ "gl": "Café de ciclistas {name}",
+ "de": "Fahrrad-Café {name}",
+ "it": "Caffè in bici {name}",
+ "zh_Hans": "自行车咖啡 {name}",
+ "ru": "Велосипедное кафе {name}",
+ "zh_Hant": "單車咖啡廳{name}",
+ "pt_BR": "Café de bicicleta {name}"
+ }
+ }
+ ]
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "en": "What is the name of this bike cafe?",
+ "nl": "Wat is de naam van dit fietscafé?",
+ "fr": "Quel est le nom de ce Café vélo ?",
+ "gl": "Cal é o nome deste café de ciclistas?",
+ "de": "Wie heißt dieses Fahrrad-Café?",
+ "it": "Qual è il nome di questo caffè in bici?",
+ "zh_Hans": "这个自行车咖啡的名字是什么?",
+ "ru": "Как называется это байк-кафе?",
+ "zh_Hant": "這個單車咖啡廳的名稱是?",
+ "pt_BR": "Qual o nome deste café de bicicleta?"
+ },
+ "render": {
+ "en": "This bike cafe is called {name}",
+ "nl": "Dit fietscafé heet {name}",
+ "fr": "Ce Café vélo s'appelle {name}",
+ "gl": "Este café de ciclistas chámase {name}",
+ "de": "Dieses Fahrrad-Café heißt {name}",
+ "it": "Questo caffè in bici è chiamato {name}",
+ "zh_Hans": "这家自行车咖啡叫做 {name}",
+ "ru": "Это велосипедное кафе называется {name}",
+ "zh_Hant": "這個單車咖啡廳叫做 {name}",
+ "pt_BR": "Este café de bicicleta se chama {name}"
+ },
+ "freeform": {
+ "key": "name"
+ }
+ },
+ {
+ "question": {
+ "en": "Does this bike cafe offer a bike pump for use by anyone?",
+ "nl": "Biedt dit fietscafé een fietspomp aan voor iedereen?",
+ "fr": "Est-ce que ce Café vélo propose une pompe en libre accès ?",
+ "gl": "Este café de ciclistas ofrece unha bomba de ar para que calquera persoa poida usala?",
+ "de": "Bietet dieses Fahrrad-Café eine Fahrradpumpe an, die von jedem benutzt werden kann?",
+ "it": "Questo caffè in bici offre una pompa per bici che chiunque può utilizzare?",
+ "zh_Hans": "这家自行车咖啡为每个使用者提供打气筒吗?",
+ "ru": "Есть ли в этом велосипедном кафе велосипедный насос для всеобщего использования?",
+ "zh_Hant": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬嗎?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:pump=yes",
+ "then": {
+ "en": "This bike cafe offers a bike pump for anyone",
+ "nl": "Dit fietscafé biedt een fietspomp aan voor eender wie",
+ "fr": "Ce Café vélo offre une pompe en libre accès",
+ "gl": "Este café de ciclistas ofrece unha bomba de ar",
+ "de": "Dieses Fahrrad-Café bietet eine Fahrradpumpe an, die von jedem benutzt werden kann",
+ "it": "Questo caffè in bici offre una pompa per bici liberamente utilizzabile",
+ "zh_Hans": "这家自行车咖啡为每个人提供打气筒",
+ "zh_Hant": "這個單車咖啡廳有提供給任何人都能使用的單車打氣甬",
+ "ru": "В этом велосипедном кафе есть велосипедный насос для всеобщего использования"
+ }
+ },
+ {
+ "if": "service:bicycle:pump=no",
+ "then": {
+ "en": "This bike cafe doesn't offer a bike pump for anyone",
+ "nl": "Dit fietscafé biedt geen fietspomp aan voor iedereen",
+ "fr": "Ce Café vélo n'offre pas de pompe en libre accès",
+ "gl": "Este café de ciclistas non ofrece unha bomba de ar",
+ "de": "Dieses Fahrrad-Café bietet keine Fahrradpumpe an, die von jedem benutzt werden kann",
+ "it": "Questo caffè in bici non offre una pompa per bici liberamente utilizzabile",
+ "zh_Hans": "这家自行车咖啡不为每个人提供打气筒",
+ "zh_Hant": "這個單車咖啡廳並沒有為所有人提供單車打氣甬",
+ "ru": "В этом велосипедном кафе нет велосипедного насоса для всеобщего использования"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Are there tools here to repair your own bike?",
+ "nl": "Biedt dit fietscafé gereedschap aan om je fiets zelf te herstellen?",
+ "fr": "Est-ce qu'il y a des outils pour réparer soi-même son vélo ?",
+ "gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta?",
+ "de": "Gibt es hier Werkzeuge, um das eigene Fahrrad zu reparieren?",
+ "it": "Ci sono degli strumenti per riparare la propria bicicletta?",
+ "zh_Hans": "这里有供你修车用的工具吗?",
+ "zh_Hant": "這裡是否有工具修理你的單車嗎?",
+ "ru": "Есть ли здесь инструменты для починки вашего велосипеда?",
+ "pt_BR": "Há ferramentas aqui para consertar sua bicicleta?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:diy=yes",
+ "then": {
+ "en": "This bike cafe offers tools for DIY repair",
+ "nl": "Dit fietscafé biedt gereedschap aan om je fiets zelf te herstellen",
+ "fr": "Ce Café vélo propose des outils pour réparer son vélo soi-même",
+ "gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta",
+ "de": "Dieses Fahrrad-Café bietet Werkzeuge für die selbständige Reparatur an",
+ "it": "Questo caffè in bici fornisce degli attrezzi per la riparazione fai-da-te",
+ "zh_Hans": "这家自行车咖啡为DIY修理者提供工具",
+ "zh_Hant": "這個單車咖啡廳提供工具讓你修理",
+ "ru": "В этом велосипедном кафе есть инструменты для починки своего велосипеда",
+ "pt_BR": "Este café de bicicleta oferece ferramentas de reparo faça você mesmo"
+ }
+ },
+ {
+ "if": "service:bicycle:diy=no",
+ "then": {
+ "en": "This bike cafe doesn't offer tools for DIY repair",
+ "nl": "Dit fietscafé biedt geen gereedschap aan om je fiets zelf te herstellen",
+ "fr": "Ce Café vélo ne propose pas d'outils pour réparer son vélo soi-même",
+ "gl": "Non hai ferramentas aquí para arranxar a túa propia bicicleta",
+ "de": "Dieses Fahrrad-Café bietet keine Werkzeuge für die selbständige Reparatur an",
+ "it": "Questo caffè in bici non fornisce degli attrezzi per la riparazione fai-da-te",
+ "zh_Hans": "这家自行车咖啡不为DIY修理者提供工具",
+ "zh_Hant": "這個單車咖啡廳並沒有提供工具讓你修理",
+ "ru": "В этом велосипедном кафе нет инструментов для починки своего велосипеда",
+ "pt_BR": "Este café de bicicleta não oferece ferramentas de reparo faça você mesmo"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does this bike cafe repair bikes?",
+ "nl": "Herstelt dit fietscafé fietsen?",
+ "fr": "Est-ce que ce Café vélo répare les vélos ?",
+ "gl": "Este café de ciclistas arranxa bicicletas?",
+ "de": "Repariert dieses Fahrrad-Café Fahrräder?",
+ "it": "Questo caffè in bici ripara le bici?",
+ "zh_Hans": "这家自行车咖啡t提供修车服务吗?",
+ "zh_Hant": "這個單車咖啡廳是否能修理單車?",
+ "ru": "Есть ли услуги ремонта велосипедов в этом велосипедном кафе?",
+ "pt_BR": "Este café de bicicleta conserta bicicletas?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:repair=yes",
+ "then": {
+ "en": "This bike cafe repairs bikes",
+ "nl": "Dit fietscafé herstelt fietsen",
+ "fr": "Ce Café vélo répare les vélos",
+ "gl": "Este café de ciclistas arranxa bicicletas",
+ "de": "Dieses Fahrrad-Café repariert Fahrräder",
+ "it": "Questo caffè in bici ripara le bici",
+ "zh_Hans": "这家自行车咖啡可以修车",
+ "zh_Hant": "這個單車咖啡廳修理單車",
+ "ru": "В этом велосипедном кафе есть услуги ремонта велосипедов",
+ "pt_BR": "Este café de bicicleta conserta bicicletas"
+ }
+ },
+ {
+ "if": "service:bicycle:repair=no",
+ "then": {
+ "en": "This bike cafe doesn't repair bikes",
+ "nl": "Dit fietscafé herstelt geen fietsen",
+ "fr": "Ce Café vélo ne répare pas les vélos",
+ "gl": "Este café de ciclistas non arranxa bicicletas",
+ "de": "Dieses Fahrrad-Café repariert keine Fahrräder",
+ "it": "Questo caffè in bici non ripara le bici",
+ "zh_Hans": "这家自行车咖啡不能修车",
+ "zh_Hant": "這個單車咖啡廳並不修理單車",
+ "ru": "В этом велосипедном кафе нет услуг ремонта велосипедов",
+ "pt_BR": "Este café de bicicleta não conserta bicicletas"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "What is the website of {name}?",
+ "nl": "Wat is de website van {name}?",
+ "fr": "Quel est le site web de {name} ?",
+ "gl": "Cal é a páxina web de {name}?",
+ "de": "Was ist die Webseite von {name}?",
+ "it": "Qual è il sito web di {name}?",
+ "ru": "Какой сайт у {name}?",
+ "zh_Hans": "{name}的网站是什么?",
+ "zh_Hant": "{name} 的網站是?",
+ "pt_BR": "Qual o website de {name}?"
+ },
+ "render": "{website}",
+ "freeform": {
+ "key": "website"
+ }
+ },
+ {
+ "question": {
+ "en": "What is the phone number of {name}?",
+ "nl": "Wat is het telefoonnummer van {name}?",
+ "fr": "Quel est le numéro de téléphone de {name} ?",
+ "gl": "Cal é o número de teléfono de {name}?",
+ "de": "Wie lautet die Telefonnummer von {name}?",
+ "it": "Qual è il numero di telefono di {name}?",
+ "ru": "Какой номер телефона у {name}?",
+ "zh_Hans": "{name}的电话号码是什么?",
+ "zh_Hant": "{name} 的電話號碼是?",
+ "pt_BR": "Qual o número de telefone de {name}?"
+ },
+ "render": "{phone}",
+ "freeform": {
+ "key": "phone",
+ "type": "phone"
+ }
+ },
+ {
+ "question": {
+ "en": "What is the email address of {name}?",
+ "nl": "Wat is het email-adres van {name}?",
+ "fr": "Quelle est l'adresse électronique de {name} ?",
+ "gl": "Cal é o enderezo de correo electrónico de {name}?",
+ "de": "Wie lautet die E-Mail-Adresse von {name}?",
+ "it": "Qual è l’indirizzo email di {name}?",
+ "ru": "Какой адрес электронной почты у {name}?",
+ "zh_Hans": "{name}的电子邮箱是什么?",
+ "zh_Hant": "{name} 的電子郵件地址是?",
+ "pt_BR": "Qual o endereço de email de {name}?"
+ },
+ "render": "{email}",
+ "freeform": {
+ "key": "email",
+ "type": "email"
+ }
+ },
+ {
+ "question": {
+ "en": "When it this bike café opened?",
+ "nl": "Wanneer is dit fietscafé geopend?",
+ "fr": "Quand ce Café vélo est-t-il ouvert ?",
+ "it": "Quando è aperto questo caffè in bici?",
+ "zh_Hans": "这家自行车咖啡什么时候开门营业?",
+ "zh_Hant": "何時這個單車咖啡廳營運?",
+ "ru": "Каков режим работы этого велосипедного кафе?",
+ "pt_BR": "Quando este café de bicicleta abre?"
+ },
+ "render": "{opening_hours_table(opening_hours)}",
+ "freeform": {
+ "key": "opening_hours",
+ "type": "opening_hours"
+ }
+ }
+ ],
+ "icon": {
+ "render": "./assets/layers/bike_cafe/bike_cafe.svg"
+ },
+ "width": {
+ "render": "2"
+ },
+ "iconSize": {
+ "render": "50,50,bottom"
+ },
+ "color": {
+ "render": "#694E2D"
+ },
+ "presets": [
+ {
+ "title": {
+ "en": "Bike cafe",
+ "nl": "Fietscafé",
+ "fr": "Café Vélo",
+ "gl": "Café de ciclistas",
+ "de": "Fahrrad-Café",
+ "it": "Caffè in bici",
+ "zh_Hans": "自行车咖啡",
+ "zh_Hant": "單車咖啡廳",
+ "ru": "Велосипедное кафе",
+ "pt_BR": "Café de bicicleta"
+ },
+ "tags": [
+ "amenity=pub",
+ "pub=cycling"
+ ]
+ }
+ ],
+ "wayHandling": 2
}
\ No newline at end of file
diff --git a/assets/layers/bike_cleaning/bike_cleaning.json b/assets/layers/bike_cleaning/bike_cleaning.json
index d4c45d6a7..bf92b1987 100644
--- a/assets/layers/bike_cleaning/bike_cleaning.json
+++ b/assets/layers/bike_cleaning/bike_cleaning.json
@@ -1,57 +1,6 @@
{
- "id": "bike_cleaning",
- "name": {
- "en": "Bike cleaning service",
- "nl": "Fietsschoonmaakpunt",
- "fr": "Service de nettoyage de vélo",
- "it": "Servizio lavaggio bici",
- "de": "Fahrrad-Reinigungsdienst",
- "zh_Hant": "單車清理服務",
- "pt_BR": "Serviço de limpeza de bicicletas"
- },
- "title": {
- "render": {
- "en": "Bike cleaning service",
- "nl": "Fietsschoonmaakpunt",
- "fr": "Service de nettoyage de vélo",
- "it": "Servizio lavaggio bici",
- "de": "Fahrrad-Reinigungsdienst",
- "zh_Hant": "單車清理服務",
- "pt_BR": "Serviço de limpeza de bicicletas"
- },
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "en": "Bike cleaning service {name}",
- "nl": "Fietsschoonmaakpunt {name}",
- "fr": "Service de nettoyage de vélo {name}",
- "it": "Servizio lavaggio bici {name}",
- "de": "Fahrrad-Reinigungsdienst{name}",
- "zh_Hant": "單車清理服務 {name}",
- "pt_BR": "Serviço de limpeza de bicicletas {name}"
- }
- }
- ]
- },
- "icon": {
- "render": "./assets/layers/bike_cleaning/bike_cleaning.svg"
- },
- "iconSize": "50,50,bottom",
- "source": {
- "osmTags": {
- "or": [
- "service:bicycle:cleaning=yes",
- "service:bicycle:cleaning=diy",
- "amenity=bicycle_wash"
- ]
- }
- },
- "minzoom": 13,
- "wayHandling": 1,
- "presets": [
- {
- "title": {
+ "id": "bike_cleaning",
+ "name": {
"en": "Bike cleaning service",
"nl": "Fietsschoonmaakpunt",
"fr": "Service de nettoyage de vélo",
@@ -59,89 +8,140 @@
"de": "Fahrrad-Reinigungsdienst",
"zh_Hant": "單車清理服務",
"pt_BR": "Serviço de limpeza de bicicletas"
- },
- "tags": [
- "amenity=bicycle_wash"
- ]
- }
- ],
- "color": "#6bc4f7",
- "iconOverlays": [
- {
- "if": {
- "and": [
- "service:bicycle:cleaning~*",
- "amenity!=bike_wash"
- ]
- },
- "then": {
- "render": "./assets/layers/bike_cleaning/bike_cleaning_icon.svg",
- "roaming": true
- },
- "badge": true
- }
- ],
- "titleIcons": [
- {
- "render": "",
- "roaming": true
- }
- ],
- "tagRenderings": [
- "images",
- {
- "question": "How much does it cost to use the cleaning service?",
- "render": "Using the cleaning service costs {charge}",
- "condition": "amenity!=bike_wash",
- "freeform": {
- "key": "service:bicycle:cleaning:charge",
- "addExtraTags": [
- "service:bicycle:cleaning:fee=yes"
- ]
- },
- "mappings": [
- {
- "if": "service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge=",
- "then": "The cleaning service is free to use"
- },
- {
- "if": "service:bicycle:cleaning:fee=no&",
- "then": "Free to use",
- "hideInAnswer": true
- },
- {
- "if": "service:bicycle:cleaning:fee=yes",
- "then": "The cleaning service has a fee"
- }
- ],
- "roaming": true
},
- {
- "question": "How much does it cost to use the cleaning service?",
- "render": "Using the cleaning service costs {charge}",
- "condition": "amenity=bike_wash",
- "freeform": {
- "key": "charge",
- "addExtraTags": [
- "fee=yes"
+ "title": {
+ "render": {
+ "en": "Bike cleaning service",
+ "nl": "Fietsschoonmaakpunt",
+ "fr": "Service de nettoyage de vélo",
+ "it": "Servizio lavaggio bici",
+ "de": "Fahrrad-Reinigungsdienst",
+ "zh_Hant": "單車清理服務",
+ "pt_BR": "Serviço de limpeza de bicicletas"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "en": "Bike cleaning service {name}",
+ "nl": "Fietsschoonmaakpunt {name}",
+ "fr": "Service de nettoyage de vélo {name}",
+ "it": "Servizio lavaggio bici {name}",
+ "de": "Fahrrad-Reinigungsdienst{name}",
+ "zh_Hant": "單車清理服務 {name}",
+ "pt_BR": "Serviço de limpeza de bicicletas {name}"
+ }
+ }
]
- },
- "mappings": [
- {
- "if": "fee=no&charge=",
- "then": "Free to use cleaning service"
- },
- {
- "if": "fee=no&",
- "then": "Free to use",
- "hideInAnswer": true
- },
- {
- "if": "fee=yes",
- "then": "The cleaning service has a fee"
+ },
+ "icon": {
+ "render": "./assets/layers/bike_cleaning/bike_cleaning.svg"
+ },
+ "iconSize": "50,50,bottom",
+ "source": {
+ "osmTags": {
+ "or": [
+ "service:bicycle:cleaning=yes",
+ "service:bicycle:cleaning=diy",
+ "amenity=bicycle_wash"
+ ]
}
- ],
- "roaming": false
- }
- ]
+ },
+ "minzoom": 13,
+ "wayHandling": 1,
+ "presets": [
+ {
+ "title": {
+ "en": "Bike cleaning service",
+ "nl": "Fietsschoonmaakpunt",
+ "fr": "Service de nettoyage de vélo",
+ "it": "Servizio lavaggio bici",
+ "de": "Fahrrad-Reinigungsdienst",
+ "zh_Hant": "單車清理服務",
+ "pt_BR": "Serviço de limpeza de bicicletas"
+ },
+ "tags": [
+ "amenity=bicycle_wash"
+ ]
+ }
+ ],
+ "color": "#6bc4f7",
+ "iconOverlays": [
+ {
+ "if": {
+ "and": [
+ "service:bicycle:cleaning~*",
+ "amenity!=bike_wash"
+ ]
+ },
+ "then": {
+ "render": "./assets/layers/bike_cleaning/bike_cleaning_icon.svg",
+ "roaming": true
+ },
+ "badge": true
+ }
+ ],
+ "titleIcons": [
+ {
+ "render": "",
+ "roaming": true
+ }
+ ],
+ "tagRenderings": [
+ "images",
+ {
+ "question": "How much does it cost to use the cleaning service?",
+ "render": "Using the cleaning service costs {charge}",
+ "condition": "amenity!=bike_wash",
+ "freeform": {
+ "key": "service:bicycle:cleaning:charge",
+ "addExtraTags": [
+ "service:bicycle:cleaning:fee=yes"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:cleaning:fee=no&service:bicycle:cleaning:charge=",
+ "then": "The cleaning service is free to use"
+ },
+ {
+ "if": "service:bicycle:cleaning:fee=no&",
+ "then": "Free to use",
+ "hideInAnswer": true
+ },
+ {
+ "if": "service:bicycle:cleaning:fee=yes",
+ "then": "The cleaning service has a fee"
+ }
+ ],
+ "roaming": true
+ },
+ {
+ "question": "How much does it cost to use the cleaning service?",
+ "render": "Using the cleaning service costs {charge}",
+ "condition": "amenity=bike_wash",
+ "freeform": {
+ "key": "charge",
+ "addExtraTags": [
+ "fee=yes"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "fee=no&charge=",
+ "then": "Free to use cleaning service"
+ },
+ {
+ "if": "fee=no&",
+ "then": "Free to use",
+ "hideInAnswer": true
+ },
+ {
+ "if": "fee=yes",
+ "then": "The cleaning service has a fee"
+ }
+ ],
+ "roaming": false
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/bike_monitoring_station/bike_monitoring_station.json b/assets/layers/bike_monitoring_station/bike_monitoring_station.json
index 702e1690e..a20942f96 100644
--- a/assets/layers/bike_monitoring_station/bike_monitoring_station.json
+++ b/assets/layers/bike_monitoring_station/bike_monitoring_station.json
@@ -1,85 +1,85 @@
{
- "id": "bike_monitoring_station",
- "name": {
- "en": "Monitoring stations",
- "nl": "Telstation",
- "fr": "Stations de contrôle",
- "it": "Stazioni di monitoraggio",
- "zh_Hant": "監視站",
- "ru": "Станции мониторинга",
- "pt_BR": "Estações de monitoramento"
- },
- "minzoom": 12,
- "source": {
- "osmTags": {
- "and": [
- "man_made=monitoring_station",
- "monitoring:bicycle=yes"
- ]
- }
- },
- "title": {
- "render": {
- "nl": "Fietstelstation",
- "en": "Bicycle counting station",
- "fr": "Station de comptage de vélo",
- "it": "Contabiciclette",
- "de": "Fahrradzählstation",
- "zh_Hant": "單車計數站",
- "pt_BR": "Estação de contagem de bicicletas"
+ "id": "bike_monitoring_station",
+ "name": {
+ "en": "Monitoring stations",
+ "nl": "Telstation",
+ "fr": "Stations de contrôle",
+ "it": "Stazioni di monitoraggio",
+ "zh_Hant": "監視站",
+ "ru": "Станции мониторинга",
+ "pt_BR": "Estações de monitoramento"
},
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "en": "Bicycle counting station {name}",
- "nl": "Fietstelstation {name}",
- "fr": "Station de comptage de vélo {name}",
- "it": "Contabiciclette {name}",
- "de": "Fahrradzählstation {name}",
- "zh_Hant": "單車計數站 {name}",
- "pl": "Stacja liczenia rowerów {name}",
- "pt_BR": "Estação de contagem de bicicletas {name}"
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
+ "and": [
+ "man_made=monitoring_station",
+ "monitoring:bicycle=yes"
+ ]
}
- },
- {
- "if": "ref~*",
- "then": {
- "en": "Bicycle counting station {ref}",
- "nl": "Fietstelstation {ref}",
- "fr": "Station de comptage de vélo {ref}",
- "it": "Contabiciclette {ref}",
- "de": "Fahrradzählstation {ref}",
- "zh_Hant": "單車計數站 {ref}",
- "pl": "Stacja liczenia rowerów {ref}",
- "pt_BR": "Estação de contagem de bicicletas {ref}"
- }
- }
- ]
- },
- "tagRenderings": [
- "images",
- {
- "render": "{live({url},{url:format},hour)} cyclists last hour {live({url},{url:format},day)} cyclists today {live({url},{url:format},year)} cyclists this year ",
- "condition": {
- "and": [
- "url~*",
- "url:format~*"
+ },
+ "title": {
+ "render": {
+ "nl": "Fietstelstation",
+ "en": "Bicycle counting station",
+ "fr": "Station de comptage de vélo",
+ "it": "Contabiciclette",
+ "de": "Fahrradzählstation",
+ "zh_Hant": "單車計數站",
+ "pt_BR": "Estação de contagem de bicicletas"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "en": "Bicycle counting station {name}",
+ "nl": "Fietstelstation {name}",
+ "fr": "Station de comptage de vélo {name}",
+ "it": "Contabiciclette {name}",
+ "de": "Fahrradzählstation {name}",
+ "zh_Hant": "單車計數站 {name}",
+ "pl": "Stacja liczenia rowerów {name}",
+ "pt_BR": "Estação de contagem de bicicletas {name}"
+ }
+ },
+ {
+ "if": "ref~*",
+ "then": {
+ "en": "Bicycle counting station {ref}",
+ "nl": "Fietstelstation {ref}",
+ "fr": "Station de comptage de vélo {ref}",
+ "it": "Contabiciclette {ref}",
+ "de": "Fahrradzählstation {ref}",
+ "zh_Hant": "單車計數站 {ref}",
+ "pl": "Stacja liczenia rowerów {ref}",
+ "pt_BR": "Estação de contagem de bicicletas {ref}"
+ }
+ }
]
- }
- }
- ],
- "icon": {
- "render": "./assets/layers/bike_monitoring_station/monitoring_station.svg"
- },
- "width": {
- "render": "8"
- },
- "iconSize": {
- "render": "40,40,center"
- },
- "color": {
- "render": "#00f"
- },
- "presets": []
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "render": "{live({url},{url:format},hour)} cyclists last hour {live({url},{url:format},day)} cyclists today {live({url},{url:format},year)} cyclists this year ",
+ "condition": {
+ "and": [
+ "url~*",
+ "url:format~*"
+ ]
+ }
+ }
+ ],
+ "icon": {
+ "render": "./assets/layers/bike_monitoring_station/monitoring_station.svg"
+ },
+ "width": {
+ "render": "8"
+ },
+ "iconSize": {
+ "render": "40,40,center"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": []
}
\ No newline at end of file
diff --git a/assets/layers/bike_parking/bike_parking.json b/assets/layers/bike_parking/bike_parking.json
index e1983de68..7153b1532 100644
--- a/assets/layers/bike_parking/bike_parking.json
+++ b/assets/layers/bike_parking/bike_parking.json
@@ -1,36 +1,6 @@
{
- "id": "bike_parking",
- "name": {
- "en": "Bike parking",
- "nl": "Fietsparking",
- "fr": "Parking à vélo",
- "gl": "Aparcadoiro de bicicletas",
- "de": "Fahrrad-Parkplätze",
- "hu": "Kerékpáros parkoló",
- "it": "Parcheggio bici",
- "zh_Hant": "單車停車場",
- "ru": "Велопарковка",
- "pl": "Parking dla rowerów",
- "pt_BR": "Estacionamento de bicicletas"
- },
- "minzoom": 17,
- "source": {
- "osmTags": {
- "and": [
- "amenity=bicycle_parking"
- ]
- }
- },
- "icon": {
- "render": "./assets/layers/bike_parking/parking.svg"
- },
- "iconSize": "40,40,bottom",
- "color": "#00f",
- "width": "1",
- "wayHandling": 2,
- "presets": [
- {
- "title": {
+ "id": "bike_parking",
+ "name": {
"en": "Bike parking",
"nl": "Fietsparking",
"fr": "Parking à vélo",
@@ -42,471 +12,501 @@
"ru": "Велопарковка",
"pl": "Parking dla rowerów",
"pt_BR": "Estacionamento de bicicletas"
- },
- "tags": [
- "amenity=bicycle_parking"
- ]
- }
- ],
- "title": {
- "render": {
- "en": "Bike parking",
- "nl": "Fietsparking",
- "fr": "Parking à vélo",
- "gl": "Aparcadoiro de bicicletas",
- "de": "Fahrrad-Parkplätze",
- "hu": "Kerékpáros parkoló",
- "it": "Parcheggio bici",
- "zh_Hant": "單車停車場",
- "ru": "Велопарковка",
- "pl": "Parking dla rowerów",
- "pt_BR": "Estacionamento de bicicletas"
- }
- },
- "tagRenderings": [
- "images",
- {
- "#": "Bicycle parking type",
- "question": {
- "en": "What is the type of this bicycle parking?",
- "nl": "Van welk type is deze fietsparking?",
- "fr": "Quel type de parking à vélos est-ce ?",
- "gl": "Que tipo de aparcadoiro de bicicletas é?",
- "de": "Was ist die Art dieses Fahrrad-Parkplatzes?",
- "hu": "Milyen típusú ez a kerékpáros parkoló?",
- "it": "Di che tipo di parcheggio bici si tratta?",
- "ru": "К какому типу относится эта велопарковка?",
- "zh_Hant": "這是那種類型的單車停車場?",
- "pl": "Jaki jest typ tego parkingu dla rowerów?",
- "pt_BR": "Qual o tipo deste estacionamento de bicicletas?"
- },
- "render": {
- "en": "This is a bicycle parking of the type: {bicycle_parking}",
- "nl": "Dit is een fietsparking van het type: {bicycle_parking}",
- "fr": "Ceci est un parking à vélo de type {bicycle_parking}",
- "gl": "Este é un aparcadoiro de bicicletas do tipo: {bicycle_parking}",
- "de": "Dies ist ein Fahrrad-Parkplatz der Art: {bicycle_parking}",
- "hu": "Ez egy {bicycle_parking} típusú kerékpáros parkoló",
- "it": "È un parcheggio bici del tipo: {bicycle_parking}",
- "zh_Hant": "這個單車停車場的類型是:{bicycle_parking}",
- "ru": "Это велопарковка типа {bicycle_parking}",
- "pl": "Jest to parking rowerowy typu: {bicycle_parking}",
- "pt_BR": "Este é um estacionamento de bicicletas do tipo: {bicycle_parking}"
- },
- "freeform": {
- "key": "bicycle_parking",
- "addExtraTags": [
- "fixme=Freeform used on 'bicycle_parking'-tag: possibly a wrong value"
- ]
- },
- "mappings": [
- {
- "if": "bicycle_parking=stands",
- "then": {
- "en": "Staple racks ",
- "nl": "Nietjes ",
- "fr": "Arceaux ",
- "gl": "De roda (Stands) ",
- "de": "Fahrradbügel ",
- "hu": "\"U\" ",
- "it": "Archetti ",
- "zh_Hant": "單車架 "
- }
- },
- {
- "if": "bicycle_parking=wall_loops",
- "then": {
- "en": "Wheel rack/loops ",
- "nl": "Wielrek/lussen ",
- "fr": "Pinces-roues ",
- "gl": "Aros ",
- "de": "Metallgestänge ",
- "hu": "Kengyeles ",
- "it": "Scolapiatti ",
- "zh_Hant": "車輪架/圓圈 "
- }
- },
- {
- "if": "bicycle_parking=handlebar_holder",
- "then": {
- "en": "Handlebar holder ",
- "nl": "Stuurhouder ",
- "fr": "Support guidon ",
- "gl": "Cadeado para guiador ",
- "de": "Halter für Fahrradlenker ",
- "it": "Blocca manubrio ",
- "zh_Hant": "車把架 "
- }
- },
- {
- "if": "bicycle_parking=rack",
- "then": {
- "en": "Rack ",
- "nl": "Rek ",
- "fr": "Râtelier ",
- "gl": "Cremalleira ",
- "de": "Gestell ",
- "zh_Hant": "車架",
- "it": "Rastrelliera ",
- "ru": "Стойка "
- }
- },
- {
- "if": "bicycle_parking=two_tier",
- "then": {
- "en": "Two-tiered ",
- "nl": "Dubbel (twee verdiepingen) ",
- "fr": "Superposé ",
- "gl": "Dobre cremalleira ",
- "de": "Zweistufig ",
- "hu": "Kétszintű ",
- "zh_Hant": "兩層",
- "it": "A due piani ",
- "ru": "Двухуровневая "
- }
- },
- {
- "if": "bicycle_parking=shed",
- "then": {
- "en": "Shed ",
- "nl": "Schuur ",
- "fr": "Abri ",
- "gl": "Abeiro ",
- "de": "Schuppen ",
- "hu": "Fészer ",
- "zh_Hant": "車棚 ",
- "it": "Rimessa ",
- "ru": "Навес "
- }
- },
- {
- "if": "bicycle_parking=bollard",
- "then": {
- "en": "Bollard ",
- "nl": "Paal met ring ",
- "fr": "Potelet ",
- "it": "Colonnina ",
- "de": "Poller ",
- "zh_Hant": "柱子 "
- }
- },
- {
- "if": "bicycle_parking=floor",
- "then": {
- "en": "An area on the floor which is marked for bicycle parking",
- "nl": "Een oppervlakte die gemarkeerd is om fietsen te parkeren",
- "fr": "Zone au sol qui est marquée pour le stationnement des vélos",
- "it": "Una zona del pavimento che è marcata per il parcheggio delle bici",
- "de": "Ein Bereich auf dem Boden, der für das Abstellen von Fahrrädern gekennzeichnet ist",
- "zh_Hant": "樓層當中標示為單車停車場的區域"
- }
+ },
+ "minzoom": 17,
+ "source": {
+ "osmTags": {
+ "and": [
+ "amenity=bicycle_parking"
+ ]
}
- ]
},
- {
- "#": "Underground?",
- "question": {
- "en": "What is the relative location of this bicycle parking?",
- "nl": "Wat is de relatieve locatie van deze parking??",
- "fr": "Quelle est la position relative de ce parking à vélo ?",
- "it": "Qual è la posizione relativa di questo parcheggio bici?",
- "zh_Hant": "這個單車停車場的相對位置是?",
- "pl": "Jaka jest względna lokalizacja tego parkingu rowerowego?",
- "pt_BR": "Qual a localização relativa deste estacionamento de bicicletas?"
- },
- "mappings": [
+ "icon": {
+ "render": "./assets/layers/bike_parking/parking.svg"
+ },
+ "iconSize": "40,40,bottom",
+ "color": "#00f",
+ "width": "1",
+ "wayHandling": 2,
+ "presets": [
{
- "if": "location=underground",
- "then": {
- "en": "Underground parking",
- "nl": "Ondergrondse parking",
- "fr": "Parking souterrain",
- "it": "Parcheggio sotterraneo",
- "ru": "Подземная парковка",
- "de": "Tiefgarage",
- "zh_Hant": "地下停車場",
- "pt_BR": "Estacionamento subterrâneo"
- }
- },
- {
- "if": "location=underground",
- "then": {
- "en": "Underground parking",
- "nl": "Ondergrondse parking",
- "fr": "Parking souterrain",
- "it": "Parcheggio sotterraneo",
- "ru": "Подземная парковка",
- "de": "Tiefgarage",
- "zh_Hant": "地下停車場",
- "pt_BR": "Estacionamento subterrâneo"
- }
- },
- {
- "if": "location=surface",
- "then": {
- "en": "Surface level parking",
- "nl": "Parking op de begane grond",
- "fr": "Parking en surface",
- "hu": "Felszíni parkoló",
- "it": "Parcheggio in superficie",
- "de": "Ebenerdiges Parken",
- "zh_Hant": "地面停車場",
- "pt_BR": "Estacionamento de superfície"
- }
- },
- {
- "if": "location=",
- "then": {
- "en": "Surface level parking",
- "nl": "Parking op de begane grond",
- "fr": "Parking en surface",
- "hu": "Felszíni parkoló",
- "it": "Parcheggio in superficie",
- "de": "Ebenerdiges Parken",
- "zh_Hant": "地面層停車場",
- "pt_BR": "Estacionamento ao nível da superfície"
- },
- "hideInAnwser": true
- },
- {
- "if": "location=rooftop",
- "then": {
- "en": "Rooftop parking",
- "nl": "Dakparking",
- "fr": "Parking sur un toit",
- "hu": "Tetőparkoló",
- "it": "Parcheggio sul tetto",
- "ru": "Парковка на крыше",
- "zh_Hant": "屋頂停車場",
- "pt_BR": "Estacionamento no telhado"
- }
+ "title": {
+ "en": "Bike parking",
+ "nl": "Fietsparking",
+ "fr": "Parking à vélo",
+ "gl": "Aparcadoiro de bicicletas",
+ "de": "Fahrrad-Parkplätze",
+ "hu": "Kerékpáros parkoló",
+ "it": "Parcheggio bici",
+ "zh_Hant": "單車停車場",
+ "ru": "Велопарковка",
+ "pl": "Parking dla rowerów",
+ "pt_BR": "Estacionamento de bicicletas"
+ },
+ "tags": [
+ "amenity=bicycle_parking"
+ ]
}
- ]
- },
- {
- "#": "Is covered?",
- "question": {
- "en": "Is this parking covered? Also select \"covered\" for indoor parkings.",
- "nl": "Is deze parking overdekt? Selecteer ook \"overdekt\" voor fietsparkings binnen een gebouw.",
- "gl": "Este aparcadoiro está cuberto? Tamén escolle \"cuberto\" para aparcadoiros interiores.",
- "de": "Ist dieser Parkplatz überdacht? Wählen Sie auch \"überdacht\" für Innenparkplätze.",
- "fr": "Ce parking est-il couvert ? Sélectionnez aussi \"couvert\" pour les parkings en intérieur.",
- "hu": "Fedett ez a parkoló? (Beltéri parkoló esetén is válaszd a \"fedett\" opciót.)",
- "it": "È un parcheggio coperto? Indicare “coperto” per parcheggi all’interno.",
- "zh_Hant": "這個停車場是否有車棚?如果是室內停車場也請選擇\"遮蔽\"。",
- "pt_BR": "Este estacionamento é coberto? Também selecione \"coberto\" para estacionamentos internos."
- },
- "condition": {
- "and": [
- "bicycle_parking!=shed",
- "location!=underground"
- ]
- },
- "mappings": [
- {
- "if": "covered=yes",
- "then": {
- "en": "This parking is covered (it has a roof)",
- "nl": "Deze parking is overdekt (er is een afdak)",
- "gl": "Este aparcadoiro está cuberto (ten un teito)",
- "de": "Dieser Parkplatz ist überdacht (er hat ein Dach)",
- "fr": "Ce parking est couvert (il a un toit)",
- "hu": "A parkoló fedett",
- "it": "È un parcheggio coperto (ha un tetto)",
- "zh_Hant": "這個停車場有遮蔽 (有屋頂)",
- "ru": "Это крытая парковка (есть крыша/навес)",
- "pt_BR": "Este estacionamento é coberto (tem um telhado)"
- }
- },
- {
- "if": "covered=no",
- "then": {
- "en": "This parking is not covered",
- "nl": "Deze parking is niet overdekt",
- "gl": "Este aparcadoiro non está cuberto",
- "de": "Dieser Parkplatz ist nicht überdacht",
- "fr": "Ce parking n'est pas couvert",
- "hu": "A parkoló nem fedett",
- "it": "Non è un parcheggio coperto",
- "zh_Hant": "這個停車場沒有遮蔽",
- "ru": "Это открытая парковка",
- "pt_BR": "Este estacionamento não é coberto"
- }
+ ],
+ "title": {
+ "render": {
+ "en": "Bike parking",
+ "nl": "Fietsparking",
+ "fr": "Parking à vélo",
+ "gl": "Aparcadoiro de bicicletas",
+ "de": "Fahrrad-Parkplätze",
+ "hu": "Kerékpáros parkoló",
+ "it": "Parcheggio bici",
+ "zh_Hant": "單車停車場",
+ "ru": "Велопарковка",
+ "pl": "Parking dla rowerów",
+ "pt_BR": "Estacionamento de bicicletas"
}
- ]
},
- {
- "#": "Capacity",
- "question": {
- "en": "How many bicycles fit in this bicycle parking (including possible cargo bicycles)?",
- "fr": "Combien de vélos entrent dans ce parking à vélos (y compris les éventuels vélos de transport) ?",
- "nl": "Hoeveel fietsen kunnen in deze fietsparking (inclusief potentiëel bakfietsen)?",
- "gl": "Cantas bicicletas caben neste aparcadoiro de bicicletas (incluídas as posíbeis bicicletas de carga)?",
- "de": "Wie viele Fahrräder passen auf diesen Fahrrad-Parkplatz (einschließlich möglicher Lastenfahrräder)?",
- "it": "Quante biciclette entrano in questo parcheggio per bici (incluse le eventuali bici da trasporto)?",
- "zh_Hant": "這個單車停車場能放幾台單車 (包括裝箱單車)?"
- },
- "render": {
- "en": "Place for {capacity} bikes",
- "fr": "Place pour {capacity} vélos",
- "nl": "Plaats voor {capacity} fietsen",
- "gl": "Lugar para {capacity} bicicletas",
- "de": "Platz für {capacity} Fahrräder",
- "it": "Posti per {capacity} bici",
- "zh_Hant": "{capacity} 單車的地方",
- "ru": "Место для {capacity} велосипеда(ов)",
- "pt_BR": "Lugar para {capacity} bicicletas"
- },
- "freeform": {
- "key": "capacity",
- "type": "nat"
- }
- },
- {
- "#": "Access",
- "question": {
- "en": "Who can use this bicycle parking?",
- "nl": "Wie mag er deze fietsenstalling gebruiken?",
- "fr": "Qui peut utiliser ce parking à vélo ?",
- "it": "Chi può usare questo parcheggio bici?",
- "de": "Wer kann diesen Fahrradparplatz nutzen?",
- "zh_Hant": "誰可以使用這個單車停車場?",
- "ru": "Кто может пользоваться этой велопарковкой?",
- "pt_BR": "Quem pode usar este estacionamento de bicicletas?"
- },
- "render": {
- "en": "{access}",
- "de": "{access}",
- "fr": "{access}",
- "nl": "{access}",
- "it": "{access}",
- "ru": "{access}",
- "id": "{access}",
- "zh_Hant": "{access}",
- "fi": "{access}",
- "pt_BR": "{access}"
- },
- "freeform": {
- "key": "access",
- "addExtraTags": [
- "fixme=Freeform used on 'access'-tag: possibly a wrong value"
- ]
- },
- "mappings": [
+ "tagRenderings": [
+ "images",
{
- "if": "access=yes",
- "then": {
- "en": "Publicly accessible",
- "nl": "Publiek toegankelijke fietsenstalling",
- "fr": "Accessible publiquement",
- "it": "Accessibile pubblicamente",
- "de": "Öffentlich zugänglich",
- "zh_Hant": "公開可用",
- "pt_BR": "Acessível ao público"
- }
+ "#": "Bicycle parking type",
+ "question": {
+ "en": "What is the type of this bicycle parking?",
+ "nl": "Van welk type is deze fietsparking?",
+ "fr": "Quel type de parking à vélos est-ce ?",
+ "gl": "Que tipo de aparcadoiro de bicicletas é?",
+ "de": "Was ist die Art dieses Fahrrad-Parkplatzes?",
+ "hu": "Milyen típusú ez a kerékpáros parkoló?",
+ "it": "Di che tipo di parcheggio bici si tratta?",
+ "ru": "К какому типу относится эта велопарковка?",
+ "zh_Hant": "這是那種類型的單車停車場?",
+ "pl": "Jaki jest typ tego parkingu dla rowerów?",
+ "pt_BR": "Qual o tipo deste estacionamento de bicicletas?"
+ },
+ "render": {
+ "en": "This is a bicycle parking of the type: {bicycle_parking}",
+ "nl": "Dit is een fietsparking van het type: {bicycle_parking}",
+ "fr": "Ceci est un parking à vélo de type {bicycle_parking}",
+ "gl": "Este é un aparcadoiro de bicicletas do tipo: {bicycle_parking}",
+ "de": "Dies ist ein Fahrrad-Parkplatz der Art: {bicycle_parking}",
+ "hu": "Ez egy {bicycle_parking} típusú kerékpáros parkoló",
+ "it": "È un parcheggio bici del tipo: {bicycle_parking}",
+ "zh_Hant": "這個單車停車場的類型是:{bicycle_parking}",
+ "ru": "Это велопарковка типа {bicycle_parking}",
+ "pl": "Jest to parking rowerowy typu: {bicycle_parking}",
+ "pt_BR": "Este é um estacionamento de bicicletas do tipo: {bicycle_parking}"
+ },
+ "freeform": {
+ "key": "bicycle_parking",
+ "addExtraTags": [
+ "fixme=Freeform used on 'bicycle_parking'-tag: possibly a wrong value"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "bicycle_parking=stands",
+ "then": {
+ "en": "Staple racks ",
+ "nl": "Nietjes ",
+ "fr": "Arceaux ",
+ "gl": "De roda (Stands) ",
+ "de": "Fahrradbügel ",
+ "hu": "\"U\" ",
+ "it": "Archetti ",
+ "zh_Hant": "單車架 "
+ }
+ },
+ {
+ "if": "bicycle_parking=wall_loops",
+ "then": {
+ "en": "Wheel rack/loops ",
+ "nl": "Wielrek/lussen ",
+ "fr": "Pinces-roues ",
+ "gl": "Aros ",
+ "de": "Metallgestänge ",
+ "hu": "Kengyeles ",
+ "it": "Scolapiatti ",
+ "zh_Hant": "車輪架/圓圈 "
+ }
+ },
+ {
+ "if": "bicycle_parking=handlebar_holder",
+ "then": {
+ "en": "Handlebar holder ",
+ "nl": "Stuurhouder ",
+ "fr": "Support guidon ",
+ "gl": "Cadeado para guiador ",
+ "de": "Halter für Fahrradlenker ",
+ "it": "Blocca manubrio ",
+ "zh_Hant": "車把架 "
+ }
+ },
+ {
+ "if": "bicycle_parking=rack",
+ "then": {
+ "en": "Rack ",
+ "nl": "Rek ",
+ "fr": "Râtelier ",
+ "gl": "Cremalleira ",
+ "de": "Gestell ",
+ "zh_Hant": "車架",
+ "it": "Rastrelliera ",
+ "ru": "Стойка "
+ }
+ },
+ {
+ "if": "bicycle_parking=two_tier",
+ "then": {
+ "en": "Two-tiered ",
+ "nl": "Dubbel (twee verdiepingen) ",
+ "fr": "Superposé ",
+ "gl": "Dobre cremalleira ",
+ "de": "Zweistufig ",
+ "hu": "Kétszintű ",
+ "zh_Hant": "兩層",
+ "it": "A due piani ",
+ "ru": "Двухуровневая "
+ }
+ },
+ {
+ "if": "bicycle_parking=shed",
+ "then": {
+ "en": "Shed ",
+ "nl": "Schuur ",
+ "fr": "Abri ",
+ "gl": "Abeiro ",
+ "de": "Schuppen ",
+ "hu": "Fészer ",
+ "zh_Hant": "車棚 ",
+ "it": "Rimessa ",
+ "ru": "Навес "
+ }
+ },
+ {
+ "if": "bicycle_parking=bollard",
+ "then": {
+ "en": "Bollard ",
+ "nl": "Paal met ring ",
+ "fr": "Potelet ",
+ "it": "Colonnina ",
+ "de": "Poller ",
+ "zh_Hant": "柱子 "
+ }
+ },
+ {
+ "if": "bicycle_parking=floor",
+ "then": {
+ "en": "An area on the floor which is marked for bicycle parking",
+ "nl": "Een oppervlakte die gemarkeerd is om fietsen te parkeren",
+ "fr": "Zone au sol qui est marquée pour le stationnement des vélos",
+ "it": "Una zona del pavimento che è marcata per il parcheggio delle bici",
+ "de": "Ein Bereich auf dem Boden, der für das Abstellen von Fahrrädern gekennzeichnet ist",
+ "zh_Hant": "樓層當中標示為單車停車場的區域"
+ }
+ }
+ ]
},
{
- "if": "access=customers",
- "then": {
- "en": "Access is primarily for visitors to a business",
- "nl": "Klanten van de zaak of winkel",
- "fr": "Accès destiné principalement aux visiteurs d'un lieu",
- "it": "Accesso destinato principalmente ai visitatori di un’attività",
- "zh_Hant": "通行性主要是為了企業的顧客",
- "pt_BR": "Acesso é principalmente para visitantes de uma empresa"
- }
+ "#": "Underground?",
+ "question": {
+ "en": "What is the relative location of this bicycle parking?",
+ "nl": "Wat is de relatieve locatie van deze parking??",
+ "fr": "Quelle est la position relative de ce parking à vélo ?",
+ "it": "Qual è la posizione relativa di questo parcheggio bici?",
+ "zh_Hant": "這個單車停車場的相對位置是?",
+ "pl": "Jaka jest względna lokalizacja tego parkingu rowerowego?",
+ "pt_BR": "Qual a localização relativa deste estacionamento de bicicletas?"
+ },
+ "mappings": [
+ {
+ "if": "location=underground",
+ "then": {
+ "en": "Underground parking",
+ "nl": "Ondergrondse parking",
+ "fr": "Parking souterrain",
+ "it": "Parcheggio sotterraneo",
+ "ru": "Подземная парковка",
+ "de": "Tiefgarage",
+ "zh_Hant": "地下停車場",
+ "pt_BR": "Estacionamento subterrâneo"
+ }
+ },
+ {
+ "if": "location=underground",
+ "then": {
+ "en": "Underground parking",
+ "nl": "Ondergrondse parking",
+ "fr": "Parking souterrain",
+ "it": "Parcheggio sotterraneo",
+ "ru": "Подземная парковка",
+ "de": "Tiefgarage",
+ "zh_Hant": "地下停車場",
+ "pt_BR": "Estacionamento subterrâneo"
+ }
+ },
+ {
+ "if": "location=surface",
+ "then": {
+ "en": "Surface level parking",
+ "nl": "Parking op de begane grond",
+ "fr": "Parking en surface",
+ "hu": "Felszíni parkoló",
+ "it": "Parcheggio in superficie",
+ "de": "Ebenerdiges Parken",
+ "zh_Hant": "地面停車場",
+ "pt_BR": "Estacionamento de superfície"
+ }
+ },
+ {
+ "if": "location=",
+ "then": {
+ "en": "Surface level parking",
+ "nl": "Parking op de begane grond",
+ "fr": "Parking en surface",
+ "hu": "Felszíni parkoló",
+ "it": "Parcheggio in superficie",
+ "de": "Ebenerdiges Parken",
+ "zh_Hant": "地面層停車場",
+ "pt_BR": "Estacionamento ao nível da superfície"
+ },
+ "hideInAnwser": true
+ },
+ {
+ "if": "location=rooftop",
+ "then": {
+ "en": "Rooftop parking",
+ "nl": "Dakparking",
+ "fr": "Parking sur un toit",
+ "hu": "Tetőparkoló",
+ "it": "Parcheggio sul tetto",
+ "ru": "Парковка на крыше",
+ "zh_Hant": "屋頂停車場",
+ "pt_BR": "Estacionamento no telhado"
+ }
+ }
+ ]
},
{
- "if": "access=private",
- "then": {
- "en": "Access is limited to members of a school, company or organisation",
- "nl": "Private fietsenstalling van een school, een bedrijf, ...",
- "fr": "Accès limité aux membres d'une école, entreprise ou organisation",
- "it": "Accesso limitato ai membri di una scuola, una compagnia o un’organizzazione",
- "zh_Hant": "通行性僅限學校、公司或組織的成員",
- "pt_BR": "Acesso é limitado aos membros de uma escola, companhia ou organização"
- }
+ "#": "Is covered?",
+ "question": {
+ "en": "Is this parking covered? Also select \"covered\" for indoor parkings.",
+ "nl": "Is deze parking overdekt? Selecteer ook \"overdekt\" voor fietsparkings binnen een gebouw.",
+ "gl": "Este aparcadoiro está cuberto? Tamén escolle \"cuberto\" para aparcadoiros interiores.",
+ "de": "Ist dieser Parkplatz überdacht? Wählen Sie auch \"überdacht\" für Innenparkplätze.",
+ "fr": "Ce parking est-il couvert ? Sélectionnez aussi \"couvert\" pour les parkings en intérieur.",
+ "hu": "Fedett ez a parkoló? (Beltéri parkoló esetén is válaszd a \"fedett\" opciót.)",
+ "it": "È un parcheggio coperto? Indicare “coperto” per parcheggi all’interno.",
+ "zh_Hant": "這個停車場是否有車棚?如果是室內停車場也請選擇\"遮蔽\"。",
+ "pt_BR": "Este estacionamento é coberto? Também selecione \"coberto\" para estacionamentos internos."
+ },
+ "condition": {
+ "and": [
+ "bicycle_parking!=shed",
+ "location!=underground"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "covered=yes",
+ "then": {
+ "en": "This parking is covered (it has a roof)",
+ "nl": "Deze parking is overdekt (er is een afdak)",
+ "gl": "Este aparcadoiro está cuberto (ten un teito)",
+ "de": "Dieser Parkplatz ist überdacht (er hat ein Dach)",
+ "fr": "Ce parking est couvert (il a un toit)",
+ "hu": "A parkoló fedett",
+ "it": "È un parcheggio coperto (ha un tetto)",
+ "zh_Hant": "這個停車場有遮蔽 (有屋頂)",
+ "ru": "Это крытая парковка (есть крыша/навес)",
+ "pt_BR": "Este estacionamento é coberto (tem um telhado)"
+ }
+ },
+ {
+ "if": "covered=no",
+ "then": {
+ "en": "This parking is not covered",
+ "nl": "Deze parking is niet overdekt",
+ "gl": "Este aparcadoiro non está cuberto",
+ "de": "Dieser Parkplatz ist nicht überdacht",
+ "fr": "Ce parking n'est pas couvert",
+ "hu": "A parkoló nem fedett",
+ "it": "Non è un parcheggio coperto",
+ "zh_Hant": "這個停車場沒有遮蔽",
+ "ru": "Это открытая парковка",
+ "pt_BR": "Este estacionamento não é coberto"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Capacity",
+ "question": {
+ "en": "How many bicycles fit in this bicycle parking (including possible cargo bicycles)?",
+ "fr": "Combien de vélos entrent dans ce parking à vélos (y compris les éventuels vélos de transport) ?",
+ "nl": "Hoeveel fietsen kunnen in deze fietsparking (inclusief potentiëel bakfietsen)?",
+ "gl": "Cantas bicicletas caben neste aparcadoiro de bicicletas (incluídas as posíbeis bicicletas de carga)?",
+ "de": "Wie viele Fahrräder passen auf diesen Fahrrad-Parkplatz (einschließlich möglicher Lastenfahrräder)?",
+ "it": "Quante biciclette entrano in questo parcheggio per bici (incluse le eventuali bici da trasporto)?",
+ "zh_Hant": "這個單車停車場能放幾台單車 (包括裝箱單車)?"
+ },
+ "render": {
+ "en": "Place for {capacity} bikes",
+ "fr": "Place pour {capacity} vélos",
+ "nl": "Plaats voor {capacity} fietsen",
+ "gl": "Lugar para {capacity} bicicletas",
+ "de": "Platz für {capacity} Fahrräder",
+ "it": "Posti per {capacity} bici",
+ "zh_Hant": "{capacity} 單車的地方",
+ "ru": "Место для {capacity} велосипеда(ов)",
+ "pt_BR": "Lugar para {capacity} bicicletas"
+ },
+ "freeform": {
+ "key": "capacity",
+ "type": "nat"
+ }
+ },
+ {
+ "#": "Access",
+ "question": {
+ "en": "Who can use this bicycle parking?",
+ "nl": "Wie mag er deze fietsenstalling gebruiken?",
+ "fr": "Qui peut utiliser ce parking à vélo ?",
+ "it": "Chi può usare questo parcheggio bici?",
+ "de": "Wer kann diesen Fahrradparplatz nutzen?",
+ "zh_Hant": "誰可以使用這個單車停車場?",
+ "ru": "Кто может пользоваться этой велопарковкой?",
+ "pt_BR": "Quem pode usar este estacionamento de bicicletas?"
+ },
+ "render": {
+ "en": "{access}",
+ "de": "{access}",
+ "fr": "{access}",
+ "nl": "{access}",
+ "it": "{access}",
+ "ru": "{access}",
+ "id": "{access}",
+ "zh_Hant": "{access}",
+ "fi": "{access}",
+ "pt_BR": "{access}"
+ },
+ "freeform": {
+ "key": "access",
+ "addExtraTags": [
+ "fixme=Freeform used on 'access'-tag: possibly a wrong value"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "access=yes",
+ "then": {
+ "en": "Publicly accessible",
+ "nl": "Publiek toegankelijke fietsenstalling",
+ "fr": "Accessible publiquement",
+ "it": "Accessibile pubblicamente",
+ "de": "Öffentlich zugänglich",
+ "zh_Hant": "公開可用",
+ "pt_BR": "Acessível ao público"
+ }
+ },
+ {
+ "if": "access=customers",
+ "then": {
+ "en": "Access is primarily for visitors to a business",
+ "nl": "Klanten van de zaak of winkel",
+ "fr": "Accès destiné principalement aux visiteurs d'un lieu",
+ "it": "Accesso destinato principalmente ai visitatori di un’attività",
+ "zh_Hant": "通行性主要是為了企業的顧客",
+ "pt_BR": "Acesso é principalmente para visitantes de uma empresa"
+ }
+ },
+ {
+ "if": "access=private",
+ "then": {
+ "en": "Access is limited to members of a school, company or organisation",
+ "nl": "Private fietsenstalling van een school, een bedrijf, ...",
+ "fr": "Accès limité aux membres d'une école, entreprise ou organisation",
+ "it": "Accesso limitato ai membri di una scuola, una compagnia o un’organizzazione",
+ "zh_Hant": "通行性僅限學校、公司或組織的成員",
+ "pt_BR": "Acesso é limitado aos membros de uma escola, companhia ou organização"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Cargo bike spaces?",
+ "question": {
+ "en": "Does this bicycle parking have spots for cargo bikes?",
+ "nl": "Heeft deze fietsparking plaats voor bakfietsen?",
+ "gl": "Este aparcadoiro de bicicletas ten espazo para bicicletas de carga?",
+ "de": "Gibt es auf diesem Fahrrad-Parkplatz Plätze für Lastenfahrräder?",
+ "fr": "Est-ce que ce parking à vélo a des emplacements pour des vélos cargo ?",
+ "it": "Questo parcheggio dispone di posti specifici per le bici da trasporto?",
+ "zh_Hant": "這個單車停車場有地方放裝箱的單車嗎?",
+ "pt_BR": "O estacionamento de bicicletas tem vagas para bicicletas de carga?"
+ },
+ "mappings": [
+ {
+ "if": "cargo_bike=yes",
+ "then": {
+ "en": "This parking has room for cargo bikes",
+ "nl": "Deze parking heeft plaats voor bakfietsen",
+ "gl": "Este aparcadoiro ten espazo para bicicletas de carga.",
+ "de": "Dieser Parkplatz bietet Platz für Lastenfahrräder",
+ "fr": "Ce parking a de la place pour les vélos cargo",
+ "it": "Questo parcheggio ha posto per bici da trasporto",
+ "zh_Hant": "這個停車場有地方可以放裝箱單車",
+ "pt_BR": "Este estacionamento tem vagas para bicicletas de carga"
+ }
+ },
+ {
+ "if": "cargo_bike=designated",
+ "then": {
+ "en": "This parking has designated (official) spots for cargo bikes.",
+ "nl": "Er zijn speciale plaatsen voorzien voor bakfietsen",
+ "gl": "Este aparcadoiro ten espazos designados (oficiais) para bicicletas de carga.",
+ "de": "Dieser Parkplatz verfügt über ausgewiesene (offizielle) Plätze für Lastenfahrräder.",
+ "fr": "Ce parking a des emplacements (officiellement) destinés aux vélos cargo.",
+ "it": "Questo parcheggio ha posti destinati (ufficialmente) alle bici da trasporto.",
+ "zh_Hant": "這停車場有設計 (官方) 空間給裝箱的單車。",
+ "pt_BR": "Este estacionamento tem vagas (oficiais) projetadas para bicicletas de carga."
+ }
+ },
+ {
+ "if": "cargo_bike=no",
+ "then": {
+ "en": "You're not allowed to park cargo bikes",
+ "nl": "Je mag hier geen bakfietsen parkeren",
+ "gl": "Non está permitido aparcar bicicletas de carga",
+ "de": "Es ist nicht erlaubt, Lastenfahrräder zu parken",
+ "fr": "Il est interdit de garer des vélos cargo",
+ "it": "Il parcheggio delle bici da trasporto è proibito",
+ "pt_BR": "Você não tem permissão para estacionar bicicletas de carga"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Cargo bike capacity?",
+ "question": {
+ "en": "How many cargo bicycles fit in this bicycle parking?",
+ "nl": "Voor hoeveel bakfietsen heeft deze fietsparking plaats?",
+ "fr": "Combien de vélos de transport entrent dans ce parking à vélos ?",
+ "gl": "Cantas bicicletas de carga caben neste aparcadoiro de bicicletas?",
+ "de": "Wie viele Lastenfahrräder passen auf diesen Fahrrad-Parkplatz?",
+ "it": "Quante bici da trasporto entrano in questo parcheggio per bici?",
+ "pt_BR": "Quantas bicicletas de carga cabem neste estacionamento de bicicletas?"
+ },
+ "render": {
+ "en": "This parking fits {capacity:cargo_bike} cargo bikes",
+ "nl": "Deze parking heeft plaats voor {capacity:cargo_bike} fietsen",
+ "fr": "Ce parking a de la place pour {capacity:cargo_bike} vélos de transport",
+ "gl": "Neste aparcadoiro caben {capacity:cargo_bike} bicicletas de carga",
+ "de": "Auf diesen Parkplatz passen {capacity:cargo_bike} Lastenfahrräder",
+ "it": "Questo parcheggio può contenere {capacity:cargo_bike} bici da trasporto",
+ "pt_BR": "Neste estacionamento cabem {capacity:cargo_bike} bicicletas de carga"
+ },
+ "condition": "cargo_bike~designated|yes",
+ "freeform": {
+ "key": "capacity:cargo_bike",
+ "type": "nat"
+ }
}
- ]
- },
- {
- "#": "Cargo bike spaces?",
- "question": {
- "en": "Does this bicycle parking have spots for cargo bikes?",
- "nl": "Heeft deze fietsparking plaats voor bakfietsen?",
- "gl": "Este aparcadoiro de bicicletas ten espazo para bicicletas de carga?",
- "de": "Gibt es auf diesem Fahrrad-Parkplatz Plätze für Lastenfahrräder?",
- "fr": "Est-ce que ce parking à vélo a des emplacements pour des vélos cargo ?",
- "it": "Questo parcheggio dispone di posti specifici per le bici da trasporto?",
- "zh_Hant": "這個單車停車場有地方放裝箱的單車嗎?",
- "pt_BR": "O estacionamento de bicicletas tem vagas para bicicletas de carga?"
- },
- "mappings": [
- {
- "if": "cargo_bike=yes",
- "then": {
- "en": "This parking has room for cargo bikes",
- "nl": "Deze parking heeft plaats voor bakfietsen",
- "gl": "Este aparcadoiro ten espazo para bicicletas de carga.",
- "de": "Dieser Parkplatz bietet Platz für Lastenfahrräder",
- "fr": "Ce parking a de la place pour les vélos cargo",
- "it": "Questo parcheggio ha posto per bici da trasporto",
- "zh_Hant": "這個停車場有地方可以放裝箱單車",
- "pt_BR": "Este estacionamento tem vagas para bicicletas de carga"
- }
- },
- {
- "if": "cargo_bike=designated",
- "then": {
- "en": "This parking has designated (official) spots for cargo bikes.",
- "nl": "Er zijn speciale plaatsen voorzien voor bakfietsen",
- "gl": "Este aparcadoiro ten espazos designados (oficiais) para bicicletas de carga.",
- "de": "Dieser Parkplatz verfügt über ausgewiesene (offizielle) Plätze für Lastenfahrräder.",
- "fr": "Ce parking a des emplacements (officiellement) destinés aux vélos cargo.",
- "it": "Questo parcheggio ha posti destinati (ufficialmente) alle bici da trasporto.",
- "zh_Hant": "這停車場有設計 (官方) 空間給裝箱的單車。",
- "pt_BR": "Este estacionamento tem vagas (oficiais) projetadas para bicicletas de carga."
- }
- },
- {
- "if": "cargo_bike=no",
- "then": {
- "en": "You're not allowed to park cargo bikes",
- "nl": "Je mag hier geen bakfietsen parkeren",
- "gl": "Non está permitido aparcar bicicletas de carga",
- "de": "Es ist nicht erlaubt, Lastenfahrräder zu parken",
- "fr": "Il est interdit de garer des vélos cargo",
- "it": "Il parcheggio delle bici da trasporto è proibito",
- "pt_BR": "Você não tem permissão para estacionar bicicletas de carga"
- }
- }
- ]
- },
- {
- "#": "Cargo bike capacity?",
- "question": {
- "en": "How many cargo bicycles fit in this bicycle parking?",
- "nl": "Voor hoeveel bakfietsen heeft deze fietsparking plaats?",
- "fr": "Combien de vélos de transport entrent dans ce parking à vélos ?",
- "gl": "Cantas bicicletas de carga caben neste aparcadoiro de bicicletas?",
- "de": "Wie viele Lastenfahrräder passen auf diesen Fahrrad-Parkplatz?",
- "it": "Quante bici da trasporto entrano in questo parcheggio per bici?",
- "pt_BR": "Quantas bicicletas de carga cabem neste estacionamento de bicicletas?"
- },
- "render": {
- "en": "This parking fits {capacity:cargo_bike} cargo bikes",
- "nl": "Deze parking heeft plaats voor {capacity:cargo_bike} fietsen",
- "fr": "Ce parking a de la place pour {capacity:cargo_bike} vélos de transport",
- "gl": "Neste aparcadoiro caben {capacity:cargo_bike} bicicletas de carga",
- "de": "Auf diesen Parkplatz passen {capacity:cargo_bike} Lastenfahrräder",
- "it": "Questo parcheggio può contenere {capacity:cargo_bike} bici da trasporto",
- "pt_BR": "Neste estacionamento cabem {capacity:cargo_bike} bicicletas de carga"
- },
- "condition": "cargo_bike~designated|yes",
- "freeform": {
- "key": "capacity:cargo_bike",
- "type": "nat"
- }
- }
- ]
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/bike_repair_station/bike_repair_station.json b/assets/layers/bike_repair_station/bike_repair_station.json
index df372236f..226d8436c 100644
--- a/assets/layers/bike_repair_station/bike_repair_station.json
+++ b/assets/layers/bike_repair_station/bike_repair_station.json
@@ -1,725 +1,725 @@
{
- "id": "bike_repair_station",
- "name": {
- "en": "Bike stations (repair, pump or both)",
- "nl": "Fietspunten (herstel, pomp of allebei)",
- "fr": "Station velo (réparation, pompe à vélo)",
- "gl": "Estación de bicicletas (arranxo, bomba de ar ou ambos)",
- "de": "Fahrradstationen (Reparatur, Pumpe oder beides)",
- "it": "Stazioni bici (riparazione, gonfiaggio o entrambi)",
- "pt_BR": "Estações de bicicletas (reparo, bomba ou ambos)"
- },
- "minzoom": 13,
- "source": {
- "osmTags": {
- "and": [
- "amenity=bicycle_repair_station"
- ]
- }
- },
- "title": {
- "render": {
- "en": "Bike station (pump & repair)",
- "nl": "Herstelpunt met pomp",
- "fr": "Point station velo avec pompe",
- "gl": "Estación de bicicletas (arranxo e bomba de ar)",
- "de": "Fahrradstation (Pumpe & Reparatur)",
- "it": "Stazione bici (gonfiaggio & riparazione)",
- "pt_BR": "Estação de bicicletas (bomba e reparo)"
+ "id": "bike_repair_station",
+ "name": {
+ "en": "Bike stations (repair, pump or both)",
+ "nl": "Fietspunten (herstel, pomp of allebei)",
+ "fr": "Station velo (réparation, pompe à vélo)",
+ "gl": "Estación de bicicletas (arranxo, bomba de ar ou ambos)",
+ "de": "Fahrradstationen (Reparatur, Pumpe oder beides)",
+ "it": "Stazioni bici (riparazione, gonfiaggio o entrambi)",
+ "pt_BR": "Estações de bicicletas (reparo, bomba ou ambos)"
},
- "mappings": [
- {
- "if": {
- "or": [
- "service:bicycle:pump=no",
- "service:bicycle:pump:operational_status=broken"
- ]
- },
- "then": {
- "en": "Bike repair station",
- "nl": "Herstelpunt",
- "fr": "Point de réparation velo",
- "gl": "Estación de arranxo de bicicletas",
- "de": "Fahrrad-Reparaturstation",
- "it": "Stazione riparazione bici",
- "pt_BR": "Estação de reparo de bicicletas"
+ "minzoom": 13,
+ "source": {
+ "osmTags": {
+ "and": [
+ "amenity=bicycle_repair_station"
+ ]
}
- },
- {
- "if": {
- "and": [
- "service:bicycle:pump=yes",
- "service:bicycle:tools=yes"
- ]
+ },
+ "title": {
+ "render": {
+ "en": "Bike station (pump & repair)",
+ "nl": "Herstelpunt met pomp",
+ "fr": "Point station velo avec pompe",
+ "gl": "Estación de bicicletas (arranxo e bomba de ar)",
+ "de": "Fahrradstation (Pumpe & Reparatur)",
+ "it": "Stazione bici (gonfiaggio & riparazione)",
+ "pt_BR": "Estação de bicicletas (bomba e reparo)"
},
- "then": {
- "en": "Bike repair station",
- "nl": "Herstelpunt",
- "fr": "Point de réparation",
- "gl": "Estación de arranxo de bicicletas",
- "de": "Fahrrad-Reparaturstation",
- "it": "Stazione riparazione bici",
- "pt_BR": "Estação de reparo de bicicletas"
- }
- },
- {
- "if": {
- "and": [
- "service:bicycle:pump:operational_status=broken",
+ "mappings": [
{
- "or": [
- "service:bicycle:tools=no",
- "service:bicycle:tools="
- ]
+ "if": {
+ "or": [
+ "service:bicycle:pump=no",
+ "service:bicycle:pump:operational_status=broken"
+ ]
+ },
+ "then": {
+ "en": "Bike repair station",
+ "nl": "Herstelpunt",
+ "fr": "Point de réparation velo",
+ "gl": "Estación de arranxo de bicicletas",
+ "de": "Fahrrad-Reparaturstation",
+ "it": "Stazione riparazione bici",
+ "pt_BR": "Estação de reparo de bicicletas"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:pump=yes",
+ "service:bicycle:tools=yes"
+ ]
+ },
+ "then": {
+ "en": "Bike repair station",
+ "nl": "Herstelpunt",
+ "fr": "Point de réparation",
+ "gl": "Estación de arranxo de bicicletas",
+ "de": "Fahrrad-Reparaturstation",
+ "it": "Stazione riparazione bici",
+ "pt_BR": "Estação de reparo de bicicletas"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:pump:operational_status=broken",
+ {
+ "or": [
+ "service:bicycle:tools=no",
+ "service:bicycle:tools="
+ ]
+ }
+ ]
+ },
+ "then": {
+ "en": "Broken pump",
+ "nl": "Kapotte fietspomp",
+ "fr": "Pompe cassée",
+ "gl": "Bomba de ar estragada",
+ "de": "Kaputte Pumpe",
+ "it": "Pompa rotta",
+ "ru": "Сломанный насос",
+ "pt_BR": "Bomba quebrada"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:pump=yes",
+ "service:bicycle:tools=no",
+ "name~*"
+ ]
+ },
+ "then": {
+ "en": "Bicycle pump {name}",
+ "nl": "Fietspomp {name}",
+ "fr": "Pompe de vélo {name}",
+ "gl": "Bomba de ar {name}",
+ "de": "Fahrradpumpe {name}",
+ "it": "Pompa per bici {name}",
+ "ru": "Велосипедный насос {name}",
+ "pt_BR": "Bomba de bicicleta {name}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:pump=yes",
+ "service:bicycle:tools=no"
+ ]
+ },
+ "then": {
+ "en": "Bicycle pump",
+ "nl": "Fietspomp",
+ "fr": "Pompe de vélo",
+ "gl": "Bomba de ar",
+ "de": "Fahrradpumpe",
+ "it": "Pompa per bici",
+ "ru": "Велосипедный насос",
+ "pt_BR": "Bomba de bicicleta"
+ }
}
- ]
- },
- "then": {
- "en": "Broken pump",
- "nl": "Kapotte fietspomp",
- "fr": "Pompe cassée",
- "gl": "Bomba de ar estragada",
- "de": "Kaputte Pumpe",
- "it": "Pompa rotta",
- "ru": "Сломанный насос",
- "pt_BR": "Bomba quebrada"
- }
- },
- {
- "if": {
- "and": [
- "service:bicycle:pump=yes",
- "service:bicycle:tools=no",
- "name~*"
- ]
- },
- "then": {
- "en": "Bicycle pump {name}",
- "nl": "Fietspomp {name}",
- "fr": "Pompe de vélo {name}",
- "gl": "Bomba de ar {name}",
- "de": "Fahrradpumpe {name}",
- "it": "Pompa per bici {name}",
- "ru": "Велосипедный насос {name}",
- "pt_BR": "Bomba de bicicleta {name}"
- }
- },
- {
- "if": {
- "and": [
- "service:bicycle:pump=yes",
- "service:bicycle:tools=no"
- ]
- },
- "then": {
- "en": "Bicycle pump",
- "nl": "Fietspomp",
- "fr": "Pompe de vélo",
- "gl": "Bomba de ar",
- "de": "Fahrradpumpe",
- "it": "Pompa per bici",
- "ru": "Велосипедный насос",
- "pt_BR": "Bomba de bicicleta"
- }
- }
- ]
- },
- "titleIcons": [
- {
- "render": "",
- "condition": "operator=De Fietsambassade Gent",
- "roaming": true
- },
- "defaults"
- ],
- "tagRenderings": [
- "images",
- {
- "question": {
- "en": "Which services are available at this bike station?",
- "nl": "Welke functies biedt dit fietspunt?",
- "fr": "Quels services sont valables à cette station vélo ?",
- "gl": "Que servizos están dispoñíbeis nesta estación de bicicletas?",
- "de": "Welche Einrichtungen stehen an dieser Fahrradstation zur Verfügung?",
- "it": "Quali servizi sono disponibili in questa stazione per bici?",
- "pt_BR": "Quais serviços estão disponíveis nesta estação de bicicletas?"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "service:bicycle:tools=no",
- "service:bicycle:pump=yes"
- ]
- },
- "then": {
- "en": "There is only a pump present",
- "nl": "Er is enkel een pomp aanwezig",
- "fr": "Il y a seulement une pompe",
- "gl": "Só hai unha bomba de ar presente",
- "de": "Es ist nur eine Pumpe vorhanden",
- "it": "C’è solamente una pompa presente",
- "pt_BR": "Há somente uma bomba presente"
- }
- },
- {
- "if": {
- "and": [
- "service:bicycle:tools=yes",
- "service:bicycle:pump=no"
- ]
- },
- "then": {
- "en": "There are only tools (screwdrivers, pliers...) present",
- "nl": "Er is enkel gereedschap aanwezig (schroevendraaier, tang...)",
- "fr": "Il y a seulement des outils (tournevis, pinces...)",
- "gl": "Só hai ferramentas (desaparafusadores, alicates...) presentes",
- "de": "Es sind nur Werkzeuge (Schraubenzieher, Zangen...) vorhanden",
- "it": "Ci sono solo degli attrezzi (cacciaviti, pinze…) presenti",
- "pt_BR": "Há somente ferramentas (chaves de fenda, alicates...) presentes"
- }
- },
- {
- "if": {
- "and": [
- "service:bicycle:tools=yes",
- "service:bicycle:pump=yes"
- ]
- },
- "then": {
- "en": "There are both tools and a pump present",
- "nl": "Er is zowel een pomp als gereedschap aanwezig",
- "fr": "Il y a des outils et une pompe",
- "gl": "Hai ferramentas e unha bomba de ar presentes",
- "de": "Es sind sowohl Werkzeuge als auch eine Pumpe vorhanden",
- "it": "Ci sono sia attrezzi che pompa presenti",
- "pt_BR": "Há tanto ferramentas e uma bomba presente"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Who maintains this cycle pump?",
- "nl": "Wie beheert deze fietspomp?",
- "fr": "Qui maintient cette pompe à vélo ?",
- "it": "Chi gestisce questa pompa per bici?",
- "de": "Wer wartet diese Fahrradpumpe?",
- "pt_BR": "Quem faz a manutenção desta bomba de ciclo?"
- },
- "render": {
- "nl": "Beheer door {operator}",
- "en": "Maintained by {operator}",
- "fr": "Mantenue par {operator}",
- "it": "Manutenuta da {operator}",
- "de": "Gewartet von {operator}",
- "pt_BR": "Mantida por {operator}"
- },
- "freeform": {
- "key": "operator"
- },
- "mappings": [
- {
- "if": "operator=De Fietsambassade Gent",
- "then": "De Fietsambassade Gent",
- "hideInAnswer": "_country!=be"
- }
- ]
- },
- {
- "question": {
- "en": "What is the email address of the maintainer?",
- "nl": "Wat is het email-adres van de beheerder?"
- },
- "freeform": {
- "key": "email",
- "type": "email"
- },
- "render": "{email}"
- },
- {
- "question": {
- "en": "What is the phone number of the maintainer?",
- "nl": "Wat is het telefoonnummer van de beheerder?"
- },
- "freeform": {
- "key": "phone",
- "type": "phone"
- },
- "render": "{phone}"
- },
- {
- "question": {
- "nl": "Wanneer is dit fietsherstelpunt open?",
- "en": "When is this bicycle repair point open?",
- "fr": "Quand ce point de réparation de vélo est-il ouvert ?",
- "it": "Quando è aperto questo punto riparazione bici?",
- "de": "Wann ist diese Fahrradreparaturstelle geöffnet?",
- "ru": "Когда работает эта точка обслуживания велосипедов?"
- },
- "render": "{opening_hours_table()}",
- "freeform": {
- "key": "opening_hours",
- "type": "opening_hours"
- },
- "mappings": [
- {
- "if": "opening_hours=24/7",
- "then": {
- "nl": "Dag en nacht open",
- "en": "Always open",
- "fr": "Ouvert en permanence",
- "it": "Sempre aperto",
- "de": "Immer geöffnet",
- "ru": "Всегда открыто",
- "pt_BR": "Sempre aberto"
- }
- },
- {
- "if": "opening_hours=",
- "then": {
- "nl": "Dag en nacht open",
- "en": "Always open",
- "fr": "Ouvert en permanence",
- "it": "Sempre aperto",
- "de": "Immer geöffnet",
- "pt_BR": "Sempre aberto"
- },
- "hideInAnswer": true
- }
- ]
- },
- {
- "question": {
- "en": "Does this bike repair station have a special tool to repair your bike chain?",
- "nl": "Heeft dit herstelpunt een speciale reparatieset voor je ketting?",
- "fr": "Est-ce que cette station vélo a un outil specifique pour réparer la chaîne du vélo ?",
- "gl": "Esta estación de arranxo de bicicletas ten unha ferramenta especial para arranxar a cadea da túa bicicleta?",
- "de": "Verfügt diese Fahrrad-Reparaturstation über Spezialwerkzeug zur Reparatur von Fahrradketten?",
- "it": "Questa stazione di riparazione bici ha un attrezzo speciale per riparare la catena della bici?"
- },
- "condition": "service:bicycle:tools=yes",
- "mappings": [
- {
- "if": "service:bicycle:chain_tool=yes",
- "then": {
- "en": "There is a chain tool",
- "nl": "Er is een reparatieset voor je ketting",
- "fr": "Il y a un outil pour réparer la chaine",
- "gl": "Hai unha ferramenta para a cadea",
- "de": "Es gibt ein Kettenwerkzeug",
- "it": "È presente un utensile per riparare la catena",
- "pt_BR": "Há uma ferramenta de corrente"
- }
- },
- {
- "if": "service:bicycle:chain_tool=no",
- "then": {
- "en": "There is no chain tool",
- "nl": "Er is geen reparatieset voor je ketting",
- "fr": "Il n'y a pas d'outil pour réparer la chaine",
- "gl": "Non hai unha ferramenta para a cadea",
- "de": "Es gibt kein Kettenwerkzeug",
- "it": "Non è presente un utensile per riparare la catena",
- "pt_BR": "Não há uma ferramenta de corrente"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does this bike station have a hook to hang your bike on or a stand to raise it?",
- "nl": "Heeft dit herstelpunt een haak of standaard om je fiets op te hangen/zetten?",
- "fr": "Est-ce que cette station vélo à un crochet pour suspendre son vélo ou une accroche pour l'élevé ?",
- "gl": "Esta estación de bicicletas ten un guindastre para pendurar a túa bicicleta ou un soporte para elevala?",
- "de": "Hat diese Fahrradstation einen Haken, an dem Sie Ihr Fahrrad aufhängen können, oder einen Ständer, um es anzuheben?",
- "it": "Questa stazione bici ha un gancio per tenere sospesa la bici o un supporto per alzarla?"
- },
- "condition": "service:bicycle:tools=yes",
- "mappings": [
- {
- "if": "service:bicycle:stand=yes",
- "then": {
- "en": "There is a hook or stand",
- "nl": "Er is een haak of standaard",
- "fr": "Il y a un crochet ou une accroche",
- "gl": "Hai un guindastre ou soporte",
- "de": "Es gibt einen Haken oder Ständer",
- "it": "C’è un gancio o un supporto",
- "pt_BR": "Há um gancho ou um suporte"
- }
- },
- {
- "if": "service:bicycle:stand=no",
- "then": {
- "en": "There is no hook or stand",
- "nl": "Er is geen haak of standaard",
- "fr": "Il n'y pas de crochet ou d'accroche",
- "gl": "Non hai un guindastre ou soporte",
- "de": "Es gibt keinen Haken oder Ständer",
- "it": "Non c’è né un gancio né un supporto",
- "pt_BR": "Não há um gancho ou um suporte"
- }
- }
- ]
- },
- {
- "#": "Operational status",
- "question": {
- "en": "Is the bike pump still operational?",
- "nl": "Werkt de fietspomp nog?",
- "fr": "La pompe à vélo fonctionne-t-elle toujours ?",
- "gl": "Segue a funcionar a bomba de ar?",
- "de": "Ist die Fahrradpumpe noch funktionstüchtig?",
- "it": "La pompa per bici è sempre funzionante?",
- "ru": "Велосипедный насос все еще работает?",
- "pl": "Czy pompka rowerowa jest nadal sprawna?"
- },
- "condition": "service:bicycle:pump=yes",
- "mappings": [
- {
- "if": "service:bicycle:pump:operational_status=broken",
- "then": {
- "en": "The bike pump is broken",
- "nl": "De fietspomp is kapot",
- "fr": "La pompe à vélo est cassée",
- "gl": "A bomba de ar está estragada",
- "de": "Die Fahrradpumpe ist kaputt",
- "it": "La pompa per bici è guasta",
- "ru": "Велосипедный насос сломан",
- "pl": "Pompka rowerowa jest zepsuta"
- }
- },
- {
- "if": "service:bicycle:pump:operational_status=",
- "then": {
- "en": "The bike pump is operational",
- "nl": "De fietspomp werkt nog",
- "fr": "La pompe est opérationnelle",
- "gl": "A bomba de ar está operativa",
- "de": "Die Fahrradpumpe ist betriebsbereit",
- "it": "La pompa per bici funziona",
- "ru": "Велосипедный насос работает",
- "pl": "Pompka rowerowa jest sprawna"
- }
- }
- ]
- },
- {
- "#": "Email maintainer",
- "condition": {
- "and": [
- "email~*",
- "service:bicycle:pump:operational_status=broken"
]
- },
- "render": {
- "en": "Report this bicycle pump as broken",
- "nl": "Rapporteer deze fietspomp als kapot"
- }
},
- {
- "question": {
- "en": "What valves are supported?",
- "nl": "Welke ventielen werken er met de pomp?",
- "fr": "Quelles valves sont compatibles ?",
- "gl": "Que válvulas son compatíbeis?",
- "de": "Welche Ventile werden unterstützt?",
- "it": "Quali valvole sono supportate?",
- "pl": "Jakie zawory są obsługiwane?"
- },
- "render": {
- "en": "This pump supports the following valves: {valves}",
- "nl": "Deze pomp werkt met de volgende ventielen: {valves}",
- "fr": "Cette pompe est compatible avec les valves suivantes : {valves}",
- "gl": "Esta bomba de ar admite as seguintes válvulas: {valves}",
- "de": "Diese Pumpe unterstützt die folgenden Ventile: {valves}",
- "it": "Questa pompa è compatibile con le seguenti valvole: {valves}",
- "ru": "Этот насос поддерживает следующие клапаны: {valves}",
- "pl": "Ta pompka obsługuje następujące zawory: {valves}"
- },
- "freeform": {
- "#addExtraTags": [
- "fixme=Freeform 'valves'-tag used: possibly a wrong value"
- ],
- "key": "valves"
- },
- "multiAnswer": true,
- "mappings": [
+ "titleIcons": [
{
- "if": "valves=sclaverand",
- "then": {
- "en": "Sclaverand (also known as Presta)",
- "nl": "Sclaverand (ook gekend als Presta)",
- "fr": "Sclaverand (aussi appelé Presta)",
- "gl": "Sclaverand (tamén coñecido como Presta)",
- "de": "Sklaverand (auch bekannt als Presta)",
- "it": "Sclaverand (detta anche Presta)",
- "ru": "Клапан Presta (также известный как французский клапан)"
- }
+ "render": "",
+ "condition": "operator=De Fietsambassade Gent",
+ "roaming": true
+ },
+ "defaults"
+ ],
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "en": "Which services are available at this bike station?",
+ "nl": "Welke functies biedt dit fietspunt?",
+ "fr": "Quels services sont valables à cette station vélo ?",
+ "gl": "Que servizos están dispoñíbeis nesta estación de bicicletas?",
+ "de": "Welche Einrichtungen stehen an dieser Fahrradstation zur Verfügung?",
+ "it": "Quali servizi sono disponibili in questa stazione per bici?",
+ "pt_BR": "Quais serviços estão disponíveis nesta estação de bicicletas?"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "service:bicycle:tools=no",
+ "service:bicycle:pump=yes"
+ ]
+ },
+ "then": {
+ "en": "There is only a pump present",
+ "nl": "Er is enkel een pomp aanwezig",
+ "fr": "Il y a seulement une pompe",
+ "gl": "Só hai unha bomba de ar presente",
+ "de": "Es ist nur eine Pumpe vorhanden",
+ "it": "C’è solamente una pompa presente",
+ "pt_BR": "Há somente uma bomba presente"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:tools=yes",
+ "service:bicycle:pump=no"
+ ]
+ },
+ "then": {
+ "en": "There are only tools (screwdrivers, pliers...) present",
+ "nl": "Er is enkel gereedschap aanwezig (schroevendraaier, tang...)",
+ "fr": "Il y a seulement des outils (tournevis, pinces...)",
+ "gl": "Só hai ferramentas (desaparafusadores, alicates...) presentes",
+ "de": "Es sind nur Werkzeuge (Schraubenzieher, Zangen...) vorhanden",
+ "it": "Ci sono solo degli attrezzi (cacciaviti, pinze…) presenti",
+ "pt_BR": "Há somente ferramentas (chaves de fenda, alicates...) presentes"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:tools=yes",
+ "service:bicycle:pump=yes"
+ ]
+ },
+ "then": {
+ "en": "There are both tools and a pump present",
+ "nl": "Er is zowel een pomp als gereedschap aanwezig",
+ "fr": "Il y a des outils et une pompe",
+ "gl": "Hai ferramentas e unha bomba de ar presentes",
+ "de": "Es sind sowohl Werkzeuge als auch eine Pumpe vorhanden",
+ "it": "Ci sono sia attrezzi che pompa presenti",
+ "pt_BR": "Há tanto ferramentas e uma bomba presente"
+ }
+ }
+ ]
},
{
- "if": "valves=dunlop",
- "then": {
- "en": "Dunlop",
- "nl": "Dunlop",
- "fr": "Dunlop",
- "gl": "Dunlop",
- "de": "Dunlop",
- "it": "Dunlop",
- "ru": "Клапан Dunlop"
- }
+ "question": {
+ "en": "Who maintains this cycle pump?",
+ "nl": "Wie beheert deze fietspomp?",
+ "fr": "Qui maintient cette pompe à vélo ?",
+ "it": "Chi gestisce questa pompa per bici?",
+ "de": "Wer wartet diese Fahrradpumpe?",
+ "pt_BR": "Quem faz a manutenção desta bomba de ciclo?"
+ },
+ "render": {
+ "nl": "Beheer door {operator}",
+ "en": "Maintained by {operator}",
+ "fr": "Mantenue par {operator}",
+ "it": "Manutenuta da {operator}",
+ "de": "Gewartet von {operator}",
+ "pt_BR": "Mantida por {operator}"
+ },
+ "freeform": {
+ "key": "operator"
+ },
+ "mappings": [
+ {
+ "if": "operator=De Fietsambassade Gent",
+ "then": "De Fietsambassade Gent",
+ "hideInAnswer": "_country!=be"
+ }
+ ]
},
{
- "if": "valves=schrader",
- "then": {
- "en": "Schrader (cars)",
- "nl": "Schrader (auto's)",
- "fr": "Schrader (les valves de voitures)",
- "gl": "Schrader (para automóbiles)",
- "de": "Schrader (Autos)",
- "it": "Schrader (valvola delle auto)"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Is this an electric bike pump?",
- "nl": "Is dit een electrische fietspomp?",
- "fr": "Est-ce que cette pompe est électrique ?",
- "gl": "Esta é unha bomba de ar eléctrica?",
- "de": "Ist dies eine elektrische Fahrradpumpe?",
- "it": "Questa pompa per bici è elettrica?",
- "ru": "Это электрический велосипедный насос?",
- "pl": "Czy jest to elektryczna pompka do roweru?"
- },
- "condition": "service:bicycle:pump=yes",
- "mappings": [
- {
- "if": "manual=yes",
- "then": {
- "en": "Manual pump",
- "nl": "Manuele pomp",
- "fr": "Pompe manuelle",
- "gl": "Bomba de ar manual",
- "de": "Manuelle Pumpe",
- "it": "Pompa manuale",
- "ru": "Ручной насос",
- "pl": "Pompa ręczna",
- "pt_BR": "Bomba manual"
- }
+ "question": {
+ "en": "What is the email address of the maintainer?",
+ "nl": "Wat is het email-adres van de beheerder?"
+ },
+ "freeform": {
+ "key": "email",
+ "type": "email"
+ },
+ "render": "{email}"
},
{
- "if": "manual=no",
- "then": {
- "en": "Electrical pump",
- "nl": "Electrische pomp",
- "fr": "Pompe électrique",
- "gl": "Bomba de ar eléctrica",
- "de": "Elektrische Pumpe",
- "it": "Pompa elettrica",
- "ru": "Электрический насос",
- "pl": "Pompka elektryczna",
- "pt_BR": "Bomba elétrica"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does the pump have a pressure indicator or manometer?",
- "nl": "Heeft deze pomp een luchtdrukmeter?",
- "fr": "Est-ce que la pompe à un manomètre integré ?",
- "gl": "Ten a bomba de ar un indicador de presión ou un manómetro?",
- "de": "Verfügt die Pumpe über einen Druckanzeiger oder ein Manometer?",
- "it": "Questa pompa ha l’indicatore della pressione o il manometro?",
- "pl": "Czy pompka posiada wskaźnik ciśnienia lub manometr?"
- },
- "condition": "service:bicycle:pump=yes",
- "mappings": [
- {
- "if": "manometer=yes",
- "then": {
- "en": "There is a manometer",
- "nl": "Er is een luchtdrukmeter",
- "fr": "Il y a un manomètre",
- "gl": "Hai manómetro",
- "de": "Es gibt ein Manometer",
- "it": "C’è un manometro",
- "ru": "Есть манометр",
- "pl": "Jest manometr",
- "pt_BR": "Há um manômetro"
- }
+ "question": {
+ "en": "What is the phone number of the maintainer?",
+ "nl": "Wat is het telefoonnummer van de beheerder?"
+ },
+ "freeform": {
+ "key": "phone",
+ "type": "phone"
+ },
+ "render": "{phone}"
},
{
- "if": "manometer=no",
- "then": {
- "en": "There is no manometer",
- "nl": "Er is geen luchtdrukmeter",
- "fr": "Il n'y a pas de manomètre",
- "gl": "Non hai manómetro",
- "de": "Es gibt kein Manometer",
- "it": "Non c’è un manometro",
- "ru": "Нет манометра",
- "pl": "Nie ma manometru",
- "pt_BR": "Não há um manômetro"
- }
+ "question": {
+ "nl": "Wanneer is dit fietsherstelpunt open?",
+ "en": "When is this bicycle repair point open?",
+ "fr": "Quand ce point de réparation de vélo est-il ouvert ?",
+ "it": "Quando è aperto questo punto riparazione bici?",
+ "de": "Wann ist diese Fahrradreparaturstelle geöffnet?",
+ "ru": "Когда работает эта точка обслуживания велосипедов?"
+ },
+ "render": "{opening_hours_table()}",
+ "freeform": {
+ "key": "opening_hours",
+ "type": "opening_hours"
+ },
+ "mappings": [
+ {
+ "if": "opening_hours=24/7",
+ "then": {
+ "nl": "Dag en nacht open",
+ "en": "Always open",
+ "fr": "Ouvert en permanence",
+ "it": "Sempre aperto",
+ "de": "Immer geöffnet",
+ "ru": "Всегда открыто",
+ "pt_BR": "Sempre aberto"
+ }
+ },
+ {
+ "if": "opening_hours=",
+ "then": {
+ "nl": "Dag en nacht open",
+ "en": "Always open",
+ "fr": "Ouvert en permanence",
+ "it": "Sempre aperto",
+ "de": "Immer geöffnet",
+ "pt_BR": "Sempre aberto"
+ },
+ "hideInAnswer": true
+ }
+ ]
},
{
- "if": "manometer=broken",
- "then": {
- "en": "There is manometer but it is broken",
- "nl": "Er is een luchtdrukmeter maar die is momenteel defect",
- "fr": "Il y a un manomètre mais il est cassé",
- "gl": "Hai manómetro pero está estragado",
- "de": "Es gibt ein Manometer, aber es ist kaputt",
- "it": "C’è un manometro ma è rotto",
- "ru": "Есть манометр, но он сломан",
- "pl": "Jest manometr, ale jest uszkodzony",
- "pt_BR": "Há um manômetro mas está quebrado"
- }
- }
- ]
- },
- "level"
- ],
- "icon": {
- "render": {
- "en": "./assets/layers/bike_repair_station/repair_station.svg",
- "ru": "./assets/layers/bike_repair_station/repair_station.svg",
- "it": "./assets/layers/bike_repair_station/repair_station.svg",
- "fi": "./assets/layers/bike_repair_station/repair_station.svg",
- "fr": "./assets/layers/bike_repair_station/repair_station.svg",
- "pt_BR": "./assets/layers/bike_repair_station/repair_station.svg"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "service:bicycle:pump=no",
- "service:bicycle:pump:operational_status=broken"
- ]
+ "question": {
+ "en": "Does this bike repair station have a special tool to repair your bike chain?",
+ "nl": "Heeft dit herstelpunt een speciale reparatieset voor je ketting?",
+ "fr": "Est-ce que cette station vélo a un outil specifique pour réparer la chaîne du vélo ?",
+ "gl": "Esta estación de arranxo de bicicletas ten unha ferramenta especial para arranxar a cadea da túa bicicleta?",
+ "de": "Verfügt diese Fahrrad-Reparaturstation über Spezialwerkzeug zur Reparatur von Fahrradketten?",
+ "it": "Questa stazione di riparazione bici ha un attrezzo speciale per riparare la catena della bici?"
+ },
+ "condition": "service:bicycle:tools=yes",
+ "mappings": [
+ {
+ "if": "service:bicycle:chain_tool=yes",
+ "then": {
+ "en": "There is a chain tool",
+ "nl": "Er is een reparatieset voor je ketting",
+ "fr": "Il y a un outil pour réparer la chaine",
+ "gl": "Hai unha ferramenta para a cadea",
+ "de": "Es gibt ein Kettenwerkzeug",
+ "it": "È presente un utensile per riparare la catena",
+ "pt_BR": "Há uma ferramenta de corrente"
+ }
+ },
+ {
+ "if": "service:bicycle:chain_tool=no",
+ "then": {
+ "en": "There is no chain tool",
+ "nl": "Er is geen reparatieset voor je ketting",
+ "fr": "Il n'y a pas d'outil pour réparer la chaine",
+ "gl": "Non hai unha ferramenta para a cadea",
+ "de": "Es gibt kein Kettenwerkzeug",
+ "it": "Non è presente un utensile per riparare la catena",
+ "pt_BR": "Não há uma ferramenta de corrente"
+ }
+ }
+ ]
},
- "then": "./assets/layers/bike_repair_station/repair_station.svg"
- },
- {
- "if": {
- "and": [
- "service:bicycle:pump=yes",
- "service:bicycle:tools=yes"
- ]
+ {
+ "question": {
+ "en": "Does this bike station have a hook to hang your bike on or a stand to raise it?",
+ "nl": "Heeft dit herstelpunt een haak of standaard om je fiets op te hangen/zetten?",
+ "fr": "Est-ce que cette station vélo à un crochet pour suspendre son vélo ou une accroche pour l'élevé ?",
+ "gl": "Esta estación de bicicletas ten un guindastre para pendurar a túa bicicleta ou un soporte para elevala?",
+ "de": "Hat diese Fahrradstation einen Haken, an dem Sie Ihr Fahrrad aufhängen können, oder einen Ständer, um es anzuheben?",
+ "it": "Questa stazione bici ha un gancio per tenere sospesa la bici o un supporto per alzarla?"
+ },
+ "condition": "service:bicycle:tools=yes",
+ "mappings": [
+ {
+ "if": "service:bicycle:stand=yes",
+ "then": {
+ "en": "There is a hook or stand",
+ "nl": "Er is een haak of standaard",
+ "fr": "Il y a un crochet ou une accroche",
+ "gl": "Hai un guindastre ou soporte",
+ "de": "Es gibt einen Haken oder Ständer",
+ "it": "C’è un gancio o un supporto",
+ "pt_BR": "Há um gancho ou um suporte"
+ }
+ },
+ {
+ "if": "service:bicycle:stand=no",
+ "then": {
+ "en": "There is no hook or stand",
+ "nl": "Er is geen haak of standaard",
+ "fr": "Il n'y pas de crochet ou d'accroche",
+ "gl": "Non hai un guindastre ou soporte",
+ "de": "Es gibt keinen Haken oder Ständer",
+ "it": "Non c’è né un gancio né un supporto",
+ "pt_BR": "Não há um gancho ou um suporte"
+ }
+ }
+ ]
},
- "then": "./assets/layers/bike_repair_station/repair_station_pump.svg"
- },
- {
- "if": {
- "and": [
- "service:bicycle:pump:operational_status=broken",
- "service:bicycle:tools=no"
- ]
+ {
+ "#": "Operational status",
+ "question": {
+ "en": "Is the bike pump still operational?",
+ "nl": "Werkt de fietspomp nog?",
+ "fr": "La pompe à vélo fonctionne-t-elle toujours ?",
+ "gl": "Segue a funcionar a bomba de ar?",
+ "de": "Ist die Fahrradpumpe noch funktionstüchtig?",
+ "it": "La pompa per bici è sempre funzionante?",
+ "ru": "Велосипедный насос все еще работает?",
+ "pl": "Czy pompka rowerowa jest nadal sprawna?"
+ },
+ "condition": "service:bicycle:pump=yes",
+ "mappings": [
+ {
+ "if": "service:bicycle:pump:operational_status=broken",
+ "then": {
+ "en": "The bike pump is broken",
+ "nl": "De fietspomp is kapot",
+ "fr": "La pompe à vélo est cassée",
+ "gl": "A bomba de ar está estragada",
+ "de": "Die Fahrradpumpe ist kaputt",
+ "it": "La pompa per bici è guasta",
+ "ru": "Велосипедный насос сломан",
+ "pl": "Pompka rowerowa jest zepsuta"
+ }
+ },
+ {
+ "if": "service:bicycle:pump:operational_status=",
+ "then": {
+ "en": "The bike pump is operational",
+ "nl": "De fietspomp werkt nog",
+ "fr": "La pompe est opérationnelle",
+ "gl": "A bomba de ar está operativa",
+ "de": "Die Fahrradpumpe ist betriebsbereit",
+ "it": "La pompa per bici funziona",
+ "ru": "Велосипедный насос работает",
+ "pl": "Pompka rowerowa jest sprawna"
+ }
+ }
+ ]
},
- "then": "./assets/layers/bike_repair_station/broken_pump_2.svg"
- },
- {
- "if": {
- "and": [
- "service:bicycle:pump=yes",
- {
- "or": [
- "service:bicycle:tools=no",
- "service:bicycle:tools="
- ]
+ {
+ "#": "Email maintainer",
+ "condition": {
+ "and": [
+ "email~*",
+ "service:bicycle:pump:operational_status=broken"
+ ]
+ },
+ "render": {
+ "en": "Report this bicycle pump as broken",
+ "nl": "Rapporteer deze fietspomp als kapot"
}
- ]
},
- "then": "./assets/layers/bike_repair_station/pump.svg"
- }
+ {
+ "question": {
+ "en": "What valves are supported?",
+ "nl": "Welke ventielen werken er met de pomp?",
+ "fr": "Quelles valves sont compatibles ?",
+ "gl": "Que válvulas son compatíbeis?",
+ "de": "Welche Ventile werden unterstützt?",
+ "it": "Quali valvole sono supportate?",
+ "pl": "Jakie zawory są obsługiwane?"
+ },
+ "render": {
+ "en": "This pump supports the following valves: {valves}",
+ "nl": "Deze pomp werkt met de volgende ventielen: {valves}",
+ "fr": "Cette pompe est compatible avec les valves suivantes : {valves}",
+ "gl": "Esta bomba de ar admite as seguintes válvulas: {valves}",
+ "de": "Diese Pumpe unterstützt die folgenden Ventile: {valves}",
+ "it": "Questa pompa è compatibile con le seguenti valvole: {valves}",
+ "ru": "Этот насос поддерживает следующие клапаны: {valves}",
+ "pl": "Ta pompka obsługuje następujące zawory: {valves}"
+ },
+ "freeform": {
+ "#addExtraTags": [
+ "fixme=Freeform 'valves'-tag used: possibly a wrong value"
+ ],
+ "key": "valves"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "valves=sclaverand",
+ "then": {
+ "en": "Sclaverand (also known as Presta)",
+ "nl": "Sclaverand (ook gekend als Presta)",
+ "fr": "Sclaverand (aussi appelé Presta)",
+ "gl": "Sclaverand (tamén coñecido como Presta)",
+ "de": "Sklaverand (auch bekannt als Presta)",
+ "it": "Sclaverand (detta anche Presta)",
+ "ru": "Клапан Presta (также известный как французский клапан)"
+ }
+ },
+ {
+ "if": "valves=dunlop",
+ "then": {
+ "en": "Dunlop",
+ "nl": "Dunlop",
+ "fr": "Dunlop",
+ "gl": "Dunlop",
+ "de": "Dunlop",
+ "it": "Dunlop",
+ "ru": "Клапан Dunlop"
+ }
+ },
+ {
+ "if": "valves=schrader",
+ "then": {
+ "en": "Schrader (cars)",
+ "nl": "Schrader (auto's)",
+ "fr": "Schrader (les valves de voitures)",
+ "gl": "Schrader (para automóbiles)",
+ "de": "Schrader (Autos)",
+ "it": "Schrader (valvola delle auto)"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Is this an electric bike pump?",
+ "nl": "Is dit een electrische fietspomp?",
+ "fr": "Est-ce que cette pompe est électrique ?",
+ "gl": "Esta é unha bomba de ar eléctrica?",
+ "de": "Ist dies eine elektrische Fahrradpumpe?",
+ "it": "Questa pompa per bici è elettrica?",
+ "ru": "Это электрический велосипедный насос?",
+ "pl": "Czy jest to elektryczna pompka do roweru?"
+ },
+ "condition": "service:bicycle:pump=yes",
+ "mappings": [
+ {
+ "if": "manual=yes",
+ "then": {
+ "en": "Manual pump",
+ "nl": "Manuele pomp",
+ "fr": "Pompe manuelle",
+ "gl": "Bomba de ar manual",
+ "de": "Manuelle Pumpe",
+ "it": "Pompa manuale",
+ "ru": "Ручной насос",
+ "pl": "Pompa ręczna",
+ "pt_BR": "Bomba manual"
+ }
+ },
+ {
+ "if": "manual=no",
+ "then": {
+ "en": "Electrical pump",
+ "nl": "Electrische pomp",
+ "fr": "Pompe électrique",
+ "gl": "Bomba de ar eléctrica",
+ "de": "Elektrische Pumpe",
+ "it": "Pompa elettrica",
+ "ru": "Электрический насос",
+ "pl": "Pompka elektryczna",
+ "pt_BR": "Bomba elétrica"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does the pump have a pressure indicator or manometer?",
+ "nl": "Heeft deze pomp een luchtdrukmeter?",
+ "fr": "Est-ce que la pompe à un manomètre integré ?",
+ "gl": "Ten a bomba de ar un indicador de presión ou un manómetro?",
+ "de": "Verfügt die Pumpe über einen Druckanzeiger oder ein Manometer?",
+ "it": "Questa pompa ha l’indicatore della pressione o il manometro?",
+ "pl": "Czy pompka posiada wskaźnik ciśnienia lub manometr?"
+ },
+ "condition": "service:bicycle:pump=yes",
+ "mappings": [
+ {
+ "if": "manometer=yes",
+ "then": {
+ "en": "There is a manometer",
+ "nl": "Er is een luchtdrukmeter",
+ "fr": "Il y a un manomètre",
+ "gl": "Hai manómetro",
+ "de": "Es gibt ein Manometer",
+ "it": "C’è un manometro",
+ "ru": "Есть манометр",
+ "pl": "Jest manometr",
+ "pt_BR": "Há um manômetro"
+ }
+ },
+ {
+ "if": "manometer=no",
+ "then": {
+ "en": "There is no manometer",
+ "nl": "Er is geen luchtdrukmeter",
+ "fr": "Il n'y a pas de manomètre",
+ "gl": "Non hai manómetro",
+ "de": "Es gibt kein Manometer",
+ "it": "Non c’è un manometro",
+ "ru": "Нет манометра",
+ "pl": "Nie ma manometru",
+ "pt_BR": "Não há um manômetro"
+ }
+ },
+ {
+ "if": "manometer=broken",
+ "then": {
+ "en": "There is manometer but it is broken",
+ "nl": "Er is een luchtdrukmeter maar die is momenteel defect",
+ "fr": "Il y a un manomètre mais il est cassé",
+ "gl": "Hai manómetro pero está estragado",
+ "de": "Es gibt ein Manometer, aber es ist kaputt",
+ "it": "C’è un manometro ma è rotto",
+ "ru": "Есть манометр, но он сломан",
+ "pl": "Jest manometr, ale jest uszkodzony",
+ "pt_BR": "Há um manômetro mas está quebrado"
+ }
+ }
+ ]
+ },
+ "level"
+ ],
+ "icon": {
+ "render": {
+ "en": "./assets/layers/bike_repair_station/repair_station.svg",
+ "ru": "./assets/layers/bike_repair_station/repair_station.svg",
+ "it": "./assets/layers/bike_repair_station/repair_station.svg",
+ "fi": "./assets/layers/bike_repair_station/repair_station.svg",
+ "fr": "./assets/layers/bike_repair_station/repair_station.svg",
+ "pt_BR": "./assets/layers/bike_repair_station/repair_station.svg"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "service:bicycle:pump=no",
+ "service:bicycle:pump:operational_status=broken"
+ ]
+ },
+ "then": "./assets/layers/bike_repair_station/repair_station.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:pump=yes",
+ "service:bicycle:tools=yes"
+ ]
+ },
+ "then": "./assets/layers/bike_repair_station/repair_station_pump.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:pump:operational_status=broken",
+ "service:bicycle:tools=no"
+ ]
+ },
+ "then": "./assets/layers/bike_repair_station/broken_pump_2.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:pump=yes",
+ {
+ "or": [
+ "service:bicycle:tools=no",
+ "service:bicycle:tools="
+ ]
+ }
+ ]
+ },
+ "then": "./assets/layers/bike_repair_station/pump.svg"
+ }
+ ]
+ },
+ "iconOverlays": [
+ {
+ "if": "operator=De Fietsambassade Gent",
+ "then": "./assets/themes/cyclofix/fietsambassade_gent_logo_small.svg",
+ "badge": true
+ }
+ ],
+ "iconSize": {
+ "render": "50,50,bottom"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "width": {
+ "render": "1"
+ },
+ "wayHandling": 2,
+ "presets": [
+ {
+ "title": {
+ "en": "Bike pump",
+ "nl": "Fietspomp",
+ "fr": "Pompe à vélo",
+ "gl": "Bomba de ar",
+ "de": "Fahrradpumpe",
+ "it": "Pompa per bici",
+ "ru": "Велосипедный насос",
+ "fi": "Pyöräpumppu",
+ "pl": "Pompka do roweru",
+ "pt_BR": "Bomba de bicicleta"
+ },
+ "tags": [
+ "amenity=bicycle_repair_station",
+ "service:bicycle:tools=no",
+ "service:bicycle:pump=yes"
+ ],
+ "description": {
+ "en": "A device to inflate your tires on a fixed location in the public space.
Examples of bicycle pumps
",
+ "nl": "Een apparaat waar je je fietsbanden kan oppompen, beschikbaar in de publieke ruimte. De fietspomp in je kelder telt dus niet.
Voorbeelden
Examples of bicycle pumps
",
+ "it": "Un dispositivo per gonfiare le proprie gomme in un luogo fisso pubblicamente accessibile.
Esempi di pompe per biciclette
",
+ "fr": "Un dispositif pour gonfler vos pneus sur un emplacement fixe dans l'espace public.
Exemples de pompes à vélo
",
+ "de": "Ein Gerät zum Aufpumpen von Reifen an einem festen Standort im öffentlichen Raum.
Beispiele für Fahrradpumpen
",
+ "pl": "Urządzenie do pompowania opon w stałym miejscu w przestrzeni publicznej.
Przykłady pompek rowerowych
",
+ "pt_BR": "Um dispositivo para encher seus pneus em um local fixa no espaço público
Exemplos de bombas de bicicletas
"
+ }
+ },
+ {
+ "title": {
+ "en": "Bike repair station and pump",
+ "nl": "Herstelpunt en pomp",
+ "fr": "Point de réparation vélo avec pompe",
+ "gl": "Estación de arranxo de bicicletas con bomba de ar",
+ "de": "Fahrrad-Reparaturstation und Pumpe",
+ "it": "Stazione di riparazione bici e pompa",
+ "pl": "Stacja naprawy rowerów i pompka"
+ },
+ "tags": [
+ "amenity=bicycle_repair_station",
+ "service:bicycle:tools=yes",
+ "service:bicycle:pump=yes"
+ ],
+ "description": {
+ "en": "A device with tools to repair your bike combined with a pump at a fixed location. The tools are often secured with chains against theft.
Example
",
+ "nl": "Een apparaat met zowel gereedschap om je fiets te herstellen, met een pomp. Deze zijn op een vastgemaakt op een plaats in de publieke ruimte, bv. aan een paal.
Voorbeeld
",
+ "fr": "Un dispositif avec des outils pour réparer votre vélo combiné à une pompe a un emplacement fixe. Les outils sont souvent attachés par une chaîne pour empêcher le vol.
Exemple
",
+ "it": "Un dispositivo con attrezzi per riparare la tua bici e una pompa in un luogo fisso. Gli attrezzi sono spesso attaccati ad una catena per prevenire il furto.
Esempio
",
+ "de": "Ein Gerät mit Werkzeugen zur Reparatur von Fahrrädern kombiniert mit einer Pumpe an einem festen Standort. Die Werkzeuge sind oft mit Ketten gegen Diebstahl gesichert.
Beispiel
"
+ }
+ },
+ {
+ "title": {
+ "en": "Bike repair station without pump",
+ "nl": "Herstelpunt zonder pomp",
+ "fr": "Point de réparation vélo sans pompe",
+ "gl": "Estación de arranxo de bicicletas sin bomba de ar",
+ "de": "Fahrrad-Reparaturstation ohne Pumpe",
+ "it": "Stazione di riparazione bici senza pompa"
+ },
+ "tags": [
+ "amenity=bicycle_repair_station",
+ "service:bicycle:tools=yes",
+ "service:bicycle:pump=no"
+ ]
+ }
]
- },
- "iconOverlays": [
- {
- "if": "operator=De Fietsambassade Gent",
- "then": "./assets/themes/cyclofix/fietsambassade_gent_logo_small.svg",
- "badge": true
- }
- ],
- "iconSize": {
- "render": "50,50,bottom"
- },
- "color": {
- "render": "#00f"
- },
- "width": {
- "render": "1"
- },
- "wayHandling": 2,
- "presets": [
- {
- "title": {
- "en": "Bike pump",
- "nl": "Fietspomp",
- "fr": "Pompe à vélo",
- "gl": "Bomba de ar",
- "de": "Fahrradpumpe",
- "it": "Pompa per bici",
- "ru": "Велосипедный насос",
- "fi": "Pyöräpumppu",
- "pl": "Pompka do roweru",
- "pt_BR": "Bomba de bicicleta"
- },
- "tags": [
- "amenity=bicycle_repair_station",
- "service:bicycle:tools=no",
- "service:bicycle:pump=yes"
- ],
- "description": {
- "en": "A device to inflate your tires on a fixed location in the public space.
Examples of bicycle pumps
",
- "nl": "Een apparaat waar je je fietsbanden kan oppompen, beschikbaar in de publieke ruimte. De fietspomp in je kelder telt dus niet.
Voorbeelden
Examples of bicycle pumps
",
- "it": "Un dispositivo per gonfiare le proprie gomme in un luogo fisso pubblicamente accessibile.
Esempi di pompe per biciclette
",
- "fr": "Un dispositif pour gonfler vos pneus sur un emplacement fixe dans l'espace public.
Exemples de pompes à vélo
",
- "de": "Ein Gerät zum Aufpumpen von Reifen an einem festen Standort im öffentlichen Raum.
Beispiele für Fahrradpumpen
",
- "pl": "Urządzenie do pompowania opon w stałym miejscu w przestrzeni publicznej.
Przykłady pompek rowerowych
",
- "pt_BR": "Um dispositivo para encher seus pneus em um local fixa no espaço público
Exemplos de bombas de bicicletas
"
- }
- },
- {
- "title": {
- "en": "Bike repair station and pump",
- "nl": "Herstelpunt en pomp",
- "fr": "Point de réparation vélo avec pompe",
- "gl": "Estación de arranxo de bicicletas con bomba de ar",
- "de": "Fahrrad-Reparaturstation und Pumpe",
- "it": "Stazione di riparazione bici e pompa",
- "pl": "Stacja naprawy rowerów i pompka"
- },
- "tags": [
- "amenity=bicycle_repair_station",
- "service:bicycle:tools=yes",
- "service:bicycle:pump=yes"
- ],
- "description": {
- "en": "A device with tools to repair your bike combined with a pump at a fixed location. The tools are often secured with chains against theft.
Example
",
- "nl": "Een apparaat met zowel gereedschap om je fiets te herstellen, met een pomp. Deze zijn op een vastgemaakt op een plaats in de publieke ruimte, bv. aan een paal.
Voorbeeld
",
- "fr": "Un dispositif avec des outils pour réparer votre vélo combiné à une pompe a un emplacement fixe. Les outils sont souvent attachés par une chaîne pour empêcher le vol.
Exemple
",
- "it": "Un dispositivo con attrezzi per riparare la tua bici e una pompa in un luogo fisso. Gli attrezzi sono spesso attaccati ad una catena per prevenire il furto.
Esempio
",
- "de": "Ein Gerät mit Werkzeugen zur Reparatur von Fahrrädern kombiniert mit einer Pumpe an einem festen Standort. Die Werkzeuge sind oft mit Ketten gegen Diebstahl gesichert.
Beispiel
"
- }
- },
- {
- "title": {
- "en": "Bike repair station without pump",
- "nl": "Herstelpunt zonder pomp",
- "fr": "Point de réparation vélo sans pompe",
- "gl": "Estación de arranxo de bicicletas sin bomba de ar",
- "de": "Fahrrad-Reparaturstation ohne Pumpe",
- "it": "Stazione di riparazione bici senza pompa"
- },
- "tags": [
- "amenity=bicycle_repair_station",
- "service:bicycle:tools=yes",
- "service:bicycle:pump=no"
- ]
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/bike_shop/bike_shop.json b/assets/layers/bike_shop/bike_shop.json
index 5d230e2ec..77d3833b1 100644
--- a/assets/layers/bike_shop/bike_shop.json
+++ b/assets/layers/bike_shop/bike_shop.json
@@ -1,680 +1,680 @@
{
- "id": "bike_shop",
- "name": {
- "en": "Bike repair/shop",
- "nl": "Fietszaak",
- "fr": "Magasin ou réparateur de vélo",
- "gl": "Tenda/arranxo de bicicletas",
- "de": "Fahrradwerkstatt/geschäft",
- "it": "Venditore/riparatore bici",
- "ru": "Обслуживание велосипедов/магазин",
- "pt_BR": "Reparo/loja de bicicletas"
- },
- "minzoom": 13,
- "source": {
- "osmTags": {
- "#": "We select all bicycle shops, sport shops (but we try to weed out non-bicycle related shops), and any shop with a bicycle related tag",
- "or": [
- "shop=bicycle",
- {
- "#": "A bicycle rental with a network is something such as villo, bluebike, ... We don't want them",
- "and": [
- "amenity=bicycle_rental",
- "network="
- ]
- },
- {
- "#": "if sport is defined and is not bicycle, it is retrackted; if bicycle retail/repair is marked as 'no', it is retracted too.",
- "##": "There will be a few false-positives with this. They will get filtered out by people marking both 'not selling bikes' and 'not repairing bikes'. Furthermore, the OSMers will add a sports-subcategory on it",
- "and": [
- "shop=sports",
- "service:bicycle:retail!=no",
- "service:bicycle:repair!=no",
- {
- "or": [
- "sport=bicycle",
- "sport=cycling",
- "sport="
- ]
- }
- ]
- },
- {
- "#": "Any shop with any bicycle service",
- "and": [
- "shop~*",
- "service:bicycle:.*~~.*"
- ]
- }
- ]
- }
- },
- "title": {
- "render": {
- "en": "Bike repair/shop",
- "nl": "Fietszaak",
- "fr": "Magasin ou réparateur de vélo",
- "gl": "Tenda/arranxo de bicicletas",
- "de": "Fahrradwerkstatt/geschäft",
- "it": "Venditore/riparatore bici",
- "ru": "Обслуживание велосипедов/магазин",
- "pt_BR": "Reparo/loja de bicicletas"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "shop=sports"
- ]
- },
- "then": {
- "en": "Sport gear shop {name}",
- "nl": "Sportwinkel {name}",
- "fr": "Magasin de sport {name}",
- "it": "Negozio di articoli sportivi {name}",
- "ru": "Магазин спортивного инвентаря {name}",
- "de": "Sportartikelgeschäft {name}",
- "pt_BR": "Loja de equipamentos esportivos {name}"
- }
- },
- {
- "if": {
- "and": [
- "shop!~.*bicycle.*",
- "shop~*"
- ]
- },
- "then": "Other shop"
- },
- {
- "if": {
- "and": [
- {
- "or": [
- "service:bicycle:rental=yes",
- "amenity=bicycle_rental"
- ]
- }
- ]
- },
- "then": {
- "nl": "Fietsverhuur {name}",
- "en": "Bicycle rental {name}",
- "fr": "Location de vélo {name}",
- "it": "Noleggio di biciclette {name}",
- "ru": "Прокат велосипедов {name}",
- "de": "Fahrradverleih{name}",
- "pt_BR": "Aluguel de bicicletas {name}"
- }
- },
- {
- "if": {
- "and": [
- "service:bicycle:retail!~yes",
- "service:bicycle:repair=yes"
- ]
- },
- "then": {
- "en": "Bike repair {name}",
- "nl": "Fietsenmaker {name}",
- "fr": "Réparateur de vélo {name}",
- "gl": "Arranxo de bicicletas {name}",
- "de": "Fahrradwerkstatt {name}",
- "it": "Riparazione biciclette {name",
- "ru": "Ремонт велосипедов {name}",
- "pt_BR": "Reparo de bicicletas {name}"
- }
- },
- {
- "if": {
- "and": [
- "service:bicycle:repair!~yes"
- ]
- },
- "then": {
- "en": "Bike shop {name}",
- "nl": "Fietswinkel {name}",
- "fr": "Magasin de vélo {name}",
- "gl": "Tenda de bicicletas {name}",
- "de": "Fahrradgeschäft {name}",
- "it": "Negozio di biciclette {name}",
- "ru": "Магазин велосипедов {name}",
- "pt_BR": "Loja de bicicletas {name}"
- }
- },
- {
- "if": "name~*",
- "then": {
- "en": "Bike repair/shop {name}",
- "nl": "Fietszaak {name}",
- "fr": "Magasin ou réparateur de vélo {name}",
- "gl": "Tenda/arranxo de bicicletas {name}",
- "de": "Fahrradwerkstatt/geschäft {name}",
- "it": "Venditore/riparatore bici {name}",
- "pt_BR": "Loja/reparo de bicicletas {name}"
- }
- }
- ]
- },
- "titleIcons": [
- {
- "render": "",
- "condition": "operator=De Fietsambassade Gent"
- },
- {
- "condition": {
- "or": [
- "service:bicycle:pump=yes",
- "service:bicycle:pump=separate"
- ]
- },
- "render": ""
- },
- {
- "condition": "service:bicycle:diy=yes",
- "render": ""
- },
- "defaults"
- ],
- "description": {
- "en": "A shop specifically selling bicycles or related items",
- "nl": "Een winkel die hoofdzakelijk fietsen en fietstoebehoren verkoopt",
- "fr": "Un magasin vendant spécifiquement des vélos ou des objets en lien",
- "it": "Un negozio che vende specificatamente biciclette o articoli similari",
- "ru": "Магазин, специализирующийся на продаже велосипедов или сопутствующих товаров",
- "pt_BR": "Uma loja que vende especificamente bicicletas ou itens relacionados"
- },
- "tagRenderings": [
- "images",
- {
- "condition": {
- "and": [
- "shop~*",
- "shop!~bicycle",
- "shop!~sports"
- ]
- },
- "render": {
- "en": "This shop is specialized in selling {shop} and does bicycle related activities",
- "nl": "Deze winkel verkoopt {shop} en heeft fiets-gerelateerde activiteiten.",
- "fr": "Ce magasin est spécialisé dans la vente de {shop} et a des activités liées au vélo",
- "it": "Questo negozio è specializzato nella vendita di {shop} ed effettua attività relative alle biciclette",
- "pt_BR": "Esta loja é especializada em vender {shop} e faz atividades relacionadas à bicicletas"
- }
- },
- {
- "question": {
- "en": "What is the name of this bicycle shop?",
- "nl": "Wat is de naam van deze fietszaak?",
- "fr": "Quel est le nom du magasin de vélos ?",
- "gl": "Cal é o nome desta tenda de bicicletas?",
- "de": "Wie heißt dieser Fahrradladen?",
- "it": "Qual è il nome di questo negozio di biciclette?",
- "ru": "Как называется магазин велосипедов?",
- "pt_BR": "Qual o nome desta loja de bicicletas?"
- },
- "render": {
- "en": "This bicycle shop is called {name}",
- "nl": "Deze fietszaak heet {name}",
- "fr": "Ce magasin s'appelle {name}",
- "gl": "Esta tenda de bicicletas chámase {name}",
- "de": "Dieses Fahrradgeschäft heißt {name}",
- "it": "Questo negozio di biciclette è chiamato {name}",
- "ru": "Этот магазин велосипедов называется {name}",
- "pt_BR": "Esta loja de bicicletas se chama {nome}"
- },
- "freeform": {
- "key": "name"
- }
- },
- {
- "question": {
- "en": "What is the website of {name}?",
- "nl": "Wat is de website van {name}?",
- "fr": "Quel est le site web de {name} ?",
- "gl": "Cal é a páxina web de {name}?",
- "it": "Qual è il sito web di {name}?",
- "ru": "Какой сайт у {name}?",
- "id": "URL {name} apa?",
- "de": "Was ist die Webseite von {name}?",
- "pt_BR": "Qual o website de {name}?"
- },
- "render": "{website}",
- "freeform": {
- "key": "website",
- "type": "url"
- }
- },
- {
- "question": {
- "en": "What is the phone number of {name}?",
- "nl": "Wat is het telefoonnummer van {name}?",
- "fr": "Quel est le numéro de téléphone de {name} ?",
- "gl": "Cal é o número de teléfono de {name}?",
- "it": "Qual è il numero di telefono di {name}?",
- "ru": "Какой номер телефона у {name}?",
- "de": "Wie lautet die Telefonnummer von {name}?",
- "pt_BR": "Qual o número de telefone de {name}?"
- },
- "render": "{phone}",
- "freeform": {
- "key": "phone",
- "type": "phone"
- }
- },
- {
- "question": {
- "en": "What is the email address of {name}?",
- "nl": "Wat is het email-adres van {name}?",
- "fr": "Quelle est l'adresse électronique de {name} ?",
- "gl": "Cal é o enderezo de correo electrónico de {name}?",
- "it": "Qual è l’indirizzo email di {name}?",
- "ru": "Какой адрес электронной почты у {name}?",
- "de": "Wie lautet die E-Mail-Adresse von {name}?",
- "pt_BR": "Qual o endereço de email de {name}?"
- },
- "render": "{email}",
- "freeform": {
- "key": "email",
- "type": "email"
- }
- },
- {
- "render": "{opening_hours_table(opening_hours)}",
- "question": "When is this shop opened?",
- "freeform": {
- "key": "opening_hours",
- "type": "opening_hours"
- }
- },
- "description",
- {
- "render": "Enkel voor {access}",
- "freeform": {
- "key": "access"
- }
- },
- {
- "question": {
- "en": "Does this shop sell bikes?",
- "nl": "Verkoopt deze fietszaak fietsen?",
- "fr": "Est-ce que ce magasin vend des vélos ?",
- "gl": "Esta tenda vende bicicletas?",
- "de": "Verkauft dieser Laden Fahrräder?",
- "it": "Questo negozio vende bici?",
- "ru": "Продаются ли велосипеды в этом магазине?",
- "pt_BR": "Esta loja vende bicicletas?"
- },
- "mappings": [
- {
- "if": "service:bicycle:retail=yes",
- "then": {
- "en": "This shop sells bikes",
- "nl": "Deze winkel verkoopt fietsen",
- "fr": "Ce magasin vend des vélos",
- "gl": "Esta tenda vende bicicletas",
- "de": "Dieses Geschäft verkauft Fahrräder",
- "it": "Questo negozio vende bici",
- "ru": "В этом магазине продаются велосипеды",
- "pt_BR": "Esta loja vende bicicletas"
- }
- },
- {
- "if": "service:bicycle:retail=no",
- "then": {
- "en": "This shop doesn't sell bikes",
- "nl": "Deze winkel verkoopt geen fietsen",
- "fr": "Ce magasin ne vend pas de vélo",
- "gl": "Esta tenda non vende bicicletas",
- "de": "Dieses Geschäft verkauft keine Fahrräder",
- "it": "Questo negozio non vende bici",
- "ru": "В этом магазине не продают велосипеды",
- "pt_BR": "Esta loja não vende bicicletas"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does this shop repair bikes?",
- "nl": "Herstelt deze winkel fietsen?",
- "fr": "Est-ce que ce magasin répare des vélos ?",
- "gl": "Esta tenda arranxa bicicletas?",
- "de": "Repariert dieses Geschäft Fahrräder?",
- "it": "Questo negozio ripara bici?",
- "ru": "В этом магазине ремонтируют велосипеды?",
- "pt_BR": "Esta loja conserta bicicletas?"
- },
- "mappings": [
- {
- "if": "service:bicycle:repair=yes",
- "then": {
- "en": "This shop repairs bikes",
- "nl": "Deze winkel herstelt fietsen",
- "fr": "Ce magasin répare des vélos",
- "gl": "Esta tenda arranxa bicicletas",
- "de": "Dieses Geschäft repariert Fahrräder",
- "it": "Questo negozio ripara bici",
- "ru": "Этот магазин ремонтирует велосипеды",
- "pt_BR": "Esta loja conserta bicicletas"
- }
- },
- {
- "if": "service:bicycle:repair=no",
- "then": {
- "en": "This shop doesn't repair bikes",
- "nl": "Deze winkel herstelt geen fietsen",
- "fr": "Ce magasin ne répare pas les vélos",
- "gl": "Esta tenda non arranxa bicicletas",
- "de": "Dieses Geschäft repariert keine Fahrräder",
- "it": "Questo negozio non ripara bici",
- "ru": "Этот магазин не ремонтирует велосипеды",
- "pt_BR": "Esta loja não conserta bicicletas"
- }
- },
- {
- "if": "service:bicycle:repair=only_sold",
- "then": {
- "en": "This shop only repairs bikes bought here",
- "nl": "Deze winkel herstelt enkel fietsen die hier werden gekocht",
- "fr": "Ce magasin ne répare seulement les vélos achetés là-bas",
- "gl": "Esta tenda só arranxa bicicletas mercadas aquí",
- "de": "Dieses Geschäft repariert nur hier gekaufte Fahrräder",
- "it": "Questo negozio ripara solo le bici che sono state acquistate qua",
- "ru": "Этот магазин ремонтирует только велосипеды, купленные здесь",
- "pt_BR": "Esta loja conserta bicicletas compradas aqui"
- }
- },
- {
- "if": "service:bicycle:repair=brand",
- "then": {
- "en": "This shop only repairs bikes of a certain brand",
- "nl": "Deze winkel herstelt enkel fietsen van een bepaald merk",
- "fr": "Ce magasin ne répare seulement des marques spécifiques",
- "gl": "Esta tenda só arranxa bicicletas dunha certa marca",
- "de": "Dieses Geschäft repariert nur Fahrräder einer bestimmten Marke",
- "it": "Questo negozio ripara solo le biciclette di una certa marca",
- "ru": "В этом магазине обслуживают велосипеды определённого бренда",
- "pt_BR": "Esta loja conserta bicicletas de uma certa marca"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does this shop rent out bikes?",
- "nl": "Verhuurt deze winkel fietsen?",
- "fr": "Est-ce ce magasin loue des vélos ?",
- "gl": "Esta tenda aluga bicicletas?",
- "de": "Vermietet dieser Laden Fahrräder?",
- "it": "Questo negozio noleggia le bici?",
- "ru": "Этот магазин сдает велосипеды в аренду?",
- "pt_BR": "Esta loja aluga bicicletas?"
- },
- "mappings": [
- {
- "if": "service:bicycle:rental=yes",
- "then": {
- "en": "This shop rents out bikes",
- "nl": "Deze winkel verhuurt fietsen",
- "fr": "Ce magasin loue des vélos",
- "gl": "Esta tenda aluga bicicletas",
- "de": "Dieses Geschäft vermietet Fahrräder",
- "it": "Questo negozio noleggia le bici",
- "ru": "Этот магазин сдает велосипеды в аренду",
- "pt_BR": "Esta loja aluga bicicletas"
- }
- },
- {
- "if": "service:bicycle:rental=no",
- "then": {
- "en": "This shop doesn't rent out bikes",
- "nl": "Deze winkel verhuurt geen fietsen",
- "fr": "Ce magasin ne loue pas de vélos",
- "gl": "Esta tenda non aluga bicicletas",
- "de": "Dieses Geschäft vermietet keine Fahrräder",
- "it": "Questo negozio non noleggia le bici",
- "ru": "Этот магазин не сдает велосипеды напрокат",
- "pt_BR": "Esta loja não aluga bicicletas"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does this shop sell second-hand bikes?",
- "nl": "Verkoopt deze winkel tweedehands fietsen?",
- "fr": "Est-ce ce magasin vend des vélos d'occasion ?",
- "gl": "Esta tenda vende bicicletas de segunda man?",
- "de": "Verkauft dieses Geschäft gebrauchte Fahrräder?",
- "it": "Questo negozio vende bici usate?",
- "ru": "В этом магазине продаются подержанные велосипеды?"
- },
- "mappings": [
- {
- "if": "service:bicycle:second_hand=yes",
- "then": {
- "en": "This shop sells second-hand bikes",
- "nl": "Deze winkel verkoopt tweedehands fietsen",
- "fr": "Ce magasin vend des vélos d'occasion",
- "gl": "Esta tenda vende bicicletas de segunda man",
- "de": "Dieses Geschäft verkauft gebrauchte Fahrräder",
- "it": "Questo negozio vende bici usate",
- "ru": "В этом магазине продаются подержанные велосипеды"
- }
- },
- {
- "if": "service:bicycle:second_hand=no",
- "then": {
- "en": "This shop doesn't sell second-hand bikes",
- "nl": "Deze winkel verkoopt geen tweedehands fietsen",
- "fr": "Ce magasin ne vend pas de vélos d'occasion",
- "gl": "Esta tenda non vende bicicletas de segunda man",
- "de": "Dieses Geschäft verkauft keine gebrauchten Fahrräder",
- "it": "Questo negozio non vende bici usate",
- "ru": "В этом магазине не продаются подержанные велосипеды"
- }
- },
- {
- "if": "service:bicycle:second_hand=only",
- "then": {
- "en": "This shop only sells second-hand bikes",
- "nl": "Deze winkel verkoopt enkel tweedehands fietsen",
- "fr": "Ce magasin vend seulement des vélos d'occasion",
- "gl": "Esta tenda só vende bicicletas de segunda man",
- "de": "Dieses Geschäft verkauft nur gebrauchte Fahrräder",
- "it": "Questo negozio vende solamente bici usate",
- "ru": "В этом магазине продаются только подержанные велосипеды"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does this shop offer a bike pump for use by anyone?",
- "nl": "Biedt deze winkel een fietspomp aan voor iedereen?",
- "fr": "Est-ce que ce magasin offre une pompe en accès libre ?",
- "gl": "Esta tenda ofrece unha bomba de ar para uso de calquera persoa?",
- "de": "Bietet dieses Geschäft eine Fahrradpumpe zur Benutzung für alle an?",
- "it": "Questo negozio offre l’uso a chiunque di una pompa per bici?",
- "ru": "Предлагается ли в этом магазине велосипедный насос для всеобщего пользования?"
- },
- "mappings": [
- {
- "if": "service:bicycle:pump=yes",
- "then": {
- "en": "This shop offers a bike pump for anyone",
- "nl": "Deze winkel biedt een fietspomp aan voor iedereen",
- "fr": "Ce magasin offre une pompe en acces libre",
- "gl": "Esta tenda ofrece unha bomba de ar para uso de calquera persoa",
- "de": "Dieses Geschäft bietet eine Fahrradpumpe für alle an",
- "it": "Questo negozio offre l’uso pubblico di una pompa per bici",
- "ru": "В этом магазине есть велосипедный насос для всеобщего пользования"
- }
- },
- {
- "if": "service:bicycle:pump=no",
- "then": {
- "en": "This shop doesn't offer a bike pump for anyone",
- "nl": "Deze winkel biedt geen fietspomp aan voor eender wie",
- "fr": "Ce magasin n'offre pas de pompe en libre accès",
- "gl": "Esta tenda non ofrece unha bomba de ar para uso de calquera persoa",
- "de": "Dieses Geschäft bietet für niemanden eine Fahrradpumpe an",
- "it": "Questo negozio non offre l’uso pubblico di una pompa per bici",
- "ru": "В этом магазине нет велосипедного насоса для всеобщего пользования"
- }
- },
- {
- "if": "service:bicycle:pump=separate",
- "then": {
- "en": "There is bicycle pump, it is shown as a separate point ",
- "nl": "Er is een fietspomp, deze is apart aangeduid",
- "fr": "Il y a une pompe à vélo, c'est indiqué comme un point séparé ",
- "it": "C’è una pompa per bici, è mostrata come punto separato "
- }
- }
- ]
- },
- {
- "question": {
- "en": "Are there tools here to repair your own bike?",
- "nl": "Biedt deze winkel gereedschap aan om je fiets zelf te herstellen?",
- "fr": "Est-ce qu'il y a des outils pour réparer son vélo dans ce magasin ?",
- "gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta?",
- "de": "Gibt es hier Werkzeuge, um das eigene Fahrrad zu reparieren?",
- "it": "Sono presenti degli attrezzi per riparare la propria bici?",
- "ru": "Есть ли здесь инструменты для починки собственного велосипеда?"
- },
- "mappings": [
- {
- "if": "service:bicycle:diy=yes",
- "then": {
- "en": "This shop offers tools for DIY repair",
- "nl": "Deze winkel biedt gereedschap aan om je fiets zelf te herstellen",
- "fr": "Ce magasin offre des outils pour réparer son vélo soi-même",
- "gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta",
- "de": "Dieses Geschäft bietet Werkzeuge für die Heimwerkerreparatur an",
- "it": "Questo negozio offre degli attrezzi per la riparazione fai-da-te"
- }
- },
- {
- "if": "service:bicycle:diy=no",
- "then": {
- "en": "This shop doesn't offer tools for DIY repair",
- "nl": "Deze winkel biedt geen gereedschap aan om je fiets zelf te herstellen",
- "fr": "Ce magasin n'offre pas des outils pour réparer son vélo soi-même",
- "gl": "Non hai ferramentas aquí para arranxar a túa propia bicicleta",
- "de": "Dieses Geschäft bietet keine Werkzeuge für Heimwerkerreparaturen an",
- "it": "Questo negozio non offre degli attrezzi per la riparazione fai-da-te"
- }
- },
- {
- "if": "service:bicycle:diy=only_sold",
- "then": {
- "en": "Tools for DIY repair are only available if you bought/hire the bike in the shop",
- "nl": "Het gereedschap aan om je fiets zelf te herstellen is enkel voor als je de fiets er kocht of huurt",
- "fr": "Des outils d'auto-réparation sont disponibles uniquement si vous avez acheté ou loué le vélo dans ce magasin",
- "it": "Gli attrezzi per la riparazione fai-da-te sono disponibili solamente se hai acquistato/noleggiato la bici nel negozio",
- "de": "Werkzeuge für die Selbstreparatur sind nur verfügbar, wenn Sie das Fahrrad im Laden gekauft/gemietet haben",
- "ru": "Инструменты для починки доступны только при покупке/аренде велосипеда в магазине"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Are bicycles washed here?",
- "nl": "Biedt deze winkel een fietsschoonmaak aan?",
- "fr": "Lave-t-on les vélos ici ?",
- "it": "Vengono lavate le bici qua?",
- "ru": "Здесь моют велосипеды?",
- "de": "Werden hier Fahrräder gewaschen?"
- },
- "mappings": [
- {
- "if": "service:bicycle:cleaning=yes",
- "then": {
- "en": "This shop cleans bicycles",
- "nl": "Deze winkel biedt fietsschoonmaak aan",
- "fr": "Ce magasin lave les vélos",
- "it": "Questo negozio lava le biciclette",
- "de": "Dieses Geschäft reinigt Fahrräder",
- "ru": "В этом магазине оказываются услуги мойки/чистки велосипедов"
- }
- },
- {
- "if": "service:bicycle:cleaning=diy",
- "then": {
- "en": "This shop has an installation where one can clean bicycles themselves",
- "nl": "Deze winkel biedt een installatie aan om zelf je fiets schoon te maken",
- "fr": "Ce magasin a une installation pour laver soi même des vélos",
- "it": "Questo negozio ha una struttura dove è possibile pulire la propria bici",
- "de": "Dieser Laden hat eine Anlage, in der man Fahrräder selbst reinigen kann"
- }
- },
- {
- "if": "service:bicycle:cleaning=no",
- "then": {
- "en": "This shop doesn't offer bicycle cleaning",
- "nl": "Deze winkel biedt geen fietsschoonmaak aan",
- "fr": "Ce magasin ne fait pas le nettoyage de vélo",
- "it": "Questo negozio non offre la pulizia della bicicletta",
- "de": "Dieser Laden bietet keine Fahrradreinigung an",
- "ru": "В этом магазине нет услуг мойки/чистки велосипедов"
- }
- }
- ]
- }
- ],
- "presets": [
- {
- "title": {
+ "id": "bike_shop",
+ "name": {
"en": "Bike repair/shop",
"nl": "Fietszaak",
- "fr": "Magasin et réparateur de vélo",
+ "fr": "Magasin ou réparateur de vélo",
"gl": "Tenda/arranxo de bicicletas",
"de": "Fahrradwerkstatt/geschäft",
- "it": "Negozio/riparatore di bici",
- "ru": "Обслуживание велосипедов/магазин"
- },
- "tags": [
- "shop=bicycle"
- ]
- }
- ],
- "icon": {
- "render": "./assets/layers/bike_shop/repair_shop.svg",
- "mappings": [
- {
- "if": "operator=De Fietsambassade Gent",
- "then": "./assets/themes/cyclofix/fietsambassade_gent_logo_small.svg"
- },
- {
- "if": "service:bicycle:retail=yes",
- "then": "./assets/layers/bike_shop/shop.svg"
- }
- ]
- },
- "iconOverlays": [
- {
- "if": "opening_hours~*",
- "then": "isOpen",
- "badge": true
+ "it": "Venditore/riparatore bici",
+ "ru": "Обслуживание велосипедов/магазин",
+ "pt_BR": "Reparo/loja de bicicletas"
},
- {
- "if": "service:bicycle:pump=yes",
- "then": "circle:#e2783d;./assets/layers/bike_repair_station/pump.svg",
- "badge": true
- }
- ],
- "width": {
- "render": "1"
- },
- "iconSize": {
- "render": "50,50,bottom"
- },
- "color": {
- "render": "#c00"
- },
- "wayHandling": 2
+ "minzoom": 13,
+ "source": {
+ "osmTags": {
+ "#": "We select all bicycle shops, sport shops (but we try to weed out non-bicycle related shops), and any shop with a bicycle related tag",
+ "or": [
+ "shop=bicycle",
+ {
+ "#": "A bicycle rental with a network is something such as villo, bluebike, ... We don't want them",
+ "and": [
+ "amenity=bicycle_rental",
+ "network="
+ ]
+ },
+ {
+ "#": "if sport is defined and is not bicycle, it is retrackted; if bicycle retail/repair is marked as 'no', it is retracted too.",
+ "##": "There will be a few false-positives with this. They will get filtered out by people marking both 'not selling bikes' and 'not repairing bikes'. Furthermore, the OSMers will add a sports-subcategory on it",
+ "and": [
+ "shop=sports",
+ "service:bicycle:retail!=no",
+ "service:bicycle:repair!=no",
+ {
+ "or": [
+ "sport=bicycle",
+ "sport=cycling",
+ "sport="
+ ]
+ }
+ ]
+ },
+ {
+ "#": "Any shop with any bicycle service",
+ "and": [
+ "shop~*",
+ "service:bicycle:.*~~.*"
+ ]
+ }
+ ]
+ }
+ },
+ "title": {
+ "render": {
+ "en": "Bike repair/shop",
+ "nl": "Fietszaak",
+ "fr": "Magasin ou réparateur de vélo",
+ "gl": "Tenda/arranxo de bicicletas",
+ "de": "Fahrradwerkstatt/geschäft",
+ "it": "Venditore/riparatore bici",
+ "ru": "Обслуживание велосипедов/магазин",
+ "pt_BR": "Reparo/loja de bicicletas"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "shop=sports"
+ ]
+ },
+ "then": {
+ "en": "Sport gear shop {name}",
+ "nl": "Sportwinkel {name}",
+ "fr": "Magasin de sport {name}",
+ "it": "Negozio di articoli sportivi {name}",
+ "ru": "Магазин спортивного инвентаря {name}",
+ "de": "Sportartikelgeschäft {name}",
+ "pt_BR": "Loja de equipamentos esportivos {name}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "shop!~.*bicycle.*",
+ "shop~*"
+ ]
+ },
+ "then": "Other shop"
+ },
+ {
+ "if": {
+ "and": [
+ {
+ "or": [
+ "service:bicycle:rental=yes",
+ "amenity=bicycle_rental"
+ ]
+ }
+ ]
+ },
+ "then": {
+ "nl": "Fietsverhuur {name}",
+ "en": "Bicycle rental {name}",
+ "fr": "Location de vélo {name}",
+ "it": "Noleggio di biciclette {name}",
+ "ru": "Прокат велосипедов {name}",
+ "de": "Fahrradverleih{name}",
+ "pt_BR": "Aluguel de bicicletas {name}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:retail!~yes",
+ "service:bicycle:repair=yes"
+ ]
+ },
+ "then": {
+ "en": "Bike repair {name}",
+ "nl": "Fietsenmaker {name}",
+ "fr": "Réparateur de vélo {name}",
+ "gl": "Arranxo de bicicletas {name}",
+ "de": "Fahrradwerkstatt {name}",
+ "it": "Riparazione biciclette {name",
+ "ru": "Ремонт велосипедов {name}",
+ "pt_BR": "Reparo de bicicletas {name}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "service:bicycle:repair!~yes"
+ ]
+ },
+ "then": {
+ "en": "Bike shop {name}",
+ "nl": "Fietswinkel {name}",
+ "fr": "Magasin de vélo {name}",
+ "gl": "Tenda de bicicletas {name}",
+ "de": "Fahrradgeschäft {name}",
+ "it": "Negozio di biciclette {name}",
+ "ru": "Магазин велосипедов {name}",
+ "pt_BR": "Loja de bicicletas {name}"
+ }
+ },
+ {
+ "if": "name~*",
+ "then": {
+ "en": "Bike repair/shop {name}",
+ "nl": "Fietszaak {name}",
+ "fr": "Magasin ou réparateur de vélo {name}",
+ "gl": "Tenda/arranxo de bicicletas {name}",
+ "de": "Fahrradwerkstatt/geschäft {name}",
+ "it": "Venditore/riparatore bici {name}",
+ "pt_BR": "Loja/reparo de bicicletas {name}"
+ }
+ }
+ ]
+ },
+ "titleIcons": [
+ {
+ "render": "",
+ "condition": "operator=De Fietsambassade Gent"
+ },
+ {
+ "condition": {
+ "or": [
+ "service:bicycle:pump=yes",
+ "service:bicycle:pump=separate"
+ ]
+ },
+ "render": ""
+ },
+ {
+ "condition": "service:bicycle:diy=yes",
+ "render": ""
+ },
+ "defaults"
+ ],
+ "description": {
+ "en": "A shop specifically selling bicycles or related items",
+ "nl": "Een winkel die hoofdzakelijk fietsen en fietstoebehoren verkoopt",
+ "fr": "Un magasin vendant spécifiquement des vélos ou des objets en lien",
+ "it": "Un negozio che vende specificatamente biciclette o articoli similari",
+ "ru": "Магазин, специализирующийся на продаже велосипедов или сопутствующих товаров",
+ "pt_BR": "Uma loja que vende especificamente bicicletas ou itens relacionados"
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "condition": {
+ "and": [
+ "shop~*",
+ "shop!~bicycle",
+ "shop!~sports"
+ ]
+ },
+ "render": {
+ "en": "This shop is specialized in selling {shop} and does bicycle related activities",
+ "nl": "Deze winkel verkoopt {shop} en heeft fiets-gerelateerde activiteiten.",
+ "fr": "Ce magasin est spécialisé dans la vente de {shop} et a des activités liées au vélo",
+ "it": "Questo negozio è specializzato nella vendita di {shop} ed effettua attività relative alle biciclette",
+ "pt_BR": "Esta loja é especializada em vender {shop} e faz atividades relacionadas à bicicletas"
+ }
+ },
+ {
+ "question": {
+ "en": "What is the name of this bicycle shop?",
+ "nl": "Wat is de naam van deze fietszaak?",
+ "fr": "Quel est le nom du magasin de vélos ?",
+ "gl": "Cal é o nome desta tenda de bicicletas?",
+ "de": "Wie heißt dieser Fahrradladen?",
+ "it": "Qual è il nome di questo negozio di biciclette?",
+ "ru": "Как называется магазин велосипедов?",
+ "pt_BR": "Qual o nome desta loja de bicicletas?"
+ },
+ "render": {
+ "en": "This bicycle shop is called {name}",
+ "nl": "Deze fietszaak heet {name}",
+ "fr": "Ce magasin s'appelle {name}",
+ "gl": "Esta tenda de bicicletas chámase {name}",
+ "de": "Dieses Fahrradgeschäft heißt {name}",
+ "it": "Questo negozio di biciclette è chiamato {name}",
+ "ru": "Этот магазин велосипедов называется {name}",
+ "pt_BR": "Esta loja de bicicletas se chama {nome}"
+ },
+ "freeform": {
+ "key": "name"
+ }
+ },
+ {
+ "question": {
+ "en": "What is the website of {name}?",
+ "nl": "Wat is de website van {name}?",
+ "fr": "Quel est le site web de {name} ?",
+ "gl": "Cal é a páxina web de {name}?",
+ "it": "Qual è il sito web di {name}?",
+ "ru": "Какой сайт у {name}?",
+ "id": "URL {name} apa?",
+ "de": "Was ist die Webseite von {name}?",
+ "pt_BR": "Qual o website de {name}?"
+ },
+ "render": "{website}",
+ "freeform": {
+ "key": "website",
+ "type": "url"
+ }
+ },
+ {
+ "question": {
+ "en": "What is the phone number of {name}?",
+ "nl": "Wat is het telefoonnummer van {name}?",
+ "fr": "Quel est le numéro de téléphone de {name} ?",
+ "gl": "Cal é o número de teléfono de {name}?",
+ "it": "Qual è il numero di telefono di {name}?",
+ "ru": "Какой номер телефона у {name}?",
+ "de": "Wie lautet die Telefonnummer von {name}?",
+ "pt_BR": "Qual o número de telefone de {name}?"
+ },
+ "render": "{phone}",
+ "freeform": {
+ "key": "phone",
+ "type": "phone"
+ }
+ },
+ {
+ "question": {
+ "en": "What is the email address of {name}?",
+ "nl": "Wat is het email-adres van {name}?",
+ "fr": "Quelle est l'adresse électronique de {name} ?",
+ "gl": "Cal é o enderezo de correo electrónico de {name}?",
+ "it": "Qual è l’indirizzo email di {name}?",
+ "ru": "Какой адрес электронной почты у {name}?",
+ "de": "Wie lautet die E-Mail-Adresse von {name}?",
+ "pt_BR": "Qual o endereço de email de {name}?"
+ },
+ "render": "{email}",
+ "freeform": {
+ "key": "email",
+ "type": "email"
+ }
+ },
+ {
+ "render": "{opening_hours_table(opening_hours)}",
+ "question": "When is this shop opened?",
+ "freeform": {
+ "key": "opening_hours",
+ "type": "opening_hours"
+ }
+ },
+ "description",
+ {
+ "render": "Enkel voor {access}",
+ "freeform": {
+ "key": "access"
+ }
+ },
+ {
+ "question": {
+ "en": "Does this shop sell bikes?",
+ "nl": "Verkoopt deze fietszaak fietsen?",
+ "fr": "Est-ce que ce magasin vend des vélos ?",
+ "gl": "Esta tenda vende bicicletas?",
+ "de": "Verkauft dieser Laden Fahrräder?",
+ "it": "Questo negozio vende bici?",
+ "ru": "Продаются ли велосипеды в этом магазине?",
+ "pt_BR": "Esta loja vende bicicletas?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:retail=yes",
+ "then": {
+ "en": "This shop sells bikes",
+ "nl": "Deze winkel verkoopt fietsen",
+ "fr": "Ce magasin vend des vélos",
+ "gl": "Esta tenda vende bicicletas",
+ "de": "Dieses Geschäft verkauft Fahrräder",
+ "it": "Questo negozio vende bici",
+ "ru": "В этом магазине продаются велосипеды",
+ "pt_BR": "Esta loja vende bicicletas"
+ }
+ },
+ {
+ "if": "service:bicycle:retail=no",
+ "then": {
+ "en": "This shop doesn't sell bikes",
+ "nl": "Deze winkel verkoopt geen fietsen",
+ "fr": "Ce magasin ne vend pas de vélo",
+ "gl": "Esta tenda non vende bicicletas",
+ "de": "Dieses Geschäft verkauft keine Fahrräder",
+ "it": "Questo negozio non vende bici",
+ "ru": "В этом магазине не продают велосипеды",
+ "pt_BR": "Esta loja não vende bicicletas"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does this shop repair bikes?",
+ "nl": "Herstelt deze winkel fietsen?",
+ "fr": "Est-ce que ce magasin répare des vélos ?",
+ "gl": "Esta tenda arranxa bicicletas?",
+ "de": "Repariert dieses Geschäft Fahrräder?",
+ "it": "Questo negozio ripara bici?",
+ "ru": "В этом магазине ремонтируют велосипеды?",
+ "pt_BR": "Esta loja conserta bicicletas?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:repair=yes",
+ "then": {
+ "en": "This shop repairs bikes",
+ "nl": "Deze winkel herstelt fietsen",
+ "fr": "Ce magasin répare des vélos",
+ "gl": "Esta tenda arranxa bicicletas",
+ "de": "Dieses Geschäft repariert Fahrräder",
+ "it": "Questo negozio ripara bici",
+ "ru": "Этот магазин ремонтирует велосипеды",
+ "pt_BR": "Esta loja conserta bicicletas"
+ }
+ },
+ {
+ "if": "service:bicycle:repair=no",
+ "then": {
+ "en": "This shop doesn't repair bikes",
+ "nl": "Deze winkel herstelt geen fietsen",
+ "fr": "Ce magasin ne répare pas les vélos",
+ "gl": "Esta tenda non arranxa bicicletas",
+ "de": "Dieses Geschäft repariert keine Fahrräder",
+ "it": "Questo negozio non ripara bici",
+ "ru": "Этот магазин не ремонтирует велосипеды",
+ "pt_BR": "Esta loja não conserta bicicletas"
+ }
+ },
+ {
+ "if": "service:bicycle:repair=only_sold",
+ "then": {
+ "en": "This shop only repairs bikes bought here",
+ "nl": "Deze winkel herstelt enkel fietsen die hier werden gekocht",
+ "fr": "Ce magasin ne répare seulement les vélos achetés là-bas",
+ "gl": "Esta tenda só arranxa bicicletas mercadas aquí",
+ "de": "Dieses Geschäft repariert nur hier gekaufte Fahrräder",
+ "it": "Questo negozio ripara solo le bici che sono state acquistate qua",
+ "ru": "Этот магазин ремонтирует только велосипеды, купленные здесь",
+ "pt_BR": "Esta loja conserta bicicletas compradas aqui"
+ }
+ },
+ {
+ "if": "service:bicycle:repair=brand",
+ "then": {
+ "en": "This shop only repairs bikes of a certain brand",
+ "nl": "Deze winkel herstelt enkel fietsen van een bepaald merk",
+ "fr": "Ce magasin ne répare seulement des marques spécifiques",
+ "gl": "Esta tenda só arranxa bicicletas dunha certa marca",
+ "de": "Dieses Geschäft repariert nur Fahrräder einer bestimmten Marke",
+ "it": "Questo negozio ripara solo le biciclette di una certa marca",
+ "ru": "В этом магазине обслуживают велосипеды определённого бренда",
+ "pt_BR": "Esta loja conserta bicicletas de uma certa marca"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does this shop rent out bikes?",
+ "nl": "Verhuurt deze winkel fietsen?",
+ "fr": "Est-ce ce magasin loue des vélos ?",
+ "gl": "Esta tenda aluga bicicletas?",
+ "de": "Vermietet dieser Laden Fahrräder?",
+ "it": "Questo negozio noleggia le bici?",
+ "ru": "Этот магазин сдает велосипеды в аренду?",
+ "pt_BR": "Esta loja aluga bicicletas?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:rental=yes",
+ "then": {
+ "en": "This shop rents out bikes",
+ "nl": "Deze winkel verhuurt fietsen",
+ "fr": "Ce magasin loue des vélos",
+ "gl": "Esta tenda aluga bicicletas",
+ "de": "Dieses Geschäft vermietet Fahrräder",
+ "it": "Questo negozio noleggia le bici",
+ "ru": "Этот магазин сдает велосипеды в аренду",
+ "pt_BR": "Esta loja aluga bicicletas"
+ }
+ },
+ {
+ "if": "service:bicycle:rental=no",
+ "then": {
+ "en": "This shop doesn't rent out bikes",
+ "nl": "Deze winkel verhuurt geen fietsen",
+ "fr": "Ce magasin ne loue pas de vélos",
+ "gl": "Esta tenda non aluga bicicletas",
+ "de": "Dieses Geschäft vermietet keine Fahrräder",
+ "it": "Questo negozio non noleggia le bici",
+ "ru": "Этот магазин не сдает велосипеды напрокат",
+ "pt_BR": "Esta loja não aluga bicicletas"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does this shop sell second-hand bikes?",
+ "nl": "Verkoopt deze winkel tweedehands fietsen?",
+ "fr": "Est-ce ce magasin vend des vélos d'occasion ?",
+ "gl": "Esta tenda vende bicicletas de segunda man?",
+ "de": "Verkauft dieses Geschäft gebrauchte Fahrräder?",
+ "it": "Questo negozio vende bici usate?",
+ "ru": "В этом магазине продаются подержанные велосипеды?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:second_hand=yes",
+ "then": {
+ "en": "This shop sells second-hand bikes",
+ "nl": "Deze winkel verkoopt tweedehands fietsen",
+ "fr": "Ce magasin vend des vélos d'occasion",
+ "gl": "Esta tenda vende bicicletas de segunda man",
+ "de": "Dieses Geschäft verkauft gebrauchte Fahrräder",
+ "it": "Questo negozio vende bici usate",
+ "ru": "В этом магазине продаются подержанные велосипеды"
+ }
+ },
+ {
+ "if": "service:bicycle:second_hand=no",
+ "then": {
+ "en": "This shop doesn't sell second-hand bikes",
+ "nl": "Deze winkel verkoopt geen tweedehands fietsen",
+ "fr": "Ce magasin ne vend pas de vélos d'occasion",
+ "gl": "Esta tenda non vende bicicletas de segunda man",
+ "de": "Dieses Geschäft verkauft keine gebrauchten Fahrräder",
+ "it": "Questo negozio non vende bici usate",
+ "ru": "В этом магазине не продаются подержанные велосипеды"
+ }
+ },
+ {
+ "if": "service:bicycle:second_hand=only",
+ "then": {
+ "en": "This shop only sells second-hand bikes",
+ "nl": "Deze winkel verkoopt enkel tweedehands fietsen",
+ "fr": "Ce magasin vend seulement des vélos d'occasion",
+ "gl": "Esta tenda só vende bicicletas de segunda man",
+ "de": "Dieses Geschäft verkauft nur gebrauchte Fahrräder",
+ "it": "Questo negozio vende solamente bici usate",
+ "ru": "В этом магазине продаются только подержанные велосипеды"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does this shop offer a bike pump for use by anyone?",
+ "nl": "Biedt deze winkel een fietspomp aan voor iedereen?",
+ "fr": "Est-ce que ce magasin offre une pompe en accès libre ?",
+ "gl": "Esta tenda ofrece unha bomba de ar para uso de calquera persoa?",
+ "de": "Bietet dieses Geschäft eine Fahrradpumpe zur Benutzung für alle an?",
+ "it": "Questo negozio offre l’uso a chiunque di una pompa per bici?",
+ "ru": "Предлагается ли в этом магазине велосипедный насос для всеобщего пользования?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:pump=yes",
+ "then": {
+ "en": "This shop offers a bike pump for anyone",
+ "nl": "Deze winkel biedt een fietspomp aan voor iedereen",
+ "fr": "Ce magasin offre une pompe en acces libre",
+ "gl": "Esta tenda ofrece unha bomba de ar para uso de calquera persoa",
+ "de": "Dieses Geschäft bietet eine Fahrradpumpe für alle an",
+ "it": "Questo negozio offre l’uso pubblico di una pompa per bici",
+ "ru": "В этом магазине есть велосипедный насос для всеобщего пользования"
+ }
+ },
+ {
+ "if": "service:bicycle:pump=no",
+ "then": {
+ "en": "This shop doesn't offer a bike pump for anyone",
+ "nl": "Deze winkel biedt geen fietspomp aan voor eender wie",
+ "fr": "Ce magasin n'offre pas de pompe en libre accès",
+ "gl": "Esta tenda non ofrece unha bomba de ar para uso de calquera persoa",
+ "de": "Dieses Geschäft bietet für niemanden eine Fahrradpumpe an",
+ "it": "Questo negozio non offre l’uso pubblico di una pompa per bici",
+ "ru": "В этом магазине нет велосипедного насоса для всеобщего пользования"
+ }
+ },
+ {
+ "if": "service:bicycle:pump=separate",
+ "then": {
+ "en": "There is bicycle pump, it is shown as a separate point ",
+ "nl": "Er is een fietspomp, deze is apart aangeduid",
+ "fr": "Il y a une pompe à vélo, c'est indiqué comme un point séparé ",
+ "it": "C’è una pompa per bici, è mostrata come punto separato "
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Are there tools here to repair your own bike?",
+ "nl": "Biedt deze winkel gereedschap aan om je fiets zelf te herstellen?",
+ "fr": "Est-ce qu'il y a des outils pour réparer son vélo dans ce magasin ?",
+ "gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta?",
+ "de": "Gibt es hier Werkzeuge, um das eigene Fahrrad zu reparieren?",
+ "it": "Sono presenti degli attrezzi per riparare la propria bici?",
+ "ru": "Есть ли здесь инструменты для починки собственного велосипеда?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:diy=yes",
+ "then": {
+ "en": "This shop offers tools for DIY repair",
+ "nl": "Deze winkel biedt gereedschap aan om je fiets zelf te herstellen",
+ "fr": "Ce magasin offre des outils pour réparer son vélo soi-même",
+ "gl": "Hai ferramentas aquí para arranxar a túa propia bicicleta",
+ "de": "Dieses Geschäft bietet Werkzeuge für die Heimwerkerreparatur an",
+ "it": "Questo negozio offre degli attrezzi per la riparazione fai-da-te"
+ }
+ },
+ {
+ "if": "service:bicycle:diy=no",
+ "then": {
+ "en": "This shop doesn't offer tools for DIY repair",
+ "nl": "Deze winkel biedt geen gereedschap aan om je fiets zelf te herstellen",
+ "fr": "Ce magasin n'offre pas des outils pour réparer son vélo soi-même",
+ "gl": "Non hai ferramentas aquí para arranxar a túa propia bicicleta",
+ "de": "Dieses Geschäft bietet keine Werkzeuge für Heimwerkerreparaturen an",
+ "it": "Questo negozio non offre degli attrezzi per la riparazione fai-da-te"
+ }
+ },
+ {
+ "if": "service:bicycle:diy=only_sold",
+ "then": {
+ "en": "Tools for DIY repair are only available if you bought/hire the bike in the shop",
+ "nl": "Het gereedschap aan om je fiets zelf te herstellen is enkel voor als je de fiets er kocht of huurt",
+ "fr": "Des outils d'auto-réparation sont disponibles uniquement si vous avez acheté ou loué le vélo dans ce magasin",
+ "it": "Gli attrezzi per la riparazione fai-da-te sono disponibili solamente se hai acquistato/noleggiato la bici nel negozio",
+ "de": "Werkzeuge für die Selbstreparatur sind nur verfügbar, wenn Sie das Fahrrad im Laden gekauft/gemietet haben",
+ "ru": "Инструменты для починки доступны только при покупке/аренде велосипеда в магазине"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Are bicycles washed here?",
+ "nl": "Biedt deze winkel een fietsschoonmaak aan?",
+ "fr": "Lave-t-on les vélos ici ?",
+ "it": "Vengono lavate le bici qua?",
+ "ru": "Здесь моют велосипеды?",
+ "de": "Werden hier Fahrräder gewaschen?"
+ },
+ "mappings": [
+ {
+ "if": "service:bicycle:cleaning=yes",
+ "then": {
+ "en": "This shop cleans bicycles",
+ "nl": "Deze winkel biedt fietsschoonmaak aan",
+ "fr": "Ce magasin lave les vélos",
+ "it": "Questo negozio lava le biciclette",
+ "de": "Dieses Geschäft reinigt Fahrräder",
+ "ru": "В этом магазине оказываются услуги мойки/чистки велосипедов"
+ }
+ },
+ {
+ "if": "service:bicycle:cleaning=diy",
+ "then": {
+ "en": "This shop has an installation where one can clean bicycles themselves",
+ "nl": "Deze winkel biedt een installatie aan om zelf je fiets schoon te maken",
+ "fr": "Ce magasin a une installation pour laver soi même des vélos",
+ "it": "Questo negozio ha una struttura dove è possibile pulire la propria bici",
+ "de": "Dieser Laden hat eine Anlage, in der man Fahrräder selbst reinigen kann"
+ }
+ },
+ {
+ "if": "service:bicycle:cleaning=no",
+ "then": {
+ "en": "This shop doesn't offer bicycle cleaning",
+ "nl": "Deze winkel biedt geen fietsschoonmaak aan",
+ "fr": "Ce magasin ne fait pas le nettoyage de vélo",
+ "it": "Questo negozio non offre la pulizia della bicicletta",
+ "de": "Dieser Laden bietet keine Fahrradreinigung an",
+ "ru": "В этом магазине нет услуг мойки/чистки велосипедов"
+ }
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "title": {
+ "en": "Bike repair/shop",
+ "nl": "Fietszaak",
+ "fr": "Magasin et réparateur de vélo",
+ "gl": "Tenda/arranxo de bicicletas",
+ "de": "Fahrradwerkstatt/geschäft",
+ "it": "Negozio/riparatore di bici",
+ "ru": "Обслуживание велосипедов/магазин"
+ },
+ "tags": [
+ "shop=bicycle"
+ ]
+ }
+ ],
+ "icon": {
+ "render": "./assets/layers/bike_shop/repair_shop.svg",
+ "mappings": [
+ {
+ "if": "operator=De Fietsambassade Gent",
+ "then": "./assets/themes/cyclofix/fietsambassade_gent_logo_small.svg"
+ },
+ {
+ "if": "service:bicycle:retail=yes",
+ "then": "./assets/layers/bike_shop/shop.svg"
+ }
+ ]
+ },
+ "iconOverlays": [
+ {
+ "if": "opening_hours~*",
+ "then": "isOpen",
+ "badge": true
+ },
+ {
+ "if": "service:bicycle:pump=yes",
+ "then": "circle:#e2783d;./assets/layers/bike_repair_station/pump.svg",
+ "badge": true
+ }
+ ],
+ "width": {
+ "render": "1"
+ },
+ "iconSize": {
+ "render": "50,50,bottom"
+ },
+ "color": {
+ "render": "#c00"
+ },
+ "wayHandling": 2
}
\ No newline at end of file
diff --git a/assets/layers/bike_themed_object/bike_themed_object.json b/assets/layers/bike_themed_object/bike_themed_object.json
index bae9e790e..527376742 100644
--- a/assets/layers/bike_themed_object/bike_themed_object.json
+++ b/assets/layers/bike_themed_object/bike_themed_object.json
@@ -1,73 +1,73 @@
{
- "id": "bike_themed_object",
- "name": {
- "en": "Bike related object",
- "nl": "Fietsgerelateerd object",
- "fr": "Objet cycliste",
- "de": "Mit Fahrrad zusammenhängendes Objekt",
- "it": "Oggetto relativo alle bici"
- },
- "minzoom": 13,
- "source": {
- "osmTags": {
- "or": [
- "theme=bicycle",
- "theme=cycling",
- "sport=cycling",
- "association=cycling",
- "association=bicycle",
- "ngo=cycling",
- "ngo=bicycle",
- "club=bicycle",
- "club=cycling"
- ]
- }
- },
- "title": {
- "render": {
- "en": "Bike related object",
- "nl": "Fietsgerelateerd object",
- "fr": "Objet cycliste",
- "de": "Mit Fahrrad zusammenhängendes Objekt",
- "it": "Oggetto relativo alle bici"
+ "id": "bike_themed_object",
+ "name": {
+ "en": "Bike related object",
+ "nl": "Fietsgerelateerd object",
+ "fr": "Objet cycliste",
+ "de": "Mit Fahrrad zusammenhängendes Objekt",
+ "it": "Oggetto relativo alle bici"
},
- "mappings": [
- {
- "if": "name~*",
- "then": "{name}"
- },
- {
- "if": "leisure=track",
- "then": {
- "nl": "Wielerpiste",
- "en": "Cycle track",
- "fr": "Piste cyclable",
- "it": "Pista ciclabile",
- "de": "Radweg"
+ "minzoom": 13,
+ "source": {
+ "osmTags": {
+ "or": [
+ "theme=bicycle",
+ "theme=cycling",
+ "sport=cycling",
+ "association=cycling",
+ "association=bicycle",
+ "ngo=cycling",
+ "ngo=bicycle",
+ "club=bicycle",
+ "club=cycling"
+ ]
}
- }
- ]
- },
- "tagRenderings": [
- "images",
- "description",
- "website",
- "email",
- "phone",
- "opening_hours"
- ],
- "icon": {
- "render": "./assets/layers/bike_themed_object/other_services.svg"
- },
- "width": {
- "render": "2"
- },
- "iconSize": {
- "render": "50,50,bottom"
- },
- "color": {
- "render": "#AB76D5"
- },
- "presets": [],
- "wayHandling": 2
+ },
+ "title": {
+ "render": {
+ "en": "Bike related object",
+ "nl": "Fietsgerelateerd object",
+ "fr": "Objet cycliste",
+ "de": "Mit Fahrrad zusammenhängendes Objekt",
+ "it": "Oggetto relativo alle bici"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": "{name}"
+ },
+ {
+ "if": "leisure=track",
+ "then": {
+ "nl": "Wielerpiste",
+ "en": "Cycle track",
+ "fr": "Piste cyclable",
+ "it": "Pista ciclabile",
+ "de": "Radweg"
+ }
+ }
+ ]
+ },
+ "tagRenderings": [
+ "images",
+ "description",
+ "website",
+ "email",
+ "phone",
+ "opening_hours"
+ ],
+ "icon": {
+ "render": "./assets/layers/bike_themed_object/other_services.svg"
+ },
+ "width": {
+ "render": "2"
+ },
+ "iconSize": {
+ "render": "50,50,bottom"
+ },
+ "color": {
+ "render": "#AB76D5"
+ },
+ "presets": [],
+ "wayHandling": 2
}
\ No newline at end of file
diff --git a/assets/layers/binocular/binocular.json b/assets/layers/binocular/binocular.json
index 3c31bcfac..1b2573e29 100644
--- a/assets/layers/binocular/binocular.json
+++ b/assets/layers/binocular/binocular.json
@@ -1,102 +1,102 @@
{
- "id": "binocular",
- "name": {
- "en": "Binoculars",
- "nl": "Verrekijkers"
- },
- "minzoom": 0,
- "title": {
- "render": {
- "en": "Binoculars",
- "nl": "Verrekijker"
- }
- },
- "description": {
- "en": "Binoculas",
- "nl": "Verrekijkers"
- },
- "tagRenderings": [
- "images",
- {
- "mappings": [
- {
- "if": {
- "and": [
- "fee=no",
- "charge="
- ]
- },
- "then": {
- "en": "Free to use",
- "nl": "Gratis te gebruiken"
- }
- }
- ],
- "freeform": {
- "key": "charge",
- "addExtraTags": [
- "fee=yes"
- ]
- },
- "render": {
- "en": "Using these binoculars costs {charge}",
- "nl": "Deze verrekijker gebruiken kost {charge}"
- },
- "question": {
- "en": "How much does one have to pay to use these binoculars?",
- "nl": "Hoeveel moet men betalen om deze verrekijker te gebruiken?"
- }
+ "id": "binocular",
+ "name": {
+ "en": "Binoculars",
+ "nl": "Verrekijkers"
},
- {
- "question": {
- "en": "When looking through this binocular, in what direction does one look?",
- "nl": "Welke richting kijkt men uit als men door deze verrekijker kijkt?"
- },
- "render": {
- "en": "Looks towards {direction}°",
- "nl": "Kijkt richting {direction}°"
- },
- "freeform": {
- "key": "direction",
- "type": "direction"
- }
+ "minzoom": 0,
+ "title": {
+ "render": {
+ "en": "Binoculars",
+ "nl": "Verrekijker"
+ }
+ },
+ "description": {
+ "en": "Binoculas",
+ "nl": "Verrekijkers"
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "fee=no",
+ "charge="
+ ]
+ },
+ "then": {
+ "en": "Free to use",
+ "nl": "Gratis te gebruiken"
+ }
+ }
+ ],
+ "freeform": {
+ "key": "charge",
+ "addExtraTags": [
+ "fee=yes"
+ ]
+ },
+ "render": {
+ "en": "Using these binoculars costs {charge}",
+ "nl": "Deze verrekijker gebruiken kost {charge}"
+ },
+ "question": {
+ "en": "How much does one have to pay to use these binoculars?",
+ "nl": "Hoeveel moet men betalen om deze verrekijker te gebruiken?"
+ }
+ },
+ {
+ "question": {
+ "en": "When looking through this binocular, in what direction does one look?",
+ "nl": "Welke richting kijkt men uit als men door deze verrekijker kijkt?"
+ },
+ "render": {
+ "en": "Looks towards {direction}°",
+ "nl": "Kijkt richting {direction}°"
+ },
+ "freeform": {
+ "key": "direction",
+ "type": "direction"
+ }
+ }
+ ],
+ "icon": {
+ "render": "circle:white;./assets/layers/binocular/telescope.svg"
+ },
+ "width": {
+ "render": "8"
+ },
+ "iconSize": {
+ "render": "40,40,center"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": [
+ {
+ "tags": [
+ "amenity=binoculars"
+ ],
+ "title": {
+ "en": "binoculars",
+ "nl": "verrekijker"
+ },
+ "description": {
+ "en": "A telescope or pair of binoculars mounted on a pole, available to the public to look around. ",
+ "nl": "Een telescoop of verrekijker die op een vaste plaats gemonteerd staat waar iedereen door mag kijken. "
+ },
+ "preciseInput": {
+ "preferredBackground": "photo"
+ }
+ }
+ ],
+ "source": {
+ "osmTags": {
+ "and": [
+ "amenity=binoculars"
+ ]
+ }
}
- ],
- "icon": {
- "render": "circle:white;./assets/layers/binocular/telescope.svg"
- },
- "width": {
- "render": "8"
- },
- "iconSize": {
- "render": "40,40,center"
- },
- "color": {
- "render": "#00f"
- },
- "presets": [
- {
- "tags": [
- "amenity=binoculars"
- ],
- "title": {
- "en": "binoculars",
- "nl": "verrekijker"
- },
- "description": {
- "en": "A telescope or pair of binoculars mounted on a pole, available to the public to look around. ",
- "nl": "Een telescoop of verrekijker die op een vaste plaats gemonteerd staat waar iedereen door mag kijken. "
- },
- "preciseInput": {
- "preferredBackground": "photo"
- }
- }
- ],
- "source": {
- "osmTags": {
- "and": [
- "amenity=binoculars"
- ]
- }
- }
}
\ No newline at end of file
diff --git a/assets/layers/birdhide/birdhide.json b/assets/layers/birdhide/birdhide.json
index 50fce43cb..4e1504864 100644
--- a/assets/layers/birdhide/birdhide.json
+++ b/assets/layers/birdhide/birdhide.json
@@ -1,295 +1,295 @@
{
- "id": "birdhide",
- "name": {
- "nl": "Vogelkijkhutten"
- },
- "minzoom": 14,
- "source": {
- "osmTags": {
- "and": [
- "leisure=bird_hide"
- ]
- }
- },
- "title": {
- "render": {
- "nl": "Vogelkijkplaats"
+ "id": "birdhide",
+ "name": {
+ "nl": "Vogelkijkhutten"
},
- "mappings": [
- {
- "if": {
- "and": [
- "name~((V|v)ogel.*).*"
- ]
- },
- "then": {
- "nl": "{name}"
+ "minzoom": 14,
+ "source": {
+ "osmTags": {
+ "and": [
+ "leisure=bird_hide"
+ ]
}
- },
- {
- "if": {
- "and": [
- "name~*",
+ },
+ "title": {
+ "render": {
+ "nl": "Vogelkijkplaats"
+ },
+ "mappings": [
{
- "or": [
- "building!~no",
- "shelter=yes"
- ]
+ "if": {
+ "and": [
+ "name~((V|v)ogel.*).*"
+ ]
+ },
+ "then": {
+ "nl": "{name}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "name~*",
+ {
+ "or": [
+ "building!~no",
+ "shelter=yes"
+ ]
+ }
+ ]
+ },
+ "then": {
+ "nl": "Vogelkijkhut {name}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "name~*"
+ ]
+ },
+ "then": {
+ "nl": "Vogelkijkwand {name}"
+ }
}
- ]
+ ]
+ },
+ "description": {
+ "nl": "Een vogelkijkhut"
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "nl": "Is dit een kijkwand of kijkhut?"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "shelter=no",
+ "building=",
+ "amenity="
+ ]
+ },
+ "then": {
+ "nl": "Vogelkijkwand"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "amenity=shelter",
+ "building=yes",
+ "shelter=yes"
+ ]
+ },
+ "then": {
+ "nl": "Vogelkijkhut"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "building=tower",
+ "bird_hide=tower"
+ ]
+ },
+ "then": {
+ "nl": "Vogelkijktoren"
+ }
+ },
+ {
+ "if": {
+ "or": [
+ "amenity=shelter",
+ "building=yes",
+ "shelter=yes"
+ ]
+ },
+ "then": {
+ "nl": "Vogelkijkhut"
+ },
+ "hideInAnswer": true
+ }
+ ]
},
- "then": {
- "nl": "Vogelkijkhut {name}"
- }
- },
- {
- "if": {
- "and": [
- "name~*"
- ]
+ {
+ "question": {
+ "nl": "Is deze vogelkijkplaats rolstoeltoegankelijk?"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "wheelchair=designated"
+ ]
+ },
+ "then": {
+ "nl": "Er zijn speciale voorzieningen voor rolstoelen"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "wheelchair=yes"
+ ]
+ },
+ "then": {
+ "nl": "Een rolstoel raakt er vlot"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "wheelchair=limited"
+ ]
+ },
+ "then": {
+ "nl": "Je kan er raken met een rolstoel, maar het is niet makkelijk"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "wheelchair=no"
+ ]
+ },
+ "then": {
+ "nl": "Niet rolstoeltoegankelijk"
+ }
+ }
+ ]
},
- "then": {
- "nl": "Vogelkijkwand {name}"
+ {
+ "render": {
+ "nl": "Beheer door {operator}"
+ },
+ "freeform": {
+ "key": "operator"
+ },
+ "question": {
+ "nl": "Wie beheert deze vogelkijkplaats?"
+ },
+ "mappings": [
+ {
+ "if": "operator=Natuurpunt",
+ "then": {
+ "nl": "Beheer door Natuurpunt"
+ }
+ },
+ {
+ "if": "operator=Agentschap Natuur en Bos",
+ "then": {
+ "nl": "Beheer door het Agentschap Natuur en Bos "
+ }
+ }
+ ]
+ }
+ ],
+ "icon": {
+ "render": {
+ "nl": "./assets/layers/birdhide/birdhide.svg"
+ },
+ "mappings": [
+ {
+ "if": {
+ "or": [
+ "building=yes",
+ "shelter=yes",
+ "amenity=shelter"
+ ]
+ },
+ "then": "./assets/layers/birdhide/birdshelter.svg"
+ }
+ ]
+ },
+ "size": {
+ "freeform": {
+ "addExtraTags": []
+ },
+ "render": {
+ "nl": "40,40,center"
+ },
+ "mappings": []
+ },
+ "color": {
+ "render": {
+ "nl": "#94bb28"
+ }
+ },
+ "stroke": {
+ "render": {
+ "nl": "3"
+ }
+ },
+ "presets": [
+ {
+ "tags": [
+ "leisure=bird_hide",
+ "building=yes",
+ "shelter=yes",
+ "amenity=shelter"
+ ],
+ "title": {
+ "nl": "Vogelkijkhut"
+ },
+ "description": {
+ "nl": "Een overdekte hut waarbinnen er warm en droog naar vogels gekeken kan worden"
+ }
+ },
+ {
+ "tags": [
+ "leisure=bird_hide",
+ "building=no",
+ "shelter=no"
+ ],
+ "title": {
+ "nl": "Vogelkijkwand"
+ },
+ "description": {
+ "nl": "Een vogelkijkwand waarachter men kan staan om vogels te kijken"
+ }
+ }
+ ],
+ "wayHandling": 1,
+ "filter": [
+ {
+ "options": [
+ {
+ "question": {
+ "nl": "Rolstoeltoegankelijk",
+ "en": "Wheelchair accessible"
+ },
+ "osmTags": {
+ "or": [
+ "wheelchair=yes",
+ "wheelchair=designated",
+ "wheelchair=permissive"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "options": [
+ {
+ "question": {
+ "nl": "Enkel overdekte kijkhutten"
+ },
+ "osmTags": {
+ "and": [
+ {
+ "or": [
+ "shelter=yes",
+ "building~*"
+ ]
+ },
+ "covered!=no"
+ ]
+ }
+ }
+ ]
}
- }
]
- },
- "description": {
- "nl": "Een vogelkijkhut"
- },
- "tagRenderings": [
- "images",
- {
- "question": {
- "nl": "Is dit een kijkwand of kijkhut?"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "shelter=no",
- "building=",
- "amenity="
- ]
- },
- "then": {
- "nl": "Vogelkijkwand"
- }
- },
- {
- "if": {
- "and": [
- "amenity=shelter",
- "building=yes",
- "shelter=yes"
- ]
- },
- "then": {
- "nl": "Vogelkijkhut"
- }
- },
- {
- "if": {
- "and": [
- "building=tower",
- "bird_hide=tower"
- ]
- },
- "then": {
- "nl": "Vogelkijktoren"
- }
- },
- {
- "if": {
- "or": [
- "amenity=shelter",
- "building=yes",
- "shelter=yes"
- ]
- },
- "then": {
- "nl": "Vogelkijkhut"
- },
- "hideInAnswer": true
- }
- ]
- },
- {
- "question": {
- "nl": "Is deze vogelkijkplaats rolstoeltoegankelijk?"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "wheelchair=designated"
- ]
- },
- "then": {
- "nl": "Er zijn speciale voorzieningen voor rolstoelen"
- }
- },
- {
- "if": {
- "and": [
- "wheelchair=yes"
- ]
- },
- "then": {
- "nl": "Een rolstoel raakt er vlot"
- }
- },
- {
- "if": {
- "and": [
- "wheelchair=limited"
- ]
- },
- "then": {
- "nl": "Je kan er raken met een rolstoel, maar het is niet makkelijk"
- }
- },
- {
- "if": {
- "and": [
- "wheelchair=no"
- ]
- },
- "then": {
- "nl": "Niet rolstoeltoegankelijk"
- }
- }
- ]
- },
- {
- "render": {
- "nl": "Beheer door {operator}"
- },
- "freeform": {
- "key": "operator"
- },
- "question": {
- "nl": "Wie beheert deze vogelkijkplaats?"
- },
- "mappings": [
- {
- "if": "operator=Natuurpunt",
- "then": {
- "nl": "Beheer door Natuurpunt"
- }
- },
- {
- "if": "operator=Agentschap Natuur en Bos",
- "then": {
- "nl": "Beheer door het Agentschap Natuur en Bos "
- }
- }
- ]
- }
- ],
- "icon": {
- "render": {
- "nl": "./assets/layers/birdhide/birdhide.svg"
- },
- "mappings": [
- {
- "if": {
- "or": [
- "building=yes",
- "shelter=yes",
- "amenity=shelter"
- ]
- },
- "then": "./assets/layers/birdhide/birdshelter.svg"
- }
- ]
- },
- "size": {
- "freeform": {
- "addExtraTags": []
- },
- "render": {
- "nl": "40,40,center"
- },
- "mappings": []
- },
- "color": {
- "render": {
- "nl": "#94bb28"
- }
- },
- "stroke": {
- "render": {
- "nl": "3"
- }
- },
- "presets": [
- {
- "tags": [
- "leisure=bird_hide",
- "building=yes",
- "shelter=yes",
- "amenity=shelter"
- ],
- "title": {
- "nl": "Vogelkijkhut"
- },
- "description": {
- "nl": "Een overdekte hut waarbinnen er warm en droog naar vogels gekeken kan worden"
- }
- },
- {
- "tags": [
- "leisure=bird_hide",
- "building=no",
- "shelter=no"
- ],
- "title": {
- "nl": "Vogelkijkwand"
- },
- "description": {
- "nl": "Een vogelkijkwand waarachter men kan staan om vogels te kijken"
- }
- }
- ],
- "wayHandling": 1,
- "filter": [
- {
- "options": [
- {
- "question": {
- "nl": "Rolstoeltoegankelijk",
- "en": "Wheelchair accessible"
- },
- "osmTags": {
- "or": [
- "wheelchair=yes",
- "wheelchair=designated",
- "wheelchair=permissive"
- ]
- }
- }
- ]
- },
- {
- "options": [
- {
- "question": {
- "nl": "Enkel overdekte kijkhutten"
- },
- "osmTags": {
- "and": [
- {
- "or": [
- "shelter=yes",
- "building~*"
- ]
- },
- "covered!=no"
- ]
- }
- }
- ]
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/cafe_pub/cafe_pub.json b/assets/layers/cafe_pub/cafe_pub.json
index be3f1d6e5..59d661966 100644
--- a/assets/layers/cafe_pub/cafe_pub.json
+++ b/assets/layers/cafe_pub/cafe_pub.json
@@ -1,183 +1,183 @@
{
- "id": "cafe_pub",
- "name": {
- "nl": "Cafés",
- "en": "Cafés and pubs"
- },
- "source": {
- "osmTags": {
- "or": [
- "amenity=bar",
- "amenity=pub",
- "amenity=cafe",
- "amenity=biergarten"
- ]
- }
- },
- "wayHandling": 1,
- "icon": {
- "render": "circle:white;./assets/layers/cafe_pub/pub.svg",
- "mappings": [
- {
- "if": "amenity=cafe",
- "then": "circle:white;./assets/layers/cafe_pub/cafe.svg"
- }
- ]
- },
- "iconOverlays": [
- {
- "if": "opening_hours~*",
- "then": "isOpen",
- "badge": true
- }
- ],
- "label": {
- "mappings": [
- {
- "if": "name~*",
- "then": "
{name}
"
- }
- ]
- },
- "presets": [
- {
- "tags": [
- "amenity=pub"
- ],
- "title": {
- "en": "pub",
- "nl": "bruin cafe of kroeg"
- },
- "description": {
- "nl": "Dit is een bruin café of een kroeg waar voornamelijk bier wordt gedronken. De inrichting is typisch gezellig met veel houtwerk "
- },
- "preciseInput": {
- "preferredBackground": "map"
- }
+ "id": "cafe_pub",
+ "name": {
+ "nl": "Cafés",
+ "en": "Cafés and pubs"
},
- {
- "tags": [
- "amenity=bar"
- ],
- "title": {
- "en": "bar",
- "nl": "bar"
- },
- "description": {
- "nl": "Dit is een bar waar men ter plaatse alcoholische drank nuttigt. De inrichting is typisch modern en commercieel, soms met lichtinstallatie en feestmuziek"
- },
- "preciseInput": {
- "preferredBackground": "map"
- }
- },
- {
- "tags": [
- "amenity=cafe"
- ],
- "title": {
- "en": "cafe",
- "nl": "cafe"
- },
- "description": {
- "nl": "Dit is een cafe - een plaats waar men rustig kan zitten om een thee, koffie of alcoholische drank te nuttigen."
- },
- "preciseInput": {
- "preferredBackground": "map"
- }
- }
- ],
- "title": {
- "render": {
- "nl": "Café"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "name~*"
- ]
- },
- "then": {
- "nl": "{name}",
- "en": "{name}"
+ "source": {
+ "osmTags": {
+ "or": [
+ "amenity=bar",
+ "amenity=pub",
+ "amenity=cafe",
+ "amenity=biergarten"
+ ]
+ }
+ },
+ "wayHandling": 1,
+ "icon": {
+ "render": "circle:white;./assets/layers/cafe_pub/pub.svg",
+ "mappings": [
+ {
+ "if": "amenity=cafe",
+ "then": "circle:white;./assets/layers/cafe_pub/cafe.svg"
+ }
+ ]
+ },
+ "iconOverlays": [
+ {
+ "if": "opening_hours~*",
+ "then": "isOpen",
+ "badge": true
+ }
+ ],
+ "label": {
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": "
{name}
"
+ }
+ ]
+ },
+ "presets": [
+ {
+ "tags": [
+ "amenity=pub"
+ ],
+ "title": {
+ "en": "pub",
+ "nl": "bruin cafe of kroeg"
+ },
+ "description": {
+ "nl": "Dit is een bruin café of een kroeg waar voornamelijk bier wordt gedronken. De inrichting is typisch gezellig met veel houtwerk "
+ },
+ "preciseInput": {
+ "preferredBackground": "map"
+ }
+ },
+ {
+ "tags": [
+ "amenity=bar"
+ ],
+ "title": {
+ "en": "bar",
+ "nl": "bar"
+ },
+ "description": {
+ "nl": "Dit is een bar waar men ter plaatse alcoholische drank nuttigt. De inrichting is typisch modern en commercieel, soms met lichtinstallatie en feestmuziek"
+ },
+ "preciseInput": {
+ "preferredBackground": "map"
+ }
+ },
+ {
+ "tags": [
+ "amenity=cafe"
+ ],
+ "title": {
+ "en": "cafe",
+ "nl": "cafe"
+ },
+ "description": {
+ "nl": "Dit is een cafe - een plaats waar men rustig kan zitten om een thee, koffie of alcoholische drank te nuttigen."
+ },
+ "preciseInput": {
+ "preferredBackground": "map"
+ }
+ }
+ ],
+ "title": {
+ "render": {
+ "nl": "Café"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "name~*"
+ ]
+ },
+ "then": {
+ "nl": "{name}",
+ "en": "{name}"
+ }
+ }
+ ]
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "#": "Name",
+ "question": {
+ "nl": "Wat is de naam van dit café?",
+ "en": "What is the name of this pub?"
+ },
+ "render": {
+ "nl": "De naam van dit café is {name}",
+ "en": "This pub is named {name}"
+ },
+ "freeform": {
+ "key": "name"
+ }
+ },
+ {
+ "#": "Classification",
+ "question": {
+ "en": "What kind of cafe is this",
+ "nl": "Welk soort café is dit?"
+ },
+ "mappings": [
+ {
+ "if": "amenity=pub",
+ "then": {
+ "nl": "Dit is een bruin café of een kroeg waar voornamelijk bier wordt gedronken. De inrichting is typisch gezellig met veel houtwerk "
+ }
+ },
+ {
+ "if": "amenity=bar",
+ "then": {
+ "nl": "Dit is een bar waar men ter plaatse alcoholische drank nuttigt. De inrichting is typisch modern en commercieel, soms met lichtinstallatie en feestmuziek"
+ }
+ },
+ {
+ "if": "amenity=cafe",
+ "then": {
+ "nl": "Dit is een cafe - een plaats waar men rustig kan zitten om een thee, koffie of alcoholische drank te nuttigen."
+ }
+ },
+ {
+ "if": "amenity=restaurant",
+ "then": {
+ "nl": "Dit is een restaurant waar men een maaltijd geserveerd krijgt"
+ }
+ },
+ {
+ "if": "amenity=biergarten",
+ "then": {
+ "nl": "Een open ruimte waar bier geserveerd wordt. Typisch in Duitsland"
+ },
+ "hideInAnswer": "_country!=de"
+ }
+ ]
+ },
+ "opening_hours",
+ "website",
+ "email",
+ "phone",
+ "payment-options",
+ "wheelchair-access"
+ ],
+ "filter": [
+ {
+ "options": [
+ {
+ "question": {
+ "en": "Opened now",
+ "nl": "Nu geopened"
+ },
+ "osmTags": "_isOpen=yes"
+ }
+ ]
}
- }
]
- },
- "tagRenderings": [
- "images",
- {
- "#": "Name",
- "question": {
- "nl": "Wat is de naam van dit café?",
- "en": "What is the name of this pub?"
- },
- "render": {
- "nl": "De naam van dit café is {name}",
- "en": "This pub is named {name}"
- },
- "freeform": {
- "key": "name"
- }
- },
- {
- "#": "Classification",
- "question": {
- "en": "What kind of cafe is this",
- "nl": "Welk soort café is dit?"
- },
- "mappings": [
- {
- "if": "amenity=pub",
- "then": {
- "nl": "Dit is een bruin café of een kroeg waar voornamelijk bier wordt gedronken. De inrichting is typisch gezellig met veel houtwerk "
- }
- },
- {
- "if": "amenity=bar",
- "then": {
- "nl": "Dit is een bar waar men ter plaatse alcoholische drank nuttigt. De inrichting is typisch modern en commercieel, soms met lichtinstallatie en feestmuziek"
- }
- },
- {
- "if": "amenity=cafe",
- "then": {
- "nl": "Dit is een cafe - een plaats waar men rustig kan zitten om een thee, koffie of alcoholische drank te nuttigen."
- }
- },
- {
- "if": "amenity=restaurant",
- "then": {
- "nl": "Dit is een restaurant waar men een maaltijd geserveerd krijgt"
- }
- },
- {
- "if": "amenity=biergarten",
- "then": {
- "nl": "Een open ruimte waar bier geserveerd wordt. Typisch in Duitsland"
- },
- "hideInAnswer": "_country!=de"
- }
- ]
- },
- "opening_hours",
- "website",
- "email",
- "phone",
- "payment-options",
- "wheelchair-access"
- ],
- "filter": [
- {
- "options": [
- {
- "question": {
- "en": "Opened now",
- "nl": "Nu geopened"
- },
- "osmTags": "_isOpen=yes"
- }
- ]
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json
index 3935c515f..4446049ab 100644
--- a/assets/layers/charging_station/charging_station.json
+++ b/assets/layers/charging_station/charging_station.json
@@ -1,2183 +1,2183 @@
{
- "id": "charging_station",
- "name": {
- "en": "Charging stations",
- "it": "Stazioni di ricarica",
- "ja": "充電ステーション",
- "nb_NO": "Ladestasjoner",
- "ru": "Зарядные станции",
- "zh_Hant": "充電站"
- },
- "minzoom": 10,
- "source": {
- "osmTags": {
- "or": [
- "amenity=charging_station",
- "disused:amenity=charging_station",
- "planned:amenity=charging_station",
- "construction:amenity=charging_station"
- ]
- }
- },
- "title": {
- "render": {
- "en": "Charging station",
- "it": "Stazione di ricarica",
- "ja": "充電ステーション",
- "nb_NO": "Ladestasjon",
- "ru": "Зарядная станция",
- "zh_Hant": "充電站"
- }
- },
- "description": {
- "en": "A charging station",
- "it": "Una stazione di ricarica",
- "ja": "充電ステーション",
- "nb_NO": "En ladestasjon",
- "ru": "Зарядная станция",
- "zh_Hant": "充電站"
- },
- "calculatedTags": [
- "motorcar=feat.properties.motorcar ?? feat.properties.car"
- ],
- "tagRenderings": [
- "images",
- {
- "#": "Type",
- "question": {
- "en": "Which vehicles are allowed to charge here?"
- },
- "multiAnswer": true,
- "mappings": [
- {
- "if": "bicycle=yes",
- "ifnot": "bicycle=no",
- "then": {
- "en": "bicycles can be charged here"
- }
- },
- {
- "if": "motorcar=yes",
- "extraTags": "car=",
- "ifnot": {
- "and": [
- "car=",
- "motorcar=no"
- ]
- },
- "then": {
- "en": "Cars can be charged here"
- }
- },
- {
- "if": "scooter=yes",
- "ifnot": "scooter=no",
- "then": {
- "en": "Scooters can be charged here"
- }
- },
- {
- "if": "hgv=yes",
- "ifnot": "hgv=no",
- "then": {
- "en": "Heavy good vehicles (such as trucks) can be charged here"
- }
- },
- {
- "if": "bus=yes",
- "ifnot": "bus=no",
- "then": {
- "en": "Buses can be charged here"
- }
- }
- ]
+ "id": "charging_station",
+ "name": {
+ "en": "Charging stations",
+ "it": "Stazioni di ricarica",
+ "ja": "充電ステーション",
+ "nb_NO": "Ladestasjoner",
+ "ru": "Зарядные станции",
+ "zh_Hant": "充電站"
},
- {
- "question": "Who is allowed to use this charging station?",
- "render": "Access is {access}",
- "freeform": {
- "key": "access",
- "addExtraTags": [
- "fixme=Freeform field used for access - doublecheck the value"
- ]
- },
- "mappings": [
- {
- "if": "access=yes",
- "then": "Anyone can use this charging station (payment might be needed)"
- },
- {
- "if": {
+ "minzoom": 10,
+ "source": {
+ "osmTags": {
"or": [
- "access=permissive",
- "access=public"
+ "amenity=charging_station",
+ "disused:amenity=charging_station",
+ "planned:amenity=charging_station",
+ "construction:amenity=charging_station"
]
- },
- "then": "Anyone can use this charging station (payment might be needed)",
- "hideInAnswer": true
- },
- {
- "if": "access=customers",
- "then": "Only customers of the place this station belongs to can use this charging station E.g. a charging station operated by hotel which is only usable by their guests "
- },
- {
- "if": "access=private",
- "then": "Not accessible to the general public (e.g. only accessible to the owners, employees, ...)"
}
- ]
},
- {
- "#": "capacity",
- "render": {
- "en": "{capacity} vehicles can be charged here at the same time",
- "nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden"
- },
- "question": {
- "en": "How much vehicles can be charged here at the same time?",
- "nl": "Hoeveel voertuigen kunnen hier opgeladen worden?"
- },
- "freeform": {
- "key": "capacity",
- "type": "pnat"
- }
+ "title": {
+ "render": {
+ "en": "Charging station",
+ "it": "Stazione di ricarica",
+ "ja": "充電ステーション",
+ "nb_NO": "Ladestasjon",
+ "ru": "Зарядная станция",
+ "zh_Hant": "充電站"
+ }
},
- {
- "question": {
- "en": "Which charging stations are available here?"
- },
- "multiAnswer": true,
- "mappings": [
+ "description": {
+ "en": "A charging station",
+ "it": "Una stazione di ricarica",
+ "ja": "充電ステーション",
+ "nb_NO": "En ladestasjon",
+ "ru": "Зарядная станция",
+ "zh_Hant": "充電站"
+ },
+ "calculatedTags": [
+ "motorcar=feat.properties.motorcar ?? feat.properties.car"
+ ],
+ "tagRenderings": [
+ "images",
{
- "if": "socket:schuko=1",
- "ifnot": "socket:schuko=",
- "then": {
- "en": " Schuko wall plug without ground pin (CEE7/4 type F)",
- "nl": " Schuko stekker zonder aardingspin (CEE7/4 type F)"
- }
- },
- {
- "if": {
- "and": [
- "socket:schuko~*",
- "socket:schuko!=1"
+ "#": "Type",
+ "question": {
+ "en": "Which vehicles are allowed to charge here?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "bicycle=yes",
+ "ifnot": "bicycle=no",
+ "then": {
+ "en": "bicycles can be charged here"
+ }
+ },
+ {
+ "if": "motorcar=yes",
+ "extraTags": "car=",
+ "ifnot": {
+ "and": [
+ "car=",
+ "motorcar=no"
+ ]
+ },
+ "then": {
+ "en": "Cars can be charged here"
+ }
+ },
+ {
+ "if": "scooter=yes",
+ "ifnot": "scooter=no",
+ "then": {
+ "en": "Scooters can be charged here"
+ }
+ },
+ {
+ "if": "hgv=yes",
+ "ifnot": "hgv=no",
+ "then": {
+ "en": "Heavy good vehicles (such as trucks) can be charged here"
+ }
+ },
+ {
+ "if": "bus=yes",
+ "ifnot": "bus=no",
+ "then": {
+ "en": "Buses can be charged here"
+ }
+ }
]
- },
- "then": {
- "en": " Schuko wall plug without ground pin (CEE7/4 type F)",
- "nl": " Schuko stekker zonder aardingspin (CEE7/4 type F)"
- },
- "hideInAnswer": true
},
{
- "if": "socket:typee=1",
- "ifnot": "socket:typee=",
- "then": {
- "en": " European wall plug with ground pin (CEE7/4 type E)",
- "nl": " Europese stekker met aardingspin (CEE7/4 type E)"
- }
- },
- {
- "if": {
- "and": [
- "socket:typee~*",
- "socket:typee!=1"
+ "question": "Who is allowed to use this charging station?",
+ "render": "Access is {access}",
+ "freeform": {
+ "key": "access",
+ "addExtraTags": [
+ "fixme=Freeform field used for access - doublecheck the value"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "access=yes",
+ "then": "Anyone can use this charging station (payment might be needed)"
+ },
+ {
+ "if": {
+ "or": [
+ "access=permissive",
+ "access=public"
+ ]
+ },
+ "then": "Anyone can use this charging station (payment might be needed)",
+ "hideInAnswer": true
+ },
+ {
+ "if": "access=customers",
+ "then": "Only customers of the place this station belongs to can use this charging station E.g. a charging station operated by hotel which is only usable by their guests "
+ },
+ {
+ "if": "access=private",
+ "then": "Not accessible to the general public (e.g. only accessible to the owners, employees, ...)"
+ }
]
- },
- "then": {
- "en": " European wall plug with ground pin (CEE7/4 type E)",
- "nl": " Europese stekker met aardingspin (CEE7/4 type E)"
- },
- "hideInAnswer": true
},
{
- "if": "socket:chademo=1",
- "ifnot": "socket:chademo=",
- "then": {
- "en": " Chademo",
- "nl": " "
- }
- },
- {
- "if": {
- "and": [
- "socket:chademo~*",
- "socket:chademo!=1"
- ]
- },
- "then": {
- "en": " Chademo",
- "nl": " "
- },
- "hideInAnswer": true
- },
- {
- "if": "socket:type1_cable=1",
- "ifnot": "socket:type1_cable=",
- "then": {
- "en": " Type 1 with cable (J1772)",
- "nl": " Type 1 met kabel (J1772)"
- }
- },
- {
- "if": {
- "and": [
- "socket:type1_cable~*",
- "socket:type1_cable!=1"
- ]
- },
- "then": {
- "en": " Type 1 with cable (J1772)",
- "nl": " Type 1 met kabel (J1772)"
- },
- "hideInAnswer": true
- },
- {
- "if": "socket:type1=1",
- "ifnot": "socket:type1=",
- "then": {
- "en": " Type 1 without cable (J1772)",
- "nl": " Type 1 zonder kabel (J1772)"
- }
- },
- {
- "if": {
- "and": [
- "socket:type1~*",
- "socket:type1!=1"
- ]
- },
- "then": {
- "en": " Type 1 without cable (J1772)",
- "nl": " Type 1 zonder kabel (J1772)"
- },
- "hideInAnswer": true
- },
- {
- "if": "socket:type1_combo=1",
- "ifnot": "socket:type1_combo=",
- "then": {
- "en": " Type 1 CCS (aka Type 1 Combo)",
- "nl": " "
- }
- },
- {
- "if": {
- "and": [
- "socket:type1_combo~*",
- "socket:type1_combo!=1"
- ]
- },
- "then": {
- "en": " Type 1 CCS (aka Type 1 Combo)",
- "nl": " "
- },
- "hideInAnswer": true
- },
- {
- "if": "socket:tesla_supercharger=1",
- "ifnot": "socket:tesla_supercharger=",
- "then": {
- "en": " Tesla Supercharger",
- "nl": " "
- }
- },
- {
- "if": {
- "and": [
- "socket:tesla_supercharger~*",
- "socket:tesla_supercharger!=1"
- ]
- },
- "then": {
- "en": " Tesla Supercharger",
- "nl": " "
- },
- "hideInAnswer": true
- },
- {
- "if": "socket:type2=1",
- "ifnot": "socket:type2=",
- "then": {
- "en": " Type 2 (mennekes)",
- "nl": " "
- }
- },
- {
- "if": {
- "and": [
- "socket:type2~*",
- "socket:type2!=1"
- ]
- },
- "then": {
- "en": " Type 2 (mennekes)",
- "nl": " "
- },
- "hideInAnswer": true
- },
- {
- "if": "socket:type2_combo=1",
- "ifnot": "socket:type2_combo=",
- "then": {
- "en": " Type 2 CCS (mennekes)",
- "nl": " "
- }
- },
- {
- "if": {
- "and": [
- "socket:type2_combo~*",
- "socket:type2_combo!=1"
- ]
- },
- "then": {
- "en": " Type 2 CCS (mennekes)",
- "nl": " "
- },
- "hideInAnswer": true
- }
- ]
- },
- {
- "question": {
- "en": "How much plugs of type Schuko wall plug without ground pin (CEE7/4 type F) are available here?",
- "nl": "Hoeveel stekkers van type Schuko stekker zonder aardingspin (CEE7/4 type F) heeft dit oplaadpunt?"
- },
- "render": {
- "en": "There are Schuko wall plug without ground pin (CEE7/4 type F) plugs of type Schuko wall plug without ground pin (CEE7/4 type F) available here",
- "nl": "Hier zijn Schuko stekker zonder aardingspin (CEE7/4 type F) stekkers van het type Schuko stekker zonder aardingspin (CEE7/4 type F)"
- },
- "freeform": {
- "key": "socket:schuko",
- "type": "pnat"
- },
- "condition": {
- "and": [
- "socket:schuko~*",
- "socket:schuko!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What voltage do the plugs with Schuko wall plug without ground pin (CEE7/4 type F) offer?",
- "nl": "Welke spanning levert de stekker van type Schuko stekker zonder aardingspin (CEE7/4 type F) "
- },
- "render": {
- "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs {socket:schuko:voltage} volt",
- "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) heeft een spanning van {socket:schuko:voltage} volt"
- },
- "freeform": {
- "key": "socket:schuko:voltage",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:schuko:voltage=230 V",
- "then": {
- "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs 230 volt",
- "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) heeft een spanning van 230 volt"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:schuko~*",
- "socket:schuko!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What current do the plugs with Schuko wall plug without ground pin (CEE7/4 type F) offer?",
- "nl": "Welke stroom levert de stekker van type Schuko stekker zonder aardingspin (CEE7/4 type F) ?"
- },
- "render": {
- "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most {socket:schuko:current}A",
- "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal {socket:schuko:current}A"
- },
- "freeform": {
- "key": "socket:schuko:current",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:schuko:current=16 A",
- "then": {
- "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 16 A",
- "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal 16 A"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:schuko~*",
- "socket:schuko!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What power output does a single plug of type Schuko wall plug without ground pin (CEE7/4 type F) offer?",
- "nl": "Welk vermogen levert een enkele stekker van type Schuko stekker zonder aardingspin (CEE7/4 type F) ?"
- },
- "render": {
- "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most {socket:schuko:output}",
- "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal {socket:schuko:output}"
- },
- "freeform": {
- "key": "socket:schuko:output",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:schuko:output=3.6 kw",
- "then": {
- "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 3.6 kw",
- "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal 3.6 kw"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:schuko~*",
- "socket:schuko!=0"
- ]
- }
- },
- {
- "question": {
- "en": "How much plugs of type European wall plug with ground pin (CEE7/4 type E) are available here?",
- "nl": "Hoeveel stekkers van type Europese stekker met aardingspin (CEE7/4 type E) heeft dit oplaadpunt?"
- },
- "render": {
- "en": "There are European wall plug with ground pin (CEE7/4 type E) plugs of type European wall plug with ground pin (CEE7/4 type E) available here",
- "nl": "Hier zijn Europese stekker met aardingspin (CEE7/4 type E) stekkers van het type Europese stekker met aardingspin (CEE7/4 type E)"
- },
- "freeform": {
- "key": "socket:typee",
- "type": "pnat"
- },
- "condition": {
- "and": [
- "socket:typee~*",
- "socket:typee!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What voltage do the plugs with European wall plug with ground pin (CEE7/4 type E) offer?",
- "nl": "Welke spanning levert de stekker van type Europese stekker met aardingspin (CEE7/4 type E) "
- },
- "render": {
- "en": "European wall plug with ground pin (CEE7/4 type E) outputs {socket:typee:voltage} volt",
- "nl": "Europese stekker met aardingspin (CEE7/4 type E) heeft een spanning van {socket:typee:voltage} volt"
- },
- "freeform": {
- "key": "socket:typee:voltage",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:typee:voltage=230 V",
- "then": {
- "en": "European wall plug with ground pin (CEE7/4 type E) outputs 230 volt",
- "nl": "Europese stekker met aardingspin (CEE7/4 type E) heeft een spanning van 230 volt"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:typee~*",
- "socket:typee!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What current do the plugs with European wall plug with ground pin (CEE7/4 type E) offer?",
- "nl": "Welke stroom levert de stekker van type Europese stekker met aardingspin (CEE7/4 type E) ?"
- },
- "render": {
- "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most {socket:typee:current}A",
- "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een stroom van maximaal {socket:typee:current}A"
- },
- "freeform": {
- "key": "socket:typee:current",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:typee:current=16 A",
- "then": {
- "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 16 A",
- "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een stroom van maximaal 16 A"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:typee~*",
- "socket:typee!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What power output does a single plug of type European wall plug with ground pin (CEE7/4 type E) offer?",
- "nl": "Welk vermogen levert een enkele stekker van type Europese stekker met aardingspin (CEE7/4 type E) ?"
- },
- "render": {
- "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most {socket:typee:output}",
- "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal {socket:typee:output}"
- },
- "freeform": {
- "key": "socket:typee:output",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:typee:output=3 kw",
- "then": {
- "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 3 kw",
- "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 3 kw"
- }
- },
- {
- "if": "socket:socket:typee:output=22 kw",
- "then": {
- "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 22 kw",
- "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 22 kw"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:typee~*",
- "socket:typee!=0"
- ]
- }
- },
- {
- "question": {
- "en": "How much plugs of type Chademo are available here?",
- "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
- },
- "render": {
- "en": "There are Chademo plugs of type Chademo available here",
- "nl": "Hier zijn stekkers van het type "
- },
- "freeform": {
- "key": "socket:chademo",
- "type": "pnat"
- },
- "condition": {
- "and": [
- "socket:chademo~*",
- "socket:chademo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What voltage do the plugs with Chademo offer?",
- "nl": "Welke spanning levert de stekker van type "
- },
- "render": {
- "en": "Chademo outputs {socket:chademo:voltage} volt",
- "nl": " heeft een spanning van {socket:chademo:voltage} volt"
- },
- "freeform": {
- "key": "socket:chademo:voltage",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:chademo:voltage=500 V",
- "then": {
- "en": "Chademo outputs 500 volt",
- "nl": " heeft een spanning van 500 volt"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:chademo~*",
- "socket:chademo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What current do the plugs with Chademo offer?",
- "nl": "Welke stroom levert de stekker van type ?"
- },
- "render": {
- "en": "Chademo outputs at most {socket:chademo:current}A",
- "nl": " levert een stroom van maximaal {socket:chademo:current}A"
- },
- "freeform": {
- "key": "socket:chademo:current",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:chademo:current=120 A",
- "then": {
- "en": "Chademo outputs at most 120 A",
- "nl": " levert een stroom van maximaal 120 A"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:chademo~*",
- "socket:chademo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What power output does a single plug of type Chademo offer?",
- "nl": "Welk vermogen levert een enkele stekker van type ?"
- },
- "render": {
- "en": "Chademo outputs at most {socket:chademo:output}",
- "nl": " levert een vermogen van maximaal {socket:chademo:output}"
- },
- "freeform": {
- "key": "socket:chademo:output",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:chademo:output=50 kw",
- "then": {
- "en": "Chademo outputs at most 50 kw",
- "nl": " levert een vermogen van maximaal 50 kw"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:chademo~*",
- "socket:chademo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "How much plugs of type Type 1 with cable (J1772) are available here?",
- "nl": "Hoeveel stekkers van type Type 1 met kabel (J1772) heeft dit oplaadpunt?"
- },
- "render": {
- "en": "There are Type 1 with cable (J1772) plugs of type Type 1 with cable (J1772) available here",
- "nl": "Hier zijn Type 1 met kabel (J1772) stekkers van het type Type 1 met kabel (J1772)"
- },
- "freeform": {
- "key": "socket:type1_cable",
- "type": "pnat"
- },
- "condition": {
- "and": [
- "socket:type1_cable~*",
- "socket:type1_cable!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What voltage do the plugs with Type 1 with cable (J1772) offer?",
- "nl": "Welke spanning levert de stekker van type Type 1 met kabel (J1772) "
- },
- "render": {
- "en": "Type 1 with cable (J1772) outputs {socket:type1_cable:voltage} volt",
- "nl": "Type 1 met kabel (J1772) heeft een spanning van {socket:type1_cable:voltage} volt"
- },
- "freeform": {
- "key": "socket:type1_cable:voltage",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type1_cable:voltage=200 V",
- "then": {
- "en": "Type 1 with cable (J1772) outputs 200 volt",
- "nl": "Type 1 met kabel (J1772) heeft een spanning van 200 volt"
- }
- },
- {
- "if": "socket:socket:type1_cable:voltage=240 V",
- "then": {
- "en": "Type 1 with cable (J1772) outputs 240 volt",
- "nl": "Type 1 met kabel (J1772) heeft een spanning van 240 volt"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type1_cable~*",
- "socket:type1_cable!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What current do the plugs with Type 1 with cable (J1772) offer?",
- "nl": "Welke stroom levert de stekker van type Type 1 met kabel (J1772) ?"
- },
- "render": {
- "en": "Type 1 with cable (J1772) outputs at most {socket:type1_cable:current}A",
- "nl": "Type 1 met kabel (J1772) levert een stroom van maximaal {socket:type1_cable:current}A"
- },
- "freeform": {
- "key": "socket:type1_cable:current",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type1_cable:current=32 A",
- "then": {
- "en": "Type 1 with cable (J1772) outputs at most 32 A",
- "nl": "Type 1 met kabel (J1772) levert een stroom van maximaal 32 A"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type1_cable~*",
- "socket:type1_cable!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What power output does a single plug of type Type 1 with cable (J1772) offer?",
- "nl": "Welk vermogen levert een enkele stekker van type Type 1 met kabel (J1772) ?"
- },
- "render": {
- "en": "Type 1 with cable (J1772) outputs at most {socket:type1_cable:output}",
- "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal {socket:type1_cable:output}"
- },
- "freeform": {
- "key": "socket:type1_cable:output",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type1_cable:output=3.7 kw",
- "then": {
- "en": "Type 1 with cable (J1772) outputs at most 3.7 kw",
- "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 3.7 kw"
- }
- },
- {
- "if": "socket:socket:type1_cable:output=7 kw",
- "then": {
- "en": "Type 1 with cable (J1772) outputs at most 7 kw",
- "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 7 kw"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type1_cable~*",
- "socket:type1_cable!=0"
- ]
- }
- },
- {
- "question": {
- "en": "How much plugs of type Type 1 without cable (J1772) are available here?",
- "nl": "Hoeveel stekkers van type Type 1 zonder kabel (J1772) heeft dit oplaadpunt?"
- },
- "render": {
- "en": "There are Type 1 without cable (J1772) plugs of type Type 1 without cable (J1772) available here",
- "nl": "Hier zijn Type 1 zonder kabel (J1772) stekkers van het type Type 1 zonder kabel (J1772)"
- },
- "freeform": {
- "key": "socket:type1",
- "type": "pnat"
- },
- "condition": {
- "and": [
- "socket:type1~*",
- "socket:type1!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What voltage do the plugs with Type 1 without cable (J1772) offer?",
- "nl": "Welke spanning levert de stekker van type Type 1 zonder kabel (J1772) "
- },
- "render": {
- "en": "Type 1 without cable (J1772) outputs {socket:type1:voltage} volt",
- "nl": "Type 1 zonder kabel (J1772) heeft een spanning van {socket:type1:voltage} volt"
- },
- "freeform": {
- "key": "socket:type1:voltage",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type1:voltage=200 V",
- "then": {
- "en": "Type 1 without cable (J1772) outputs 200 volt",
- "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 200 volt"
- }
- },
- {
- "if": "socket:socket:type1:voltage=240 V",
- "then": {
- "en": "Type 1 without cable (J1772) outputs 240 volt",
- "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 240 volt"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type1~*",
- "socket:type1!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What current do the plugs with Type 1 without cable (J1772) offer?",
- "nl": "Welke stroom levert de stekker van type Type 1 zonder kabel (J1772) ?"
- },
- "render": {
- "en": "Type 1 without cable (J1772) outputs at most {socket:type1:current}A",
- "nl": "Type 1 zonder kabel (J1772) levert een stroom van maximaal {socket:type1:current}A"
- },
- "freeform": {
- "key": "socket:type1:current",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type1:current=32 A",
- "then": {
- "en": "Type 1 without cable (J1772) outputs at most 32 A",
- "nl": "Type 1 zonder kabel (J1772) levert een stroom van maximaal 32 A"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type1~*",
- "socket:type1!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What power output does a single plug of type Type 1 without cable (J1772) offer?",
- "nl": "Welk vermogen levert een enkele stekker van type Type 1 zonder kabel (J1772) ?"
- },
- "render": {
- "en": "Type 1 without cable (J1772) outputs at most {socket:type1:output}",
- "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal {socket:type1:output}"
- },
- "freeform": {
- "key": "socket:type1:output",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type1:output=3.7 kw",
- "then": {
- "en": "Type 1 without cable (J1772) outputs at most 3.7 kw",
- "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 3.7 kw"
- }
- },
- {
- "if": "socket:socket:type1:output=6.6 kw",
- "then": {
- "en": "Type 1 without cable (J1772) outputs at most 6.6 kw",
- "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 6.6 kw"
- }
- },
- {
- "if": "socket:socket:type1:output=7 kw",
- "then": {
- "en": "Type 1 without cable (J1772) outputs at most 7 kw",
- "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7 kw"
- }
- },
- {
- "if": "socket:socket:type1:output=7.2 kw",
- "then": {
- "en": "Type 1 without cable (J1772) outputs at most 7.2 kw",
- "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7.2 kw"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type1~*",
- "socket:type1!=0"
- ]
- }
- },
- {
- "question": {
- "en": "How much plugs of type Type 1 CCS (aka Type 1 Combo) are available here?",
- "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
- },
- "render": {
- "en": "There are Type 1 CCS (aka Type 1 Combo) plugs of type Type 1 CCS (aka Type 1 Combo) available here",
- "nl": "Hier zijn stekkers van het type "
- },
- "freeform": {
- "key": "socket:type1_combo",
- "type": "pnat"
- },
- "condition": {
- "and": [
- "socket:type1_combo~*",
- "socket:type1_combo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What voltage do the plugs with Type 1 CCS (aka Type 1 Combo) offer?",
- "nl": "Welke spanning levert de stekker van type "
- },
- "render": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs {socket:type1_combo:voltage} volt",
- "nl": " heeft een spanning van {socket:type1_combo:voltage} volt"
- },
- "freeform": {
- "key": "socket:type1_combo:voltage",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type1_combo:voltage=400 V",
- "then": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs 400 volt",
- "nl": " heeft een spanning van 400 volt"
- }
- },
- {
- "if": "socket:socket:type1_combo:voltage=1000 V",
- "then": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs 1000 volt",
- "nl": " heeft een spanning van 1000 volt"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type1_combo~*",
- "socket:type1_combo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What current do the plugs with Type 1 CCS (aka Type 1 Combo) offer?",
- "nl": "Welke stroom levert de stekker van type ?"
- },
- "render": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs at most {socket:type1_combo:current}A",
- "nl": " levert een stroom van maximaal {socket:type1_combo:current}A"
- },
- "freeform": {
- "key": "socket:type1_combo:current",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type1_combo:current=50 A",
- "then": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 A",
- "nl": " levert een stroom van maximaal 50 A"
- }
- },
- {
- "if": "socket:socket:type1_combo:current=125 A",
- "then": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 125 A",
- "nl": " levert een stroom van maximaal 125 A"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type1_combo~*",
- "socket:type1_combo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What power output does a single plug of type Type 1 CCS (aka Type 1 Combo) offer?",
- "nl": "Welk vermogen levert een enkele stekker van type ?"
- },
- "render": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs at most {socket:type1_combo:output}",
- "nl": " levert een vermogen van maximaal {socket:type1_combo:output}"
- },
- "freeform": {
- "key": "socket:type1_combo:output",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type1_combo:output=50 kw",
- "then": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 kw",
- "nl": " levert een vermogen van maximaal 50 kw"
- }
- },
- {
- "if": "socket:socket:type1_combo:output=62.5 kw",
- "then": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 62.5 kw",
- "nl": " levert een vermogen van maximaal 62.5 kw"
- }
- },
- {
- "if": "socket:socket:type1_combo:output=150 kw",
- "then": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 150 kw",
- "nl": " levert een vermogen van maximaal 150 kw"
- }
- },
- {
- "if": "socket:socket:type1_combo:output=350 kw",
- "then": {
- "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 350 kw",
- "nl": " levert een vermogen van maximaal 350 kw"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type1_combo~*",
- "socket:type1_combo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "How much plugs of type Tesla Supercharger are available here?",
- "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
- },
- "render": {
- "en": "There are Tesla Supercharger plugs of type Tesla Supercharger available here",
- "nl": "Hier zijn stekkers van het type "
- },
- "freeform": {
- "key": "socket:tesla_supercharger",
- "type": "pnat"
- },
- "condition": {
- "and": [
- "socket:tesla_supercharger~*",
- "socket:tesla_supercharger!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What voltage do the plugs with Tesla Supercharger offer?",
- "nl": "Welke spanning levert de stekker van type "
- },
- "render": {
- "en": "Tesla Supercharger outputs {socket:tesla_supercharger:voltage} volt",
- "nl": " heeft een spanning van {socket:tesla_supercharger:voltage} volt"
- },
- "freeform": {
- "key": "socket:tesla_supercharger:voltage",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:tesla_supercharger:voltage=480 V",
- "then": {
- "en": "Tesla Supercharger outputs 480 volt",
- "nl": " heeft een spanning van 480 volt"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:tesla_supercharger~*",
- "socket:tesla_supercharger!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What current do the plugs with Tesla Supercharger offer?",
- "nl": "Welke stroom levert de stekker van type ?"
- },
- "render": {
- "en": "Tesla Supercharger outputs at most {socket:tesla_supercharger:current}A",
- "nl": " levert een stroom van maximaal {socket:tesla_supercharger:current}A"
- },
- "freeform": {
- "key": "socket:tesla_supercharger:current",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:tesla_supercharger:current=125 A",
- "then": {
- "en": "Tesla Supercharger outputs at most 125 A",
- "nl": " levert een stroom van maximaal 125 A"
- }
- },
- {
- "if": "socket:socket:tesla_supercharger:current=350 A",
- "then": {
- "en": "Tesla Supercharger outputs at most 350 A",
- "nl": " levert een stroom van maximaal 350 A"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:tesla_supercharger~*",
- "socket:tesla_supercharger!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What power output does a single plug of type Tesla Supercharger offer?",
- "nl": "Welk vermogen levert een enkele stekker van type ?"
- },
- "render": {
- "en": "Tesla Supercharger outputs at most {socket:tesla_supercharger:output}",
- "nl": " levert een vermogen van maximaal {socket:tesla_supercharger:output}"
- },
- "freeform": {
- "key": "socket:tesla_supercharger:output",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:tesla_supercharger:output=120 kw",
- "then": {
- "en": "Tesla Supercharger outputs at most 120 kw",
- "nl": " levert een vermogen van maximaal 120 kw"
- }
- },
- {
- "if": "socket:socket:tesla_supercharger:output=150 kw",
- "then": {
- "en": "Tesla Supercharger outputs at most 150 kw",
- "nl": " levert een vermogen van maximaal 150 kw"
- }
- },
- {
- "if": "socket:socket:tesla_supercharger:output=250 kw",
- "then": {
- "en": "Tesla Supercharger outputs at most 250 kw",
- "nl": " levert een vermogen van maximaal 250 kw"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:tesla_supercharger~*",
- "socket:tesla_supercharger!=0"
- ]
- }
- },
- {
- "question": {
- "en": "How much plugs of type Type 2 (mennekes) are available here?",
- "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
- },
- "render": {
- "en": "There are Type 2 (mennekes) plugs of type Type 2 (mennekes) available here",
- "nl": "Hier zijn stekkers van het type "
- },
- "freeform": {
- "key": "socket:type2",
- "type": "pnat"
- },
- "condition": {
- "and": [
- "socket:type2~*",
- "socket:type2!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What voltage do the plugs with Type 2 (mennekes) offer?",
- "nl": "Welke spanning levert de stekker van type "
- },
- "render": {
- "en": "Type 2 (mennekes) outputs {socket:type2:voltage} volt",
- "nl": " heeft een spanning van {socket:type2:voltage} volt"
- },
- "freeform": {
- "key": "socket:type2:voltage",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type2:voltage=230 V",
- "then": {
- "en": "Type 2 (mennekes) outputs 230 volt",
- "nl": " heeft een spanning van 230 volt"
- }
- },
- {
- "if": "socket:socket:type2:voltage=400 V",
- "then": {
- "en": "Type 2 (mennekes) outputs 400 volt",
- "nl": " heeft een spanning van 400 volt"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type2~*",
- "socket:type2!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What current do the plugs with Type 2 (mennekes) offer?",
- "nl": "Welke stroom levert de stekker van type ?"
- },
- "render": {
- "en": "Type 2 (mennekes) outputs at most {socket:type2:current}A",
- "nl": " levert een stroom van maximaal {socket:type2:current}A"
- },
- "freeform": {
- "key": "socket:type2:current",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type2:current=16 A",
- "then": {
- "en": "Type 2 (mennekes) outputs at most 16 A",
- "nl": " levert een stroom van maximaal 16 A"
- }
- },
- {
- "if": "socket:socket:type2:current=32 A",
- "then": {
- "en": "Type 2 (mennekes) outputs at most 32 A",
- "nl": " levert een stroom van maximaal 32 A"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type2~*",
- "socket:type2!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What power output does a single plug of type Type 2 (mennekes) offer?",
- "nl": "Welk vermogen levert een enkele stekker van type ?"
- },
- "render": {
- "en": "Type 2 (mennekes) outputs at most {socket:type2:output}",
- "nl": " levert een vermogen van maximaal {socket:type2:output}"
- },
- "freeform": {
- "key": "socket:type2:output",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type2:output=11 kw",
- "then": {
- "en": "Type 2 (mennekes) outputs at most 11 kw",
- "nl": " levert een vermogen van maximaal 11 kw"
- }
- },
- {
- "if": "socket:socket:type2:output=22 kw",
- "then": {
- "en": "Type 2 (mennekes) outputs at most 22 kw",
- "nl": " levert een vermogen van maximaal 22 kw"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type2~*",
- "socket:type2!=0"
- ]
- }
- },
- {
- "question": {
- "en": "How much plugs of type Type 2 CCS (mennekes) are available here?",
- "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
- },
- "render": {
- "en": "There are Type 2 CCS (mennekes) plugs of type Type 2 CCS (mennekes) available here",
- "nl": "Hier zijn stekkers van het type "
- },
- "freeform": {
- "key": "socket:type2_combo",
- "type": "pnat"
- },
- "condition": {
- "and": [
- "socket:type2_combo~*",
- "socket:type2_combo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What voltage do the plugs with Type 2 CCS (mennekes) offer?",
- "nl": "Welke spanning levert de stekker van type "
- },
- "render": {
- "en": "Type 2 CCS (mennekes) outputs {socket:type2_combo:voltage} volt",
- "nl": " heeft een spanning van {socket:type2_combo:voltage} volt"
- },
- "freeform": {
- "key": "socket:type2_combo:voltage",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type2_combo:voltage=500 V",
- "then": {
- "en": "Type 2 CCS (mennekes) outputs 500 volt",
- "nl": " heeft een spanning van 500 volt"
- }
- },
- {
- "if": "socket:socket:type2_combo:voltage=920 V",
- "then": {
- "en": "Type 2 CCS (mennekes) outputs 920 volt",
- "nl": " heeft een spanning van 920 volt"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type2_combo~*",
- "socket:type2_combo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What current do the plugs with Type 2 CCS (mennekes) offer?",
- "nl": "Welke stroom levert de stekker van type ?"
- },
- "render": {
- "en": "Type 2 CCS (mennekes) outputs at most {socket:type2_combo:current}A",
- "nl": " levert een stroom van maximaal {socket:type2_combo:current}A"
- },
- "freeform": {
- "key": "socket:type2_combo:current",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type2_combo:current=125 A",
- "then": {
- "en": "Type 2 CCS (mennekes) outputs at most 125 A",
- "nl": " levert een stroom van maximaal 125 A"
- }
- },
- {
- "if": "socket:socket:type2_combo:current=350 A",
- "then": {
- "en": "Type 2 CCS (mennekes) outputs at most 350 A",
- "nl": " levert een stroom van maximaal 350 A"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type2_combo~*",
- "socket:type2_combo!=0"
- ]
- }
- },
- {
- "question": {
- "en": "What power output does a single plug of type Type 2 CCS (mennekes) offer?",
- "nl": "Welk vermogen levert een enkele stekker van type ?"
- },
- "render": {
- "en": "Type 2 CCS (mennekes) outputs at most {socket:type2_combo:output}",
- "nl": " levert een vermogen van maximaal {socket:type2_combo:output}"
- },
- "freeform": {
- "key": "socket:type2_combo:output",
- "type": "pfloat"
- },
- "mappings": [
- {
- "if": "socket:socket:type2_combo:output=50 kw",
- "then": {
- "en": "Type 2 CCS (mennekes) outputs at most 50 kw",
- "nl": " levert een vermogen van maximaal 50 kw"
- }
- }
- ],
- "condition": {
- "and": [
- "socket:type2_combo~*",
- "socket:type2_combo!=0"
- ]
- }
- },
- {
- "#": "Authentication",
- "question": {
- "en": "What kind of authentication is available at the charging station?",
- "it": "Quali sono gli orari di apertura di questa stazione di ricarica?",
- "ja": "この充電ステーションはいつオープンしますか?",
- "nb_NO": "Når åpnet denne ladestasjonen?",
- "ru": "В какое время работает эта зарядная станция?",
- "zh_Hant": "何時是充電站開放使用的時間?"
- },
- "multiAnswer": true,
- "mappings": [
- {
- "if": "authentication:membership_card=yes",
- "ifnot": "authentication:membership_card=no",
- "then": {
- "en": "Authentication by a membership card"
- }
- },
- {
- "if": "authentication:app=yes",
- "ifnot": "authentication:app=no",
- "then": {
- "en": "Authentication by an app"
- }
- },
- {
- "if": "authentication:phone_call=yes",
- "ifnot": "authentication:phone_call=no",
- "then": {
- "en": "Authentication via phone call is available"
- }
- },
- {
- "if": "authentication:short_message=yes",
- "ifnot": "authentication:short_message=no",
- "then": {
- "en": "Authentication via phone call is available"
- }
- },
- {
- "if": "authentication:nfc=yes",
- "ifnot": "authentication:nfc=no",
- "then": {
- "en": "Authentication via NFC is available"
- }
- },
- {
- "if": "authentication:money_card=yes",
- "ifnot": "authentication:money_card=no",
- "then": {
- "en": "Authentication via Money Card is available"
- }
- },
- {
- "if": "authentication:debit_card=yes",
- "ifnot": "authentication:debit_card=no",
- "then": {
- "en": "Authentication via debit card is available"
- }
- },
- {
- "if": "authentication:none=yes",
- "ifnot": "authentication:none=no",
- "then": {
- "en": "No authentication is needed"
- }
- }
- ]
- },
- {
- "#": "Auth phone",
- "render": {
- "en": "Authenticate by calling or SMS'ing to {authentication:phone_call:number}",
- "it": "{network}",
- "ja": "{network}",
- "nb_NO": "{network}",
- "ru": "{network}",
- "zh_Hant": "{network}"
- },
- "question": {
- "en": "What's the phone number for authentication call or SMS?",
- "it": "A quale rete appartiene questa stazione di ricarica?",
- "ja": "この充電ステーションの運営チェーンはどこですか?",
- "ru": "К какой сети относится эта станция?",
- "zh_Hant": "充電站所屬的網路是?"
- },
- "freeform": {
- "key": "authentication:phone_call:number",
- "type": "phone"
- },
- "condition": {
- "or": [
- "authentication:phone_call=yes",
- "authentication:short_message=yes"
- ]
- },
- "it": {
- "0": {
- "then": "Non appartiene a una rete"
- }
- },
- "ja": {
- "0": {
- "then": "大規模な運営チェーンの一部ではない"
- }
- },
- "ru": {
- "0": {
- "then": "Не является частью более крупной сети"
- }
- },
- "zh_Hant": {
- "0": {
- "then": "不屬於大型網路"
- }
- }
- },
- {
- "#": "OH",
- "render": "{opening_hours_table(opening_hours)}",
- "freeform": {
- "key": "opening_hours",
- "type": "opening_hours"
- },
- "question": {
- "en": "When is this charging station opened?"
- },
- "mappings": [
- {
- "if": "opening_hours=24/7",
- "then": {
- "en": "24/7 opened (including holidays)"
- }
- }
- ]
- },
- {
- "#": "fee/charge",
- "question": {
- "en": "How much does one have to pay to use this charging station?",
- "nl": "Hoeveel kost het gebruik van dit oplaadpunt?"
- },
- "freeform": {
- "key": "charge",
- "addExtraTags": [
- "fee=yes"
- ]
- },
- "render": {
- "en": "Using this charging station costs {charge}",
- "nl": "Dit oplaadpunt gebruiken kost {charge}"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "fee=no",
- "charge="
- ]
- },
- "then": {
- "nl": "Gratis te gebruiken",
- "en": "Free to use"
- }
- }
- ]
- },
- {
- "builtin": "payment-options",
- "override": {
- "condition": {
- "or": [
- "fee=yes",
- "charge~*"
- ]
- },
- "mappings+": [
- {
- "if": "payment:app=yes",
- "ifnot": "payment:app=no",
- "then": {
- "en": "Payment is done using a dedicated app",
- "nl": "Betalen via een app van het netwerk"
+ "#": "capacity",
+ "render": {
+ "en": "{capacity} vehicles can be charged here at the same time",
+ "nl": "{capacity} voertuigen kunnen hier op hetzelfde moment opgeladen worden"
+ },
+ "question": {
+ "en": "How much vehicles can be charged here at the same time?",
+ "nl": "Hoeveel voertuigen kunnen hier opgeladen worden?"
+ },
+ "freeform": {
+ "key": "capacity",
+ "type": "pnat"
+ }
+ },
+ {
+ "question": {
+ "en": "Which charging stations are available here?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "socket:schuko=1",
+ "ifnot": "socket:schuko=",
+ "then": {
+ "en": " Schuko wall plug without ground pin (CEE7/4 type F)",
+ "nl": " Schuko stekker zonder aardingspin (CEE7/4 type F)"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:schuko~*",
+ "socket:schuko!=1"
+ ]
+ },
+ "then": {
+ "en": " Schuko wall plug without ground pin (CEE7/4 type F)",
+ "nl": " Schuko stekker zonder aardingspin (CEE7/4 type F)"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:typee=1",
+ "ifnot": "socket:typee=",
+ "then": {
+ "en": " European wall plug with ground pin (CEE7/4 type E)",
+ "nl": " Europese stekker met aardingspin (CEE7/4 type E)"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:typee~*",
+ "socket:typee!=1"
+ ]
+ },
+ "then": {
+ "en": " European wall plug with ground pin (CEE7/4 type E)",
+ "nl": " Europese stekker met aardingspin (CEE7/4 type E)"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:chademo=1",
+ "ifnot": "socket:chademo=",
+ "then": {
+ "en": " Chademo",
+ "nl": " "
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:chademo~*",
+ "socket:chademo!=1"
+ ]
+ },
+ "then": {
+ "en": " Chademo",
+ "nl": " "
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:type1_cable=1",
+ "ifnot": "socket:type1_cable=",
+ "then": {
+ "en": " Type 1 with cable (J1772)",
+ "nl": " Type 1 met kabel (J1772)"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:type1_cable~*",
+ "socket:type1_cable!=1"
+ ]
+ },
+ "then": {
+ "en": " Type 1 with cable (J1772)",
+ "nl": " Type 1 met kabel (J1772)"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:type1=1",
+ "ifnot": "socket:type1=",
+ "then": {
+ "en": " Type 1 without cable (J1772)",
+ "nl": " Type 1 zonder kabel (J1772)"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:type1~*",
+ "socket:type1!=1"
+ ]
+ },
+ "then": {
+ "en": " Type 1 without cable (J1772)",
+ "nl": " Type 1 zonder kabel (J1772)"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:type1_combo=1",
+ "ifnot": "socket:type1_combo=",
+ "then": {
+ "en": " Type 1 CCS (aka Type 1 Combo)",
+ "nl": " "
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:type1_combo~*",
+ "socket:type1_combo!=1"
+ ]
+ },
+ "then": {
+ "en": " Type 1 CCS (aka Type 1 Combo)",
+ "nl": " "
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:tesla_supercharger=1",
+ "ifnot": "socket:tesla_supercharger=",
+ "then": {
+ "en": " Tesla Supercharger",
+ "nl": " "
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:tesla_supercharger~*",
+ "socket:tesla_supercharger!=1"
+ ]
+ },
+ "then": {
+ "en": " Tesla Supercharger",
+ "nl": " "
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:type2=1",
+ "ifnot": "socket:type2=",
+ "then": {
+ "en": " Type 2 (mennekes)",
+ "nl": " "
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:type2~*",
+ "socket:type2!=1"
+ ]
+ },
+ "then": {
+ "en": " Type 2 (mennekes)",
+ "nl": " "
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:type2_combo=1",
+ "ifnot": "socket:type2_combo=",
+ "then": {
+ "en": " Type 2 CCS (mennekes)",
+ "nl": " "
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:type2_combo~*",
+ "socket:type2_combo!=1"
+ ]
+ },
+ "then": {
+ "en": " Type 2 CCS (mennekes)",
+ "nl": " "
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "How much plugs of type Schuko wall plug without ground pin (CEE7/4 type F) are available here?",
+ "nl": "Hoeveel stekkers van type Schuko stekker zonder aardingspin (CEE7/4 type F) heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Schuko wall plug without ground pin (CEE7/4 type F) plugs of type Schuko wall plug without ground pin (CEE7/4 type F) available here",
+ "nl": "Hier zijn Schuko stekker zonder aardingspin (CEE7/4 type F) stekkers van het type Schuko stekker zonder aardingspin (CEE7/4 type F)"
+ },
+ "freeform": {
+ "key": "socket:schuko",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:schuko~*",
+ "socket:schuko!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What voltage do the plugs with Schuko wall plug without ground pin (CEE7/4 type F) offer?",
+ "nl": "Welke spanning levert de stekker van type Schuko stekker zonder aardingspin (CEE7/4 type F) "
+ },
+ "render": {
+ "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs {socket:schuko:voltage} volt",
+ "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) heeft een spanning van {socket:schuko:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:schuko:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:schuko:voltage=230 V",
+ "then": {
+ "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs 230 volt",
+ "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) heeft een spanning van 230 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:schuko~*",
+ "socket:schuko!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What current do the plugs with Schuko wall plug without ground pin (CEE7/4 type F) offer?",
+ "nl": "Welke stroom levert de stekker van type Schuko stekker zonder aardingspin (CEE7/4 type F) ?"
+ },
+ "render": {
+ "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most {socket:schuko:current}A",
+ "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal {socket:schuko:current}A"
+ },
+ "freeform": {
+ "key": "socket:schuko:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:schuko:current=16 A",
+ "then": {
+ "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 16 A",
+ "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een stroom van maximaal 16 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:schuko~*",
+ "socket:schuko!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What power output does a single plug of type Schuko wall plug without ground pin (CEE7/4 type F) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type Schuko stekker zonder aardingspin (CEE7/4 type F) ?"
+ },
+ "render": {
+ "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most {socket:schuko:output}",
+ "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal {socket:schuko:output}"
+ },
+ "freeform": {
+ "key": "socket:schuko:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:schuko:output=3.6 kw",
+ "then": {
+ "en": "Schuko wall plug without ground pin (CEE7/4 type F) outputs at most 3.6 kw",
+ "nl": "Schuko stekker zonder aardingspin (CEE7/4 type F) levert een vermogen van maximaal 3.6 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:schuko~*",
+ "socket:schuko!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "How much plugs of type European wall plug with ground pin (CEE7/4 type E) are available here?",
+ "nl": "Hoeveel stekkers van type Europese stekker met aardingspin (CEE7/4 type E) heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are European wall plug with ground pin (CEE7/4 type E) plugs of type European wall plug with ground pin (CEE7/4 type E) available here",
+ "nl": "Hier zijn Europese stekker met aardingspin (CEE7/4 type E) stekkers van het type Europese stekker met aardingspin (CEE7/4 type E)"
+ },
+ "freeform": {
+ "key": "socket:typee",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:typee~*",
+ "socket:typee!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What voltage do the plugs with European wall plug with ground pin (CEE7/4 type E) offer?",
+ "nl": "Welke spanning levert de stekker van type Europese stekker met aardingspin (CEE7/4 type E) "
+ },
+ "render": {
+ "en": "European wall plug with ground pin (CEE7/4 type E) outputs {socket:typee:voltage} volt",
+ "nl": "Europese stekker met aardingspin (CEE7/4 type E) heeft een spanning van {socket:typee:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:typee:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:typee:voltage=230 V",
+ "then": {
+ "en": "European wall plug with ground pin (CEE7/4 type E) outputs 230 volt",
+ "nl": "Europese stekker met aardingspin (CEE7/4 type E) heeft een spanning van 230 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:typee~*",
+ "socket:typee!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What current do the plugs with European wall plug with ground pin (CEE7/4 type E) offer?",
+ "nl": "Welke stroom levert de stekker van type Europese stekker met aardingspin (CEE7/4 type E) ?"
+ },
+ "render": {
+ "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most {socket:typee:current}A",
+ "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een stroom van maximaal {socket:typee:current}A"
+ },
+ "freeform": {
+ "key": "socket:typee:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:typee:current=16 A",
+ "then": {
+ "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 16 A",
+ "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een stroom van maximaal 16 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:typee~*",
+ "socket:typee!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What power output does a single plug of type European wall plug with ground pin (CEE7/4 type E) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type Europese stekker met aardingspin (CEE7/4 type E) ?"
+ },
+ "render": {
+ "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most {socket:typee:output}",
+ "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal {socket:typee:output}"
+ },
+ "freeform": {
+ "key": "socket:typee:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:typee:output=3 kw",
+ "then": {
+ "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 3 kw",
+ "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 3 kw"
+ }
+ },
+ {
+ "if": "socket:socket:typee:output=22 kw",
+ "then": {
+ "en": "European wall plug with ground pin (CEE7/4 type E) outputs at most 22 kw",
+ "nl": "Europese stekker met aardingspin (CEE7/4 type E) levert een vermogen van maximaal 22 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:typee~*",
+ "socket:typee!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "How much plugs of type Chademo are available here?",
+ "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Chademo plugs of type Chademo available here",
+ "nl": "Hier zijn stekkers van het type "
+ },
+ "freeform": {
+ "key": "socket:chademo",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:chademo~*",
+ "socket:chademo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What voltage do the plugs with Chademo offer?",
+ "nl": "Welke spanning levert de stekker van type "
+ },
+ "render": {
+ "en": "Chademo outputs {socket:chademo:voltage} volt",
+ "nl": " heeft een spanning van {socket:chademo:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:chademo:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:chademo:voltage=500 V",
+ "then": {
+ "en": "Chademo outputs 500 volt",
+ "nl": " heeft een spanning van 500 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:chademo~*",
+ "socket:chademo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What current do the plugs with Chademo offer?",
+ "nl": "Welke stroom levert de stekker van type ?"
+ },
+ "render": {
+ "en": "Chademo outputs at most {socket:chademo:current}A",
+ "nl": " levert een stroom van maximaal {socket:chademo:current}A"
+ },
+ "freeform": {
+ "key": "socket:chademo:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:chademo:current=120 A",
+ "then": {
+ "en": "Chademo outputs at most 120 A",
+ "nl": " levert een stroom van maximaal 120 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:chademo~*",
+ "socket:chademo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What power output does a single plug of type Chademo offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type ?"
+ },
+ "render": {
+ "en": "Chademo outputs at most {socket:chademo:output}",
+ "nl": " levert een vermogen van maximaal {socket:chademo:output}"
+ },
+ "freeform": {
+ "key": "socket:chademo:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:chademo:output=50 kw",
+ "then": {
+ "en": "Chademo outputs at most 50 kw",
+ "nl": " levert een vermogen van maximaal 50 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:chademo~*",
+ "socket:chademo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "How much plugs of type Type 1 with cable (J1772) are available here?",
+ "nl": "Hoeveel stekkers van type Type 1 met kabel (J1772) heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Type 1 with cable (J1772) plugs of type Type 1 with cable (J1772) available here",
+ "nl": "Hier zijn Type 1 met kabel (J1772) stekkers van het type Type 1 met kabel (J1772)"
+ },
+ "freeform": {
+ "key": "socket:type1_cable",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:type1_cable~*",
+ "socket:type1_cable!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What voltage do the plugs with Type 1 with cable (J1772) offer?",
+ "nl": "Welke spanning levert de stekker van type Type 1 met kabel (J1772) "
+ },
+ "render": {
+ "en": "Type 1 with cable (J1772) outputs {socket:type1_cable:voltage} volt",
+ "nl": "Type 1 met kabel (J1772) heeft een spanning van {socket:type1_cable:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:type1_cable:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type1_cable:voltage=200 V",
+ "then": {
+ "en": "Type 1 with cable (J1772) outputs 200 volt",
+ "nl": "Type 1 met kabel (J1772) heeft een spanning van 200 volt"
+ }
+ },
+ {
+ "if": "socket:socket:type1_cable:voltage=240 V",
+ "then": {
+ "en": "Type 1 with cable (J1772) outputs 240 volt",
+ "nl": "Type 1 met kabel (J1772) heeft een spanning van 240 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type1_cable~*",
+ "socket:type1_cable!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What current do the plugs with Type 1 with cable (J1772) offer?",
+ "nl": "Welke stroom levert de stekker van type Type 1 met kabel (J1772) ?"
+ },
+ "render": {
+ "en": "Type 1 with cable (J1772) outputs at most {socket:type1_cable:current}A",
+ "nl": "Type 1 met kabel (J1772) levert een stroom van maximaal {socket:type1_cable:current}A"
+ },
+ "freeform": {
+ "key": "socket:type1_cable:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type1_cable:current=32 A",
+ "then": {
+ "en": "Type 1 with cable (J1772) outputs at most 32 A",
+ "nl": "Type 1 met kabel (J1772) levert een stroom van maximaal 32 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type1_cable~*",
+ "socket:type1_cable!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What power output does a single plug of type Type 1 with cable (J1772) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type Type 1 met kabel (J1772) ?"
+ },
+ "render": {
+ "en": "Type 1 with cable (J1772) outputs at most {socket:type1_cable:output}",
+ "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal {socket:type1_cable:output}"
+ },
+ "freeform": {
+ "key": "socket:type1_cable:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type1_cable:output=3.7 kw",
+ "then": {
+ "en": "Type 1 with cable (J1772) outputs at most 3.7 kw",
+ "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 3.7 kw"
+ }
+ },
+ {
+ "if": "socket:socket:type1_cable:output=7 kw",
+ "then": {
+ "en": "Type 1 with cable (J1772) outputs at most 7 kw",
+ "nl": "Type 1 met kabel (J1772) levert een vermogen van maximaal 7 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type1_cable~*",
+ "socket:type1_cable!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "How much plugs of type Type 1 without cable (J1772) are available here?",
+ "nl": "Hoeveel stekkers van type Type 1 zonder kabel (J1772) heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Type 1 without cable (J1772) plugs of type Type 1 without cable (J1772) available here",
+ "nl": "Hier zijn Type 1 zonder kabel (J1772) stekkers van het type Type 1 zonder kabel (J1772)"
+ },
+ "freeform": {
+ "key": "socket:type1",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:type1~*",
+ "socket:type1!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What voltage do the plugs with Type 1 without cable (J1772) offer?",
+ "nl": "Welke spanning levert de stekker van type Type 1 zonder kabel (J1772) "
+ },
+ "render": {
+ "en": "Type 1 without cable (J1772) outputs {socket:type1:voltage} volt",
+ "nl": "Type 1 zonder kabel (J1772) heeft een spanning van {socket:type1:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:type1:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type1:voltage=200 V",
+ "then": {
+ "en": "Type 1 without cable (J1772) outputs 200 volt",
+ "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 200 volt"
+ }
+ },
+ {
+ "if": "socket:socket:type1:voltage=240 V",
+ "then": {
+ "en": "Type 1 without cable (J1772) outputs 240 volt",
+ "nl": "Type 1 zonder kabel (J1772) heeft een spanning van 240 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type1~*",
+ "socket:type1!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What current do the plugs with Type 1 without cable (J1772) offer?",
+ "nl": "Welke stroom levert de stekker van type Type 1 zonder kabel (J1772) ?"
+ },
+ "render": {
+ "en": "Type 1 without cable (J1772) outputs at most {socket:type1:current}A",
+ "nl": "Type 1 zonder kabel (J1772) levert een stroom van maximaal {socket:type1:current}A"
+ },
+ "freeform": {
+ "key": "socket:type1:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type1:current=32 A",
+ "then": {
+ "en": "Type 1 without cable (J1772) outputs at most 32 A",
+ "nl": "Type 1 zonder kabel (J1772) levert een stroom van maximaal 32 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type1~*",
+ "socket:type1!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What power output does a single plug of type Type 1 without cable (J1772) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type Type 1 zonder kabel (J1772) ?"
+ },
+ "render": {
+ "en": "Type 1 without cable (J1772) outputs at most {socket:type1:output}",
+ "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal {socket:type1:output}"
+ },
+ "freeform": {
+ "key": "socket:type1:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type1:output=3.7 kw",
+ "then": {
+ "en": "Type 1 without cable (J1772) outputs at most 3.7 kw",
+ "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 3.7 kw"
+ }
+ },
+ {
+ "if": "socket:socket:type1:output=6.6 kw",
+ "then": {
+ "en": "Type 1 without cable (J1772) outputs at most 6.6 kw",
+ "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 6.6 kw"
+ }
+ },
+ {
+ "if": "socket:socket:type1:output=7 kw",
+ "then": {
+ "en": "Type 1 without cable (J1772) outputs at most 7 kw",
+ "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7 kw"
+ }
+ },
+ {
+ "if": "socket:socket:type1:output=7.2 kw",
+ "then": {
+ "en": "Type 1 without cable (J1772) outputs at most 7.2 kw",
+ "nl": "Type 1 zonder kabel (J1772) levert een vermogen van maximaal 7.2 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type1~*",
+ "socket:type1!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "How much plugs of type Type 1 CCS (aka Type 1 Combo) are available here?",
+ "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Type 1 CCS (aka Type 1 Combo) plugs of type Type 1 CCS (aka Type 1 Combo) available here",
+ "nl": "Hier zijn stekkers van het type "
+ },
+ "freeform": {
+ "key": "socket:type1_combo",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:type1_combo~*",
+ "socket:type1_combo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What voltage do the plugs with Type 1 CCS (aka Type 1 Combo) offer?",
+ "nl": "Welke spanning levert de stekker van type "
+ },
+ "render": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs {socket:type1_combo:voltage} volt",
+ "nl": " heeft een spanning van {socket:type1_combo:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:type1_combo:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type1_combo:voltage=400 V",
+ "then": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs 400 volt",
+ "nl": " heeft een spanning van 400 volt"
+ }
+ },
+ {
+ "if": "socket:socket:type1_combo:voltage=1000 V",
+ "then": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs 1000 volt",
+ "nl": " heeft een spanning van 1000 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type1_combo~*",
+ "socket:type1_combo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What current do the plugs with Type 1 CCS (aka Type 1 Combo) offer?",
+ "nl": "Welke stroom levert de stekker van type ?"
+ },
+ "render": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs at most {socket:type1_combo:current}A",
+ "nl": " levert een stroom van maximaal {socket:type1_combo:current}A"
+ },
+ "freeform": {
+ "key": "socket:type1_combo:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type1_combo:current=50 A",
+ "then": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 A",
+ "nl": " levert een stroom van maximaal 50 A"
+ }
+ },
+ {
+ "if": "socket:socket:type1_combo:current=125 A",
+ "then": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 125 A",
+ "nl": " levert een stroom van maximaal 125 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type1_combo~*",
+ "socket:type1_combo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What power output does a single plug of type Type 1 CCS (aka Type 1 Combo) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type ?"
+ },
+ "render": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs at most {socket:type1_combo:output}",
+ "nl": " levert een vermogen van maximaal {socket:type1_combo:output}"
+ },
+ "freeform": {
+ "key": "socket:type1_combo:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type1_combo:output=50 kw",
+ "then": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 50 kw",
+ "nl": " levert een vermogen van maximaal 50 kw"
+ }
+ },
+ {
+ "if": "socket:socket:type1_combo:output=62.5 kw",
+ "then": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 62.5 kw",
+ "nl": " levert een vermogen van maximaal 62.5 kw"
+ }
+ },
+ {
+ "if": "socket:socket:type1_combo:output=150 kw",
+ "then": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 150 kw",
+ "nl": " levert een vermogen van maximaal 150 kw"
+ }
+ },
+ {
+ "if": "socket:socket:type1_combo:output=350 kw",
+ "then": {
+ "en": "Type 1 CCS (aka Type 1 Combo) outputs at most 350 kw",
+ "nl": " levert een vermogen van maximaal 350 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type1_combo~*",
+ "socket:type1_combo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "How much plugs of type Tesla Supercharger are available here?",
+ "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Tesla Supercharger plugs of type Tesla Supercharger available here",
+ "nl": "Hier zijn stekkers van het type "
+ },
+ "freeform": {
+ "key": "socket:tesla_supercharger",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:tesla_supercharger~*",
+ "socket:tesla_supercharger!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What voltage do the plugs with Tesla Supercharger offer?",
+ "nl": "Welke spanning levert de stekker van type "
+ },
+ "render": {
+ "en": "Tesla Supercharger outputs {socket:tesla_supercharger:voltage} volt",
+ "nl": " heeft een spanning van {socket:tesla_supercharger:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:tesla_supercharger:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_supercharger:voltage=480 V",
+ "then": {
+ "en": "Tesla Supercharger outputs 480 volt",
+ "nl": " heeft een spanning van 480 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_supercharger~*",
+ "socket:tesla_supercharger!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What current do the plugs with Tesla Supercharger offer?",
+ "nl": "Welke stroom levert de stekker van type ?"
+ },
+ "render": {
+ "en": "Tesla Supercharger outputs at most {socket:tesla_supercharger:current}A",
+ "nl": " levert een stroom van maximaal {socket:tesla_supercharger:current}A"
+ },
+ "freeform": {
+ "key": "socket:tesla_supercharger:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_supercharger:current=125 A",
+ "then": {
+ "en": "Tesla Supercharger outputs at most 125 A",
+ "nl": " levert een stroom van maximaal 125 A"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_supercharger:current=350 A",
+ "then": {
+ "en": "Tesla Supercharger outputs at most 350 A",
+ "nl": " levert een stroom van maximaal 350 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_supercharger~*",
+ "socket:tesla_supercharger!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What power output does a single plug of type Tesla Supercharger offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type ?"
+ },
+ "render": {
+ "en": "Tesla Supercharger outputs at most {socket:tesla_supercharger:output}",
+ "nl": " levert een vermogen van maximaal {socket:tesla_supercharger:output}"
+ },
+ "freeform": {
+ "key": "socket:tesla_supercharger:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_supercharger:output=120 kw",
+ "then": {
+ "en": "Tesla Supercharger outputs at most 120 kw",
+ "nl": " levert een vermogen van maximaal 120 kw"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_supercharger:output=150 kw",
+ "then": {
+ "en": "Tesla Supercharger outputs at most 150 kw",
+ "nl": " levert een vermogen van maximaal 150 kw"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_supercharger:output=250 kw",
+ "then": {
+ "en": "Tesla Supercharger outputs at most 250 kw",
+ "nl": " levert een vermogen van maximaal 250 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_supercharger~*",
+ "socket:tesla_supercharger!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "How much plugs of type Type 2 (mennekes) are available here?",
+ "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Type 2 (mennekes) plugs of type Type 2 (mennekes) available here",
+ "nl": "Hier zijn stekkers van het type "
+ },
+ "freeform": {
+ "key": "socket:type2",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:type2~*",
+ "socket:type2!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What voltage do the plugs with Type 2 (mennekes) offer?",
+ "nl": "Welke spanning levert de stekker van type "
+ },
+ "render": {
+ "en": "Type 2 (mennekes) outputs {socket:type2:voltage} volt",
+ "nl": " heeft een spanning van {socket:type2:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:type2:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type2:voltage=230 V",
+ "then": {
+ "en": "Type 2 (mennekes) outputs 230 volt",
+ "nl": " heeft een spanning van 230 volt"
+ }
+ },
+ {
+ "if": "socket:socket:type2:voltage=400 V",
+ "then": {
+ "en": "Type 2 (mennekes) outputs 400 volt",
+ "nl": " heeft een spanning van 400 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type2~*",
+ "socket:type2!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What current do the plugs with Type 2 (mennekes) offer?",
+ "nl": "Welke stroom levert de stekker van type ?"
+ },
+ "render": {
+ "en": "Type 2 (mennekes) outputs at most {socket:type2:current}A",
+ "nl": " levert een stroom van maximaal {socket:type2:current}A"
+ },
+ "freeform": {
+ "key": "socket:type2:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type2:current=16 A",
+ "then": {
+ "en": "Type 2 (mennekes) outputs at most 16 A",
+ "nl": " levert een stroom van maximaal 16 A"
+ }
+ },
+ {
+ "if": "socket:socket:type2:current=32 A",
+ "then": {
+ "en": "Type 2 (mennekes) outputs at most 32 A",
+ "nl": " levert een stroom van maximaal 32 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type2~*",
+ "socket:type2!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What power output does a single plug of type Type 2 (mennekes) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type ?"
+ },
+ "render": {
+ "en": "Type 2 (mennekes) outputs at most {socket:type2:output}",
+ "nl": " levert een vermogen van maximaal {socket:type2:output}"
+ },
+ "freeform": {
+ "key": "socket:type2:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type2:output=11 kw",
+ "then": {
+ "en": "Type 2 (mennekes) outputs at most 11 kw",
+ "nl": " levert een vermogen van maximaal 11 kw"
+ }
+ },
+ {
+ "if": "socket:socket:type2:output=22 kw",
+ "then": {
+ "en": "Type 2 (mennekes) outputs at most 22 kw",
+ "nl": " levert een vermogen van maximaal 22 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type2~*",
+ "socket:type2!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "How much plugs of type Type 2 CCS (mennekes) are available here?",
+ "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Type 2 CCS (mennekes) plugs of type Type 2 CCS (mennekes) available here",
+ "nl": "Hier zijn stekkers van het type "
+ },
+ "freeform": {
+ "key": "socket:type2_combo",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:type2_combo~*",
+ "socket:type2_combo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What voltage do the plugs with Type 2 CCS (mennekes) offer?",
+ "nl": "Welke spanning levert de stekker van type "
+ },
+ "render": {
+ "en": "Type 2 CCS (mennekes) outputs {socket:type2_combo:voltage} volt",
+ "nl": " heeft een spanning van {socket:type2_combo:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:type2_combo:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type2_combo:voltage=500 V",
+ "then": {
+ "en": "Type 2 CCS (mennekes) outputs 500 volt",
+ "nl": " heeft een spanning van 500 volt"
+ }
+ },
+ {
+ "if": "socket:socket:type2_combo:voltage=920 V",
+ "then": {
+ "en": "Type 2 CCS (mennekes) outputs 920 volt",
+ "nl": " heeft een spanning van 920 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type2_combo~*",
+ "socket:type2_combo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What current do the plugs with Type 2 CCS (mennekes) offer?",
+ "nl": "Welke stroom levert de stekker van type ?"
+ },
+ "render": {
+ "en": "Type 2 CCS (mennekes) outputs at most {socket:type2_combo:current}A",
+ "nl": " levert een stroom van maximaal {socket:type2_combo:current}A"
+ },
+ "freeform": {
+ "key": "socket:type2_combo:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type2_combo:current=125 A",
+ "then": {
+ "en": "Type 2 CCS (mennekes) outputs at most 125 A",
+ "nl": " levert een stroom van maximaal 125 A"
+ }
+ },
+ {
+ "if": "socket:socket:type2_combo:current=350 A",
+ "then": {
+ "en": "Type 2 CCS (mennekes) outputs at most 350 A",
+ "nl": " levert een stroom van maximaal 350 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type2_combo~*",
+ "socket:type2_combo!=0"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "What power output does a single plug of type Type 2 CCS (mennekes) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type ?"
+ },
+ "render": {
+ "en": "Type 2 CCS (mennekes) outputs at most {socket:type2_combo:output}",
+ "nl": " levert een vermogen van maximaal {socket:type2_combo:output}"
+ },
+ "freeform": {
+ "key": "socket:type2_combo:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type2_combo:output=50 kw",
+ "then": {
+ "en": "Type 2 CCS (mennekes) outputs at most 50 kw",
+ "nl": " levert een vermogen van maximaal 50 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type2_combo~*",
+ "socket:type2_combo!=0"
+ ]
+ }
+ },
+ {
+ "#": "Authentication",
+ "question": {
+ "en": "What kind of authentication is available at the charging station?",
+ "it": "Quali sono gli orari di apertura di questa stazione di ricarica?",
+ "ja": "この充電ステーションはいつオープンしますか?",
+ "nb_NO": "Når åpnet denne ladestasjonen?",
+ "ru": "В какое время работает эта зарядная станция?",
+ "zh_Hant": "何時是充電站開放使用的時間?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "authentication:membership_card=yes",
+ "ifnot": "authentication:membership_card=no",
+ "then": {
+ "en": "Authentication by a membership card"
+ }
+ },
+ {
+ "if": "authentication:app=yes",
+ "ifnot": "authentication:app=no",
+ "then": {
+ "en": "Authentication by an app"
+ }
+ },
+ {
+ "if": "authentication:phone_call=yes",
+ "ifnot": "authentication:phone_call=no",
+ "then": {
+ "en": "Authentication via phone call is available"
+ }
+ },
+ {
+ "if": "authentication:short_message=yes",
+ "ifnot": "authentication:short_message=no",
+ "then": {
+ "en": "Authentication via phone call is available"
+ }
+ },
+ {
+ "if": "authentication:nfc=yes",
+ "ifnot": "authentication:nfc=no",
+ "then": {
+ "en": "Authentication via NFC is available"
+ }
+ },
+ {
+ "if": "authentication:money_card=yes",
+ "ifnot": "authentication:money_card=no",
+ "then": {
+ "en": "Authentication via Money Card is available"
+ }
+ },
+ {
+ "if": "authentication:debit_card=yes",
+ "ifnot": "authentication:debit_card=no",
+ "then": {
+ "en": "Authentication via debit card is available"
+ }
+ },
+ {
+ "if": "authentication:none=yes",
+ "ifnot": "authentication:none=no",
+ "then": {
+ "en": "No authentication is needed"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Auth phone",
+ "render": {
+ "en": "Authenticate by calling or SMS'ing to {authentication:phone_call:number}",
+ "it": "{network}",
+ "ja": "{network}",
+ "nb_NO": "{network}",
+ "ru": "{network}",
+ "zh_Hant": "{network}"
+ },
+ "question": {
+ "en": "What's the phone number for authentication call or SMS?",
+ "it": "A quale rete appartiene questa stazione di ricarica?",
+ "ja": "この充電ステーションの運営チェーンはどこですか?",
+ "ru": "К какой сети относится эта станция?",
+ "zh_Hant": "充電站所屬的網路是?"
+ },
+ "freeform": {
+ "key": "authentication:phone_call:number",
+ "type": "phone"
+ },
+ "condition": {
+ "or": [
+ "authentication:phone_call=yes",
+ "authentication:short_message=yes"
+ ]
+ },
+ "it": {
+ "0": {
+ "then": "Non appartiene a una rete"
+ }
+ },
+ "ja": {
+ "0": {
+ "then": "大規模な運営チェーンの一部ではない"
+ }
+ },
+ "ru": {
+ "0": {
+ "then": "Не является частью более крупной сети"
+ }
+ },
+ "zh_Hant": {
+ "0": {
+ "then": "不屬於大型網路"
+ }
+ }
+ },
+ {
+ "#": "OH",
+ "render": "{opening_hours_table(opening_hours)}",
+ "freeform": {
+ "key": "opening_hours",
+ "type": "opening_hours"
+ },
+ "question": {
+ "en": "When is this charging station opened?"
+ },
+ "mappings": [
+ {
+ "if": "opening_hours=24/7",
+ "then": {
+ "en": "24/7 opened (including holidays)"
+ }
+ }
+ ]
+ },
+ {
+ "#": "fee/charge",
+ "question": {
+ "en": "How much does one have to pay to use this charging station?",
+ "nl": "Hoeveel kost het gebruik van dit oplaadpunt?"
+ },
+ "freeform": {
+ "key": "charge",
+ "addExtraTags": [
+ "fee=yes"
+ ]
+ },
+ "render": {
+ "en": "Using this charging station costs {charge}",
+ "nl": "Dit oplaadpunt gebruiken kost {charge}"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "fee=no",
+ "charge="
+ ]
+ },
+ "then": {
+ "nl": "Gratis te gebruiken",
+ "en": "Free to use"
+ }
+ }
+ ]
+ },
+ {
+ "builtin": "payment-options",
+ "override": {
+ "condition": {
+ "or": [
+ "fee=yes",
+ "charge~*"
+ ]
+ },
+ "mappings+": [
+ {
+ "if": "payment:app=yes",
+ "ifnot": "payment:app=no",
+ "then": {
+ "en": "Payment is done using a dedicated app",
+ "nl": "Betalen via een app van het netwerk"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "#": "maxstay",
+ "question": {
+ "en": "What is the maximum amount of time one is allowed to stay here?",
+ "nl": "Hoelang mag een voertuig hier blijven staan?"
+ },
+ "freeform": {
+ "key": "maxstay"
+ },
+ "render": {
+ "en": "One can stay at most {canonical(maxstay)}",
+ "nl": "De maximale parkeertijd hier is {canonical(maxstay)}"
+ },
+ "mappings": [
+ {
+ "if": "maxstay=unlimited",
+ "then": {
+ "en": "No timelimit on leaving your vehicle here",
+ "nl": "Geen maximum parkeertijd"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Network",
+ "render": {
+ "en": "Part of the network {network}"
+ },
+ "question": {
+ "en": "Is this charging station part of a network?"
+ },
+ "freeform": {
+ "key": "network"
+ },
+ "mappings": [
+ {
+ "if": "no:network=yes",
+ "then": {
+ "en": "Not part of a bigger network"
+ }
+ },
+ {
+ "if": "network=none",
+ "then": {
+ "en": "Not part of a bigger network"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "network=AeroVironment",
+ "then": "AeroVironment"
+ },
+ {
+ "if": "network=Blink",
+ "then": "Blink"
+ },
+ {
+ "if": "network=eVgo",
+ "then": "eVgo"
+ }
+ ]
+ },
+ {
+ "#": "Operator",
+ "question": "Who is the operator of this charging station?",
+ "render": "This charging station is operated by {operator}",
+ "freeform": {
+ "key": "operator"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "network:={operator}"
+ ]
+ },
+ "then": "Actually, {operator} is the network",
+ "addExtraTags": [
+ "operator="
+ ],
+ "hideInAnswer": "operator="
+ }
+ ]
+ },
+ {
+ "#": "phone",
+ "question": {
+ "en": "What number can one call if there is a problem with this charging station?"
+ },
+ "render": {
+ "en": "In case of problems, call {phone}"
+ },
+ "freeform": {
+ "key": "phone",
+ "type": "phone"
+ }
+ },
+ {
+ "#": "email",
+ "question": {
+ "en": "What is the email address of the operator?"
+ },
+ "render": {
+ "en": "In case of problems, send an email to {email}"
+ },
+ "freeform": {
+ "key": "email",
+ "type": "email"
+ }
+ },
+ {
+ "#": "website",
+ "question": {
+ "en": "What is the website of the operator?"
+ },
+ "render": {
+ "en": "More info on {website}"
+ },
+ "freeform": {
+ "key": "website",
+ "type": "url"
+ }
+ },
+ "level",
+ {
+ "#": "ref",
+ "question": {
+ "en": "What is the reference number of this charging station?"
+ },
+ "render": "Reference number is {ref}",
+ "freeform": {
+ "key": "ref"
+ }
+ },
+ {
+ "#": "Operational status",
+ "question": {
+ "en": "Is this charging point in use?",
+ "nl": "Is dit oplaadpunt operationeel?"
+ },
+ "mappings": [
+ {
+ "if": "operational_status=broken",
+ "then": {
+ "en": "This charging station is broken",
+ "nl": "Dit oplaadpunt is kapot"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "planned:amenity=charging_station",
+ "amenity="
+ ]
+ },
+ "then": {
+ "en": "A charging station is planned here",
+ "nl": "Hier zal binnenkort een oplaadpunt gebouwd worden"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "construction:amenity=charging_station",
+ "amenity="
+ ]
+ },
+ "then": {
+ "en": "A charging station is constructed here",
+ "nl": "Hier wordt op dit moment een oplaadpunt gebouwd"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "disused:amenity=charging_station",
+ "amenity="
+ ]
+ },
+ "then": {
+ "en": "This charging station has beed permanently disabled and is not in use anymore but is still visible",
+ "nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig"
+ }
+ },
+ {
+ "if": "amenity=charging_station",
+ "then": {
+ "en": "This charging station works",
+ "nl": "Dit oplaadpunt werkt"
+ }
+ }
+ ]
+ }
+ ],
+ "icon": {
+ "render": "pin:#fff;./assets/themes/charging_stations/plug.svg",
+ "mappings": [
+ {
+ "if": "bicycle=yes",
+ "then": "pin:#fff;./assets/themes/charging_stations/bicycle.svg"
+ },
+ {
+ "if": {
+ "or": [
+ "car=yes",
+ "motorcar=yes"
+ ]
+ },
+ "then": "pin:#fff;./assets/themes/charging_stations/car.svg"
}
- }
]
- }
},
- {
- "#": "maxstay",
- "question": {
- "en": "What is the maximum amount of time one is allowed to stay here?",
- "nl": "Hoelang mag een voertuig hier blijven staan?"
- },
- "freeform": {
- "key": "maxstay"
- },
- "render": {
- "en": "One can stay at most {canonical(maxstay)}",
- "nl": "De maximale parkeertijd hier is {canonical(maxstay)}"
- },
- "mappings": [
+ "iconOverlays": [
{
- "if": "maxstay=unlimited",
- "then": {
- "en": "No timelimit on leaving your vehicle here",
- "nl": "Geen maximum parkeertijd"
- }
+ "if": {
+ "or": [
+ "disused:amenity=charging_station",
+ "operational_status=broken"
+ ]
+ },
+ "then": "cross_bottom_right:#c22;"
+ },
+ {
+ "if": {
+ "or": [
+ "proposed:amenity=charging_station",
+ "planned:amenity=charging_station"
+ ]
+ },
+ "then": "./assets/layers/charging_station/under_construction.svg",
+ "badge": true
+ },
+ {
+ "if": {
+ "and": [
+ "bicycle=yes",
+ {
+ "or": [
+ "motorcar=yes",
+ "car=yes"
+ ]
+ }
+ ]
+ },
+ "then": "circle:#fff;./assets/themes/charging_stations/car.svg",
+ "badge": true
}
- ]
+ ],
+ "width": {
+ "render": "8"
},
- {
- "#": "Network",
- "render": {
- "en": "Part of the network {network}"
- },
- "question": {
- "en": "Is this charging station part of a network?"
- },
- "freeform": {
- "key": "network"
- },
- "mappings": [
+ "iconSize": {
+ "render": "50,50,bottom"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": [
{
- "if": "no:network=yes",
- "then": {
- "en": "Not part of a bigger network"
- }
- },
- {
- "if": "network=none",
- "then": {
- "en": "Not part of a bigger network"
- },
- "hideInAnswer": true
- },
- {
- "if": "network=AeroVironment",
- "then": "AeroVironment"
- },
- {
- "if": "network=Blink",
- "then": "Blink"
- },
- {
- "if": "network=eVgo",
- "then": "eVgo"
+ "tags": [
+ "amenity=charging_station"
+ ],
+ "title": {
+ "en": "Charging station"
+ },
+ "preciseInput": {
+ "preferredBackground": "map"
+ }
}
- ]
- },
- {
- "#": "Operator",
- "question": "Who is the operator of this charging station?",
- "render": "This charging station is operated by {operator}",
- "freeform": {
- "key": "operator"
- },
- "mappings": [
+ ],
+ "wayHandling": 1,
+ "filter": [
{
- "if": {
- "and": [
- "network:={operator}"
+ "options": [
+ {
+ "question": {
+ "en": "All vehicle types",
+ "nl": "Alle voertuigen"
+ }
+ },
+ {
+ "question": {
+ "en": "Charging station for bicycles",
+ "nl": "Oplaadpunten voor fietsen"
+ },
+ "osmTags": "bicycle=yes"
+ },
+ {
+ "question": {
+ "en": "Charging station for cars",
+ "nl": "Oplaadpunten voor auto's"
+ },
+ "osmTags": {
+ "or": [
+ "car=yes",
+ "motorcar=yes"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "options": [
+ {
+ "question": {
+ "en": "Only working charging stations"
+ },
+ "osmTags": {
+ "and": [
+ "operational_status!=broken",
+ "amenity=charging_station"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "options": [
+ {
+ "question": {
+ "en": "All connectors",
+ "nl": "Alle types"
+ }
+ },
+ {
+ "question": {
+ "en": "Has a Schuko wall plug without ground pin (CEE7/4 type F) connector",
+ "nl": "Heeft een Schuko stekker zonder aardingspin (CEE7/4 type F) "
+ },
+ "osmTags": "socket:schuko~*"
+ },
+ {
+ "question": {
+ "en": "Has a European wall plug with ground pin (CEE7/4 type E) connector",
+ "nl": "Heeft een Europese stekker met aardingspin (CEE7/4 type E) "
+ },
+ "osmTags": "socket:typee~*"
+ },
+ {
+ "question": {
+ "en": "Has a Chademo connector",
+ "nl": "Heeft een "
+ },
+ "osmTags": "socket:chademo~*"
+ },
+ {
+ "question": {
+ "en": "Has a Type 1 with cable (J1772) connector",
+ "nl": "Heeft een Type 1 met kabel (J1772) "
+ },
+ "osmTags": "socket:type1_cable~*"
+ },
+ {
+ "question": {
+ "en": "Has a Type 1 without cable (J1772) connector",
+ "nl": "Heeft een Type 1 zonder kabel (J1772) "
+ },
+ "osmTags": "socket:type1~*"
+ },
+ {
+ "question": {
+ "en": "Has a Type 1 CCS (aka Type 1 Combo) connector",
+ "nl": "Heeft een "
+ },
+ "osmTags": "socket:type1_combo~*"
+ },
+ {
+ "question": {
+ "en": "Has a Tesla Supercharger connector",
+ "nl": "Heeft een "
+ },
+ "osmTags": "socket:tesla_supercharger~*"
+ },
+ {
+ "question": {
+ "en": "Has a Type 2 (mennekes) connector",
+ "nl": "Heeft een "
+ },
+ "osmTags": "socket:type2~*"
+ },
+ {
+ "question": {
+ "en": "Has a Type 2 CCS (mennekes) connector",
+ "nl": "Heeft een "
+ },
+ "osmTags": "socket:type2_combo~*"
+ }
]
- },
- "then": "Actually, {operator} is the network",
- "addExtraTags": [
- "operator="
- ],
- "hideInAnswer": "operator="
}
- ]
- },
- {
- "#": "phone",
- "question": {
- "en": "What number can one call if there is a problem with this charging station?"
- },
- "render": {
- "en": "In case of problems, call {phone}"
- },
- "freeform": {
- "key": "phone",
- "type": "phone"
- }
- },
- {
- "#": "email",
- "question": {
- "en": "What is the email address of the operator?"
- },
- "render": {
- "en": "In case of problems, send an email to {email}"
- },
- "freeform": {
- "key": "email",
- "type": "email"
- }
- },
- {
- "#": "website",
- "question": {
- "en": "What is the website of the operator?"
- },
- "render": {
- "en": "More info on {website}"
- },
- "freeform": {
- "key": "website",
- "type": "url"
- }
- },
- "level",
- {
- "#": "ref",
- "question": {
- "en": "What is the reference number of this charging station?"
- },
- "render": "Reference number is {ref}",
- "freeform": {
- "key": "ref"
- }
- },
- {
- "#": "Operational status",
- "question": {
- "en": "Is this charging point in use?",
- "nl": "Is dit oplaadpunt operationeel?"
- },
- "mappings": [
+ ],
+ "units": [
{
- "if": "operational_status=broken",
- "then": {
- "en": "This charging station is broken",
- "nl": "Dit oplaadpunt is kapot"
- }
- },
- {
- "if": {
- "and": [
- "planned:amenity=charging_station",
- "amenity="
+ "appliesToKey": [
+ "maxstay"
+ ],
+ "applicableUnits": [
+ {
+ "canonicalDenomination": "minutes",
+ "canonicalDenominationSingular": "minute",
+ "alternativeDenomination": [
+ "m",
+ "min",
+ "mins",
+ "minuten",
+ "mns"
+ ],
+ "human": {
+ "en": " minutes",
+ "nl": " minuten"
+ },
+ "humanSingular": {
+ "en": " minute",
+ "nl": " minuut"
+ }
+ },
+ {
+ "canonicalDenomination": "hours",
+ "canonicalDenominationSingular": "hour",
+ "alternativeDenomination": [
+ "h",
+ "hrs",
+ "hours",
+ "u",
+ "uur",
+ "uren"
+ ],
+ "human": {
+ "en": " hours",
+ "nl": " uren"
+ },
+ "humanSingular": {
+ "en": " hour",
+ "nl": " uur"
+ }
+ },
+ {
+ "canonicalDenomination": "days",
+ "canonicalDenominationSingular": "day",
+ "alternativeDenomination": [
+ "dys",
+ "dagen",
+ "dag"
+ ],
+ "human": {
+ "en": " days",
+ "nl": " day"
+ },
+ "humanSingular": {
+ "en": " day",
+ "nl": " dag"
+ }
+ }
]
- },
- "then": {
- "en": "A charging station is planned here",
- "nl": "Hier zal binnenkort een oplaadpunt gebouwd worden"
- }
},
{
- "if": {
- "and": [
- "construction:amenity=charging_station",
- "amenity="
- ]
- },
- "then": {
- "en": "A charging station is constructed here",
- "nl": "Hier wordt op dit moment een oplaadpunt gebouwd"
- }
+ "appliesToKey": [
+ "socket:schuko:voltage",
+ "socket:typee:voltage",
+ "socket:chademo:voltage",
+ "socket:type1_cable:voltage",
+ "socket:type1:voltage",
+ "socket:type1_combo:voltage",
+ "socket:tesla_supercharger:voltage",
+ "socket:type2:voltage",
+ "socket:type2_combo:voltage"
+ ],
+ "applicableUnits": [
+ {
+ "canonicalDenomination": "V",
+ "alternativeDenomination": [
+ "v",
+ "volt",
+ "voltage",
+ "V",
+ "Volt"
+ ],
+ "human": {
+ "en": "Volts",
+ "nl": "volt"
+ }
+ }
+ ],
+ "eraseInvalidValues": true
},
{
- "if": {
- "and": [
- "disused:amenity=charging_station",
- "amenity="
- ]
- },
- "then": {
- "en": "This charging station has beed permanently disabled and is not in use anymore but is still visible",
- "nl": "Dit oplaadpunt is niet meer in gebruik maar is wel nog aanwezig"
- }
+ "appliesToKey": [
+ "socket:schuko:current",
+ "socket:typee:current",
+ "socket:chademo:current",
+ "socket:type1_cable:current",
+ "socket:type1:current",
+ "socket:type1_combo:current",
+ "socket:tesla_supercharger:current",
+ "socket:type2:current",
+ "socket:type2_combo:current"
+ ],
+ "applicableUnits": [
+ {
+ "canonicalDenomination": "A",
+ "alternativeDenomination": [
+ "a",
+ "amp",
+ "amperage",
+ "A"
+ ],
+ "human": {
+ "en": "A",
+ "nl": "A"
+ }
+ }
+ ],
+ "eraseInvalidValues": true
},
{
- "if": "amenity=charging_station",
- "then": {
- "en": "This charging station works",
- "nl": "Dit oplaadpunt werkt"
- }
+ "appliesToKey": [
+ "socket:schuko:output",
+ "socket:typee:output",
+ "socket:chademo:output",
+ "socket:type1_cable:output",
+ "socket:type1:output",
+ "socket:type1_combo:output",
+ "socket:tesla_supercharger:output",
+ "socket:type2:output",
+ "socket:type2_combo:output"
+ ],
+ "applicableUnits": [
+ {
+ "canonicalDenomination": "kW",
+ "alternativeDenomination": [
+ "kilowatt"
+ ],
+ "human": {
+ "en": "kilowatt",
+ "nl": "kilowatt"
+ }
+ },
+ {
+ "canonicalDenomination": "mW",
+ "alternativeDenomination": [
+ "megawatt"
+ ],
+ "human": {
+ "en": "megawatt",
+ "nl": "megawatt"
+ }
+ }
+ ],
+ "eraseInvalidValues": true
}
- ]
- }
- ],
- "icon": {
- "render": "pin:#fff;./assets/themes/charging_stations/plug.svg",
- "mappings": [
- {
- "if": "bicycle=yes",
- "then": "pin:#fff;./assets/themes/charging_stations/bicycle.svg"
- },
- {
- "if": {
- "or": [
- "car=yes",
- "motorcar=yes"
- ]
- },
- "then": "pin:#fff;./assets/themes/charging_stations/car.svg"
- }
]
- },
- "iconOverlays": [
- {
- "if": {
- "or": [
- "disused:amenity=charging_station",
- "operational_status=broken"
- ]
- },
- "then": "cross_bottom_right:#c22;"
- },
- {
- "if": {
- "or": [
- "proposed:amenity=charging_station",
- "planned:amenity=charging_station"
- ]
- },
- "then": "./assets/layers/charging_station/under_construction.svg",
- "badge": true
- },
- {
- "if": {
- "and": [
- "bicycle=yes",
- {
- "or": [
- "motorcar=yes",
- "car=yes"
- ]
- }
- ]
- },
- "then": "circle:#fff;./assets/themes/charging_stations/car.svg",
- "badge": true
- }
- ],
- "width": {
- "render": "8"
- },
- "iconSize": {
- "render": "50,50,bottom"
- },
- "color": {
- "render": "#00f"
- },
- "presets": [
- {
- "tags": [
- "amenity=charging_station"
- ],
- "title": {
- "en": "Charging station"
- },
- "preciseInput": {
- "preferredBackground": "map"
- }
- }
- ],
- "wayHandling": 1,
- "filter": [
- {
- "options": [
- {
- "question": {
- "en": "All vehicle types",
- "nl": "Alle voertuigen"
- }
- },
- {
- "question": {
- "en": "Charging station for bicycles",
- "nl": "Oplaadpunten voor fietsen"
- },
- "osmTags": "bicycle=yes"
- },
- {
- "question": {
- "en": "Charging station for cars",
- "nl": "Oplaadpunten voor auto's"
- },
- "osmTags": {
- "or": [
- "car=yes",
- "motorcar=yes"
- ]
- }
- }
- ]
- },
- {
- "options": [
- {
- "question": {
- "en": "Only working charging stations"
- },
- "osmTags": {
- "and": [
- "operational_status!=broken",
- "amenity=charging_station"
- ]
- }
- }
- ]
- },
- {
- "options": [
- {
- "question": {
- "en": "All connectors",
- "nl": "Alle types"
- }
- },
- {
- "question": {
- "en": "Has a Schuko wall plug without ground pin (CEE7/4 type F) connector",
- "nl": "Heeft een Schuko stekker zonder aardingspin (CEE7/4 type F) "
- },
- "osmTags": "socket:schuko~*"
- },
- {
- "question": {
- "en": "Has a European wall plug with ground pin (CEE7/4 type E) connector",
- "nl": "Heeft een Europese stekker met aardingspin (CEE7/4 type E) "
- },
- "osmTags": "socket:typee~*"
- },
- {
- "question": {
- "en": "Has a Chademo connector",
- "nl": "Heeft een "
- },
- "osmTags": "socket:chademo~*"
- },
- {
- "question": {
- "en": "Has a Type 1 with cable (J1772) connector",
- "nl": "Heeft een Type 1 met kabel (J1772) "
- },
- "osmTags": "socket:type1_cable~*"
- },
- {
- "question": {
- "en": "Has a Type 1 without cable (J1772) connector",
- "nl": "Heeft een Type 1 zonder kabel (J1772) "
- },
- "osmTags": "socket:type1~*"
- },
- {
- "question": {
- "en": "Has a Type 1 CCS (aka Type 1 Combo) connector",
- "nl": "Heeft een "
- },
- "osmTags": "socket:type1_combo~*"
- },
- {
- "question": {
- "en": "Has a Tesla Supercharger connector",
- "nl": "Heeft een "
- },
- "osmTags": "socket:tesla_supercharger~*"
- },
- {
- "question": {
- "en": "Has a Type 2 (mennekes) connector",
- "nl": "Heeft een "
- },
- "osmTags": "socket:type2~*"
- },
- {
- "question": {
- "en": "Has a Type 2 CCS (mennekes) connector",
- "nl": "Heeft een "
- },
- "osmTags": "socket:type2_combo~*"
- }
- ]
- }
- ],
- "units": [
- {
- "appliesToKey": [
- "maxstay"
- ],
- "applicableUnits": [
- {
- "canonicalDenomination": "minutes",
- "canonicalDenominationSingular": "minute",
- "alternativeDenomination": [
- "m",
- "min",
- "mins",
- "minuten",
- "mns"
- ],
- "human": {
- "en": " minutes",
- "nl": " minuten"
- },
- "humanSingular": {
- "en": " minute",
- "nl": " minuut"
- }
- },
- {
- "canonicalDenomination": "hours",
- "canonicalDenominationSingular": "hour",
- "alternativeDenomination": [
- "h",
- "hrs",
- "hours",
- "u",
- "uur",
- "uren"
- ],
- "human": {
- "en": " hours",
- "nl": " uren"
- },
- "humanSingular": {
- "en": " hour",
- "nl": " uur"
- }
- },
- {
- "canonicalDenomination": "days",
- "canonicalDenominationSingular": "day",
- "alternativeDenomination": [
- "dys",
- "dagen",
- "dag"
- ],
- "human": {
- "en": " days",
- "nl": " day"
- },
- "humanSingular": {
- "en": " day",
- "nl": " dag"
- }
- }
- ]
- },
- {
- "appliesToKey": [
- "socket:schuko:voltage",
- "socket:typee:voltage",
- "socket:chademo:voltage",
- "socket:type1_cable:voltage",
- "socket:type1:voltage",
- "socket:type1_combo:voltage",
- "socket:tesla_supercharger:voltage",
- "socket:type2:voltage",
- "socket:type2_combo:voltage"
- ],
- "applicableUnits": [
- {
- "canonicalDenomination": "V",
- "alternativeDenomination": [
- "v",
- "volt",
- "voltage",
- "V",
- "Volt"
- ],
- "human": {
- "en": "Volts",
- "nl": "volt"
- }
- }
- ],
- "eraseInvalidValues": true
- },
- {
- "appliesToKey": [
- "socket:schuko:current",
- "socket:typee:current",
- "socket:chademo:current",
- "socket:type1_cable:current",
- "socket:type1:current",
- "socket:type1_combo:current",
- "socket:tesla_supercharger:current",
- "socket:type2:current",
- "socket:type2_combo:current"
- ],
- "applicableUnits": [
- {
- "canonicalDenomination": "A",
- "alternativeDenomination": [
- "a",
- "amp",
- "amperage",
- "A"
- ],
- "human": {
- "en": "A",
- "nl": "A"
- }
- }
- ],
- "eraseInvalidValues": true
- },
- {
- "appliesToKey": [
- "socket:schuko:output",
- "socket:typee:output",
- "socket:chademo:output",
- "socket:type1_cable:output",
- "socket:type1:output",
- "socket:type1_combo:output",
- "socket:tesla_supercharger:output",
- "socket:type2:output",
- "socket:type2_combo:output"
- ],
- "applicableUnits": [
- {
- "canonicalDenomination": "kW",
- "alternativeDenomination": [
- "kilowatt"
- ],
- "human": {
- "en": "kilowatt",
- "nl": "kilowatt"
- }
- },
- {
- "canonicalDenomination": "mW",
- "alternativeDenomination": [
- "megawatt"
- ],
- "human": {
- "en": "megawatt",
- "nl": "megawatt"
- }
- }
- ],
- "eraseInvalidValues": true
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/crossings/crossings.json b/assets/layers/crossings/crossings.json
index 876656d1f..46d3fae45 100644
--- a/assets/layers/crossings/crossings.json
+++ b/assets/layers/crossings/crossings.json
@@ -1,324 +1,324 @@
{
- "id": "crossings",
- "name": {
- "en": "Crossings",
- "nl": "Oversteekplaatsen"
- },
- "description": {
- "en": "Crossings for pedestrians and cyclists",
- "nl": "Oversteekplaatsen voor voetgangers en fietsers"
- },
- "source": {
- "osmTags": {
- "or": [
- "highway=traffic_signals",
- "highway=crossing"
- ]
- }
- },
- "minzoom": 17,
- "title": {
- "render": {
- "en": "Crossing",
- "nl": "Oversteekplaats"
+ "id": "crossings",
+ "name": {
+ "en": "Crossings",
+ "nl": "Oversteekplaatsen"
},
- "mappings": [
- {
- "if": "highway=traffic_signals",
- "then": {
- "en": "Traffic signal",
- "nl": "Verkeerslicht"
- }
- },
- {
- "if": "crossing=traffic_signals",
- "then": {
- "en": "Crossing with traffic signals",
- "nl": "Oversteektplaats met verkeerslichten"
- }
- }
- ]
- },
- "icon": {
- "render": "./assets/layers/crossings/pedestrian_crossing.svg",
- "mappings": [
- {
- "if": {
- "or": [
- "highway=traffic_signals",
- "crossing=traffic_signals"
- ]
- },
- "then": "./assets/layers/crossings/traffic_lights.svg"
- }
- ]
- },
- "width": "5",
- "presets": [
- {
- "title": {
- "en": "Crossing",
- "nl": "Oversteekplaats"
- },
- "tags": [
- "highway=crossing"
- ],
- "description": {
- "en": "Crossing for pedestrians and/or cyclists",
- "nl": "Oversteekplaats voor voetgangers en/of fietsers"
- },
- "preciseInput": {
- "preferredBackground": [
- "photo"
- ],
- "snapToLayer": "cycleways_and_roads",
- "maxSnapDistance": 25
- }
+ "description": {
+ "en": "Crossings for pedestrians and cyclists",
+ "nl": "Oversteekplaatsen voor voetgangers en fietsers"
},
- {
- "title": {
- "en": "Traffic signal",
- "nl": "Verkeerslicht"
- },
- "tags": [
- "highway=traffic_signals"
- ],
- "description": {
- "en": "Traffic signal on a road",
- "nl": "Verkeerslicht op een weg"
- },
- "preciseInput": {
- "preferredBackground": [
- "photo"
- ],
- "snapToLayer": "cycleways_and_roads",
- "maxSnapDistance": 25
- }
- }
- ],
- "tagRenderings": [
- {
- "question": {
- "en": "What kind of crossing is this?",
- "nl": "Wat voor oversteekplaats is dit?"
- },
- "condition": "highway=crossing",
- "mappings": [
- {
- "if": "crossing=uncontrolled",
- "then": {
- "en": "Crossing, without traffic lights",
- "nl": "Oversteekplaats, zonder verkeerslichten"
- }
- },
- {
- "if": "crossing=traffic_signals",
- "then": {
- "en": "Crossing with traffic signals",
- "nl": "Oversteekplaats met verkeerslichten"
- }
- },
- {
- "if": "crossing=zebra",
- "then": {
- "en": "Zebra crossing",
- "nl": "Zebrapad"
- },
- "hideInAnswer": true
+ "source": {
+ "osmTags": {
+ "or": [
+ "highway=traffic_signals",
+ "highway=crossing"
+ ]
}
- ]
},
- {
- "question": {
- "en": "Is this is a zebra crossing?",
- "nl": "Is dit een zebrapad?"
- },
- "condition": "crossing=uncontrolled",
- "mappings": [
- {
- "if": "crossing_ref=zebra",
- "then": {
- "en": "This is a zebra crossing",
- "nl": "Dit is een zebrapad"
- }
+ "minzoom": 17,
+ "title": {
+ "render": {
+ "en": "Crossing",
+ "nl": "Oversteekplaats"
},
- {
- "if": "crossing_ref=",
- "then": {
- "en": "This is not a zebra crossing",
- "nl": "Dit is geen zebrapad"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Is this crossing also for bicycles?",
- "nl": "Is deze oversteekplaats ook voor fietsers"
- },
- "condition": "highway=crossing",
- "mappings": [
- {
- "if": "bicycle=yes",
- "then": {
- "en": "A cyclist can use this crossing",
- "nl": "Een fietser kan deze oversteekplaats gebruiken"
- }
- },
- {
- "if": "bicycle=no",
- "then": {
- "en": "A cyclist can not use this crossing",
- "nl": "Een fietser kan deze oversteekplaats niet gebruiken"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does this crossing have an island in the middle?",
- "nl": "Heeft deze oversteekplaats een verkeerseiland in het midden?"
- },
- "condition": "highway=crossing",
- "mappings": [
- {
- "if": "crossing:island=yes",
- "then": {
- "en": "This crossing has an island in the middle",
- "nl": "Deze oversteekplaats heeft een verkeerseiland in het midden"
- }
- },
- {
- "if": "crossing:island=no",
- "then": {
- "en": "This crossing does not have an island in the middle",
- "nl": "Deze oversteekplaats heeft geen verkeerseiland in het midden"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does this crossing have tactile paving?",
- "nl": "Heeft deze oversteekplaats een geleidelijn?"
- },
- "condition": "highway=crossing",
- "mappings": [
- {
- "if": "tactile_paving=yes",
- "then": {
- "en": "This crossing has tactile paving",
- "nl": "Deze oversteekplaats heeft een geleidelijn"
- }
- },
- {
- "if": "tactile_paving=no",
- "then": {
- "en": "This crossing does not have tactile paving",
- "nl": "Deze oversteekplaats heeft geen geleidelijn"
- }
- },
- {
- "if": "tactile_paving=incorrect",
- "then": {
- "en": "This crossing has tactile paving, but is not correct",
- "nl": "Deze oversteekplaats heeft een geleidelijn, die incorrect is."
- },
- "hideInAnswer": true
- }
- ]
- },
- {
- "question": {
- "en": "Does this traffic light have a button to request green light?",
- "nl": "Heeft dit verkeerslicht een knop voor groen licht?"
- },
- "condition": {
- "or": [
- "highway=traffic_signals",
- "crossing=traffic_signals"
+ "mappings": [
+ {
+ "if": "highway=traffic_signals",
+ "then": {
+ "en": "Traffic signal",
+ "nl": "Verkeerslicht"
+ }
+ },
+ {
+ "if": "crossing=traffic_signals",
+ "then": {
+ "en": "Crossing with traffic signals",
+ "nl": "Oversteektplaats met verkeerslichten"
+ }
+ }
]
- },
- "mappings": [
- {
- "if": "button_operated=yes",
- "then": {
- "en": "This traffic light has a button to request green light",
- "nl": "Dit verkeerslicht heeft een knop voor groen licht"
- }
- },
- {
- "if": "button_operated=no",
- "then": {
- "en": "This traffic light does not have a button to request green light",
- "nl": "Dit verkeerlicht heeft geen knop voor groen licht"
- }
- }
- ]
},
- {
- "question": {
- "en": "Can a cyclist turn right when the light is red?",
- "nl": "Mag een fietser rechtsaf slaan als het licht rood is?"
- },
- "condition": "highway=traffic_signals",
- "mappings": [
- {
- "if": "red_turn:right:bicycle=yes",
- "then": {
- "en": "A cyclist can turn right if the light is red ",
- "nl": "Een fietser mag wel rechtsaf slaan als het licht rood is "
- },
- "hideInAnswer": "_country!=be"
- },
- {
- "if": "red_turn:right:bicycle=yes",
- "then": {
- "en": "A cyclist can turn right if the light is red",
- "nl": "Een fietser mag wel rechtsaf slaan als het licht rood is"
- },
- "hideInAnswer": "_country=be"
- },
- {
- "if": "red_turn:right:bicycle=no",
- "then": {
- "en": "A cyclist can not turn right if the light is red",
- "nl": "Een fietser mag niet rechtsaf slaan als het licht rood is"
- }
- }
- ]
+ "icon": {
+ "render": "./assets/layers/crossings/pedestrian_crossing.svg",
+ "mappings": [
+ {
+ "if": {
+ "or": [
+ "highway=traffic_signals",
+ "crossing=traffic_signals"
+ ]
+ },
+ "then": "./assets/layers/crossings/traffic_lights.svg"
+ }
+ ]
},
- {
- "question": {
- "en": "Can a cyclist go straight on when the light is red?",
- "nl": "Mag een fietser rechtdoor gaan als het licht rood is?"
- },
- "condition": "highway=traffic_signals",
- "mappings": [
+ "width": "5",
+ "presets": [
{
- "if": "red_turn:straight:bicycle=yes",
- "then": {
- "en": "A cyclist can go straight on if the light is red ",
- "nl": "Een fietser mag wel rechtdoor gaan als het licht rood is "
- },
- "hideInAnswer": "_country!=be"
+ "title": {
+ "en": "Crossing",
+ "nl": "Oversteekplaats"
+ },
+ "tags": [
+ "highway=crossing"
+ ],
+ "description": {
+ "en": "Crossing for pedestrians and/or cyclists",
+ "nl": "Oversteekplaats voor voetgangers en/of fietsers"
+ },
+ "preciseInput": {
+ "preferredBackground": [
+ "photo"
+ ],
+ "snapToLayer": "cycleways_and_roads",
+ "maxSnapDistance": 25
+ }
},
{
- "if": "red_turn:straight:bicycle=yes",
- "then": {
- "en": "A cyclist can go straight on if the light is red",
- "nl": "Een fietser mag wel rechtdoor gaan als het licht rood is"
- },
- "hideInAnswer": "_country=be"
- },
- {
- "if": "red_turn:straight:bicycle=no",
- "then": {
- "en": "A cyclist can not go straight on if the light is red",
- "nl": "Een fietser mag niet rechtdoor gaan als het licht rood is"
- }
+ "title": {
+ "en": "Traffic signal",
+ "nl": "Verkeerslicht"
+ },
+ "tags": [
+ "highway=traffic_signals"
+ ],
+ "description": {
+ "en": "Traffic signal on a road",
+ "nl": "Verkeerslicht op een weg"
+ },
+ "preciseInput": {
+ "preferredBackground": [
+ "photo"
+ ],
+ "snapToLayer": "cycleways_and_roads",
+ "maxSnapDistance": 25
+ }
}
- ]
- }
- ]
+ ],
+ "tagRenderings": [
+ {
+ "question": {
+ "en": "What kind of crossing is this?",
+ "nl": "Wat voor oversteekplaats is dit?"
+ },
+ "condition": "highway=crossing",
+ "mappings": [
+ {
+ "if": "crossing=uncontrolled",
+ "then": {
+ "en": "Crossing, without traffic lights",
+ "nl": "Oversteekplaats, zonder verkeerslichten"
+ }
+ },
+ {
+ "if": "crossing=traffic_signals",
+ "then": {
+ "en": "Crossing with traffic signals",
+ "nl": "Oversteekplaats met verkeerslichten"
+ }
+ },
+ {
+ "if": "crossing=zebra",
+ "then": {
+ "en": "Zebra crossing",
+ "nl": "Zebrapad"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Is this is a zebra crossing?",
+ "nl": "Is dit een zebrapad?"
+ },
+ "condition": "crossing=uncontrolled",
+ "mappings": [
+ {
+ "if": "crossing_ref=zebra",
+ "then": {
+ "en": "This is a zebra crossing",
+ "nl": "Dit is een zebrapad"
+ }
+ },
+ {
+ "if": "crossing_ref=",
+ "then": {
+ "en": "This is not a zebra crossing",
+ "nl": "Dit is geen zebrapad"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Is this crossing also for bicycles?",
+ "nl": "Is deze oversteekplaats ook voor fietsers"
+ },
+ "condition": "highway=crossing",
+ "mappings": [
+ {
+ "if": "bicycle=yes",
+ "then": {
+ "en": "A cyclist can use this crossing",
+ "nl": "Een fietser kan deze oversteekplaats gebruiken"
+ }
+ },
+ {
+ "if": "bicycle=no",
+ "then": {
+ "en": "A cyclist can not use this crossing",
+ "nl": "Een fietser kan deze oversteekplaats niet gebruiken"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does this crossing have an island in the middle?",
+ "nl": "Heeft deze oversteekplaats een verkeerseiland in het midden?"
+ },
+ "condition": "highway=crossing",
+ "mappings": [
+ {
+ "if": "crossing:island=yes",
+ "then": {
+ "en": "This crossing has an island in the middle",
+ "nl": "Deze oversteekplaats heeft een verkeerseiland in het midden"
+ }
+ },
+ {
+ "if": "crossing:island=no",
+ "then": {
+ "en": "This crossing does not have an island in the middle",
+ "nl": "Deze oversteekplaats heeft geen verkeerseiland in het midden"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does this crossing have tactile paving?",
+ "nl": "Heeft deze oversteekplaats een geleidelijn?"
+ },
+ "condition": "highway=crossing",
+ "mappings": [
+ {
+ "if": "tactile_paving=yes",
+ "then": {
+ "en": "This crossing has tactile paving",
+ "nl": "Deze oversteekplaats heeft een geleidelijn"
+ }
+ },
+ {
+ "if": "tactile_paving=no",
+ "then": {
+ "en": "This crossing does not have tactile paving",
+ "nl": "Deze oversteekplaats heeft geen geleidelijn"
+ }
+ },
+ {
+ "if": "tactile_paving=incorrect",
+ "then": {
+ "en": "This crossing has tactile paving, but is not correct",
+ "nl": "Deze oversteekplaats heeft een geleidelijn, die incorrect is."
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does this traffic light have a button to request green light?",
+ "nl": "Heeft dit verkeerslicht een knop voor groen licht?"
+ },
+ "condition": {
+ "or": [
+ "highway=traffic_signals",
+ "crossing=traffic_signals"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "button_operated=yes",
+ "then": {
+ "en": "This traffic light has a button to request green light",
+ "nl": "Dit verkeerslicht heeft een knop voor groen licht"
+ }
+ },
+ {
+ "if": "button_operated=no",
+ "then": {
+ "en": "This traffic light does not have a button to request green light",
+ "nl": "Dit verkeerlicht heeft geen knop voor groen licht"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Can a cyclist turn right when the light is red?",
+ "nl": "Mag een fietser rechtsaf slaan als het licht rood is?"
+ },
+ "condition": "highway=traffic_signals",
+ "mappings": [
+ {
+ "if": "red_turn:right:bicycle=yes",
+ "then": {
+ "en": "A cyclist can turn right if the light is red ",
+ "nl": "Een fietser mag wel rechtsaf slaan als het licht rood is "
+ },
+ "hideInAnswer": "_country!=be"
+ },
+ {
+ "if": "red_turn:right:bicycle=yes",
+ "then": {
+ "en": "A cyclist can turn right if the light is red",
+ "nl": "Een fietser mag wel rechtsaf slaan als het licht rood is"
+ },
+ "hideInAnswer": "_country=be"
+ },
+ {
+ "if": "red_turn:right:bicycle=no",
+ "then": {
+ "en": "A cyclist can not turn right if the light is red",
+ "nl": "Een fietser mag niet rechtsaf slaan als het licht rood is"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Can a cyclist go straight on when the light is red?",
+ "nl": "Mag een fietser rechtdoor gaan als het licht rood is?"
+ },
+ "condition": "highway=traffic_signals",
+ "mappings": [
+ {
+ "if": "red_turn:straight:bicycle=yes",
+ "then": {
+ "en": "A cyclist can go straight on if the light is red ",
+ "nl": "Een fietser mag wel rechtdoor gaan als het licht rood is "
+ },
+ "hideInAnswer": "_country!=be"
+ },
+ {
+ "if": "red_turn:straight:bicycle=yes",
+ "then": {
+ "en": "A cyclist can go straight on if the light is red",
+ "nl": "Een fietser mag wel rechtdoor gaan als het licht rood is"
+ },
+ "hideInAnswer": "_country=be"
+ },
+ {
+ "if": "red_turn:straight:bicycle=no",
+ "then": {
+ "en": "A cyclist can not go straight on if the light is red",
+ "nl": "Een fietser mag niet rechtdoor gaan als het licht rood is"
+ }
+ }
+ ]
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/cycleways_and_roads/cycleways_and_roads.json b/assets/layers/cycleways_and_roads/cycleways_and_roads.json
index 959dfa03c..a53d7e9f5 100644
--- a/assets/layers/cycleways_and_roads/cycleways_and_roads.json
+++ b/assets/layers/cycleways_and_roads/cycleways_and_roads.json
@@ -1,1170 +1,1170 @@
{
- "id": "cycleways_and_roads",
- "name": {
- "en": "Cycleways and roads",
- "nl": "Fietspaden, straten en wegen"
- },
- "minzoom": 16,
- "source": {
- "osmTags": {
- "or": [
- "highway=cycleway",
- "cycleway=lane",
- "cycleway=shared_lane",
- "cycleway=track",
- "cyclestreet=yes",
- "highway=residential",
- "highway=tertiary",
- "highway=unclassified",
- "highway=primary",
- "highway=secondary",
- {
- "and": [
- "highway=path",
- "bicycle=designated"
- ]
- }
- ]
- }
- },
- "calculatedTags": [
- "_comfort_score=feat.score('https://raw.githubusercontent.com/pietervdvn/AspectedRouting/master/Examples/bicycle/aspects/bicycle.comfort.json')"
- ],
- "title": {
- "render": {
- "en": "Cycleways",
- "nl": "Fietspaden"
+ "id": "cycleways_and_roads",
+ "name": {
+ "en": "Cycleways and roads",
+ "nl": "Fietspaden, straten en wegen"
},
- "mappings": [
- {
- "if": {
- "or": [
- "highway=cycleway",
- "highway=path"
- ]
- },
- "then": {
- "nl": "Fietsweg",
- "en": "Cycleway"
- }
- },
- {
- "if": "cycleway=shared_lane",
- "then": {
- "nl": "Fietssuggestiestrook",
- "en": "Shared lane"
- }
- },
- {
- "if": "cycleway=lane",
- "then": {
- "nl": "Fietsstrook",
- "en": "Bike lane"
- }
- },
- {
- "if": "cycleway=track",
- "then": {
- "en": "Cycleway next to the road",
- "nl": "Fietsweg naast de weg"
- }
- },
- {
- "if": "cyclestreet=yes",
- "then": {
- "nl": "Fietsstraat",
- "en": "Cyclestreet"
- }
- }
- ]
- },
- "description": {},
- "tagRenderings": [
- {
- "#": "Cycleway type for a road",
- "question": {
- "en": "What kind of cycleway is here?",
- "nl": "Wat voor fietspad is hier?"
- },
- "condition": {
- "and": [
- "highway!=cycleway",
- "highway!=path"
- ]
- },
- "mappings": [
- {
- "if": "cycleway=shared_lane",
- "then": {
- "en": "There is a shared lane",
- "nl": "Er is een fietssuggestiestrook"
- }
- },
- {
- "if": "cycleway=lane",
- "then": {
- "en": "There is a lane next to the road (separated with paint)",
- "nl": "Er is een fietspad aangrenzend aan de weg (gescheiden met verf)"
- }
- },
- {
- "if": "cycleway=track",
- "then": {
- "en": "There is a track, but no cycleway drawn separately from this road on the map.",
- "nl": "Er is een fietspad (los van de weg), maar geen fietspad afzonderlijk getekend naast deze weg."
- }
- },
- {
- "if": "cycleway=separate",
- "then": {
- "en": "There is a separately drawn cycleway",
- "nl": "Er is een apart getekend fietspad."
- }
- },
- {
- "if": "cycleway=no",
- "then": {
- "en": "There is no cycleway",
- "nl": "Er is geen fietspad aanwezig"
- },
- "hideInAnswer": "cycleway=opposite"
- },
- {
- "if": "cycleway=no",
- "then": {
- "en": "There is no cycleway",
- "nl": "Er is geen fietspad aanwezig"
- },
- "hideInAnswer": "cycleway!=opposite",
- "addExtraTags": [
- "oneway:bicycle=no",
- "fixme=Changed from cycleway=opposite"
- ]
- }
- ]
- },
- {
- "#": "is lit?",
- "question": {
- "en": "Is this street lit?",
- "nl": "Is deze weg verlicht?"
- },
- "mappings": [
- {
- "if": "lit=yes",
- "then": {
- "en": "This street is lit",
- "nl": "Deze weg is verlicht"
- }
- },
- {
- "if": "lit=no",
- "then": {
- "en": "This road is not lit",
- "nl": "Deze weg is niet verlicht"
- }
- },
- {
- "if": "lit=sunset-sunrise",
- "then": {
- "en": "This road is lit at night",
- "nl": "Deze weg is 's nachts verlicht"
- },
- "hideInAnswer": true
- },
- {
- "if": "lit=24/7",
- "then": {
- "en": "This road is lit 24/7",
- "nl": "Deze weg is 24/7 verlicht"
- }
- }
- ]
- },
- {
- "#": "Is this a cyclestreet? (For a road)",
- "question": {
- "en": "Is this a cyclestreet?",
- "nl": "Is dit een fietsstraat?"
- },
- "condition": {
- "and": [
- "highway!=cycleway",
- "highway!=path"
- ]
- },
- "mappings": [
- {
- "if": "cyclestreet=yes",
- "then": {
- "en": "This is a cyclestreet, and a 30km/h zone.",
- "nl": "Dit is een fietsstraat, en dus een 30km/h zone"
- },
- "addExtraTags": [
- "overtaking:motor_vehicle=no",
- "maxspeed=30"
- ],
- "hideInAnswer": "_country!=be"
- },
- {
- "if": "cyclestreet=yes",
- "then": {
- "en": "This is a cyclestreet",
- "nl": "Dit is een fietsstraat"
- },
- "hideInAnswer": "_country=be"
- },
- {
- "if": "cyclestreet=",
- "then": {
- "en": "This is not a cyclestreet.",
- "nl": "Dit is geen fietsstraat"
- },
- "addExtraTags": [
- "overtaking:motor_vehicle="
- ]
- }
- ]
- },
- {
- "#": "Maxspeed (for road)",
- "render": {
- "en": "The maximum speed on this road is {maxspeed} km/h",
- "nl": "De maximumsnelheid op deze weg is {maxspeed} km/u"
- },
- "freeform": {
- "key": "maxspeed",
- "type": "nat"
- },
- "condition": {
- "and": [
- "highway!=cycleway",
- "highway!=path"
- ]
- },
- "mappings": [
- {
- "if": "maxspeed=20",
- "then": {
- "en": "The maximum speed is 20 km/h",
- "nl": "De maximumsnelheid is 20 km/u"
- }
- },
- {
- "if": "maxspeed=30",
- "then": {
- "en": "The maximum speed is 30 km/h",
- "nl": "De maximumsnelheid is 30 km/u"
- }
- },
- {
- "if": "maxspeed=50",
- "then": {
- "en": "The maximum speed is 50 km/h",
- "nl": "De maximumsnelheid is 50 km/u"
- }
- },
- {
- "if": "maxspeed=70",
- "then": {
- "en": "The maximum speed is 70 km/h",
- "nl": "De maximumsnelheid is 70 km/u"
- }
- },
- {
- "if": "maxspeed=90",
- "then": {
- "en": "The maximum speed is 90 km/h",
- "nl": "De maximumsnelheid is 90 km/u"
- }
- }
- ],
- "question": {
- "en": "What is the maximum speed in this street?",
- "nl": "Wat is de maximumsnelheid in deze straat?"
- }
- },
- {
- "#": "Cycleway:surface",
- "render": {
- "en": "This cyleway is made of {cycleway:surface}",
- "nl": "Dit fietspad is gemaakt van {cycleway:surface}"
- },
- "freeform": {
- "key": "cycleway:surface"
- },
- "condition": {
- "or": [
- "cycleway=shared_lane",
- "cycleway=lane",
- "cycleway=track"
- ]
- },
- "mappings": [
- {
- "if": "cycleway:surface=unpaved",
- "then": {
- "en": "This cycleway is unpaved",
- "nl": "Dit fietspad is onverhard"
- },
- "hideInAnswer": true
- },
- {
- "if": "cycleway:surface=paved",
- "then": {
- "en": "This cycleway is paved",
- "nl": "Dit fietspad is geplaveid"
- },
- "hideInAnswer": true
- },
- {
- "if": "cycleway:surface=asphalt",
- "then": {
- "en": "This cycleway is made of asphalt",
- "nl": "Dit fietspad is gemaakt van asfalt"
- }
- },
- {
- "if": "cycleway:surface=paving_stones",
- "then": {
- "en": "This cycleway is made of smooth paving stones",
- "nl": "Dit fietspad is gemaakt van straatstenen"
- }
- },
- {
- "if": "cycleway:surface=concrete",
- "then": {
- "en": "This cycleway is made of concrete",
- "nl": "Dit fietspad is gemaakt van beton"
- }
- },
- {
- "if": "cycleway:surface=cobblestone",
- "then": {
- "en": "This cycleway is made of cobblestone (unhewn or sett)",
- "nl": "Dit fietspad is gemaakt van kasseien (natuurlijk of verwerkt)"
- },
- "hideInAnswer": true
- },
- {
- "if": "cycleway:surface=unhewn_cobblestone",
- "then": {
- "en": "This cycleway is made of raw, natural cobblestone",
- "nl": "Dit fietspad is gemaakt van ruwe, natuurlijke kasseien"
- }
- },
- {
- "if": "cycleway:surface=sett",
- "then": {
- "en": "This cycleway is made of flat, square cobblestone",
- "nl": "Dit fietspad is gemaakt van vlakke, rechthoekige kasseien"
- }
- },
- {
- "if": "cycleway:surface=wood",
- "then": {
- "en": "This cycleway is made of wood",
- "nl": "Dit fietspad is gemaakt van hout"
- }
- },
- {
- "if": "cycleway:surface=gravel",
- "then": {
- "en": "This cycleway is made of gravel",
- "nl": "Dit fietspad is gemaakt van grind"
- }
- },
- {
- "if": "cycleway:surface=fine_gravel",
- "then": {
- "en": "This cycleway is made of fine gravel",
- "nl": "Dit fietspad is gemaakt van fijn grind"
- }
- },
- {
- "if": "cycleway:surface=pebblestone",
- "then": {
- "en": "This cycleway is made of pebblestone",
- "nl": "Dit fietspad is gemaakt van kiezelsteentjes"
- }
- },
- {
- "if": "cycleway:surface=ground",
- "then": {
- "en": "This cycleway is made from raw ground",
- "nl": "Dit fietspad is gemaakt van aarde"
- }
- }
- ],
- "question": {
- "en": "What is the surface of the cycleway made from?",
- "nl": "Waaruit is het oppervlak van het fietspad van gemaakt?"
- }
- },
- {
- "#": "Cycleway:smoothness",
- "question": {
- "en": "What is the smoothness of this cycleway?",
- "nl": "Wat is de kwaliteit van dit fietspad?"
- },
- "condition": {
- "or": [
- "cycleway=shared_lane",
- "cycleway=lane",
- "cycleway=track"
- ]
- },
- "mappings": [
- {
- "if": "cycleway:smoothness=excellent",
- "then": {
- "en": "Usable for thin rollers: rollerblade, skateboard",
- "nl": "Geschikt voor fijne rollers: rollerblade, skateboard"
- }
- },
- {
- "if": "cycleway:smoothness=good",
- "then": {
- "en": "Usable for thin wheels: racing bike",
- "nl": "Geschikt voor fijne wielen: racefiets"
- }
- },
- {
- "if": "cycleway:smoothness=intermediate",
- "then": {
- "en": "Usable for normal wheels: city bike, wheelchair, scooter",
- "nl": "Geschikt voor normale wielen: stadsfiets, rolstoel, scooter"
- }
- },
- {
- "if": "cycleway:smoothness=bad",
- "then": {
- "en": "Usable for robust wheels: trekking bike, car, rickshaw",
- "nl": "Geschikt voor brede wielen: trekfiets, auto, rickshaw"
- }
- },
- {
- "if": "cycleway:smoothness=very_bad",
- "then": {
- "en": "Usable for vehicles with high clearance: light duty off-road vehicle",
- "nl": "Geschikt voor voertuigen met hoge banden: lichte terreinwagen"
- }
- },
- {
- "if": "cycleway:smoothness=horrible",
- "then": {
- "en": "Usable for off-road vehicles: heavy duty off-road vehicle",
- "nl": "Geschikt voor terreinwagens: zware terreinwagen"
- }
- },
- {
- "if": "cycleway:smoothness=very_horrible",
- "then": {
- "en": "Usable for specialized off-road vehicles: tractor, ATV",
- "nl": "Geschikt voor gespecialiseerde terreinwagens: tractor, alleterreinwagen"
- }
- },
- {
- "if": "cycleway:smoothness=impassable",
- "then": {
- "en": "Impassable / No wheeled vehicle",
- "nl": "Niet geschikt voor voertuigen met wielen"
- }
- }
- ]
- },
- {
- "#": "Surface of the road",
- "render": {
- "en": "This road is made of {surface}",
- "nl": "Deze weg is gemaakt van {surface}"
- },
- "freeform": {
- "key": "surface"
- },
- "mappings": [
- {
- "if": "surface=unpaved",
- "then": {
- "en": "This cycleway is unhardened",
- "nl": "Dit fietspad is onverhard"
- },
- "hideInAnswer": true
- },
- {
- "if": "surface=paved",
- "then": {
- "en": "This cycleway is paved",
- "nl": "Dit fietspad is geplaveid"
- },
- "hideInAnswer": true
- },
- {
- "if": "surface=asphalt",
- "then": {
- "en": "This cycleway is made of asphalt",
- "nl": "Dit fietspad is gemaakt van asfalt"
- }
- },
- {
- "if": "surface=paving_stones",
- "then": {
- "en": "This cycleway is made of smooth paving stones",
- "nl": "Dit fietspad is gemaakt van straatstenen"
- }
- },
- {
- "if": "surface=concrete",
- "then": {
- "en": "This cycleway is made of concrete",
- "nl": "Dit fietspad is gemaakt van beton"
- }
- },
- {
- "if": "surface=cobblestone",
- "then": {
- "en": "This cycleway is made of cobblestone (unhewn or sett)",
- "nl": "Dit fietspad is gemaakt van kasseien (natuurlijk of verwerkt)"
- },
- "hideInAnswer": true
- },
- {
- "if": "surface=unhewn_cobblestone",
- "then": {
- "en": "This cycleway is made of raw, natural cobblestone",
- "nl": "Dit fietspad is gemaakt van ruwe, natuurlijke kasseien"
- }
- },
- {
- "if": "surface=sett",
- "then": {
- "en": "This cycleway is made of flat, square cobblestone",
- "nl": "Dit fietspad is gemaakt van vlakke, rechthoekige kasseien"
- }
- },
- {
- "if": "surface=wood",
- "then": {
- "en": "This cycleway is made of wood",
- "nl": "Dit fietspad is gemaakt van hout"
- }
- },
- {
- "if": "surface=gravel",
- "then": {
- "en": "This cycleway is made of gravel",
- "nl": "Dit fietspad is gemaakt van grind"
- }
- },
- {
- "if": "surface=fine_gravel",
- "then": {
- "en": "This cycleway is made of fine gravel",
- "nl": "Dit fietspad is gemaakt van fijn grind"
- }
- },
- {
- "if": "surface=pebblestone",
- "then": {
- "en": "This cycleway is made of pebblestone",
- "nl": "Dit fietspad is gemaakt van kiezelsteentjes"
- }
- },
- {
- "if": "surface=ground",
- "then": {
- "en": "This cycleway is made from raw ground",
- "nl": "Dit fietspad is gemaakt van aarde"
- }
- }
- ],
- "question": {
- "en": "What is the surface of the street made from?",
- "nl": "Waaruit is het oppervlak van de straat gemaakt?"
- }
- },
- {
- "#": "Surface of the street",
- "question": {
- "en": "What is the smoothness of this street?",
- "nl": "Wat is de kwaliteit van deze straat?"
- },
- "condition": {
- "or": [
- "cycleway=no",
- "highway=cycleway"
- ]
- },
- "mappings": [
- {
- "if": "smoothness=excellent",
- "then": {
- "en": "Usable for thin rollers: rollerblade, skateboard"
- }
- },
- {
- "if": "smoothness=good",
- "then": {
- "en": "Usable for thin wheels: racing bike"
- }
- },
- {
- "if": "smoothness=intermediate",
- "then": {
- "en": "Usable for normal wheels: city bike, wheelchair, scooter"
- }
- },
- {
- "if": "smoothness=bad",
- "then": {
- "en": "Usable for robust wheels: trekking bike, car, rickshaw"
- }
- },
- {
- "if": "smoothness=very_bad",
- "then": {
- "en": "Usable for vehicles with high clearance: light duty off-road vehicle"
- }
- },
- {
- "if": "smoothness=horrible",
- "then": {
- "en": "Usable for off-road vehicles: heavy duty off-road vehicle"
- }
- },
- {
- "if": "smoothness=very_horrible",
- "then": {
- "en": "Usable for specialized off-road vehicles: tractor, ATV"
- }
- },
- {
- "if": "smoothness=impassable",
- "then": {
- "en": "Impassable / No wheeled vehicle"
- }
- }
- ]
- },
- {
- "#": "width:carriageway",
- "condition": {
- "and": [
- "highway!=cycleway",
- "highway!=path"
- ]
- },
- "render": {
- "en": "The carriage width of this road is {width:carriageway}m",
- "nl": "De breedte van deze rijbaan in deze straat is {width:carriageway}m"
- },
- "freeform": {
- "key": "width:carriageway",
- "type": "length",
- "helperArgs": [
- "20",
- "map"
- ]
- },
- "question": {
- "en": "What is the carriage width of this road (in meters)?",
- "nl": "Hoe breed is de rijbaan in deze straat (in meters)?"
- }
- },
- {
- "question": {
- "en": "What traffic sign does this cycleway have?",
- "nl": "Welk verkeersbord heeft dit fietspad?"
- },
- "condition": {
- "or": [
- "cycleway=lane",
- "cycleway=track"
- ]
- },
- "mappings": [
- {
- "if": "cycleway:traffic_sign=BE:D7",
- "then": {
- "en": "Compulsory cycleway ",
- "nl": "Verplicht fietspad "
- },
- "hideInAnswer": "_country!=be"
- },
- {
- "if": "cycleway:traffic_sign~BE:D7;.*",
- "then": {
- "en": "Compulsory cycleway (with supplementary sign) ",
- "nl": "Verplicht fietspad (met onderbord) "
- },
- "hideInAnswer": true
- },
- {
- "if": "cycleway:traffic_sign=BE:D9",
- "then": {
- "en": "Segregated foot/cycleway ",
- "nl": "Afgescheiden voet-/fietspad "
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "cycleway:foot=designated",
- "cycleway:segregated=yes"
- ]
- },
- {
- "if": "cycleway:traffic_sign=BE:D10",
- "then": {
- "en": "Unsegregated foot/cycleway ",
- "nl": "Gedeeld voet-/fietspad "
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "cycleway:foot=designated",
- "cycleway:segregated=no"
- ]
- },
- {
- "if": "cycleway:traffic_sign=none",
- "then": {
- "en": "No traffic sign present",
- "nl": "Geen verkeersbord aanwezig"
- }
- }
- ]
- },
- {
- "question": {
- "en": "What traffic sign does this cycleway have?",
- "nl": "Welk verkeersbord heeft dit fietspad?"
- },
- "condition": {
- "or": [
- "highway=cycleway",
- "highway=path"
- ]
- },
- "mappings": [
- {
- "if": "traffic_sign=BE:D7",
- "then": {
- "en": "Compulsory cycleway ",
- "nl": "Verplicht fietspad "
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "bicycle=designated",
- "mofa=designated",
- "moped=yes",
- "speed_pedelec=yes"
- ]
- },
- {
- "if": "traffic_sign~BE:D7;.*",
- "then": {
- "en": "Compulsory cycleway (with supplementary sign) ",
- "nl": "Verplicht fietspad (met onderbord) "
- },
- "hideInAnswer": true
- },
- {
- "if": "traffic_sign=BE:D9",
- "then": {
- "en": "Segregated foot/cycleway ",
- "nl": "Afgescheiden voet-/fietspad "
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "foot=designated",
- "bicycle=designated",
- "mofa=designated",
- "moped=no",
- "speed_pedelec=no",
- "segregated=yes"
- ]
- },
- {
- "if": "traffic_sign=BE:D10",
- "then": {
- "en": "Unsegregated foot/cycleway ",
- "nl": "Gedeeld voet-/fietspad "
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "foot=designated",
- "bicycle=designated",
- "mofa=designated",
- "moped=no",
- "speed_pedelec=no",
- "segregated=no"
- ]
- },
- {
- "if": "traffic_sign=none",
- "then": {
- "en": "No traffic sign present",
- "nl": "Geen verkeersbord aanwezig"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does the traffic sign D7 () have a supplementary sign?",
- "nl": "Heeft het verkeersbord D7 () een onderbord?"
- },
- "condition": {
- "or": [
- "cycleway:traffic_sign=BE:D7",
- "cycleway:traffic_sign~BE:D7;.*"
- ]
- },
- "mappings": [
- {
- "if": "cycleway:traffic_sign=BE:D7;BE:M6",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "cycleway:moped=designated"
- ]
- },
- {
- "if": "cycleway:traffic_sign=BE:D7;BE:M13",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "cycleway:speed_pedelec=designated"
- ]
- },
- {
- "if": "cycleway:traffic_sign=BE:D7;BE:M14",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "cycleway:moped=designated",
- "cycleway:speed_pedelec=designated"
- ]
- },
- {
- "if": "cycleway:traffic_sign=BE:D7;BE:M7",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "cycleway:moped=no"
- ]
- },
- {
- "if": "cycleway:traffic_sign=BE:D7;BE:M15",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "cycleway:speed_pedelec=no"
- ]
- },
- {
- "if": "cycleway:traffic_sign=BE:D7;BE:M16",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "cycleway:moped=designated",
- "cycleway:speed_pedelec=no"
- ]
- },
- {
- "if": "cycleway:traffic_sign:supplementary=none",
- "then": {
- "en": "No supplementary traffic sign present",
- "nl": "Geen onderbord aanwezig"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Does the traffic sign D7 () have a supplementary sign?",
- "nl": "Heeft het verkeersbord D7 () een onderbord?"
- },
- "condition": {
- "or": [
- "traffic_sign=BE:D7",
- "traffic_sign~BE:D7;.*"
- ]
- },
- "mappings": [
- {
- "if": "traffic_sign=BE:D7;BE:M6",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "moped=designated"
- ]
- },
- {
- "if": "traffic_sign=BE:D7;BE:M13",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "speed_pedelec=designated"
- ]
- },
- {
- "if": "traffic_sign=BE:D7;BE:M14",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "moped=designated",
- "speed_pedelec=designated"
- ]
- },
- {
- "if": "traffic_sign=BE:D7;BE:M7",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "moped=no"
- ]
- },
- {
- "if": ":traffic_sign=BE:D7;BE:M15",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "speed_pedelec=no"
- ]
- },
- {
- "if": "traffic_sign=BE:D7;BE:M16",
- "then": {
- "en": "",
- "nl": ""
- },
- "hideInAnswer": "_country!=be",
- "addExtraTags": [
- "moped=designated",
- "speed_pedelec=no"
- ]
- },
- {
- "if": "traffic_sign:supplementary=none",
- "then": {
- "en": "No supplementary traffic sign present",
- "nl": "Geen onderbord aanwezig"
- }
- }
- ]
- },
- {
- "render": {
- "en": "The buffer besides this cycleway is {cycleway:buffer} m",
- "nl": "De schrikafstand van dit fietspad is {cycleway:buffer} m"
- },
- "question": {
- "en": "How wide is the gap between the cycleway and the road?",
- "nl": "Hoe breed is de ruimte tussen het fietspad en de weg?"
- },
- "condition": {
- "or": [
- "cycleway=track",
- "cycleway=lane"
- ]
- },
- "freeform": {
- "key": "cycleway:buffer",
- "type": "length",
- "helperArgs": [
- "20",
- "map"
- ]
- }
- },
- {
- "question": {
- "en": "How is this cycleway separated from the road?",
- "nl": "Hoe is dit fietspad gescheiden van de weg?"
- },
- "condition": {
- "or": [
- "cycleway=track",
- "cycleway=lane"
- ]
- },
- "mappings": [
- {
- "if": "cycleway:separation=dashed_line",
- "then": {
- "en": "This cycleway is separated by a dashed line",
- "nl": "Dit fietspad is gescheiden van de weg met een onderbroken streep"
- }
- },
- {
- "if": "cycleway:separation=solid_line",
- "then": {
- "en": "This cycleway is separated by a solid line",
- "nl": "Dit fietspad is gescheiden van de weg met een doorgetrokken streep"
- }
- },
- {
- "if": "cycleway:separation=parking_lane",
- "then": {
- "en": "This cycleway is separated by a parking lane",
- "nl": "Dit fietspad is gescheiden van de weg met parkeervakken"
- }
- },
- {
- "if": "cycleway:separation=kerb",
- "then": {
- "en": "This cycleway is separated by a kerb",
- "nl": "Dit fietspad is gescheiden van de weg met een stoeprand"
- }
- }
- ]
- },
- {
- "question": {
- "en": "How is this cycleway separated from the road?",
- "nl": "Hoe is dit fietspad gescheiden van de weg?"
- },
- "condition": {
- "or": [
- "highway=cycleway",
- "highway=path"
- ]
- },
- "mappings": [
- {
- "if": "separation=dashed_line",
- "then": {
- "en": "This cycleway is separated by a dashed line",
- "nl": "Dit fietspad is gescheiden van de weg met een onderbroken streep"
- }
- },
- {
- "if": "separation=solid_line",
- "then": {
- "en": "This cycleway is separated by a solid line",
- "nl": "Dit fietspad is gescheiden van de weg met een doorgetrokken streep"
- }
- },
- {
- "if": "separation=parking_lane",
- "then": {
- "en": "This cycleway is separated by a parking lane",
- "nl": "Dit fietspad is gescheiden van de weg met parkeervakken"
- }
- },
- {
- "if": "separation=kerb",
- "then": {
- "en": "This cycleway is separated by a kerb",
- "nl": "Dit fietspad is gescheiden van de weg met een stoeprand"
- }
- }
- ]
- }
- ],
- "icon": {
- "render": "./assets/themes/cycle_infra/bicycleway.svg"
- },
- "width": {
- "render": "8"
- },
- "iconSize": {
- "render": "40,40,center"
- },
- "color": {
- "render": "rgba(170, 170, 170, 0.7)",
- "mappings": [
- {
- "if": "highway=cycleway",
- "then": "rgba(0, 189, 141, 0.7)"
- },
- {
- "if": "highway=path",
- "then": "rgba(204, 74, 207, 0.7)"
- },
- {
- "if": "cycleway=track",
- "then": "rgba(113, 3, 200, 0.7)"
- },
- {
- "if": "cycleway=shared_lane",
- "then": "rgba(74, 59, 247, 0.7)"
- },
- {
- "if": "cycleway=lane",
- "then": "rgba(254, 155, 6, 0.9)"
- },
- {
- "if": "cyclestreet=yes",
- "then": "rgba(57, 159, 191, 0.7)"
- }
- ]
- },
- "dashArray": {
- "render": "",
- "mappings": [
- {
- "if": {
- "or": [
- "oneway=yes",
- {
- "or": [
+ "minzoom": 16,
+ "source": {
+ "osmTags": {
+ "or": [
"highway=cycleway",
- "highway=path"
- ]
- }
- ]
+ "cycleway=lane",
+ "cycleway=shared_lane",
+ "cycleway=track",
+ "cyclestreet=yes",
+ "highway=residential",
+ "highway=tertiary",
+ "highway=unclassified",
+ "highway=primary",
+ "highway=secondary",
+ {
+ "and": [
+ "highway=path",
+ "bicycle=designated"
+ ]
+ }
+ ]
+ }
+ },
+ "calculatedTags": [
+ "_comfort_score=feat.score('https://raw.githubusercontent.com/pietervdvn/AspectedRouting/master/Examples/bicycle/aspects/bicycle.comfort.json')"
+ ],
+ "title": {
+ "render": {
+ "en": "Cycleways",
+ "nl": "Fietspaden"
},
- "then": ""
- },
- {
- "if": "cycleway=track",
- "then": ""
- },
- {
- "if": "cycleway=shared_lane",
- "then": "15 30"
- },
- {
- "if": "cycleway=lane",
- "then": "25 15 15 15 25"
- },
- {
- "if": "cyclestreet=yes",
- "then": ""
- }
- ]
- }
+ "mappings": [
+ {
+ "if": {
+ "or": [
+ "highway=cycleway",
+ "highway=path"
+ ]
+ },
+ "then": {
+ "nl": "Fietsweg",
+ "en": "Cycleway"
+ }
+ },
+ {
+ "if": "cycleway=shared_lane",
+ "then": {
+ "nl": "Fietssuggestiestrook",
+ "en": "Shared lane"
+ }
+ },
+ {
+ "if": "cycleway=lane",
+ "then": {
+ "nl": "Fietsstrook",
+ "en": "Bike lane"
+ }
+ },
+ {
+ "if": "cycleway=track",
+ "then": {
+ "en": "Cycleway next to the road",
+ "nl": "Fietsweg naast de weg"
+ }
+ },
+ {
+ "if": "cyclestreet=yes",
+ "then": {
+ "nl": "Fietsstraat",
+ "en": "Cyclestreet"
+ }
+ }
+ ]
+ },
+ "description": {},
+ "tagRenderings": [
+ {
+ "#": "Cycleway type for a road",
+ "question": {
+ "en": "What kind of cycleway is here?",
+ "nl": "Wat voor fietspad is hier?"
+ },
+ "condition": {
+ "and": [
+ "highway!=cycleway",
+ "highway!=path"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "cycleway=shared_lane",
+ "then": {
+ "en": "There is a shared lane",
+ "nl": "Er is een fietssuggestiestrook"
+ }
+ },
+ {
+ "if": "cycleway=lane",
+ "then": {
+ "en": "There is a lane next to the road (separated with paint)",
+ "nl": "Er is een fietspad aangrenzend aan de weg (gescheiden met verf)"
+ }
+ },
+ {
+ "if": "cycleway=track",
+ "then": {
+ "en": "There is a track, but no cycleway drawn separately from this road on the map.",
+ "nl": "Er is een fietspad (los van de weg), maar geen fietspad afzonderlijk getekend naast deze weg."
+ }
+ },
+ {
+ "if": "cycleway=separate",
+ "then": {
+ "en": "There is a separately drawn cycleway",
+ "nl": "Er is een apart getekend fietspad."
+ }
+ },
+ {
+ "if": "cycleway=no",
+ "then": {
+ "en": "There is no cycleway",
+ "nl": "Er is geen fietspad aanwezig"
+ },
+ "hideInAnswer": "cycleway=opposite"
+ },
+ {
+ "if": "cycleway=no",
+ "then": {
+ "en": "There is no cycleway",
+ "nl": "Er is geen fietspad aanwezig"
+ },
+ "hideInAnswer": "cycleway!=opposite",
+ "addExtraTags": [
+ "oneway:bicycle=no",
+ "fixme=Changed from cycleway=opposite"
+ ]
+ }
+ ]
+ },
+ {
+ "#": "is lit?",
+ "question": {
+ "en": "Is this street lit?",
+ "nl": "Is deze weg verlicht?"
+ },
+ "mappings": [
+ {
+ "if": "lit=yes",
+ "then": {
+ "en": "This street is lit",
+ "nl": "Deze weg is verlicht"
+ }
+ },
+ {
+ "if": "lit=no",
+ "then": {
+ "en": "This road is not lit",
+ "nl": "Deze weg is niet verlicht"
+ }
+ },
+ {
+ "if": "lit=sunset-sunrise",
+ "then": {
+ "en": "This road is lit at night",
+ "nl": "Deze weg is 's nachts verlicht"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "lit=24/7",
+ "then": {
+ "en": "This road is lit 24/7",
+ "nl": "Deze weg is 24/7 verlicht"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Is this a cyclestreet? (For a road)",
+ "question": {
+ "en": "Is this a cyclestreet?",
+ "nl": "Is dit een fietsstraat?"
+ },
+ "condition": {
+ "and": [
+ "highway!=cycleway",
+ "highway!=path"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "cyclestreet=yes",
+ "then": {
+ "en": "This is a cyclestreet, and a 30km/h zone.",
+ "nl": "Dit is een fietsstraat, en dus een 30km/h zone"
+ },
+ "addExtraTags": [
+ "overtaking:motor_vehicle=no",
+ "maxspeed=30"
+ ],
+ "hideInAnswer": "_country!=be"
+ },
+ {
+ "if": "cyclestreet=yes",
+ "then": {
+ "en": "This is a cyclestreet",
+ "nl": "Dit is een fietsstraat"
+ },
+ "hideInAnswer": "_country=be"
+ },
+ {
+ "if": "cyclestreet=",
+ "then": {
+ "en": "This is not a cyclestreet.",
+ "nl": "Dit is geen fietsstraat"
+ },
+ "addExtraTags": [
+ "overtaking:motor_vehicle="
+ ]
+ }
+ ]
+ },
+ {
+ "#": "Maxspeed (for road)",
+ "render": {
+ "en": "The maximum speed on this road is {maxspeed} km/h",
+ "nl": "De maximumsnelheid op deze weg is {maxspeed} km/u"
+ },
+ "freeform": {
+ "key": "maxspeed",
+ "type": "nat"
+ },
+ "condition": {
+ "and": [
+ "highway!=cycleway",
+ "highway!=path"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "maxspeed=20",
+ "then": {
+ "en": "The maximum speed is 20 km/h",
+ "nl": "De maximumsnelheid is 20 km/u"
+ }
+ },
+ {
+ "if": "maxspeed=30",
+ "then": {
+ "en": "The maximum speed is 30 km/h",
+ "nl": "De maximumsnelheid is 30 km/u"
+ }
+ },
+ {
+ "if": "maxspeed=50",
+ "then": {
+ "en": "The maximum speed is 50 km/h",
+ "nl": "De maximumsnelheid is 50 km/u"
+ }
+ },
+ {
+ "if": "maxspeed=70",
+ "then": {
+ "en": "The maximum speed is 70 km/h",
+ "nl": "De maximumsnelheid is 70 km/u"
+ }
+ },
+ {
+ "if": "maxspeed=90",
+ "then": {
+ "en": "The maximum speed is 90 km/h",
+ "nl": "De maximumsnelheid is 90 km/u"
+ }
+ }
+ ],
+ "question": {
+ "en": "What is the maximum speed in this street?",
+ "nl": "Wat is de maximumsnelheid in deze straat?"
+ }
+ },
+ {
+ "#": "Cycleway:surface",
+ "render": {
+ "en": "This cyleway is made of {cycleway:surface}",
+ "nl": "Dit fietspad is gemaakt van {cycleway:surface}"
+ },
+ "freeform": {
+ "key": "cycleway:surface"
+ },
+ "condition": {
+ "or": [
+ "cycleway=shared_lane",
+ "cycleway=lane",
+ "cycleway=track"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "cycleway:surface=unpaved",
+ "then": {
+ "en": "This cycleway is unpaved",
+ "nl": "Dit fietspad is onverhard"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "cycleway:surface=paved",
+ "then": {
+ "en": "This cycleway is paved",
+ "nl": "Dit fietspad is geplaveid"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "cycleway:surface=asphalt",
+ "then": {
+ "en": "This cycleway is made of asphalt",
+ "nl": "Dit fietspad is gemaakt van asfalt"
+ }
+ },
+ {
+ "if": "cycleway:surface=paving_stones",
+ "then": {
+ "en": "This cycleway is made of smooth paving stones",
+ "nl": "Dit fietspad is gemaakt van straatstenen"
+ }
+ },
+ {
+ "if": "cycleway:surface=concrete",
+ "then": {
+ "en": "This cycleway is made of concrete",
+ "nl": "Dit fietspad is gemaakt van beton"
+ }
+ },
+ {
+ "if": "cycleway:surface=cobblestone",
+ "then": {
+ "en": "This cycleway is made of cobblestone (unhewn or sett)",
+ "nl": "Dit fietspad is gemaakt van kasseien (natuurlijk of verwerkt)"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "cycleway:surface=unhewn_cobblestone",
+ "then": {
+ "en": "This cycleway is made of raw, natural cobblestone",
+ "nl": "Dit fietspad is gemaakt van ruwe, natuurlijke kasseien"
+ }
+ },
+ {
+ "if": "cycleway:surface=sett",
+ "then": {
+ "en": "This cycleway is made of flat, square cobblestone",
+ "nl": "Dit fietspad is gemaakt van vlakke, rechthoekige kasseien"
+ }
+ },
+ {
+ "if": "cycleway:surface=wood",
+ "then": {
+ "en": "This cycleway is made of wood",
+ "nl": "Dit fietspad is gemaakt van hout"
+ }
+ },
+ {
+ "if": "cycleway:surface=gravel",
+ "then": {
+ "en": "This cycleway is made of gravel",
+ "nl": "Dit fietspad is gemaakt van grind"
+ }
+ },
+ {
+ "if": "cycleway:surface=fine_gravel",
+ "then": {
+ "en": "This cycleway is made of fine gravel",
+ "nl": "Dit fietspad is gemaakt van fijn grind"
+ }
+ },
+ {
+ "if": "cycleway:surface=pebblestone",
+ "then": {
+ "en": "This cycleway is made of pebblestone",
+ "nl": "Dit fietspad is gemaakt van kiezelsteentjes"
+ }
+ },
+ {
+ "if": "cycleway:surface=ground",
+ "then": {
+ "en": "This cycleway is made from raw ground",
+ "nl": "Dit fietspad is gemaakt van aarde"
+ }
+ }
+ ],
+ "question": {
+ "en": "What is the surface of the cycleway made from?",
+ "nl": "Waaruit is het oppervlak van het fietspad van gemaakt?"
+ }
+ },
+ {
+ "#": "Cycleway:smoothness",
+ "question": {
+ "en": "What is the smoothness of this cycleway?",
+ "nl": "Wat is de kwaliteit van dit fietspad?"
+ },
+ "condition": {
+ "or": [
+ "cycleway=shared_lane",
+ "cycleway=lane",
+ "cycleway=track"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "cycleway:smoothness=excellent",
+ "then": {
+ "en": "Usable for thin rollers: rollerblade, skateboard",
+ "nl": "Geschikt voor fijne rollers: rollerblade, skateboard"
+ }
+ },
+ {
+ "if": "cycleway:smoothness=good",
+ "then": {
+ "en": "Usable for thin wheels: racing bike",
+ "nl": "Geschikt voor fijne wielen: racefiets"
+ }
+ },
+ {
+ "if": "cycleway:smoothness=intermediate",
+ "then": {
+ "en": "Usable for normal wheels: city bike, wheelchair, scooter",
+ "nl": "Geschikt voor normale wielen: stadsfiets, rolstoel, scooter"
+ }
+ },
+ {
+ "if": "cycleway:smoothness=bad",
+ "then": {
+ "en": "Usable for robust wheels: trekking bike, car, rickshaw",
+ "nl": "Geschikt voor brede wielen: trekfiets, auto, rickshaw"
+ }
+ },
+ {
+ "if": "cycleway:smoothness=very_bad",
+ "then": {
+ "en": "Usable for vehicles with high clearance: light duty off-road vehicle",
+ "nl": "Geschikt voor voertuigen met hoge banden: lichte terreinwagen"
+ }
+ },
+ {
+ "if": "cycleway:smoothness=horrible",
+ "then": {
+ "en": "Usable for off-road vehicles: heavy duty off-road vehicle",
+ "nl": "Geschikt voor terreinwagens: zware terreinwagen"
+ }
+ },
+ {
+ "if": "cycleway:smoothness=very_horrible",
+ "then": {
+ "en": "Usable for specialized off-road vehicles: tractor, ATV",
+ "nl": "Geschikt voor gespecialiseerde terreinwagens: tractor, alleterreinwagen"
+ }
+ },
+ {
+ "if": "cycleway:smoothness=impassable",
+ "then": {
+ "en": "Impassable / No wheeled vehicle",
+ "nl": "Niet geschikt voor voertuigen met wielen"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Surface of the road",
+ "render": {
+ "en": "This road is made of {surface}",
+ "nl": "Deze weg is gemaakt van {surface}"
+ },
+ "freeform": {
+ "key": "surface"
+ },
+ "mappings": [
+ {
+ "if": "surface=unpaved",
+ "then": {
+ "en": "This cycleway is unhardened",
+ "nl": "Dit fietspad is onverhard"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "surface=paved",
+ "then": {
+ "en": "This cycleway is paved",
+ "nl": "Dit fietspad is geplaveid"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "surface=asphalt",
+ "then": {
+ "en": "This cycleway is made of asphalt",
+ "nl": "Dit fietspad is gemaakt van asfalt"
+ }
+ },
+ {
+ "if": "surface=paving_stones",
+ "then": {
+ "en": "This cycleway is made of smooth paving stones",
+ "nl": "Dit fietspad is gemaakt van straatstenen"
+ }
+ },
+ {
+ "if": "surface=concrete",
+ "then": {
+ "en": "This cycleway is made of concrete",
+ "nl": "Dit fietspad is gemaakt van beton"
+ }
+ },
+ {
+ "if": "surface=cobblestone",
+ "then": {
+ "en": "This cycleway is made of cobblestone (unhewn or sett)",
+ "nl": "Dit fietspad is gemaakt van kasseien (natuurlijk of verwerkt)"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "surface=unhewn_cobblestone",
+ "then": {
+ "en": "This cycleway is made of raw, natural cobblestone",
+ "nl": "Dit fietspad is gemaakt van ruwe, natuurlijke kasseien"
+ }
+ },
+ {
+ "if": "surface=sett",
+ "then": {
+ "en": "This cycleway is made of flat, square cobblestone",
+ "nl": "Dit fietspad is gemaakt van vlakke, rechthoekige kasseien"
+ }
+ },
+ {
+ "if": "surface=wood",
+ "then": {
+ "en": "This cycleway is made of wood",
+ "nl": "Dit fietspad is gemaakt van hout"
+ }
+ },
+ {
+ "if": "surface=gravel",
+ "then": {
+ "en": "This cycleway is made of gravel",
+ "nl": "Dit fietspad is gemaakt van grind"
+ }
+ },
+ {
+ "if": "surface=fine_gravel",
+ "then": {
+ "en": "This cycleway is made of fine gravel",
+ "nl": "Dit fietspad is gemaakt van fijn grind"
+ }
+ },
+ {
+ "if": "surface=pebblestone",
+ "then": {
+ "en": "This cycleway is made of pebblestone",
+ "nl": "Dit fietspad is gemaakt van kiezelsteentjes"
+ }
+ },
+ {
+ "if": "surface=ground",
+ "then": {
+ "en": "This cycleway is made from raw ground",
+ "nl": "Dit fietspad is gemaakt van aarde"
+ }
+ }
+ ],
+ "question": {
+ "en": "What is the surface of the street made from?",
+ "nl": "Waaruit is het oppervlak van de straat gemaakt?"
+ }
+ },
+ {
+ "#": "Surface of the street",
+ "question": {
+ "en": "What is the smoothness of this street?",
+ "nl": "Wat is de kwaliteit van deze straat?"
+ },
+ "condition": {
+ "or": [
+ "cycleway=no",
+ "highway=cycleway"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "smoothness=excellent",
+ "then": {
+ "en": "Usable for thin rollers: rollerblade, skateboard"
+ }
+ },
+ {
+ "if": "smoothness=good",
+ "then": {
+ "en": "Usable for thin wheels: racing bike"
+ }
+ },
+ {
+ "if": "smoothness=intermediate",
+ "then": {
+ "en": "Usable for normal wheels: city bike, wheelchair, scooter"
+ }
+ },
+ {
+ "if": "smoothness=bad",
+ "then": {
+ "en": "Usable for robust wheels: trekking bike, car, rickshaw"
+ }
+ },
+ {
+ "if": "smoothness=very_bad",
+ "then": {
+ "en": "Usable for vehicles with high clearance: light duty off-road vehicle"
+ }
+ },
+ {
+ "if": "smoothness=horrible",
+ "then": {
+ "en": "Usable for off-road vehicles: heavy duty off-road vehicle"
+ }
+ },
+ {
+ "if": "smoothness=very_horrible",
+ "then": {
+ "en": "Usable for specialized off-road vehicles: tractor, ATV"
+ }
+ },
+ {
+ "if": "smoothness=impassable",
+ "then": {
+ "en": "Impassable / No wheeled vehicle"
+ }
+ }
+ ]
+ },
+ {
+ "#": "width:carriageway",
+ "condition": {
+ "and": [
+ "highway!=cycleway",
+ "highway!=path"
+ ]
+ },
+ "render": {
+ "en": "The carriage width of this road is {width:carriageway}m",
+ "nl": "De breedte van deze rijbaan in deze straat is {width:carriageway}m"
+ },
+ "freeform": {
+ "key": "width:carriageway",
+ "type": "length",
+ "helperArgs": [
+ "20",
+ "map"
+ ]
+ },
+ "question": {
+ "en": "What is the carriage width of this road (in meters)?",
+ "nl": "Hoe breed is de rijbaan in deze straat (in meters)?"
+ }
+ },
+ {
+ "question": {
+ "en": "What traffic sign does this cycleway have?",
+ "nl": "Welk verkeersbord heeft dit fietspad?"
+ },
+ "condition": {
+ "or": [
+ "cycleway=lane",
+ "cycleway=track"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "cycleway:traffic_sign=BE:D7",
+ "then": {
+ "en": "Compulsory cycleway ",
+ "nl": "Verplicht fietspad "
+ },
+ "hideInAnswer": "_country!=be"
+ },
+ {
+ "if": "cycleway:traffic_sign~BE:D7;.*",
+ "then": {
+ "en": "Compulsory cycleway (with supplementary sign) ",
+ "nl": "Verplicht fietspad (met onderbord) "
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "cycleway:traffic_sign=BE:D9",
+ "then": {
+ "en": "Segregated foot/cycleway ",
+ "nl": "Afgescheiden voet-/fietspad "
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "cycleway:foot=designated",
+ "cycleway:segregated=yes"
+ ]
+ },
+ {
+ "if": "cycleway:traffic_sign=BE:D10",
+ "then": {
+ "en": "Unsegregated foot/cycleway ",
+ "nl": "Gedeeld voet-/fietspad "
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "cycleway:foot=designated",
+ "cycleway:segregated=no"
+ ]
+ },
+ {
+ "if": "cycleway:traffic_sign=none",
+ "then": {
+ "en": "No traffic sign present",
+ "nl": "Geen verkeersbord aanwezig"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "What traffic sign does this cycleway have?",
+ "nl": "Welk verkeersbord heeft dit fietspad?"
+ },
+ "condition": {
+ "or": [
+ "highway=cycleway",
+ "highway=path"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "traffic_sign=BE:D7",
+ "then": {
+ "en": "Compulsory cycleway ",
+ "nl": "Verplicht fietspad "
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "bicycle=designated",
+ "mofa=designated",
+ "moped=yes",
+ "speed_pedelec=yes"
+ ]
+ },
+ {
+ "if": "traffic_sign~BE:D7;.*",
+ "then": {
+ "en": "Compulsory cycleway (with supplementary sign) ",
+ "nl": "Verplicht fietspad (met onderbord) "
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "traffic_sign=BE:D9",
+ "then": {
+ "en": "Segregated foot/cycleway ",
+ "nl": "Afgescheiden voet-/fietspad "
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "foot=designated",
+ "bicycle=designated",
+ "mofa=designated",
+ "moped=no",
+ "speed_pedelec=no",
+ "segregated=yes"
+ ]
+ },
+ {
+ "if": "traffic_sign=BE:D10",
+ "then": {
+ "en": "Unsegregated foot/cycleway ",
+ "nl": "Gedeeld voet-/fietspad "
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "foot=designated",
+ "bicycle=designated",
+ "mofa=designated",
+ "moped=no",
+ "speed_pedelec=no",
+ "segregated=no"
+ ]
+ },
+ {
+ "if": "traffic_sign=none",
+ "then": {
+ "en": "No traffic sign present",
+ "nl": "Geen verkeersbord aanwezig"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does the traffic sign D7 () have a supplementary sign?",
+ "nl": "Heeft het verkeersbord D7 () een onderbord?"
+ },
+ "condition": {
+ "or": [
+ "cycleway:traffic_sign=BE:D7",
+ "cycleway:traffic_sign~BE:D7;.*"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "cycleway:traffic_sign=BE:D7;BE:M6",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "cycleway:moped=designated"
+ ]
+ },
+ {
+ "if": "cycleway:traffic_sign=BE:D7;BE:M13",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "cycleway:speed_pedelec=designated"
+ ]
+ },
+ {
+ "if": "cycleway:traffic_sign=BE:D7;BE:M14",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "cycleway:moped=designated",
+ "cycleway:speed_pedelec=designated"
+ ]
+ },
+ {
+ "if": "cycleway:traffic_sign=BE:D7;BE:M7",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "cycleway:moped=no"
+ ]
+ },
+ {
+ "if": "cycleway:traffic_sign=BE:D7;BE:M15",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "cycleway:speed_pedelec=no"
+ ]
+ },
+ {
+ "if": "cycleway:traffic_sign=BE:D7;BE:M16",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "cycleway:moped=designated",
+ "cycleway:speed_pedelec=no"
+ ]
+ },
+ {
+ "if": "cycleway:traffic_sign:supplementary=none",
+ "then": {
+ "en": "No supplementary traffic sign present",
+ "nl": "Geen onderbord aanwezig"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Does the traffic sign D7 () have a supplementary sign?",
+ "nl": "Heeft het verkeersbord D7 () een onderbord?"
+ },
+ "condition": {
+ "or": [
+ "traffic_sign=BE:D7",
+ "traffic_sign~BE:D7;.*"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "traffic_sign=BE:D7;BE:M6",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "moped=designated"
+ ]
+ },
+ {
+ "if": "traffic_sign=BE:D7;BE:M13",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "speed_pedelec=designated"
+ ]
+ },
+ {
+ "if": "traffic_sign=BE:D7;BE:M14",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "moped=designated",
+ "speed_pedelec=designated"
+ ]
+ },
+ {
+ "if": "traffic_sign=BE:D7;BE:M7",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "moped=no"
+ ]
+ },
+ {
+ "if": ":traffic_sign=BE:D7;BE:M15",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "speed_pedelec=no"
+ ]
+ },
+ {
+ "if": "traffic_sign=BE:D7;BE:M16",
+ "then": {
+ "en": "",
+ "nl": ""
+ },
+ "hideInAnswer": "_country!=be",
+ "addExtraTags": [
+ "moped=designated",
+ "speed_pedelec=no"
+ ]
+ },
+ {
+ "if": "traffic_sign:supplementary=none",
+ "then": {
+ "en": "No supplementary traffic sign present",
+ "nl": "Geen onderbord aanwezig"
+ }
+ }
+ ]
+ },
+ {
+ "render": {
+ "en": "The buffer besides this cycleway is {cycleway:buffer} m",
+ "nl": "De schrikafstand van dit fietspad is {cycleway:buffer} m"
+ },
+ "question": {
+ "en": "How wide is the gap between the cycleway and the road?",
+ "nl": "Hoe breed is de ruimte tussen het fietspad en de weg?"
+ },
+ "condition": {
+ "or": [
+ "cycleway=track",
+ "cycleway=lane"
+ ]
+ },
+ "freeform": {
+ "key": "cycleway:buffer",
+ "type": "length",
+ "helperArgs": [
+ "20",
+ "map"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "How is this cycleway separated from the road?",
+ "nl": "Hoe is dit fietspad gescheiden van de weg?"
+ },
+ "condition": {
+ "or": [
+ "cycleway=track",
+ "cycleway=lane"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "cycleway:separation=dashed_line",
+ "then": {
+ "en": "This cycleway is separated by a dashed line",
+ "nl": "Dit fietspad is gescheiden van de weg met een onderbroken streep"
+ }
+ },
+ {
+ "if": "cycleway:separation=solid_line",
+ "then": {
+ "en": "This cycleway is separated by a solid line",
+ "nl": "Dit fietspad is gescheiden van de weg met een doorgetrokken streep"
+ }
+ },
+ {
+ "if": "cycleway:separation=parking_lane",
+ "then": {
+ "en": "This cycleway is separated by a parking lane",
+ "nl": "Dit fietspad is gescheiden van de weg met parkeervakken"
+ }
+ },
+ {
+ "if": "cycleway:separation=kerb",
+ "then": {
+ "en": "This cycleway is separated by a kerb",
+ "nl": "Dit fietspad is gescheiden van de weg met een stoeprand"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "How is this cycleway separated from the road?",
+ "nl": "Hoe is dit fietspad gescheiden van de weg?"
+ },
+ "condition": {
+ "or": [
+ "highway=cycleway",
+ "highway=path"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "separation=dashed_line",
+ "then": {
+ "en": "This cycleway is separated by a dashed line",
+ "nl": "Dit fietspad is gescheiden van de weg met een onderbroken streep"
+ }
+ },
+ {
+ "if": "separation=solid_line",
+ "then": {
+ "en": "This cycleway is separated by a solid line",
+ "nl": "Dit fietspad is gescheiden van de weg met een doorgetrokken streep"
+ }
+ },
+ {
+ "if": "separation=parking_lane",
+ "then": {
+ "en": "This cycleway is separated by a parking lane",
+ "nl": "Dit fietspad is gescheiden van de weg met parkeervakken"
+ }
+ },
+ {
+ "if": "separation=kerb",
+ "then": {
+ "en": "This cycleway is separated by a kerb",
+ "nl": "Dit fietspad is gescheiden van de weg met een stoeprand"
+ }
+ }
+ ]
+ }
+ ],
+ "icon": {
+ "render": "./assets/themes/cycle_infra/bicycleway.svg"
+ },
+ "width": {
+ "render": "8"
+ },
+ "iconSize": {
+ "render": "40,40,center"
+ },
+ "color": {
+ "render": "rgba(170, 170, 170, 0.7)",
+ "mappings": [
+ {
+ "if": "highway=cycleway",
+ "then": "rgba(0, 189, 141, 0.7)"
+ },
+ {
+ "if": "highway=path",
+ "then": "rgba(204, 74, 207, 0.7)"
+ },
+ {
+ "if": "cycleway=track",
+ "then": "rgba(113, 3, 200, 0.7)"
+ },
+ {
+ "if": "cycleway=shared_lane",
+ "then": "rgba(74, 59, 247, 0.7)"
+ },
+ {
+ "if": "cycleway=lane",
+ "then": "rgba(254, 155, 6, 0.9)"
+ },
+ {
+ "if": "cyclestreet=yes",
+ "then": "rgba(57, 159, 191, 0.7)"
+ }
+ ]
+ },
+ "dashArray": {
+ "render": "",
+ "mappings": [
+ {
+ "if": {
+ "or": [
+ "oneway=yes",
+ {
+ "or": [
+ "highway=cycleway",
+ "highway=path"
+ ]
+ }
+ ]
+ },
+ "then": ""
+ },
+ {
+ "if": "cycleway=track",
+ "then": ""
+ },
+ {
+ "if": "cycleway=shared_lane",
+ "then": "15 30"
+ },
+ {
+ "if": "cycleway=lane",
+ "then": "25 15 15 15 25"
+ },
+ {
+ "if": "cyclestreet=yes",
+ "then": ""
+ }
+ ]
+ }
}
\ No newline at end of file
diff --git a/assets/layers/defibrillator/defibrillator.json b/assets/layers/defibrillator/defibrillator.json
index edf46f6b9..f0d193c22 100644
--- a/assets/layers/defibrillator/defibrillator.json
+++ b/assets/layers/defibrillator/defibrillator.json
@@ -1,529 +1,529 @@
{
- "id": "defibrillator",
- "name": {
- "en": "Defibrillators",
- "ca": "Desfibril·ladors",
- "es": "Desfibriladores",
- "fr": "Défibrillateurs",
- "nl": "Defibrillatoren",
- "de": "Defibrillatoren",
- "it": "Defibrillatori",
- "ru": "Дефибрилляторы"
- },
- "source": {
- "osmTags": "emergency=defibrillator"
- },
- "calculatedTags": [
- "_days_since_last_survey=Math.floor(new Date() - new Date(feat.properties['survey:date'])/(1000*60*60*24))",
- "_recently_surveyed=Number(feat.properties._days_since_last_survey) <= 90"
- ],
- "minzoom": 12,
- "title": {
- "render": {
- "en": "Defibrillator",
- "ca": "Desfibril·lador",
- "es": "Desfibrilador",
- "fr": "Défibrillateur",
- "nl": "Defibrillator",
- "de": "Defibrillator",
- "it": "Defibrillatore",
- "ru": "Дефибриллятор"
- }
- },
- "icon": {
- "render": "./assets/themes/aed/aed.svg",
- "mappings": [
- {
- "if": "_recently_surveyed=true",
- "then": {
- "en": "./assets/layers/defibrillator/aed_checked.svg",
- "ru": "./assets/layers/defibrillator/aed_checked.svg",
- "it": "./assets/layers/defibrillator/aed_checked.svg",
- "fr": "./assets/layers/defibrillator/aed_checked.svg"
+ "id": "defibrillator",
+ "name": {
+ "en": "Defibrillators",
+ "ca": "Desfibril·ladors",
+ "es": "Desfibriladores",
+ "fr": "Défibrillateurs",
+ "nl": "Defibrillatoren",
+ "de": "Defibrillatoren",
+ "it": "Defibrillatori",
+ "ru": "Дефибрилляторы"
+ },
+ "source": {
+ "osmTags": "emergency=defibrillator"
+ },
+ "calculatedTags": [
+ "_days_since_last_survey=Math.floor(new Date() - new Date(feat.properties['survey:date'])/(1000*60*60*24))",
+ "_recently_surveyed=Number(feat.properties._days_since_last_survey) <= 90"
+ ],
+ "minzoom": 12,
+ "title": {
+ "render": {
+ "en": "Defibrillator",
+ "ca": "Desfibril·lador",
+ "es": "Desfibrilador",
+ "fr": "Défibrillateur",
+ "nl": "Defibrillator",
+ "de": "Defibrillator",
+ "it": "Defibrillatore",
+ "ru": "Дефибриллятор"
+ }
+ },
+ "icon": {
+ "render": "./assets/themes/aed/aed.svg",
+ "mappings": [
+ {
+ "if": "_recently_surveyed=true",
+ "then": {
+ "en": "./assets/layers/defibrillator/aed_checked.svg",
+ "ru": "./assets/layers/defibrillator/aed_checked.svg",
+ "it": "./assets/layers/defibrillator/aed_checked.svg",
+ "fr": "./assets/layers/defibrillator/aed_checked.svg"
+ }
+ }
+ ]
+ },
+ "color": "#0000ff",
+ "presets": [
+ {
+ "title": {
+ "en": "Defibrillator",
+ "ca": "Desfibril·lador",
+ "es": "Desfibrilador",
+ "fr": "Défibrillateur",
+ "nl": "Defibrillator",
+ "de": "Defibrillator",
+ "it": "Defibrillatore",
+ "ru": "Дефибриллятор"
+ },
+ "tags": [
+ "emergency=defibrillator"
+ ],
+ "preciseInput": {
+ "preferredBackground": "map"
+ }
+ }
+ ],
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "en": "Is this defibrillator located indoors?",
+ "ca": "Està el desfibril·lador a l'interior?",
+ "es": "¿Esté el desfibrilador en interior?",
+ "fr": "Ce défibrillateur est-il disposé en intérieur ?",
+ "nl": "Hangt deze defibrillator binnen of buiten?",
+ "de": "Befindet sich dieser Defibrillator im Gebäude?",
+ "it": "Questo defibrillatore si trova all’interno?"
+ },
+ "mappings": [
+ {
+ "if": "indoor=yes",
+ "then": {
+ "en": "This defibrillator is located indoors",
+ "ca": "Aquest desfibril·lador està a l'interior",
+ "es": "Este desfibrilador está en interior",
+ "fr": "Ce défibrillateur est en intérieur (dans un batiment)",
+ "nl": "Deze defibrillator bevindt zich in een gebouw",
+ "de": "Dieser Defibrillator befindet sich im Gebäude",
+ "it": "Questo defibrillatore si trova all’interno"
+ }
+ },
+ {
+ "if": "indoor=no",
+ "then": {
+ "en": "This defibrillator is located outdoors",
+ "ca": "Aquest desfibril·lador està a l'exterior",
+ "es": "Este desfibrilador está en exterior",
+ "fr": "Ce défibrillateur est situé en extérieur",
+ "nl": "Deze defibrillator hangt buiten",
+ "de": "Dieser Defibrillator befindet sich im Freien",
+ "it": "Questo defibrillatore si trova all’esterno"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Is this defibrillator freely accessible?",
+ "ca": "Està el desfibril·lador accessible lliurement?",
+ "es": "¿Está el desfibrilador accesible libremente?",
+ "fr": "Ce défibrillateur est-il librement accessible ?",
+ "nl": "Is deze defibrillator vrij toegankelijk?",
+ "de": "Ist dieser Defibrillator frei zugänglich?",
+ "it": "Questo defibrillatore è liberamente accessibile?"
+ },
+ "render": {
+ "en": "Access is {access}",
+ "ca": "L'accés és {access}",
+ "es": "El acceso es {access}",
+ "fr": "{access} accessible",
+ "nl": "Toegankelijkheid is {access}",
+ "de": "Zugang ist {access}",
+ "it": "Accesso è {access}"
+ },
+ "freeform": {
+ "key": "access",
+ "addExtraTags": [
+ "fixme=Freeform field used for access - doublecheck the value"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "access=yes",
+ "then": {
+ "en": "Publicly accessible",
+ "ca": "Accés lliure",
+ "es": "Acceso libre",
+ "fr": "Librement accessible",
+ "nl": "Publiek toegankelijk",
+ "de": "Öffentlich zugänglich",
+ "it": "Pubblicamente accessibile",
+ "ru": "Общедоступный"
+ }
+ },
+ {
+ "if": "access=public",
+ "then": {
+ "en": "Publicly accessible",
+ "ca": "Publicament accessible",
+ "es": "Publicament accesible",
+ "fr": "Librement accessible",
+ "nl": "Publiek toegankelijk",
+ "de": "Öffentlich zugänglich",
+ "it": "Pubblicamente accessibile",
+ "ru": "Общедоступный"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "access=customers",
+ "then": {
+ "en": "Only accessible to customers",
+ "ca": "Només accessible a clients",
+ "es": "Sólo accesible a clientes",
+ "fr": "Réservé aux clients du lieu",
+ "nl": "Enkel toegankelijk voor klanten",
+ "de": "Nur für Kunden zugänglich",
+ "it": "Accessibile solo ai clienti",
+ "ru": "Доступно только для клиентов"
+ }
+ },
+ {
+ "if": "access=private",
+ "then": {
+ "en": "Not accessible to the general public (e.g. only accesible to staff, the owners, ...)",
+ "ca": "No accessible al públic en general (ex. només accesible a treballadors, propietaris, ...)",
+ "es": "No accesible al público en general (ex. sólo accesible a trabajadores, propietarios, ...)",
+ "fr": "Non accessible au public (par exemple réservé au personnel, au propriétaire, ...)",
+ "nl": "Niet toegankelijk voor het publiek (bv. enkel voor personeel, de eigenaar, ...)",
+ "de": "Nicht für die Öffentlichkeit zugänglich (z.B. nur für das Personal, die Eigentümer, ...)",
+ "it": "Non accessibile al pubblico (ad esempio riservato al personale, ai proprietari, etc.)"
+ }
+ },
+ {
+ "if": "access=no",
+ "then": {
+ "en": "Not accessible, possibly only for professional use",
+ "nl": "Niet toegankelijk, mogelijk enkel voor professionals",
+ "fr": "Pas accessible, peut-être uniquement à usage professionnel",
+ "it": "Non accessibile, potrebbe essere solo per uso professionale"
+ }
+ }
+ ]
+ },
+ {
+ "render": {
+ "en": "There is no info about the type of device",
+ "nl": "Er is geen info over het soort toestel",
+ "fr": "Il n'y a pas d'information sur le type de dispositif",
+ "it": "Non vi sono informazioni riguardanti il tipo di questo dispositivo",
+ "de": "Es gibt keine Informationen über den Gerätetyp"
+ },
+ "question": {
+ "en": "Is this a a regular automatic defibrillator or a manual defibrillator for professionals only?",
+ "nl": "Is dit een gewone automatische defibrillator of een manueel toestel enkel voor professionals?",
+ "fr": "Est-ce un défibrillateur automatique normal ou un défibrillateur manuel à usage professionnel uniquement ?",
+ "it": "Si tratta di un normale defibrillatore automatico o un defibrillatore manuale riservato ai professionisti?"
+ },
+ "freeform": {
+ "key": "defibrillator"
+ },
+ "condition": {
+ "and": [
+ "access=no"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "defibrillator=manual",
+ "then": {
+ "en": "This is a manual defibrillator for professionals",
+ "nl": "Dit is een manueel toestel enkel voor professionals",
+ "fr": "C'est un défibrillateur manuel pour professionnel",
+ "it": "Questo è un defibrillatore manuale per professionisti",
+ "de": "Dies ist ein manueller Defibrillator für den professionellen Einsatz"
+ }
+ },
+ {
+ "if": "defibrillator=automatic",
+ "then": {
+ "en": "This is a normal automatic defibrillator",
+ "nl": "Dit is een gewone automatische defibrillator",
+ "fr": "C'est un défibrillateur automatique manuel",
+ "it": "È un normale defibrillatore automatico",
+ "ru": "Это обычный автоматический дефибриллятор"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "On which floor is this defibrillator located?",
+ "ca": "A quina planta està el desfibril·lador localitzat?",
+ "es": "¿En qué planta se encuentra el defibrilador localizado?",
+ "fr": "À quel étage est situé ce défibrillateur ?",
+ "nl": "Op welke verdieping bevindt deze defibrillator zich?",
+ "de": "In welchem Stockwerk befindet sich dieser Defibrillator?",
+ "it": "A che piano si trova questo defibrillatore?"
+ },
+ "condition": {
+ "and": [
+ "indoor=yes"
+ ]
+ },
+ "freeform": {
+ "key": "level",
+ "type": "int"
+ },
+ "render": {
+ "en": "This defibrillator is on floor {level}",
+ "ca": "Aquest desfibril·lador és a la planta {level}",
+ "es": "El desfibrilador se encuentra en la planta {level}",
+ "fr": "Ce défibrillateur est à l'étage {level}",
+ "nl": "De defibrillator bevindt zicht op verdieping {level}",
+ "de": "Dieser Defibrallator befindet sich im {level}. Stockwerk",
+ "it": "Questo defibrillatore è al piano {level}"
+ },
+ "mappings": [
+ {
+ "if": "level=0",
+ "then": {
+ "en": "This defibrillator is on the ground floor",
+ "nl": "Deze defibrillator bevindt zich gelijkvloers",
+ "fr": "Ce défibrillateur est au rez-de-chaussée",
+ "it": "Questo defibrillatore è al pian terreno",
+ "de": "Dieser Defibrillator befindet sich im Erdgeschoss"
+ }
+ },
+ {
+ "if": "level=1",
+ "then": {
+ "en": "This defibrillator is on the first floor",
+ "nl": "Deze defibrillator is op de eerste verdieping",
+ "fr": "Ce défibrillateur est au premier étage",
+ "it": "Questo defibrillatore è al primo piano",
+ "de": "Dieser Defibrillator befindet sich in der ersten Etage"
+ }
+ }
+ ]
+ },
+ {
+ "render": {
+ "nl": "Meer informatie over de locatie (lokale taal): {defibrillator:location}",
+ "en": "Extra information about the location (in the local languagel): {defibrillator:location}",
+ "fr": "Informations supplémentaires à propos de l'emplacement (dans la langue locale) : {defibrillator:location}",
+ "it": "Informazioni supplementari circa la posizione (in lingua locale): {defibrillator:location}",
+ "de": "Zusätzliche Informationen über den Standort (in der Landessprache): {defibrillator:location}"
+ },
+ "question": {
+ "en": "Please give some explanation on where the defibrillator can be found (in the local language)",
+ "ca": "Dóna detalls d'on es pot trobar el desfibril·lador",
+ "es": "Da detalles de dónde se puede encontrar el desfibrilador (en el idioma local)",
+ "fr": "Veuillez indiquez plus précisément où se situe le défibrillateur (dans la langue local)",
+ "nl": "Gelieve meer informatie te geven over de exacte locatie van de defibrillator (in de plaatselijke taal)",
+ "de": "Bitte geben Sie einige Erläuterungen dazu, wo der Defibrillator zu finden ist (in der lokalen Sprache)",
+ "it": "Indica più precisamente dove si trova il defibrillatore (in lingua locale)"
+ },
+ "freeform": {
+ "type": "text",
+ "key": "defibrillator:location"
+ }
+ },
+ {
+ "render": {
+ "nl": "Meer informatie over de locatie (in het Engels): {defibrillator:location:en}",
+ "en": "Extra information about the location (in English): {defibrillator:location:en}",
+ "fr": "Informations supplémentaires à propos de l'emplacement (en anglais) : {defibrillator:location}",
+ "it": "Informazioni supplementari circa la posizione (in inglese): {defibrillator:location:en}",
+ "de": "Zusätzliche Informationen über den Standort (auf Englisch): {defibrillator:location}"
+ },
+ "question": {
+ "en": "Please give some explanation on where the defibrillator can be found (in English)",
+ "ca": "Dóna detalls d'on es pot trobar el desfibril·lador",
+ "es": "Da detalles de dónde se puede encontrar el desfibrilador (en ingles)",
+ "fr": "Veuillez indiquez plus précisément où se situe le défibrillateur (en englais)",
+ "nl": "Gelieve meer informatie te geven over de exacte locatie van de defibrillator (in het Engels)",
+ "de": "Bitte geben Sie einige Erläuterungen dazu, wo der Defibrillator zu finden ist (auf Englisch)",
+ "it": "Indica più precisamente dove si trova il defibrillatore (in inglese)"
+ },
+ "freeform": {
+ "type": "text",
+ "key": "defibrillator:location:en"
+ }
+ },
+ {
+ "render": {
+ "nl": "Meer informatie over de locatie (in het Frans): {defibrillator:location:fr}",
+ "en": "Extra information about the location (in French): {defibrillator:location:fr}",
+ "fr": "Informations supplémentaires à propos de l'emplacement (en Français) : {defibrillator:location}",
+ "it": "Informazioni supplementari circa la posizione (in francese): {defibrillator:location:fr}",
+ "de": "Zusätzliche Informationen zum Standort (auf Französisch): {defibrillator:Standort:fr}"
+ },
+ "question": {
+ "en": "Please give some explanation on where the defibrillator can be found (in French)",
+ "ca": "Dóna detalls d'on es pot trobar el desfibril·lador",
+ "es": "Da detalles de dónde se puede encontrar el desfibrilador (en frances)",
+ "fr": "Veuillez indiquez plus précisément où se situe le défibrillateur (en français)",
+ "nl": "Gelieve meer informatie te geven over de exacte locatie van de defibrillator (in het Frans)",
+ "de": "Bitte geben Sie einige Erläuterungen dazu, wo der Defibrillator zu finden ist (auf Französisch)",
+ "it": "Indica più precisamente dove si trova il defibrillatore (in francese)"
+ },
+ "freeform": {
+ "type": "text",
+ "key": "defibrillator:location:fr"
+ }
+ },
+ "wheelchair-access",
+ {
+ "render": {
+ "nl": "Officieel identificatienummer van het toestel: {ref}",
+ "en": "Official identification number of the device: {ref}",
+ "fr": "Numéro d'identification officiel de ce dispositif : {ref}",
+ "it": "Numero identificativo ufficiale di questo dispositivo:{ref}",
+ "de": "Offizielle Identifikationsnummer des Geräts: {ref}"
+ },
+ "question": {
+ "en": "What is the official identification number of the device? (if visible on device)",
+ "nl": "Wat is het officieel identificatienummer van het toestel? (indien zichtbaar op toestel)",
+ "fr": "Quel est le numéro d'identification officiel de ce dispositif ? (si il est visible sur le dispositif)",
+ "it": "Qual è il numero identificativo ufficiale di questo dispositivo? (se visibile sul dispositivo)",
+ "de": "Wie lautet die offizielle Identifikationsnummer des Geräts? (falls am Gerät sichtbar)"
+ },
+ "freeform": {
+ "type": "text",
+ "key": "ref"
+ }
+ },
+ {
+ "render": {
+ "en": "Email for questions about this defibrillator: {email}",
+ "nl": "Email voor vragen over deze defibrillator: {email}",
+ "fr": "Adresse électronique pour des questions à propos de ce défibrillateur : {email}",
+ "it": "Indirizzo email per le domande su questo defibrillatore:{email}",
+ "de": "E-Mail für Fragen zu diesem Defibrillator: {email}"
+ },
+ "question": {
+ "en": "What is the email for questions about this defibrillator?",
+ "nl": "Wat is het email-adres voor vragen over deze defibrillator",
+ "fr": "Quelle est l'adresse électronique pour des questions à propos de ce défibrillateur ?",
+ "it": "Qual è l’indirizzo email per le domande riguardanti questo defibrillatore?",
+ "de": "Wie lautet die E-Mail für Fragen zu diesem Defibrillator?"
+ },
+ "freeform": {
+ "key": "email",
+ "type": "email"
+ }
+ },
+ {
+ "render": {
+ "en": "Telephone for questions about this defibrillator: {phone}",
+ "fr": "Numéro de téléphone pour questions sur le défibrillateur : {phone}",
+ "nl": "Telefoonnummer voor vragen over deze defibrillator: {phone}",
+ "it": "Numero di telefono per le domande su questo defibrillatore:{phone}",
+ "de": "Telefonnummer für Fragen zu diesem Defibrillator: {phone}"
+ },
+ "question": {
+ "en": "What is the phone number for questions about this defibrillator?",
+ "fr": "Quel est le numéro de téléphone pour questions sur le défibrillateur ?",
+ "nl": "Wat is het telefoonnummer voor vragen over deze defibrillator",
+ "it": "Qual è il numero di telefono per le domande riguardanti questo defibrillatore?",
+ "de": "Wie lautet die Telefonnummer für Fragen zu diesem Defibrillator?"
+ },
+ "freeform": {
+ "key": "phone",
+ "type": "phone"
+ }
+ },
+ {
+ "render": {
+ "en": "{opening_hours_table(opening_hours)}",
+ "nl": "{opening_hours_table(opening_hours)}",
+ "fr": "{opening_hours_table(opening_hours)}",
+ "it": "{opening_hours_table(opening_hours)}",
+ "ru": "{opening_hours_table(opening_hours)}"
+ },
+ "question": {
+ "en": "At what times is this defibrillator available?",
+ "nl": "Wanneer is deze defibrillator beschikbaar?",
+ "fr": "À quels horaires ce défibrillateur est-il accessible ?",
+ "it": "In quali orari è disponibile questo defibrillatore?",
+ "ru": "В какое время доступен этот дефибриллятор?",
+ "de": "Zu welchen Zeiten ist dieser Defibrillator verfügbar?"
+ },
+ "freeform": {
+ "key": "opening_hours",
+ "type": "opening_hours"
+ },
+ "mappings": [
+ {
+ "if": "opening_hours=24/7",
+ "then": {
+ "en": "24/7 opened (including holidays)",
+ "nl": "24/7 open (inclusief feestdagen)",
+ "fr": "Ouvert 24/7 (jours feriés inclus)",
+ "it": "Aperto 24/7 (festivi inclusi)",
+ "de": "24/7 geöffnet (auch an Feiertagen)"
+ }
+ }
+ ]
+ },
+ {
+ "render": {
+ "en": "Additional information: {description}",
+ "nl": "Aanvullende info: {description}",
+ "fr": "Informations supplémentaires : {description}",
+ "it": "Informazioni supplementari: {description}",
+ "ru": "Дополнительная информация: {description}",
+ "de": "Zusätzliche Informationen: {description}",
+ "id": "Informasi tambahan: {description}"
+ },
+ "question": {
+ "en": "Is there any useful information for users that you haven't been able to describe above? (leave blank if no)",
+ "nl": "Is er nog iets bijzonder aan deze defibrillator dat je nog niet hebt kunnen meegeven? (laat leeg indien niet)",
+ "fr": "Y a-t-il des informations utiles pour les utilisateurs que vous n'avez pas pu décrire ci-dessus ? (laisser vide sinon)",
+ "it": "Vi sono altre informazioni utili agli utenti che non è stato possibile aggiungere prima? (lasciare vuoto in caso negativo)",
+ "de": "Gibt es nützliche Informationen für Benutzer, die Sie oben nicht beschreiben konnten? (leer lassen, wenn nein)"
+ },
+ "freeform": {
+ "key": "description",
+ "type": "text"
+ }
+ },
+ {
+ "question": {
+ "en": "When was this defibrillator last surveyed?",
+ "nl": "Wanneer is deze defibrillator het laatst gecontroleerd in OpenStreetMap?",
+ "fr": "Quand le défibrillateur a-t-il été vérifié pour la dernière fois ?",
+ "it": "Quando è stato verificato per l’ultima volta questo defibrillatore?",
+ "de": "Wann wurde dieser Defibrillator zuletzt überprüft?"
+ },
+ "render": {
+ "en": "This defibrillator was last surveyed on {survey:date}",
+ "nl": "Deze defibrillator is nagekeken in OSM op {survey:date}",
+ "fr": "Ce défibrillateur a été vérifié pour la dernière fois le {survey:date}",
+ "it": "Questo defibrillatore è stato verificato per l‘ultima volta in data {survey:date}",
+ "de": "Dieser Defibrillator wurde zuletzt am {survey:date} überprüft"
+ },
+ "freeform": {
+ "key": "survey:date",
+ "type": "date"
+ },
+ "mappings": [
+ {
+ "if": "survey:date:={_now:date}",
+ "then": {
+ "en": "Checked today!",
+ "nl": "Vandaag nagekeken!",
+ "fr": "Vérifié aujourd'hui !",
+ "it": "Verificato oggi!",
+ "ru": "Проверено сегодня!",
+ "de": "Heute überprüft!"
+ }
+ }
+ ]
+ },
+ {
+ "render": {
+ "en": "Extra information for OpenStreetMap experts: {fixme}",
+ "nl": "Extra informatie voor OpenStreetMap experts: {fixme}",
+ "fr": "Informations supplémentaires pour les experts d'OpenStreetMap : {fixme}",
+ "it": "Informazioni supplementari per gli esperti di OpenStreetMap: {fixme}",
+ "de": "Zusätzliche Informationen für OpenStreetMap-Experten: {fixme}",
+ "ru": "Дополнительная информация для экспертов OpenStreetMap: {fixme}"
+ },
+ "question": {
+ "en": "Is there something wrong with how this is mapped, that you weren't able to fix here? (leave a note to OpenStreetMap experts)",
+ "nl": "Is er iets mis met de informatie over deze defibrillator dat je hier niet opgelost kreeg? (laat hier een berichtje achter voor OpenStreetMap experts)",
+ "fr": "Y a-t-il quelque chose qui ne va pas dans la manière dont ça a été cartographié, et que vous n'avez pas pu réparer ici ? (laisser une note pour les experts d'OpenStreetMap)",
+ "it": "C’è qualcosa di sbagliato riguardante come è stato mappato, che non si è potuto correggere qua? (lascia una nota agli esperti di OpenStreetMap)",
+ "de": "Gibt es einen Fehler in der Kartierung, den Sie hier nicht beheben konnten? (hinterlasse eine Notiz an OpenStreetMap-Experten)"
+ },
+ "freeform": {
+ "key": "fixme",
+ "type": "text"
+ }
}
- }
]
- },
- "color": "#0000ff",
- "presets": [
- {
- "title": {
- "en": "Defibrillator",
- "ca": "Desfibril·lador",
- "es": "Desfibrilador",
- "fr": "Défibrillateur",
- "nl": "Defibrillator",
- "de": "Defibrillator",
- "it": "Defibrillatore",
- "ru": "Дефибриллятор"
- },
- "tags": [
- "emergency=defibrillator"
- ],
- "preciseInput": {
- "preferredBackground": "map"
- }
- }
- ],
- "tagRenderings": [
- "images",
- {
- "question": {
- "en": "Is this defibrillator located indoors?",
- "ca": "Està el desfibril·lador a l'interior?",
- "es": "¿Esté el desfibrilador en interior?",
- "fr": "Ce défibrillateur est-il disposé en intérieur ?",
- "nl": "Hangt deze defibrillator binnen of buiten?",
- "de": "Befindet sich dieser Defibrillator im Gebäude?",
- "it": "Questo defibrillatore si trova all’interno?"
- },
- "mappings": [
- {
- "if": "indoor=yes",
- "then": {
- "en": "This defibrillator is located indoors",
- "ca": "Aquest desfibril·lador està a l'interior",
- "es": "Este desfibrilador está en interior",
- "fr": "Ce défibrillateur est en intérieur (dans un batiment)",
- "nl": "Deze defibrillator bevindt zich in een gebouw",
- "de": "Dieser Defibrillator befindet sich im Gebäude",
- "it": "Questo defibrillatore si trova all’interno"
- }
- },
- {
- "if": "indoor=no",
- "then": {
- "en": "This defibrillator is located outdoors",
- "ca": "Aquest desfibril·lador està a l'exterior",
- "es": "Este desfibrilador está en exterior",
- "fr": "Ce défibrillateur est situé en extérieur",
- "nl": "Deze defibrillator hangt buiten",
- "de": "Dieser Defibrillator befindet sich im Freien",
- "it": "Questo defibrillatore si trova all’esterno"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Is this defibrillator freely accessible?",
- "ca": "Està el desfibril·lador accessible lliurement?",
- "es": "¿Está el desfibrilador accesible libremente?",
- "fr": "Ce défibrillateur est-il librement accessible ?",
- "nl": "Is deze defibrillator vrij toegankelijk?",
- "de": "Ist dieser Defibrillator frei zugänglich?",
- "it": "Questo defibrillatore è liberamente accessibile?"
- },
- "render": {
- "en": "Access is {access}",
- "ca": "L'accés és {access}",
- "es": "El acceso es {access}",
- "fr": "{access} accessible",
- "nl": "Toegankelijkheid is {access}",
- "de": "Zugang ist {access}",
- "it": "Accesso è {access}"
- },
- "freeform": {
- "key": "access",
- "addExtraTags": [
- "fixme=Freeform field used for access - doublecheck the value"
- ]
- },
- "mappings": [
- {
- "if": "access=yes",
- "then": {
- "en": "Publicly accessible",
- "ca": "Accés lliure",
- "es": "Acceso libre",
- "fr": "Librement accessible",
- "nl": "Publiek toegankelijk",
- "de": "Öffentlich zugänglich",
- "it": "Pubblicamente accessibile",
- "ru": "Общедоступный"
- }
- },
- {
- "if": "access=public",
- "then": {
- "en": "Publicly accessible",
- "ca": "Publicament accessible",
- "es": "Publicament accesible",
- "fr": "Librement accessible",
- "nl": "Publiek toegankelijk",
- "de": "Öffentlich zugänglich",
- "it": "Pubblicamente accessibile",
- "ru": "Общедоступный"
- },
- "hideInAnswer": true
- },
- {
- "if": "access=customers",
- "then": {
- "en": "Only accessible to customers",
- "ca": "Només accessible a clients",
- "es": "Sólo accesible a clientes",
- "fr": "Réservé aux clients du lieu",
- "nl": "Enkel toegankelijk voor klanten",
- "de": "Nur für Kunden zugänglich",
- "it": "Accessibile solo ai clienti",
- "ru": "Доступно только для клиентов"
- }
- },
- {
- "if": "access=private",
- "then": {
- "en": "Not accessible to the general public (e.g. only accesible to staff, the owners, ...)",
- "ca": "No accessible al públic en general (ex. només accesible a treballadors, propietaris, ...)",
- "es": "No accesible al público en general (ex. sólo accesible a trabajadores, propietarios, ...)",
- "fr": "Non accessible au public (par exemple réservé au personnel, au propriétaire, ...)",
- "nl": "Niet toegankelijk voor het publiek (bv. enkel voor personeel, de eigenaar, ...)",
- "de": "Nicht für die Öffentlichkeit zugänglich (z.B. nur für das Personal, die Eigentümer, ...)",
- "it": "Non accessibile al pubblico (ad esempio riservato al personale, ai proprietari, etc.)"
- }
- },
- {
- "if": "access=no",
- "then": {
- "en": "Not accessible, possibly only for professional use",
- "nl": "Niet toegankelijk, mogelijk enkel voor professionals",
- "fr": "Pas accessible, peut-être uniquement à usage professionnel",
- "it": "Non accessibile, potrebbe essere solo per uso professionale"
- }
- }
- ]
- },
- {
- "render": {
- "en": "There is no info about the type of device",
- "nl": "Er is geen info over het soort toestel",
- "fr": "Il n'y a pas d'information sur le type de dispositif",
- "it": "Non vi sono informazioni riguardanti il tipo di questo dispositivo",
- "de": "Es gibt keine Informationen über den Gerätetyp"
- },
- "question": {
- "en": "Is this a a regular automatic defibrillator or a manual defibrillator for professionals only?",
- "nl": "Is dit een gewone automatische defibrillator of een manueel toestel enkel voor professionals?",
- "fr": "Est-ce un défibrillateur automatique normal ou un défibrillateur manuel à usage professionnel uniquement ?",
- "it": "Si tratta di un normale defibrillatore automatico o un defibrillatore manuale riservato ai professionisti?"
- },
- "freeform": {
- "key": "defibrillator"
- },
- "condition": {
- "and": [
- "access=no"
- ]
- },
- "mappings": [
- {
- "if": "defibrillator=manual",
- "then": {
- "en": "This is a manual defibrillator for professionals",
- "nl": "Dit is een manueel toestel enkel voor professionals",
- "fr": "C'est un défibrillateur manuel pour professionnel",
- "it": "Questo è un defibrillatore manuale per professionisti",
- "de": "Dies ist ein manueller Defibrillator für den professionellen Einsatz"
- }
- },
- {
- "if": "defibrillator=automatic",
- "then": {
- "en": "This is a normal automatic defibrillator",
- "nl": "Dit is een gewone automatische defibrillator",
- "fr": "C'est un défibrillateur automatique manuel",
- "it": "È un normale defibrillatore automatico",
- "ru": "Это обычный автоматический дефибриллятор"
- }
- }
- ]
- },
- {
- "question": {
- "en": "On which floor is this defibrillator located?",
- "ca": "A quina planta està el desfibril·lador localitzat?",
- "es": "¿En qué planta se encuentra el defibrilador localizado?",
- "fr": "À quel étage est situé ce défibrillateur ?",
- "nl": "Op welke verdieping bevindt deze defibrillator zich?",
- "de": "In welchem Stockwerk befindet sich dieser Defibrillator?",
- "it": "A che piano si trova questo defibrillatore?"
- },
- "condition": {
- "and": [
- "indoor=yes"
- ]
- },
- "freeform": {
- "key": "level",
- "type": "int"
- },
- "render": {
- "en": "This defibrillator is on floor {level}",
- "ca": "Aquest desfibril·lador és a la planta {level}",
- "es": "El desfibrilador se encuentra en la planta {level}",
- "fr": "Ce défibrillateur est à l'étage {level}",
- "nl": "De defibrillator bevindt zicht op verdieping {level}",
- "de": "Dieser Defibrallator befindet sich im {level}. Stockwerk",
- "it": "Questo defibrillatore è al piano {level}"
- },
- "mappings": [
- {
- "if": "level=0",
- "then": {
- "en": "This defibrillator is on the ground floor",
- "nl": "Deze defibrillator bevindt zich gelijkvloers",
- "fr": "Ce défibrillateur est au rez-de-chaussée",
- "it": "Questo defibrillatore è al pian terreno",
- "de": "Dieser Defibrillator befindet sich im Erdgeschoss"
- }
- },
- {
- "if": "level=1",
- "then": {
- "en": "This defibrillator is on the first floor",
- "nl": "Deze defibrillator is op de eerste verdieping",
- "fr": "Ce défibrillateur est au premier étage",
- "it": "Questo defibrillatore è al primo piano",
- "de": "Dieser Defibrillator befindet sich in der ersten Etage"
- }
- }
- ]
- },
- {
- "render": {
- "nl": "Meer informatie over de locatie (lokale taal): {defibrillator:location}",
- "en": "Extra information about the location (in the local languagel): {defibrillator:location}",
- "fr": "Informations supplémentaires à propos de l'emplacement (dans la langue locale) : {defibrillator:location}",
- "it": "Informazioni supplementari circa la posizione (in lingua locale): {defibrillator:location}",
- "de": "Zusätzliche Informationen über den Standort (in der Landessprache): {defibrillator:location}"
- },
- "question": {
- "en": "Please give some explanation on where the defibrillator can be found (in the local language)",
- "ca": "Dóna detalls d'on es pot trobar el desfibril·lador",
- "es": "Da detalles de dónde se puede encontrar el desfibrilador (en el idioma local)",
- "fr": "Veuillez indiquez plus précisément où se situe le défibrillateur (dans la langue local)",
- "nl": "Gelieve meer informatie te geven over de exacte locatie van de defibrillator (in de plaatselijke taal)",
- "de": "Bitte geben Sie einige Erläuterungen dazu, wo der Defibrillator zu finden ist (in der lokalen Sprache)",
- "it": "Indica più precisamente dove si trova il defibrillatore (in lingua locale)"
- },
- "freeform": {
- "type": "text",
- "key": "defibrillator:location"
- }
- },
- {
- "render": {
- "nl": "Meer informatie over de locatie (in het Engels): {defibrillator:location:en}",
- "en": "Extra information about the location (in English): {defibrillator:location:en}",
- "fr": "Informations supplémentaires à propos de l'emplacement (en anglais) : {defibrillator:location}",
- "it": "Informazioni supplementari circa la posizione (in inglese): {defibrillator:location:en}",
- "de": "Zusätzliche Informationen über den Standort (auf Englisch): {defibrillator:location}"
- },
- "question": {
- "en": "Please give some explanation on where the defibrillator can be found (in English)",
- "ca": "Dóna detalls d'on es pot trobar el desfibril·lador",
- "es": "Da detalles de dónde se puede encontrar el desfibrilador (en ingles)",
- "fr": "Veuillez indiquez plus précisément où se situe le défibrillateur (en englais)",
- "nl": "Gelieve meer informatie te geven over de exacte locatie van de defibrillator (in het Engels)",
- "de": "Bitte geben Sie einige Erläuterungen dazu, wo der Defibrillator zu finden ist (auf Englisch)",
- "it": "Indica più precisamente dove si trova il defibrillatore (in inglese)"
- },
- "freeform": {
- "type": "text",
- "key": "defibrillator:location:en"
- }
- },
- {
- "render": {
- "nl": "Meer informatie over de locatie (in het Frans): {defibrillator:location:fr}",
- "en": "Extra information about the location (in French): {defibrillator:location:fr}",
- "fr": "Informations supplémentaires à propos de l'emplacement (en Français) : {defibrillator:location}",
- "it": "Informazioni supplementari circa la posizione (in francese): {defibrillator:location:fr}",
- "de": "Zusätzliche Informationen zum Standort (auf Französisch): {defibrillator:Standort:fr}"
- },
- "question": {
- "en": "Please give some explanation on where the defibrillator can be found (in French)",
- "ca": "Dóna detalls d'on es pot trobar el desfibril·lador",
- "es": "Da detalles de dónde se puede encontrar el desfibrilador (en frances)",
- "fr": "Veuillez indiquez plus précisément où se situe le défibrillateur (en français)",
- "nl": "Gelieve meer informatie te geven over de exacte locatie van de defibrillator (in het Frans)",
- "de": "Bitte geben Sie einige Erläuterungen dazu, wo der Defibrillator zu finden ist (auf Französisch)",
- "it": "Indica più precisamente dove si trova il defibrillatore (in francese)"
- },
- "freeform": {
- "type": "text",
- "key": "defibrillator:location:fr"
- }
- },
- "wheelchair-access",
- {
- "render": {
- "nl": "Officieel identificatienummer van het toestel: {ref}",
- "en": "Official identification number of the device: {ref}",
- "fr": "Numéro d'identification officiel de ce dispositif : {ref}",
- "it": "Numero identificativo ufficiale di questo dispositivo:{ref}",
- "de": "Offizielle Identifikationsnummer des Geräts: {ref}"
- },
- "question": {
- "en": "What is the official identification number of the device? (if visible on device)",
- "nl": "Wat is het officieel identificatienummer van het toestel? (indien zichtbaar op toestel)",
- "fr": "Quel est le numéro d'identification officiel de ce dispositif ? (si il est visible sur le dispositif)",
- "it": "Qual è il numero identificativo ufficiale di questo dispositivo? (se visibile sul dispositivo)",
- "de": "Wie lautet die offizielle Identifikationsnummer des Geräts? (falls am Gerät sichtbar)"
- },
- "freeform": {
- "type": "text",
- "key": "ref"
- }
- },
- {
- "render": {
- "en": "Email for questions about this defibrillator: {email}",
- "nl": "Email voor vragen over deze defibrillator: {email}",
- "fr": "Adresse électronique pour des questions à propos de ce défibrillateur : {email}",
- "it": "Indirizzo email per le domande su questo defibrillatore:{email}",
- "de": "E-Mail für Fragen zu diesem Defibrillator: {email}"
- },
- "question": {
- "en": "What is the email for questions about this defibrillator?",
- "nl": "Wat is het email-adres voor vragen over deze defibrillator",
- "fr": "Quelle est l'adresse électronique pour des questions à propos de ce défibrillateur ?",
- "it": "Qual è l’indirizzo email per le domande riguardanti questo defibrillatore?",
- "de": "Wie lautet die E-Mail für Fragen zu diesem Defibrillator?"
- },
- "freeform": {
- "key": "email",
- "type": "email"
- }
- },
- {
- "render": {
- "en": "Telephone for questions about this defibrillator: {phone}",
- "fr": "Numéro de téléphone pour questions sur le défibrillateur : {phone}",
- "nl": "Telefoonnummer voor vragen over deze defibrillator: {phone}",
- "it": "Numero di telefono per le domande su questo defibrillatore:{phone}",
- "de": "Telefonnummer für Fragen zu diesem Defibrillator: {phone}"
- },
- "question": {
- "en": "What is the phone number for questions about this defibrillator?",
- "fr": "Quel est le numéro de téléphone pour questions sur le défibrillateur ?",
- "nl": "Wat is het telefoonnummer voor vragen over deze defibrillator",
- "it": "Qual è il numero di telefono per le domande riguardanti questo defibrillatore?",
- "de": "Wie lautet die Telefonnummer für Fragen zu diesem Defibrillator?"
- },
- "freeform": {
- "key": "phone",
- "type": "phone"
- }
- },
- {
- "render": {
- "en": "{opening_hours_table(opening_hours)}",
- "nl": "{opening_hours_table(opening_hours)}",
- "fr": "{opening_hours_table(opening_hours)}",
- "it": "{opening_hours_table(opening_hours)}",
- "ru": "{opening_hours_table(opening_hours)}"
- },
- "question": {
- "en": "At what times is this defibrillator available?",
- "nl": "Wanneer is deze defibrillator beschikbaar?",
- "fr": "À quels horaires ce défibrillateur est-il accessible ?",
- "it": "In quali orari è disponibile questo defibrillatore?",
- "ru": "В какое время доступен этот дефибриллятор?",
- "de": "Zu welchen Zeiten ist dieser Defibrillator verfügbar?"
- },
- "freeform": {
- "key": "opening_hours",
- "type": "opening_hours"
- },
- "mappings": [
- {
- "if": "opening_hours=24/7",
- "then": {
- "en": "24/7 opened (including holidays)",
- "nl": "24/7 open (inclusief feestdagen)",
- "fr": "Ouvert 24/7 (jours feriés inclus)",
- "it": "Aperto 24/7 (festivi inclusi)",
- "de": "24/7 geöffnet (auch an Feiertagen)"
- }
- }
- ]
- },
- {
- "render": {
- "en": "Additional information: {description}",
- "nl": "Aanvullende info: {description}",
- "fr": "Informations supplémentaires : {description}",
- "it": "Informazioni supplementari: {description}",
- "ru": "Дополнительная информация: {description}",
- "de": "Zusätzliche Informationen: {description}",
- "id": "Informasi tambahan: {description}"
- },
- "question": {
- "en": "Is there any useful information for users that you haven't been able to describe above? (leave blank if no)",
- "nl": "Is er nog iets bijzonder aan deze defibrillator dat je nog niet hebt kunnen meegeven? (laat leeg indien niet)",
- "fr": "Y a-t-il des informations utiles pour les utilisateurs que vous n'avez pas pu décrire ci-dessus ? (laisser vide sinon)",
- "it": "Vi sono altre informazioni utili agli utenti che non è stato possibile aggiungere prima? (lasciare vuoto in caso negativo)",
- "de": "Gibt es nützliche Informationen für Benutzer, die Sie oben nicht beschreiben konnten? (leer lassen, wenn nein)"
- },
- "freeform": {
- "key": "description",
- "type": "text"
- }
- },
- {
- "question": {
- "en": "When was this defibrillator last surveyed?",
- "nl": "Wanneer is deze defibrillator het laatst gecontroleerd in OpenStreetMap?",
- "fr": "Quand le défibrillateur a-t-il été vérifié pour la dernière fois ?",
- "it": "Quando è stato verificato per l’ultima volta questo defibrillatore?",
- "de": "Wann wurde dieser Defibrillator zuletzt überprüft?"
- },
- "render": {
- "en": "This defibrillator was last surveyed on {survey:date}",
- "nl": "Deze defibrillator is nagekeken in OSM op {survey:date}",
- "fr": "Ce défibrillateur a été vérifié pour la dernière fois le {survey:date}",
- "it": "Questo defibrillatore è stato verificato per l‘ultima volta in data {survey:date}",
- "de": "Dieser Defibrillator wurde zuletzt am {survey:date} überprüft"
- },
- "freeform": {
- "key": "survey:date",
- "type": "date"
- },
- "mappings": [
- {
- "if": "survey:date:={_now:date}",
- "then": {
- "en": "Checked today!",
- "nl": "Vandaag nagekeken!",
- "fr": "Vérifié aujourd'hui !",
- "it": "Verificato oggi!",
- "ru": "Проверено сегодня!",
- "de": "Heute überprüft!"
- }
- }
- ]
- },
- {
- "render": {
- "en": "Extra information for OpenStreetMap experts: {fixme}",
- "nl": "Extra informatie voor OpenStreetMap experts: {fixme}",
- "fr": "Informations supplémentaires pour les experts d'OpenStreetMap : {fixme}",
- "it": "Informazioni supplementari per gli esperti di OpenStreetMap: {fixme}",
- "de": "Zusätzliche Informationen für OpenStreetMap-Experten: {fixme}",
- "ru": "Дополнительная информация для экспертов OpenStreetMap: {fixme}"
- },
- "question": {
- "en": "Is there something wrong with how this is mapped, that you weren't able to fix here? (leave a note to OpenStreetMap experts)",
- "nl": "Is er iets mis met de informatie over deze defibrillator dat je hier niet opgelost kreeg? (laat hier een berichtje achter voor OpenStreetMap experts)",
- "fr": "Y a-t-il quelque chose qui ne va pas dans la manière dont ça a été cartographié, et que vous n'avez pas pu réparer ici ? (laisser une note pour les experts d'OpenStreetMap)",
- "it": "C’è qualcosa di sbagliato riguardante come è stato mappato, che non si è potuto correggere qua? (lascia una nota agli esperti di OpenStreetMap)",
- "de": "Gibt es einen Fehler in der Kartierung, den Sie hier nicht beheben konnten? (hinterlasse eine Notiz an OpenStreetMap-Experten)"
- },
- "freeform": {
- "key": "fixme",
- "type": "text"
- }
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/direction/direction.json b/assets/layers/direction/direction.json
index fddfd64f3..4d3fd684d 100644
--- a/assets/layers/direction/direction.json
+++ b/assets/layers/direction/direction.json
@@ -1,47 +1,47 @@
{
- "id": "direction",
- "name": {
- "en": "Direction visualization",
- "nl": "Richtingsvisualisatie",
- "fr": "Visualisation de la direction",
- "it": "Visualizzazione della direzione",
- "ru": "Визуализация направления"
- },
- "minzoom": 16,
- "source": {
- "osmTags": {
- "or": [
- "camera:direction~*",
- "direction~*"
- ]
- }
- },
- "doNotDownload": true,
- "passAllFeatures": true,
- "title": null,
- "description": {
- "en": "This layer visualizes directions",
- "nl": "Deze laag toont de oriëntatie van een object",
- "fr": "Cette couche visualise les directions",
- "it": "Questo livello visualizza le direzioni"
- },
- "tagRenderings": [],
- "icon": {
- "render": "direction_gradient:var(--catch-detail-color)",
- "#": "For some weird reason, showing the icon in the layer control panel breaks the svg-gradient (because the svg gradient has a global color or smthng) - so we use a different icon without gradient",
- "mappings": [
- {
- "if": "id=node/-1",
- "then": "direction:var(--catch-detail-color)"
- }
- ]
- },
- "rotation": {
- "render": "{_direction:numerical}deg"
- },
- "iconSize": "200,200,center",
- "color": "--catch-detail-color",
- "stroke": "0",
- "presets": [],
- "wayHandling": 2
+ "id": "direction",
+ "name": {
+ "en": "Direction visualization",
+ "nl": "Richtingsvisualisatie",
+ "fr": "Visualisation de la direction",
+ "it": "Visualizzazione della direzione",
+ "ru": "Визуализация направления"
+ },
+ "minzoom": 16,
+ "source": {
+ "osmTags": {
+ "or": [
+ "camera:direction~*",
+ "direction~*"
+ ]
+ }
+ },
+ "doNotDownload": true,
+ "passAllFeatures": true,
+ "title": null,
+ "description": {
+ "en": "This layer visualizes directions",
+ "nl": "Deze laag toont de oriëntatie van een object",
+ "fr": "Cette couche visualise les directions",
+ "it": "Questo livello visualizza le direzioni"
+ },
+ "tagRenderings": [],
+ "icon": {
+ "render": "direction_gradient:var(--catch-detail-color)",
+ "#": "For some weird reason, showing the icon in the layer control panel breaks the svg-gradient (because the svg gradient has a global color or smthng) - so we use a different icon without gradient",
+ "mappings": [
+ {
+ "if": "id=node/-1",
+ "then": "direction:var(--catch-detail-color)"
+ }
+ ]
+ },
+ "rotation": {
+ "render": "{_direction:numerical}deg"
+ },
+ "iconSize": "200,200,center",
+ "color": "--catch-detail-color",
+ "stroke": "0",
+ "presets": [],
+ "wayHandling": 2
}
\ No newline at end of file
diff --git a/assets/layers/drinking_water/drinking_water.json b/assets/layers/drinking_water/drinking_water.json
index 7663f584b..67f61d5ff 100644
--- a/assets/layers/drinking_water/drinking_water.json
+++ b/assets/layers/drinking_water/drinking_water.json
@@ -1,61 +1,6 @@
{
- "id": "drinking_water",
- "name": {
- "en": "Drinking water",
- "nl": "Drinkbaar water",
- "fr": "Eau potable",
- "gl": "Auga potábel",
- "de": "Trinkwasser",
- "it": "Acqua potabile",
- "ru": "Питьевая вода",
- "id": "Air minum"
- },
- "title": {
- "render": {
- "en": "Drinking water",
- "nl": "Drinkbaar water",
- "fr": "Eau potable",
- "gl": "Auga potábel",
- "de": "Trinkwasser",
- "it": "Acqua potabile",
- "ru": "Питьевая вода",
- "id": "Air minum"
- }
- },
- "icon": {
- "render": "pin:#6BC4F7;./assets/layers/drinking_water/drips.svg"
- },
- "iconOverlays": [
- {
- "if": {
- "or": [
- "operational_status=broken",
- "operational_status=closed"
- ]
- },
- "then": "close:#c33",
- "badge": true
- }
- ],
- "iconSize": "40,40,bottom",
- "source": {
- "osmTags": {
- "and": [
- "amenity=drinking_water",
- "access!=permissive",
- "access!=private"
- ]
- }
- },
- "calculatedTags": [
- "_closest_other_drinking_water_id=feat.closest('drinking_water').id",
- "_closest_other_drinking_water_distance=Math.floor(feat.distanceTo(feat.closest('drinking_water')) * 1000)"
- ],
- "minzoom": 13,
- "wayHandling": 1,
- "presets": [
- {
- "title": {
+ "id": "drinking_water",
+ "name": {
"en": "Drinking water",
"nl": "Drinkbaar water",
"fr": "Eau potable",
@@ -64,105 +9,160 @@
"it": "Acqua potabile",
"ru": "Питьевая вода",
"id": "Air minum"
- },
- "tags": [
- "amenity=drinking_water"
- ]
- }
- ],
- "color": "#6bc4f7",
- "tagRenderings": [
- "images",
- {
- "#": "Still in use?",
- "question": {
- "en": "Is this drinking water spot still operational?",
- "nl": "Is deze drinkwaterkraan nog steeds werkende?",
- "it": "Questo punto di acqua potabile è sempre funzionante?",
- "fr": "Ce point d'eau potable est-il toujours opérationnel ?",
- "de": "Ist diese Trinkwasserstelle noch in Betrieb?"
- },
- "render": {
- "en": "The operational status is {operational_status",
- "nl": "Deze waterkraan-status is {operational_status}",
- "it": "Lo stato operativo è {operational_status}",
- "fr": "L'état opérationnel est {operational_status",
- "de": "Der Betriebsstatus ist {operational_status"
- },
- "freeform": {
- "key": "operational_status"
- },
- "mappings": [
- {
- "if": "operational_status=",
- "then": {
- "en": "This drinking water works",
- "nl": "Deze drinkwaterfontein werkt",
- "it": "La fontanella funziona",
- "fr": "Cette fontaine fonctionne"
- }
- },
- {
- "if": "operational_status=broken",
- "then": {
- "en": "This drinking water is broken",
- "nl": "Deze drinkwaterfontein is kapot",
- "it": "La fontanella è guasta",
- "fr": "Cette fontaine est cassée"
- }
- },
- {
- "if": "operational_status=closed",
- "then": {
- "en": "This drinking water is closed",
- "nl": "Deze drinkwaterfontein is afgesloten",
- "it": "La fontanella è chiusa",
- "fr": "Cette fontaine est fermée"
- }
- }
- ]
},
- {
- "#": "Bottle refill",
- "question": {
- "en": "How easy is it to fill water bottles?",
- "nl": "Hoe gemakkelijk is het om drinkbussen bij te vullen?",
- "de": "Wie einfach ist es, Wasserflaschen zu füllen?",
- "it": "Quanto è facile riempire d’acqua le bottiglie?",
- "fr": "Est-il facile de remplir des bouteilles d'eau ?"
- },
- "mappings": [
+ "title": {
+ "render": {
+ "en": "Drinking water",
+ "nl": "Drinkbaar water",
+ "fr": "Eau potable",
+ "gl": "Auga potábel",
+ "de": "Trinkwasser",
+ "it": "Acqua potabile",
+ "ru": "Питьевая вода",
+ "id": "Air minum"
+ }
+ },
+ "icon": {
+ "render": "pin:#6BC4F7;./assets/layers/drinking_water/drips.svg"
+ },
+ "iconOverlays": [
{
- "if": "bottle=yes",
- "then": {
- "en": "It is easy to refill water bottles",
- "nl": "Een drinkbus bijvullen gaat makkelijk",
- "de": "Es ist einfach, Wasserflaschen nachzufüllen",
- "it": "È facile riempire d’acqua le bottiglie",
- "fr": "Il est facile de remplir les bouteilles d'eau"
- }
+ "if": {
+ "or": [
+ "operational_status=broken",
+ "operational_status=closed"
+ ]
+ },
+ "then": "close:#c33",
+ "badge": true
+ }
+ ],
+ "iconSize": "40,40,bottom",
+ "source": {
+ "osmTags": {
+ "and": [
+ "amenity=drinking_water",
+ "access!=permissive",
+ "access!=private"
+ ]
+ }
+ },
+ "calculatedTags": [
+ "_closest_other_drinking_water_id=feat.closest('drinking_water').id",
+ "_closest_other_drinking_water_distance=Math.floor(feat.distanceTo(feat.closest('drinking_water')) * 1000)"
+ ],
+ "minzoom": 13,
+ "wayHandling": 1,
+ "presets": [
+ {
+ "title": {
+ "en": "Drinking water",
+ "nl": "Drinkbaar water",
+ "fr": "Eau potable",
+ "gl": "Auga potábel",
+ "de": "Trinkwasser",
+ "it": "Acqua potabile",
+ "ru": "Питьевая вода",
+ "id": "Air minum"
+ },
+ "tags": [
+ "amenity=drinking_water"
+ ]
+ }
+ ],
+ "color": "#6bc4f7",
+ "tagRenderings": [
+ "images",
+ {
+ "#": "Still in use?",
+ "question": {
+ "en": "Is this drinking water spot still operational?",
+ "nl": "Is deze drinkwaterkraan nog steeds werkende?",
+ "it": "Questo punto di acqua potabile è sempre funzionante?",
+ "fr": "Ce point d'eau potable est-il toujours opérationnel ?",
+ "de": "Ist diese Trinkwasserstelle noch in Betrieb?"
+ },
+ "render": {
+ "en": "The operational status is {operational_status",
+ "nl": "Deze waterkraan-status is {operational_status}",
+ "it": "Lo stato operativo è {operational_status}",
+ "fr": "L'état opérationnel est {operational_status",
+ "de": "Der Betriebsstatus ist {operational_status"
+ },
+ "freeform": {
+ "key": "operational_status"
+ },
+ "mappings": [
+ {
+ "if": "operational_status=",
+ "then": {
+ "en": "This drinking water works",
+ "nl": "Deze drinkwaterfontein werkt",
+ "it": "La fontanella funziona",
+ "fr": "Cette fontaine fonctionne"
+ }
+ },
+ {
+ "if": "operational_status=broken",
+ "then": {
+ "en": "This drinking water is broken",
+ "nl": "Deze drinkwaterfontein is kapot",
+ "it": "La fontanella è guasta",
+ "fr": "Cette fontaine est cassée"
+ }
+ },
+ {
+ "if": "operational_status=closed",
+ "then": {
+ "en": "This drinking water is closed",
+ "nl": "Deze drinkwaterfontein is afgesloten",
+ "it": "La fontanella è chiusa",
+ "fr": "Cette fontaine est fermée"
+ }
+ }
+ ]
},
{
- "if": "bottle=no",
- "then": {
- "en": "Water bottles may not fit",
- "nl": "Een drinkbus past moeilijk",
- "de": "Wasserflaschen passen möglicherweise nicht",
- "it": "Le bottiglie d’acqua potrebbero non entrare",
- "fr": "Les bouteilles d'eau peuvent ne pas passer"
- }
+ "#": "Bottle refill",
+ "question": {
+ "en": "How easy is it to fill water bottles?",
+ "nl": "Hoe gemakkelijk is het om drinkbussen bij te vullen?",
+ "de": "Wie einfach ist es, Wasserflaschen zu füllen?",
+ "it": "Quanto è facile riempire d’acqua le bottiglie?",
+ "fr": "Est-il facile de remplir des bouteilles d'eau ?"
+ },
+ "mappings": [
+ {
+ "if": "bottle=yes",
+ "then": {
+ "en": "It is easy to refill water bottles",
+ "nl": "Een drinkbus bijvullen gaat makkelijk",
+ "de": "Es ist einfach, Wasserflaschen nachzufüllen",
+ "it": "È facile riempire d’acqua le bottiglie",
+ "fr": "Il est facile de remplir les bouteilles d'eau"
+ }
+ },
+ {
+ "if": "bottle=no",
+ "then": {
+ "en": "Water bottles may not fit",
+ "nl": "Een drinkbus past moeilijk",
+ "de": "Wasserflaschen passen möglicherweise nicht",
+ "it": "Le bottiglie d’acqua potrebbero non entrare",
+ "fr": "Les bouteilles d'eau peuvent ne pas passer"
+ }
+ }
+ ]
+ },
+ {
+ "render": {
+ "en": "There is another drinking water fountain at {_closest_other_drinking_water_distance} meter",
+ "nl": "Er bevindt zich een ander drinkwaterpunt op {_closest_other_drinking_water_distance} meter",
+ "it": "C’è un’altra fontanella a {_closest_other_drinking_water_distance} metri",
+ "de": "Ein weiterer Trinkwasserbrunnen befindet sich in {_closest_other_drinking_water_distance} Meter",
+ "fr": "Une autre source d’eau potable est à {_closest_other_drinking_water_distance} mètres a>"
+ },
+ "condition": "_closest_other_drinking_water_id~*"
}
- ]
- },
- {
- "render": {
- "en": "There is another drinking water fountain at {_closest_other_drinking_water_distance} meter",
- "nl": "Er bevindt zich een ander drinkwaterpunt op {_closest_other_drinking_water_distance} meter",
- "it": "C’è un’altra fontanella a {_closest_other_drinking_water_distance} metri",
- "de": "Ein weiterer Trinkwasserbrunnen befindet sich in {_closest_other_drinking_water_distance} Meter",
- "fr": "Une autre source d’eau potable est à {_closest_other_drinking_water_distance} mètres a>"
- },
- "condition": "_closest_other_drinking_water_id~*"
- }
- ]
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/food/food.json b/assets/layers/food/food.json
index 9dcb0f1dd..a63c06cbc 100644
--- a/assets/layers/food/food.json
+++ b/assets/layers/food/food.json
@@ -1,618 +1,618 @@
{
- "id": "food",
- "name": {
- "nl": "Eetgelegenheden",
- "en": "Restaurants and fast food"
- },
- "source": {
- "osmTags": {
- "or": [
- "amenity=fast_food",
- "amenity=restaurant"
- ]
- }
- },
- "wayHandling": 1,
- "icon": {
- "render": "circle:white;./assets/layers/food/restaurant.svg",
- "mappings": [
- {
- "if": {
- "and": [
- "amenity=fast_food",
- "cuisine=friture"
- ]
- },
- "then": "circle:white;./assets/layers/food/fries.svg"
- },
- {
- "if": "amenity=fast_food",
- "then": "circle:white;./assets/layers/food/fastfood.svg"
- }
- ]
- },
- "iconOverlays": [
- {
- "if": "opening_hours~*",
- "then": "isOpen",
- "badge": true
+ "id": "food",
+ "name": {
+ "nl": "Eetgelegenheden",
+ "en": "Restaurants and fast food"
},
- {
- "if": {
- "or": [
- "diet:vegetarian=yes",
- "diet:vegan=yes"
+ "source": {
+ "osmTags": {
+ "or": [
+ "amenity=fast_food",
+ "amenity=restaurant"
+ ]
+ }
+ },
+ "wayHandling": 1,
+ "icon": {
+ "render": "circle:white;./assets/layers/food/restaurant.svg",
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "amenity=fast_food",
+ "cuisine=friture"
+ ]
+ },
+ "then": "circle:white;./assets/layers/food/fries.svg"
+ },
+ {
+ "if": "amenity=fast_food",
+ "then": "circle:white;./assets/layers/food/fastfood.svg"
+ }
]
- },
- "then": {
- "render": "circle:white;./assets/themes/fritures/Vegetarian-mark.svg"
- },
- "badge": true
- }
- ],
- "label": {
- "mappings": [
- {
- "if": "name~*",
- "then": "
"
+ }
]
- },
- "mappings": [
- {
- "if": "cuisine=pizza",
- "then": {
- "en": "This is a pizzeria",
- "nl": "Dit is een pizzeria"
- }
- },
- {
- "if": "cuisine=friture",
- "then": {
- "en": "This is a friture",
- "nl": "Dit is een frituur"
- }
- },
- {
- "if": "cuisine=pasta",
- "then": {
- "en": "Mainly serves pasta",
- "nl": "Dit is een pastazaak"
- }
- },
- {
- "if": "cuisine=kebab",
- "then": {
- "nl": "Dit is een kebabzaak"
- }
- },
- {
- "if": "cuisine=sandwich",
- "then": {
- "nl": "Dit is een broodjeszaak"
- }
- },
- {
- "if": "cuisine=burger",
- "then": {
- "nl": "Dit is een hamburgerrestaurant"
- }
- },
- {
- "if": "cuisine=sushi",
- "then": {
- "nl": "Dit is een sushirestaurant"
- }
- },
- {
- "if": "cuisine=coffee",
- "then": {
- "nl": "Dit is een koffiezaak"
- }
- },
- {
- "if": "cuisine=italian",
- "then": {
- "nl": "Dit is een Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)"
- }
- },
- {
- "if": "cuisine=french",
- "then": {
- "nl": "Dit is een Frans restaurant"
- }
- },
- {
- "if": "cuisine=chinese",
- "then": {
- "nl": "Dit is een Chinees restaurant"
- }
- },
- {
- "if": "cuisine=greek",
- "then": {
- "nl": "Dit is een Grieks restaurant"
- }
- },
- {
- "if": "cuisine=indian",
- "then": {
- "nl": "Dit is een Indisch restaurant"
- }
- },
- {
- "if": "cuisine=turkish",
- "then": {
- "nl": "Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)"
- }
- },
- {
- "if": "cuisine=thai",
- "then": {
- "nl": "Dit is een Thaïs restaurant"
- }
- }
- ]
},
- {
- "#": "Takeaway",
- "question": {
- "nl": "Biedt deze zaak een afhaalmogelijkheid aan?",
- "en": "Does this place offer takea-way?"
- },
- "mappings": [
+ "presets": [
{
- "if": "takeaway=only",
- "then": {
- "en": "This is a take-away only business",
- "nl": "Hier is enkel afhaal mogelijk"
- }
+ "title": {
+ "en": "restaurant",
+ "nl": "restaurant"
+ },
+ "tags": [
+ "amenity=restaurant"
+ ],
+ "description": {
+ "nl": "Een eetgegelegenheid waar je aan tafel wordt bediend",
+ "en": "A formal eating place with sit-down facilities selling full meals served by waiters"
+ },
+ "preciseInput": {
+ "preferredBackground": "map"
+ }
},
{
- "if": "takeaway=yes",
- "then": {
- "en": "Take-away is possible here",
- "nl": "Eten kan hier afgehaald worden"
- }
+ "title": {
+ "en": "fastfood",
+ "nl": "fastfood-zaak"
+ },
+ "tags": [
+ "amenity=fast_food"
+ ],
+ "description": {
+ "nl": "Een zaak waar je snel bediend wordt, vaak met de focus op afhalen. Zitgelegenheid is eerder beperkt (of zelfs afwezig)",
+ "en": "A food business concentrating on fast counter-only service and take-away food"
+ },
+ "preciseInput": {
+ "preferredBackground": "map"
+ }
},
{
- "if": "takeaway=no",
- "then": {
- "en": "Take-away is not possible here",
- "nl": "Hier is geen afhaalmogelijkheid"
- }
+ "title": {
+ "en": "fries shop",
+ "nl": "frituur"
+ },
+ "tags": [
+ "amenity=fast_food",
+ "cuisine=friture"
+ ],
+ "description": {
+ "nl": "Een fastfood-zaak waar je frieten koopt"
+ },
+ "preciseInput": {
+ "preferredBackground": "map"
+ }
}
- ]
+ ],
+ "title": {
+ "render": {
+ "nl": "Eetgelegenheid"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "name~*",
+ "amenity=restaurant"
+ ]
+ },
+ "then": {
+ "nl": "Restaurant {name}",
+ "en": "Restaurant {name}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "name~*",
+ "amenity=fast_food"
+ ]
+ },
+ "then": {
+ "nl": "Fastfood-zaak {name}",
+ "en": "Fastfood {name}"
+ }
+ }
+ ]
},
- {
- "#": "Vegetarian (no friture)",
- "question": {
- "nl": "Heeft deze eetgelegenheid een vegetarische optie?",
- "en": "Does this restaurant have a vegetarian option?"
- },
- "mappings": [
+ "tagRenderings": [
+ "images",
{
- "if": "diet:vegetarian=no",
- "then": {
- "nl": "Geen vegetarische opties beschikbaar"
- }
+ "#": "Name",
+ "question": {
+ "nl": "Wat is de naam van deze eetgelegenheid?",
+ "en": "What is the name of this restaurant?"
+ },
+ "render": {
+ "nl": "De naam van deze eetgelegeheid is {name}",
+ "en": "The name of this restaurant is {name}"
+ },
+ "freeform": {
+ "key": "name"
+ }
},
{
- "if": "diet:vegetarian=limited",
- "then": {
- "nl": "Beperkte vegetarische opties zijn beschikbaar"
- }
- },
- {
- "if": "diet:vegetarian=yes",
- "then": {
- "nl": "Vegetarische opties zijn beschikbaar"
- }
- },
- {
- "if": "diet:vegetarian=only",
- "then": {
- "nl": "Enkel vegetarische opties zijn beschikbaar"
- }
- }
- ],
- "condition": "cuisine!=friture"
- },
- {
- "#": "Vegan (no friture)",
- "question": {
- "nl": "Heeft deze eetgelegenheid een veganistische optie?"
- },
- "mappings": [
- {
- "if": "diet:vegan=no",
- "then": {
- "nl": "Geen veganistische opties beschikbaar"
- }
- },
- {
- "if": "diet:vegan=limited",
- "then": {
- "nl": "Beperkte veganistische opties zijn beschikbaar"
- }
- },
- {
- "if": "diet:vegan=yes",
- "then": {
- "nl": "Veganistische opties zijn beschikbaar"
- }
- },
- {
- "if": "diet:vegan=only",
- "then": {
- "nl": "Enkel veganistische opties zijn beschikbaar"
- }
- }
- ],
- "condition": "cuisine!=friture"
- },
- {
- "#": "halal (no friture)",
- "question": {
- "en": "Does this restaurant offer a halal menu?",
- "nl": "Heeft dit restaurant halal opties?"
- },
- "mappings": [
- {
- "if": "diet:halal=no",
- "then": {
- "en": "There are no halal options available",
- "nl": "Er zijn geen halal opties aanwezig"
- }
- },
- {
- "if": "diet:halal=limited",
- "then": {
- "en": "There is a small halal menu",
- "nl": "Er zijn een beperkt aantal halal opties"
- }
- },
- {
- "if": "diet:halal=yes",
- "then": {
- "nl": "Halal menu verkrijgbaar",
- "en": "There is a halal menu"
- }
- },
- {
- "if": "diet:halal=only",
- "then": {
- "nl": "Enkel halal opties zijn beschikbaar",
- "en": "Only halal options are available"
- }
- }
- ],
- "condition": "cuisine!=friture"
- },
- {
- "question": {
- "nl": "Heeft deze frituur vegetarische snacks?",
- "fr": "Cette friterie est-elle équipée de snacks végétariens ?"
- },
- "mappings": [
- {
- "if": "diet:vegetarian=yes",
- "then": {
- "nl": "Er zijn vegetarische snacks aanwezig",
- "fr": "Des collations végétariens sont disponibles"
- }
- },
- {
- "if": "diet:vegetarian=limited",
- "then": {
- "nl": "Slechts enkele vegetarische snacks",
- "fr": "Quelques snacks végétariens seulement"
- }
- },
- {
- "if": "diet:vegetarian=no",
- "then": {
- "nl": "Geen vegetarische snacks beschikbaar",
- "fr": "Pas d'en-cas végétariens disponibles"
- }
- }
- ],
- "condition": "cuisine=friture"
- },
- {
- "question": {
- "nl": "Heeft deze frituur veganistische snacks?",
- "fr": "Cette friterie est-elle équipée de snacks végétaliens ?"
- },
- "mappings": [
- {
- "if": "diet:vegan=yes",
- "then": {
- "nl": "Er zijn veganistische snacks aanwezig",
- "fr": "Des collations végétaliens sont disponibles"
- }
- },
- {
- "if": "diet:vegan=limited",
- "then": {
- "nl": "Slechts enkele veganistische snacks",
- "fr": "Quelques snacks végétaliens seulement"
- }
- },
- {
- "if": "diet:vegan=no",
- "then": {
- "nl": "Geen veganistische snacks beschikbaar",
- "fr": "Pas d'en-cas végétaliens disponibles"
- }
- }
- ],
- "condition": "cuisine=friture"
- },
- {
- "question": {
- "nl": "Bakt deze frituur met dierlijk vet of met plantaardige olie?",
- "fr": "Cette friteuse fonctionne-t-elle avec de la graisse animale ou végétale ?"
- },
- "mappings": [
- {
- "if": "friture:oil=vegetable",
- "then": {
- "nl": "Plantaardige olie",
- "fr": "Huile végétale"
- }
- },
- {
- "if": "friture:oil=animal",
- "then": {
- "nl": "Dierlijk vet",
- "fr": "Graisse animale"
- }
- }
- ],
- "condition": "cuisine=friture"
- },
- {
- "question": {
- "nl": "Als je je eigen container (bv. kookpot of kleine potjes voor saus) meeneemt, gebruikt de frituur deze dan om je bestelling in te doen?",
- "fr": "Est-il proposé d’utiliser ses propres contenants pour sa commande ? ",
- "en": "If you bring your own container (such as a cooking pot and small pots), is it used to package your order? ",
- "ja": "お客様が持参容器(調理用の鍋や小さな鍋など)をもってきた場合は、注文の梱包に使用されますか? "
- },
- "mappings": [
- {
- "if": "reusable_packaging:accept=yes",
- "then": {
- "nl": "Je mag je eigen containers meenemen om je bestelling in mee te nemen en zo minder afval te maken",
- "fr": "Vous pouvez apporter vos contenants pour votre commande, limitant l’usage de matériaux à usage unique et les déchets",
- "en": "You can bring your own containers to get your order, saving on single-use packaging material and thus waste",
- "ja": "自分の容器を持ってきて、注文を受け取ることができ、使い捨ての梱包材を節約して、無駄を省くことができます"
- }
- },
- {
- "if": "reusable_packaging:accept=no",
- "then": {
- "nl": "Je mag geen eigen containers meenemen om je bestelling in mee te nemen",
- "fr": "Apporter ses propres contenants n’est pas permis",
- "en": "Bringing your own container is not allowed",
- "ja": "独自の容器を持参することはできません",
- "ru": "Приносить свою тару не разрешено"
- }
- },
- {
- "if": "reusable_packaging:accept=only",
- "then": {
- "nl": "Je moet je eigen containers meenemen om je bestelling in mee te nemen.",
- "en": "You must bring your own container to order here.",
- "ja": "自身の容器が注文に必要。",
- "fr": "Il est obligatoire d’apporter ses propres contenants"
- }
- }
- ],
- "condition": "cuisine=friture"
- }
- ],
- "filter": [
- {
- "options": [
- {
- "question": {
- "en": "Opened now",
- "nl": "Nu geopened"
- },
- "osmTags": "_isOpen=yes"
- }
- ]
- },
- {
- "options": [
- {
- "question": {
- "en": "Has a vegetarian menu",
- "nl": "Heeft een vegetarisch menu"
- },
- "osmTags": {
- "or": [
- "diet:vegetarian=yes",
- "diet:vegetarian=only",
- "diet:vegan=yes",
- "diet:vegan=only"
+ "#": "Fastfood vs restaurant",
+ "question": {
+ "en": "What type of business is this?",
+ "nl": "Wat voor soort zaak is dit?"
+ },
+ "mappings": [
+ {
+ "if": "amenity=fast_food",
+ "then": {
+ "nl": "Dit is een fastfood-zaak. De focus ligt op snelle bediening, zitplaatsen zijn vaak beperkt en functioneel"
+ }
+ },
+ {
+ "if": "amenity=restaurant",
+ "then": {
+ "nl": "Dit is een restaurant. De focus ligt op een aangename ervaring waar je aan tafel wordt bediend"
+ }
+ }
]
- }
- }
- ]
- },
- {
- "options": [
+ },
+ "opening_hours",
+ "website",
+ "email",
+ "phone",
+ "payment-options",
+ "wheelchair-access",
{
- "question": {
- "en": "Has a vegan menu",
- "nl": "Heeft een veganistisch menu"
- },
- "osmTags": {
- "or": [
- "diet:vegan=yes",
- "diet:vegan=only"
+ "#": "Cuisine",
+ "question": {
+ "nl": "Welk soort gerechten worden hier geserveerd?",
+ "en": "Which food is served here?"
+ },
+ "render": {
+ "nl": "Deze plaats serveert vooral {cuisine}",
+ "en": "This place mostly serves {cuisine}"
+ },
+ "freeform": {
+ "key": "cuisine",
+ "addExtraTags": [
+ "fixme=Freeform tag `cuisine` used, to be doublechecked"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "cuisine=pizza",
+ "then": {
+ "en": "This is a pizzeria",
+ "nl": "Dit is een pizzeria"
+ }
+ },
+ {
+ "if": "cuisine=friture",
+ "then": {
+ "en": "This is a friture",
+ "nl": "Dit is een frituur"
+ }
+ },
+ {
+ "if": "cuisine=pasta",
+ "then": {
+ "en": "Mainly serves pasta",
+ "nl": "Dit is een pastazaak"
+ }
+ },
+ {
+ "if": "cuisine=kebab",
+ "then": {
+ "nl": "Dit is een kebabzaak"
+ }
+ },
+ {
+ "if": "cuisine=sandwich",
+ "then": {
+ "nl": "Dit is een broodjeszaak"
+ }
+ },
+ {
+ "if": "cuisine=burger",
+ "then": {
+ "nl": "Dit is een hamburgerrestaurant"
+ }
+ },
+ {
+ "if": "cuisine=sushi",
+ "then": {
+ "nl": "Dit is een sushirestaurant"
+ }
+ },
+ {
+ "if": "cuisine=coffee",
+ "then": {
+ "nl": "Dit is een koffiezaak"
+ }
+ },
+ {
+ "if": "cuisine=italian",
+ "then": {
+ "nl": "Dit is een Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)"
+ }
+ },
+ {
+ "if": "cuisine=french",
+ "then": {
+ "nl": "Dit is een Frans restaurant"
+ }
+ },
+ {
+ "if": "cuisine=chinese",
+ "then": {
+ "nl": "Dit is een Chinees restaurant"
+ }
+ },
+ {
+ "if": "cuisine=greek",
+ "then": {
+ "nl": "Dit is een Grieks restaurant"
+ }
+ },
+ {
+ "if": "cuisine=indian",
+ "then": {
+ "nl": "Dit is een Indisch restaurant"
+ }
+ },
+ {
+ "if": "cuisine=turkish",
+ "then": {
+ "nl": "Dit is een Turks restaurant (dat meer dan enkel kebab verkoopt)"
+ }
+ },
+ {
+ "if": "cuisine=thai",
+ "then": {
+ "nl": "Dit is een Thaïs restaurant"
+ }
+ }
]
- }
- }
- ]
- },
- {
- "options": [
+ },
{
- "question": {
- "en": "Has a halal menu",
- "nl": "Heeft een halal menu"
- },
- "osmTags": {
- "or": [
- "diet:halal=yes",
- "diet:halal=only"
+ "#": "Takeaway",
+ "question": {
+ "nl": "Biedt deze zaak een afhaalmogelijkheid aan?",
+ "en": "Does this place offer takea-way?"
+ },
+ "mappings": [
+ {
+ "if": "takeaway=only",
+ "then": {
+ "en": "This is a take-away only business",
+ "nl": "Hier is enkel afhaal mogelijk"
+ }
+ },
+ {
+ "if": "takeaway=yes",
+ "then": {
+ "en": "Take-away is possible here",
+ "nl": "Eten kan hier afgehaald worden"
+ }
+ },
+ {
+ "if": "takeaway=no",
+ "then": {
+ "en": "Take-away is not possible here",
+ "nl": "Hier is geen afhaalmogelijkheid"
+ }
+ }
]
- }
+ },
+ {
+ "#": "Vegetarian (no friture)",
+ "question": {
+ "nl": "Heeft deze eetgelegenheid een vegetarische optie?",
+ "en": "Does this restaurant have a vegetarian option?"
+ },
+ "mappings": [
+ {
+ "if": "diet:vegetarian=no",
+ "then": {
+ "nl": "Geen vegetarische opties beschikbaar"
+ }
+ },
+ {
+ "if": "diet:vegetarian=limited",
+ "then": {
+ "nl": "Beperkte vegetarische opties zijn beschikbaar"
+ }
+ },
+ {
+ "if": "diet:vegetarian=yes",
+ "then": {
+ "nl": "Vegetarische opties zijn beschikbaar"
+ }
+ },
+ {
+ "if": "diet:vegetarian=only",
+ "then": {
+ "nl": "Enkel vegetarische opties zijn beschikbaar"
+ }
+ }
+ ],
+ "condition": "cuisine!=friture"
+ },
+ {
+ "#": "Vegan (no friture)",
+ "question": {
+ "nl": "Heeft deze eetgelegenheid een veganistische optie?"
+ },
+ "mappings": [
+ {
+ "if": "diet:vegan=no",
+ "then": {
+ "nl": "Geen veganistische opties beschikbaar"
+ }
+ },
+ {
+ "if": "diet:vegan=limited",
+ "then": {
+ "nl": "Beperkte veganistische opties zijn beschikbaar"
+ }
+ },
+ {
+ "if": "diet:vegan=yes",
+ "then": {
+ "nl": "Veganistische opties zijn beschikbaar"
+ }
+ },
+ {
+ "if": "diet:vegan=only",
+ "then": {
+ "nl": "Enkel veganistische opties zijn beschikbaar"
+ }
+ }
+ ],
+ "condition": "cuisine!=friture"
+ },
+ {
+ "#": "halal (no friture)",
+ "question": {
+ "en": "Does this restaurant offer a halal menu?",
+ "nl": "Heeft dit restaurant halal opties?"
+ },
+ "mappings": [
+ {
+ "if": "diet:halal=no",
+ "then": {
+ "en": "There are no halal options available",
+ "nl": "Er zijn geen halal opties aanwezig"
+ }
+ },
+ {
+ "if": "diet:halal=limited",
+ "then": {
+ "en": "There is a small halal menu",
+ "nl": "Er zijn een beperkt aantal halal opties"
+ }
+ },
+ {
+ "if": "diet:halal=yes",
+ "then": {
+ "nl": "Halal menu verkrijgbaar",
+ "en": "There is a halal menu"
+ }
+ },
+ {
+ "if": "diet:halal=only",
+ "then": {
+ "nl": "Enkel halal opties zijn beschikbaar",
+ "en": "Only halal options are available"
+ }
+ }
+ ],
+ "condition": "cuisine!=friture"
+ },
+ {
+ "question": {
+ "nl": "Heeft deze frituur vegetarische snacks?",
+ "fr": "Cette friterie est-elle équipée de snacks végétariens ?"
+ },
+ "mappings": [
+ {
+ "if": "diet:vegetarian=yes",
+ "then": {
+ "nl": "Er zijn vegetarische snacks aanwezig",
+ "fr": "Des collations végétariens sont disponibles"
+ }
+ },
+ {
+ "if": "diet:vegetarian=limited",
+ "then": {
+ "nl": "Slechts enkele vegetarische snacks",
+ "fr": "Quelques snacks végétariens seulement"
+ }
+ },
+ {
+ "if": "diet:vegetarian=no",
+ "then": {
+ "nl": "Geen vegetarische snacks beschikbaar",
+ "fr": "Pas d'en-cas végétariens disponibles"
+ }
+ }
+ ],
+ "condition": "cuisine=friture"
+ },
+ {
+ "question": {
+ "nl": "Heeft deze frituur veganistische snacks?",
+ "fr": "Cette friterie est-elle équipée de snacks végétaliens ?"
+ },
+ "mappings": [
+ {
+ "if": "diet:vegan=yes",
+ "then": {
+ "nl": "Er zijn veganistische snacks aanwezig",
+ "fr": "Des collations végétaliens sont disponibles"
+ }
+ },
+ {
+ "if": "diet:vegan=limited",
+ "then": {
+ "nl": "Slechts enkele veganistische snacks",
+ "fr": "Quelques snacks végétaliens seulement"
+ }
+ },
+ {
+ "if": "diet:vegan=no",
+ "then": {
+ "nl": "Geen veganistische snacks beschikbaar",
+ "fr": "Pas d'en-cas végétaliens disponibles"
+ }
+ }
+ ],
+ "condition": "cuisine=friture"
+ },
+ {
+ "question": {
+ "nl": "Bakt deze frituur met dierlijk vet of met plantaardige olie?",
+ "fr": "Cette friteuse fonctionne-t-elle avec de la graisse animale ou végétale ?"
+ },
+ "mappings": [
+ {
+ "if": "friture:oil=vegetable",
+ "then": {
+ "nl": "Plantaardige olie",
+ "fr": "Huile végétale"
+ }
+ },
+ {
+ "if": "friture:oil=animal",
+ "then": {
+ "nl": "Dierlijk vet",
+ "fr": "Graisse animale"
+ }
+ }
+ ],
+ "condition": "cuisine=friture"
+ },
+ {
+ "question": {
+ "nl": "Als je je eigen container (bv. kookpot of kleine potjes voor saus) meeneemt, gebruikt de frituur deze dan om je bestelling in te doen?",
+ "fr": "Est-il proposé d’utiliser ses propres contenants pour sa commande ? ",
+ "en": "If you bring your own container (such as a cooking pot and small pots), is it used to package your order? ",
+ "ja": "お客様が持参容器(調理用の鍋や小さな鍋など)をもってきた場合は、注文の梱包に使用されますか? "
+ },
+ "mappings": [
+ {
+ "if": "reusable_packaging:accept=yes",
+ "then": {
+ "nl": "Je mag je eigen containers meenemen om je bestelling in mee te nemen en zo minder afval te maken",
+ "fr": "Vous pouvez apporter vos contenants pour votre commande, limitant l’usage de matériaux à usage unique et les déchets",
+ "en": "You can bring your own containers to get your order, saving on single-use packaging material and thus waste",
+ "ja": "自分の容器を持ってきて、注文を受け取ることができ、使い捨ての梱包材を節約して、無駄を省くことができます"
+ }
+ },
+ {
+ "if": "reusable_packaging:accept=no",
+ "then": {
+ "nl": "Je mag geen eigen containers meenemen om je bestelling in mee te nemen",
+ "fr": "Apporter ses propres contenants n’est pas permis",
+ "en": "Bringing your own container is not allowed",
+ "ja": "独自の容器を持参することはできません",
+ "ru": "Приносить свою тару не разрешено"
+ }
+ },
+ {
+ "if": "reusable_packaging:accept=only",
+ "then": {
+ "nl": "Je moet je eigen containers meenemen om je bestelling in mee te nemen.",
+ "en": "You must bring your own container to order here.",
+ "ja": "自身の容器が注文に必要。",
+ "fr": "Il est obligatoire d’apporter ses propres contenants"
+ }
+ }
+ ],
+ "condition": "cuisine=friture"
}
- ]
- }
- ]
+ ],
+ "filter": [
+ {
+ "options": [
+ {
+ "question": {
+ "en": "Opened now",
+ "nl": "Nu geopened"
+ },
+ "osmTags": "_isOpen=yes"
+ }
+ ]
+ },
+ {
+ "options": [
+ {
+ "question": {
+ "en": "Has a vegetarian menu",
+ "nl": "Heeft een vegetarisch menu"
+ },
+ "osmTags": {
+ "or": [
+ "diet:vegetarian=yes",
+ "diet:vegetarian=only",
+ "diet:vegan=yes",
+ "diet:vegan=only"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "options": [
+ {
+ "question": {
+ "en": "Has a vegan menu",
+ "nl": "Heeft een veganistisch menu"
+ },
+ "osmTags": {
+ "or": [
+ "diet:vegan=yes",
+ "diet:vegan=only"
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "options": [
+ {
+ "question": {
+ "en": "Has a halal menu",
+ "nl": "Heeft een halal menu"
+ },
+ "osmTags": {
+ "or": [
+ "diet:halal=yes",
+ "diet:halal=only"
+ ]
+ }
+ }
+ ]
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/ghost_bike/ghost_bike.json b/assets/layers/ghost_bike/ghost_bike.json
index 68020ab52..3183b7283 100644
--- a/assets/layers/ghost_bike/ghost_bike.json
+++ b/assets/layers/ghost_bike/ghost_bike.json
@@ -1,186 +1,186 @@
{
- "id": "ghost_bike",
- "name": {
- "en": "Ghost bikes",
- "nl": "Witte Fietsen",
- "de": "Geisterrad",
- "it": "Bici fantasma",
- "fr": "Vélos fantômes",
- "eo": "Fantombiciklo",
- "es": "Bicicleta blanca",
- "fi": "Haamupyörä",
- "gl": "Bicicleta pantasma",
- "hu": "Emlékkerékpár",
- "ja": "ゴーストバイク",
- "nb_NO": "Spøkelsessykler",
- "pl": "Duch roweru",
- "pt_BR": "Bicicleta fantasma",
- "ru": "Велосипед Ghost",
- "sv": "Spökcykel",
- "zh_Hant": "幽靈單車"
- },
- "source": {
- "osmTags": "memorial=ghost_bike"
- },
- "minzoom": 0,
- "title": {
- "render": {
- "en": "Ghost bike",
- "nl": "Witte Fiets",
- "de": "Geisterrad",
- "it": "Bici fantasma",
- "fr": "Vélo fantôme",
- "eo": "Fantombiciklo",
- "es": "Bicicleta blanca",
- "fi": "Haamupyörä",
- "gl": "Bicicleta pantasma",
- "hu": "Emlékkerékpár",
- "ja": "ゴーストバイク",
- "nb_NO": "Spøkelsessykler",
- "pl": "Duch roweru",
- "pt_BR": "Bicicleta fantasma",
- "ru": "Велосипед Ghost",
- "sv": "Spökcykel",
- "zh_Hant": "幽靈單車"
- },
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "en": "Ghost bike in the remembrance of {name}",
- "nl": "Witte fiets ter nagedachtenis van {name}",
- "de": "Geisterrad im Gedenken an {name}",
- "it": "Bici fantasma in ricordo di {name}",
- "fr": "Vélo fantôme en souvenir de {name}"
- }
- }
- ]
- },
- "icon": "./assets/layers/ghost_bike/ghost_bike.svg",
- "iconSize": "40,40,bottom",
- "width": "5",
- "color": "#000",
- "wayHandling": 1,
- "presets": [
- {
- "title": {
- "en": "Ghost bike",
- "nl": "Witte fiets",
+ "id": "ghost_bike",
+ "name": {
+ "en": "Ghost bikes",
+ "nl": "Witte Fietsen",
"de": "Geisterrad",
"it": "Bici fantasma",
- "fr": "Vélo fantôme"
- },
- "tags": [
- "historic=memorial",
- "memorial=ghost_bike"
- ]
- }
- ],
- "tagRenderings": [
- {
- "render": {
- "en": "A ghost bike is a memorial for a cyclist who died in a traffic accident, in the form of a white bicycle placed permanently near the accident location.",
- "nl": "Een Witte Fiets (of Spookfiets) is een aandenken aan een fietser die bij een verkeersongeval om het leven kwam. Het gaat over een witgeschilderde fiets die geplaatst werd in de buurt van het ongeval.",
- "de": "Ein Geisterrad ist ein Denkmal für einen Radfahrer, der bei einem Verkehrsunfall ums Leben kam, in Form eines weißen Fahrrades, das dauerhaft in der Nähe des Unfallortes aufgestellt wird.",
- "it": "Una bici fantasma è il memoriale di un ciclista che è morto in un incidente stradale e che ha la forma di una bicicletta bianca piazzata in maniera stabile vicino al luogo dell’incidente.",
- "fr": "Un vélo fantôme est un monument commémoratif pour un cycliste décédé dans un accident de la route, sous la forme d'un vélo blanc placé en permanence près du lieu de l'accident."
- }
+ "fr": "Vélos fantômes",
+ "eo": "Fantombiciklo",
+ "es": "Bicicleta blanca",
+ "fi": "Haamupyörä",
+ "gl": "Bicicleta pantasma",
+ "hu": "Emlékkerékpár",
+ "ja": "ゴーストバイク",
+ "nb_NO": "Spøkelsessykler",
+ "pl": "Duch roweru",
+ "pt_BR": "Bicicleta fantasma",
+ "ru": "Велосипед Ghost",
+ "sv": "Spökcykel",
+ "zh_Hant": "幽靈單車"
},
- "images",
- {
- "question": {
- "en": "Whom is remembered by this ghost bike? Please respect privacy - only fill out the name if it is widely published or marked on the cycle. Opt to leave out the family name.",
- "nl": "Aan wie is deze witte fiets een eerbetoon? Respecteer privacy - voeg enkel een naam toe indien die op de fiets staat of gepubliceerd is. Eventueel voeg je enkel de voornaam toe.",
- "de": "An wen erinnert dieses Geisterrad? Bitte respektieren Sie die Privatsphäre - geben Sie den Namen nur an, wenn er weit verbreitet oder auf dem Fahrrad markiert ist. Den Familiennamen können Sie weglassen.",
- "it": "A chi è dedicata questa bici fantasma? Rispetta la privacy (compila solo il nome se questo è stato ampiamente pubblicato o se è scritto sulla bici). Decidi se è il caso di non inserire il cognome.",
- "fr": "À qui est dédié ce vélo fantôme ? Veuillez respecter la vie privée – ajoutez le nom seulement s'il est largement publié ou marqué sur le vélo. Choisissez de ne pas indiquer le nom de famille "
- },
- "render": {
- "en": "In remembrance of {name}",
- "nl": "Ter nagedachtenis van {name}",
- "de": "Im Gedenken an {name}",
- "it": "In ricordo di {name}",
- "fr": "En souvenir de {name}",
- "ru": "В знак памяти о {name}"
- },
- "freeform": {
- "key": "name"
- },
- "mappings": [
+ "source": {
+ "osmTags": "memorial=ghost_bike"
+ },
+ "minzoom": 0,
+ "title": {
+ "render": {
+ "en": "Ghost bike",
+ "nl": "Witte Fiets",
+ "de": "Geisterrad",
+ "it": "Bici fantasma",
+ "fr": "Vélo fantôme",
+ "eo": "Fantombiciklo",
+ "es": "Bicicleta blanca",
+ "fi": "Haamupyörä",
+ "gl": "Bicicleta pantasma",
+ "hu": "Emlékkerékpár",
+ "ja": "ゴーストバイク",
+ "nb_NO": "Spøkelsessykler",
+ "pl": "Duch roweru",
+ "pt_BR": "Bicicleta fantasma",
+ "ru": "Велосипед Ghost",
+ "sv": "Spökcykel",
+ "zh_Hant": "幽靈單車"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "en": "Ghost bike in the remembrance of {name}",
+ "nl": "Witte fiets ter nagedachtenis van {name}",
+ "de": "Geisterrad im Gedenken an {name}",
+ "it": "Bici fantasma in ricordo di {name}",
+ "fr": "Vélo fantôme en souvenir de {name}"
+ }
+ }
+ ]
+ },
+ "icon": "./assets/layers/ghost_bike/ghost_bike.svg",
+ "iconSize": "40,40,bottom",
+ "width": "5",
+ "color": "#000",
+ "wayHandling": 1,
+ "presets": [
{
- "if": "noname=yes",
- "then": {
- "en": "No name is marked on the bike",
- "nl": "De naam is niet aangeduid op de fiets",
- "de": "Auf dem Fahrrad ist kein Name angegeben",
- "it": "Nessun nome scritto sulla bici",
- "fr": "Aucun nom n'est marqué sur le vélo"
- }
+ "title": {
+ "en": "Ghost bike",
+ "nl": "Witte fiets",
+ "de": "Geisterrad",
+ "it": "Bici fantasma",
+ "fr": "Vélo fantôme"
+ },
+ "tags": [
+ "historic=memorial",
+ "memorial=ghost_bike"
+ ]
}
- ]
- },
- {
- "question": {
- "en": "On what webpage can one find more information about the Ghost bike or the accident?",
- "nl": "Op welke website kan men meer informatie vinden over de Witte fiets of over het ongeval?",
- "de": "Auf welcher Webseite kann man mehr Informationen über das Geisterrad oder den Unfall finden?",
- "it": "In quale pagina web si possono trovare informazioni sulla bici fantasma o l’incidente?",
- "fr": "Sur quelle page web peut-on trouver plus d'informations sur le Vélo fantôme ou l'accident ?"
- },
- "render": {
- "en": "More information is available",
- "nl": "Meer informatie",
- "de": "Mehr Informationen",
- "it": "Sono disponibili ulteriori informazioni",
- "ru": "Доступна более подробная информация",
- "fr": "Plus d'informations sont disponibles",
- "id": "Informasi lanjut tersedia"
- },
- "freeform": {
- "type": "url",
- "key": "source"
- }
- },
- {
- "question": {
- "en": "What is the inscription on this Ghost bike?",
- "nl": "Wat is het opschrift op deze witte fiets?",
- "de": "Wie lautet die Inschrift auf diesem Geisterrad?",
- "it": "Che cosa è scritto sulla bici fantasma?",
- "fr": "Quelle est l'inscription sur ce vélo fantôme ?"
- },
- "render": {
- "en": "{inscription}",
- "nl": "{inscription}",
- "de": "{inscription}",
- "ca": "{inscription}",
- "fr": "{inscription}",
- "it": "{inscription}",
- "ru": "{inscription}",
- "id": "{inscription}"
- },
- "freeform": {
- "key": "inscription"
- }
- },
- {
- "question": {
- "nl": "Wanneer werd deze witte fiets geplaatst?",
- "en": "When was this Ghost bike installed?",
- "it": "Quando è stata installata questa bici fantasma?",
- "fr": "Quand ce vélo fantôme a-t-il été installée ?"
- },
- "render": {
- "nl": "Geplaatst op {start_date}",
- "en": "Placed on {start_date}",
- "it": "Piazzata in data {start_date}",
- "fr": "Placé le {start_date}",
- "ru": "Установлен {start_date}"
- },
- "freeform": {
- "key": "start_date",
- "type": "date"
- }
- }
- ]
+ ],
+ "tagRenderings": [
+ {
+ "render": {
+ "en": "A ghost bike is a memorial for a cyclist who died in a traffic accident, in the form of a white bicycle placed permanently near the accident location.",
+ "nl": "Een Witte Fiets (of Spookfiets) is een aandenken aan een fietser die bij een verkeersongeval om het leven kwam. Het gaat over een witgeschilderde fiets die geplaatst werd in de buurt van het ongeval.",
+ "de": "Ein Geisterrad ist ein Denkmal für einen Radfahrer, der bei einem Verkehrsunfall ums Leben kam, in Form eines weißen Fahrrades, das dauerhaft in der Nähe des Unfallortes aufgestellt wird.",
+ "it": "Una bici fantasma è il memoriale di un ciclista che è morto in un incidente stradale e che ha la forma di una bicicletta bianca piazzata in maniera stabile vicino al luogo dell’incidente.",
+ "fr": "Un vélo fantôme est un monument commémoratif pour un cycliste décédé dans un accident de la route, sous la forme d'un vélo blanc placé en permanence près du lieu de l'accident."
+ }
+ },
+ "images",
+ {
+ "question": {
+ "en": "Whom is remembered by this ghost bike? Please respect privacy - only fill out the name if it is widely published or marked on the cycle. Opt to leave out the family name.",
+ "nl": "Aan wie is deze witte fiets een eerbetoon? Respecteer privacy - voeg enkel een naam toe indien die op de fiets staat of gepubliceerd is. Eventueel voeg je enkel de voornaam toe.",
+ "de": "An wen erinnert dieses Geisterrad? Bitte respektieren Sie die Privatsphäre - geben Sie den Namen nur an, wenn er weit verbreitet oder auf dem Fahrrad markiert ist. Den Familiennamen können Sie weglassen.",
+ "it": "A chi è dedicata questa bici fantasma? Rispetta la privacy (compila solo il nome se questo è stato ampiamente pubblicato o se è scritto sulla bici). Decidi se è il caso di non inserire il cognome.",
+ "fr": "À qui est dédié ce vélo fantôme ? Veuillez respecter la vie privée – ajoutez le nom seulement s'il est largement publié ou marqué sur le vélo. Choisissez de ne pas indiquer le nom de famille "
+ },
+ "render": {
+ "en": "In remembrance of {name}",
+ "nl": "Ter nagedachtenis van {name}",
+ "de": "Im Gedenken an {name}",
+ "it": "In ricordo di {name}",
+ "fr": "En souvenir de {name}",
+ "ru": "В знак памяти о {name}"
+ },
+ "freeform": {
+ "key": "name"
+ },
+ "mappings": [
+ {
+ "if": "noname=yes",
+ "then": {
+ "en": "No name is marked on the bike",
+ "nl": "De naam is niet aangeduid op de fiets",
+ "de": "Auf dem Fahrrad ist kein Name angegeben",
+ "it": "Nessun nome scritto sulla bici",
+ "fr": "Aucun nom n'est marqué sur le vélo"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "On what webpage can one find more information about the Ghost bike or the accident?",
+ "nl": "Op welke website kan men meer informatie vinden over de Witte fiets of over het ongeval?",
+ "de": "Auf welcher Webseite kann man mehr Informationen über das Geisterrad oder den Unfall finden?",
+ "it": "In quale pagina web si possono trovare informazioni sulla bici fantasma o l’incidente?",
+ "fr": "Sur quelle page web peut-on trouver plus d'informations sur le Vélo fantôme ou l'accident ?"
+ },
+ "render": {
+ "en": "More information is available",
+ "nl": "Meer informatie",
+ "de": "Mehr Informationen",
+ "it": "Sono disponibili ulteriori informazioni",
+ "ru": "Доступна более подробная информация",
+ "fr": "Plus d'informations sont disponibles",
+ "id": "Informasi lanjut tersedia"
+ },
+ "freeform": {
+ "type": "url",
+ "key": "source"
+ }
+ },
+ {
+ "question": {
+ "en": "What is the inscription on this Ghost bike?",
+ "nl": "Wat is het opschrift op deze witte fiets?",
+ "de": "Wie lautet die Inschrift auf diesem Geisterrad?",
+ "it": "Che cosa è scritto sulla bici fantasma?",
+ "fr": "Quelle est l'inscription sur ce vélo fantôme ?"
+ },
+ "render": {
+ "en": "{inscription}",
+ "nl": "{inscription}",
+ "de": "{inscription}",
+ "ca": "{inscription}",
+ "fr": "{inscription}",
+ "it": "{inscription}",
+ "ru": "{inscription}",
+ "id": "{inscription}"
+ },
+ "freeform": {
+ "key": "inscription"
+ }
+ },
+ {
+ "question": {
+ "nl": "Wanneer werd deze witte fiets geplaatst?",
+ "en": "When was this Ghost bike installed?",
+ "it": "Quando è stata installata questa bici fantasma?",
+ "fr": "Quand ce vélo fantôme a-t-il été installée ?"
+ },
+ "render": {
+ "nl": "Geplaatst op {start_date}",
+ "en": "Placed on {start_date}",
+ "it": "Piazzata in data {start_date}",
+ "fr": "Placé le {start_date}",
+ "ru": "Установлен {start_date}"
+ },
+ "freeform": {
+ "key": "start_date",
+ "type": "date"
+ }
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/grass_in_parks/grass_in_parks.json b/assets/layers/grass_in_parks/grass_in_parks.json
index 9a48eb2be..f9dcd0f23 100644
--- a/assets/layers/grass_in_parks/grass_in_parks.json
+++ b/assets/layers/grass_in_parks/grass_in_parks.json
@@ -1,53 +1,53 @@
{
- "id": "grass_in_parks",
- "name": {
- "nl": "Toegankelijke grasvelden in parken"
- },
- "source": {
- "osmTags": {
- "or": [
- "name=Park Oude God",
- {
- "and": [
- "landuse=grass",
+ "id": "grass_in_parks",
+ "name": {
+ "nl": "Toegankelijke grasvelden in parken"
+ },
+ "source": {
+ "osmTags": {
+ "or": [
+ "name=Park Oude God",
+ {
+ "and": [
+ "landuse=grass",
+ {
+ "or": [
+ "access=public",
+ "access=yes"
+ ]
+ }
+ ]
+ }
+ ]
+ },
+ "overpassScript": "way[\"leisure\"=\"park\"];node(w);is_in;area._[\"leisure\"=\"park\"];(way(area)[\"landuse\"=\"grass\"]; node(w); );"
+ },
+ "minzoom": 0,
+ "title": {
+ "render": {
+ "nl": "Speelweide in een park"
+ },
+ "mappings": [
{
- "or": [
- "access=public",
- "access=yes"
- ]
+ "if": "name~*",
+ "then": {
+ "nl": "{name}"
+ }
}
- ]
- }
- ]
+ ]
},
- "overpassScript": "way[\"leisure\"=\"park\"];node(w);is_in;area._[\"leisure\"=\"park\"];(way(area)[\"landuse\"=\"grass\"]; node(w); );"
- },
- "minzoom": 0,
- "title": {
- "render": {
- "nl": "Speelweide in een park"
- },
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "nl": "{name}"
+ "icon": "./assets/themes/playgrounds/playground.svg",
+ "iconSize": "40,40,center",
+ "width": "1",
+ "color": "#0f0",
+ "wayHandling": 2,
+ "tagRenderings": [
+ "images",
+ {
+ "render": "Op dit grasveld in het park mag je spelen, picnicken, zitten, ..."
+ },
+ {
+ "render": "{reviews(name, landuse=grass )}"
}
- }
]
- },
- "icon": "./assets/themes/playgrounds/playground.svg",
- "iconSize": "40,40,center",
- "width": "1",
- "color": "#0f0",
- "wayHandling": 2,
- "tagRenderings": [
- "images",
- {
- "render": "Op dit grasveld in het park mag je spelen, picnicken, zitten, ..."
- },
- {
- "render": "{reviews(name, landuse=grass )}"
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/information_board/information_board.json b/assets/layers/information_board/information_board.json
index 4b0c47f4f..f25c71245 100644
--- a/assets/layers/information_board/information_board.json
+++ b/assets/layers/information_board/information_board.json
@@ -1,57 +1,57 @@
{
- "id": "information_board",
- "name": {
- "nl": "Informatieborden",
- "en": "Information boards",
- "it": "Pannelli informativi",
- "fr": "Panneaux d'informations",
- "de": "Informationstafeln",
- "ru": "Информационные щиты"
- },
- "minzoom": 12,
- "source": {
- "osmTags": {
- "and": [
- "information=board"
- ]
- }
- },
- "title": {
- "render": {
- "nl": "Informatiebord",
- "en": "Information board",
- "it": "Pannello informativo",
- "fr": "Panneau d'informations",
- "de": "Informationstafel",
- "ru": "Информационный щит"
- }
- },
- "tagRenderings": [
- "images"
- ],
- "icon": {
- "render": "./assets/layers/information_board/board.svg"
- },
- "iconSize": {
- "render": "40,40,center"
- },
- "color": {
- "render": "#00f"
- },
- "presets": [
- {
- "tags": [
- "tourism=information",
- "information=board"
- ],
- "title": {
- "nl": "Informatiebord",
- "en": "Information board",
- "it": "Pannello informativo",
- "fr": "Panneau d'informations",
- "de": "Informationstafel",
- "ru": "Информационный щит"
- }
- }
- ]
+ "id": "information_board",
+ "name": {
+ "nl": "Informatieborden",
+ "en": "Information boards",
+ "it": "Pannelli informativi",
+ "fr": "Panneaux d'informations",
+ "de": "Informationstafeln",
+ "ru": "Информационные щиты"
+ },
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
+ "and": [
+ "information=board"
+ ]
+ }
+ },
+ "title": {
+ "render": {
+ "nl": "Informatiebord",
+ "en": "Information board",
+ "it": "Pannello informativo",
+ "fr": "Panneau d'informations",
+ "de": "Informationstafel",
+ "ru": "Информационный щит"
+ }
+ },
+ "tagRenderings": [
+ "images"
+ ],
+ "icon": {
+ "render": "./assets/layers/information_board/board.svg"
+ },
+ "iconSize": {
+ "render": "40,40,center"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": [
+ {
+ "tags": [
+ "tourism=information",
+ "information=board"
+ ],
+ "title": {
+ "nl": "Informatiebord",
+ "en": "Information board",
+ "it": "Pannello informativo",
+ "fr": "Panneau d'informations",
+ "de": "Informationstafel",
+ "ru": "Информационный щит"
+ }
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/map/map.json b/assets/layers/map/map.json
index 0f3374791..3bc09c947 100644
--- a/assets/layers/map/map.json
+++ b/assets/layers/map/map.json
@@ -1,229 +1,229 @@
{
- "id": "map",
- "name": {
- "en": "Maps",
- "nl": "Kaarten",
- "it": "Mappe",
- "ru": "Карты",
- "fr": "Cartes",
- "de": "Karten"
- },
- "minzoom": 12,
- "source": {
- "osmTags": {
- "or": [
- "tourism=map",
- "information=map"
- ]
- }
- },
- "title": {
- "render": {
- "en": "Map",
- "nl": "Kaart",
- "it": "Mappa",
- "ru": "Карта",
- "fr": "Carte",
- "de": "Karte"
- }
- },
- "description": {
- "en": "A map, meant for tourists which is permanently installed in the public space",
- "nl": "Een permantent geinstalleerde kaart",
- "it": "Una mappa, destinata ai turisti e che è sistemata in maniera permanente in uno spazio pubblico",
- "fr": "Une carte, destinée aux touristes, installée en permanence dans l'espace public"
- },
- "tagRenderings": [
- "images",
- {
- "question": {
- "en": "On which data is this map based?",
- "nl": "Op welke data is deze kaart gebaseerd?",
- "it": "Su quali dati si basa questa mappa?",
- "fr": "Sur quelles données cette carte est-elle basée ?",
- "de": "Auf welchen Daten basiert diese Karte?"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "map_source=OpenStreetMap",
- "not:map_source="
- ]
- },
- "then": {
- "en": "This map is based on OpenStreetMap",
- "nl": "Deze kaart is gebaseerd op OpenStreetMap",
- "it": "Questa mappa si basa su OpenStreetMap",
- "ru": "Эта карта основана на OpenStreetMap",
- "fr": "Cette carte est basée sur OpenStreetMap",
- "de": "Diese Karte basiert auf OpenStreetMap"
- }
- }
- ],
- "freeform": {
- "key": "map_source"
- },
- "render": {
- "en": "This map is based on {map_source}",
- "nl": "Deze kaart is gebaseerd op {map_source}",
- "it": "Questa mappa si basa su {map_source}",
- "ru": "Эта карта основана на {map_source}",
- "fr": "Cette carte est basée sur {map_source}",
- "de": "Diese Karte basiert auf {map_source}"
- }
+ "id": "map",
+ "name": {
+ "en": "Maps",
+ "nl": "Kaarten",
+ "it": "Mappe",
+ "ru": "Карты",
+ "fr": "Cartes",
+ "de": "Karten"
},
- {
- "question": {
- "en": "Is the OpenStreetMap-attribution given?",
- "nl": "Is de attributie voor OpenStreetMap aanwezig?",
- "it": "L’attribuzione a OpenStreetMap è presente?",
- "de": "Ist die OpenStreetMap-Attribution vorhanden?",
- "fr": "L’attribution à OpenStreetMap est elle-présente ?"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "map_source:attribution=yes"
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
+ "or": [
+ "tourism=map",
+ "information=map"
]
- },
- "then": {
- "en": "OpenStreetMap is clearly attributed, including the ODBL-license",
- "nl": "De OpenStreetMap-attributie is duidelijk aangegeven, zelf met vermelding van \"ODBL\" ",
- "it": "L’attribuzione a OpenStreetMap è chiaramente specificata, inclusa la licenza ODBL",
- "de": "OpenStreetMap ist eindeutig attributiert, einschließlich der ODBL-Lizenz",
- "fr": "L’attribution est clairement inscrite ainsi que la licence ODBL"
- }
- },
- {
- "if": {
- "and": [
- "map_source:attribution=incomplete"
- ]
- },
- "then": {
- "en": "OpenStreetMap is clearly attributed, but the license is not mentioned",
- "nl": "OpenStreetMap is duidelijk aangegeven, maar de licentievermelding ontbreekt",
- "it": "L’attribuzione a OpenStreetMap è chiaramente specificata ma la licenza non compare",
- "de": "OpenStreetMap ist eindeutig attributiert, aber die Lizenz wird nicht erwähnt",
- "fr": "L’attribution est clairement inscrite mais la licence est absente"
- }
- },
- {
- "if": {
- "and": [
- "map_source:attribution=sticker"
- ]
- },
- "then": {
- "en": "OpenStreetMap wasn't mentioned, but someone put an OpenStreetMap-sticker on it",
- "nl": "OpenStreetMap was oorspronkelijk niet aangeduid, maar iemand plaatste er een sticker",
- "it": "Non era presente alcun cenno a OpenStreetMap ma qualcuno vi ha attaccato un adesivo di OpenStreetMap",
- "de": "OpenStreetMap wurde nicht erwähnt, aber jemand hat einen OpenStreetMap-Aufkleber darauf geklebt",
- "fr": "OpenStreetMap n’est pas mentionné, un sticker OpenStreetMap a été collé"
- }
- },
- {
- "if": {
- "and": [
- "map_source:attribution=none"
- ]
- },
- "then": {
- "en": "There is no attribution at all",
- "nl": "Er is geen attributie",
- "it": "Non c’è alcuna attribuzione",
- "fr": "Il n'y a aucune attribution",
- "de": "Es gibt überhaupt keine Namensnennung"
- }
- },
- {
- "if": {
- "and": [
- "map_source:attribution=no"
- ]
- },
- "then": {
- "nl": "Er is geen attributie",
- "en": "There is no attribution at all",
- "it": "Non c’è alcuna attribuzione",
- "fr": "Il n'y a aucune attribution",
- "de": "Es gibt überhaupt keine Namensnennung"
- },
- "hideInAnswer": true
}
- ],
- "condition": {
- "or": [
- "map_source~(O|)pen(S|s)treet(M|m)ap",
- "map_source=osm",
- "map_source=OSM"
+ },
+ "title": {
+ "render": {
+ "en": "Map",
+ "nl": "Kaart",
+ "it": "Mappa",
+ "ru": "Карта",
+ "fr": "Carte",
+ "de": "Karte"
+ }
+ },
+ "description": {
+ "en": "A map, meant for tourists which is permanently installed in the public space",
+ "nl": "Een permantent geinstalleerde kaart",
+ "it": "Una mappa, destinata ai turisti e che è sistemata in maniera permanente in uno spazio pubblico",
+ "fr": "Une carte, destinée aux touristes, installée en permanence dans l'espace public"
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "en": "On which data is this map based?",
+ "nl": "Op welke data is deze kaart gebaseerd?",
+ "it": "Su quali dati si basa questa mappa?",
+ "fr": "Sur quelles données cette carte est-elle basée ?",
+ "de": "Auf welchen Daten basiert diese Karte?"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "map_source=OpenStreetMap",
+ "not:map_source="
+ ]
+ },
+ "then": {
+ "en": "This map is based on OpenStreetMap",
+ "nl": "Deze kaart is gebaseerd op OpenStreetMap",
+ "it": "Questa mappa si basa su OpenStreetMap",
+ "ru": "Эта карта основана на OpenStreetMap",
+ "fr": "Cette carte est basée sur OpenStreetMap",
+ "de": "Diese Karte basiert auf OpenStreetMap"
+ }
+ }
+ ],
+ "freeform": {
+ "key": "map_source"
+ },
+ "render": {
+ "en": "This map is based on {map_source}",
+ "nl": "Deze kaart is gebaseerd op {map_source}",
+ "it": "Questa mappa si basa su {map_source}",
+ "ru": "Эта карта основана на {map_source}",
+ "fr": "Cette carte est basée sur {map_source}",
+ "de": "Diese Karte basiert auf {map_source}"
+ }
+ },
+ {
+ "question": {
+ "en": "Is the OpenStreetMap-attribution given?",
+ "nl": "Is de attributie voor OpenStreetMap aanwezig?",
+ "it": "L’attribuzione a OpenStreetMap è presente?",
+ "de": "Ist die OpenStreetMap-Attribution vorhanden?",
+ "fr": "L’attribution à OpenStreetMap est elle-présente ?"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "map_source:attribution=yes"
+ ]
+ },
+ "then": {
+ "en": "OpenStreetMap is clearly attributed, including the ODBL-license",
+ "nl": "De OpenStreetMap-attributie is duidelijk aangegeven, zelf met vermelding van \"ODBL\" ",
+ "it": "L’attribuzione a OpenStreetMap è chiaramente specificata, inclusa la licenza ODBL",
+ "de": "OpenStreetMap ist eindeutig attributiert, einschließlich der ODBL-Lizenz",
+ "fr": "L’attribution est clairement inscrite ainsi que la licence ODBL"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "map_source:attribution=incomplete"
+ ]
+ },
+ "then": {
+ "en": "OpenStreetMap is clearly attributed, but the license is not mentioned",
+ "nl": "OpenStreetMap is duidelijk aangegeven, maar de licentievermelding ontbreekt",
+ "it": "L’attribuzione a OpenStreetMap è chiaramente specificata ma la licenza non compare",
+ "de": "OpenStreetMap ist eindeutig attributiert, aber die Lizenz wird nicht erwähnt",
+ "fr": "L’attribution est clairement inscrite mais la licence est absente"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "map_source:attribution=sticker"
+ ]
+ },
+ "then": {
+ "en": "OpenStreetMap wasn't mentioned, but someone put an OpenStreetMap-sticker on it",
+ "nl": "OpenStreetMap was oorspronkelijk niet aangeduid, maar iemand plaatste er een sticker",
+ "it": "Non era presente alcun cenno a OpenStreetMap ma qualcuno vi ha attaccato un adesivo di OpenStreetMap",
+ "de": "OpenStreetMap wurde nicht erwähnt, aber jemand hat einen OpenStreetMap-Aufkleber darauf geklebt",
+ "fr": "OpenStreetMap n’est pas mentionné, un sticker OpenStreetMap a été collé"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "map_source:attribution=none"
+ ]
+ },
+ "then": {
+ "en": "There is no attribution at all",
+ "nl": "Er is geen attributie",
+ "it": "Non c’è alcuna attribuzione",
+ "fr": "Il n'y a aucune attribution",
+ "de": "Es gibt überhaupt keine Namensnennung"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "map_source:attribution=no"
+ ]
+ },
+ "then": {
+ "nl": "Er is geen attributie",
+ "en": "There is no attribution at all",
+ "it": "Non c’è alcuna attribuzione",
+ "fr": "Il n'y a aucune attribution",
+ "de": "Es gibt überhaupt keine Namensnennung"
+ },
+ "hideInAnswer": true
+ }
+ ],
+ "condition": {
+ "or": [
+ "map_source~(O|)pen(S|s)treet(M|m)ap",
+ "map_source=osm",
+ "map_source=OSM"
+ ]
+ }
+ }
+ ],
+ "icon": {
+ "render": "./assets/layers/map/map.svg",
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "map_source=OpenStreetMap",
+ "map_source:attribution=sticker"
+ ]
+ },
+ "then": "./assets/layers/map/map-stickered.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "map_source=OpenStreetMap",
+ "map_source:attribution=yes"
+ ]
+ },
+ "then": "./assets/layers/map/osm-logo-white-bg.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "map_source=OpenStreetMap"
+ ]
+ },
+ "then": "./assets/layers/map/osm-logo-buggy-attr.svg"
+ }
]
- }
- }
- ],
- "icon": {
- "render": "./assets/layers/map/map.svg",
- "mappings": [
- {
- "if": {
- "and": [
- "map_source=OpenStreetMap",
- "map_source:attribution=sticker"
- ]
- },
- "then": "./assets/layers/map/map-stickered.svg"
- },
- {
- "if": {
- "and": [
- "map_source=OpenStreetMap",
- "map_source:attribution=yes"
- ]
- },
- "then": "./assets/layers/map/osm-logo-white-bg.svg"
- },
- {
- "if": {
- "and": [
- "map_source=OpenStreetMap"
- ]
- },
- "then": "./assets/layers/map/osm-logo-buggy-attr.svg"
- }
- ]
- },
- "width": {
- "render": "8"
- },
- "iconSize": {
- "render": "50,50,center"
- },
- "color": {
- "render": "#00f"
- },
- "presets": [
- {
- "tags": [
- "tourism=map"
- ],
- "title": {
- "en": "Map",
- "nl": "Kaart",
- "it": "Mappa",
- "ru": "Карта",
- "fr": "Carte",
- "de": "Karte"
- },
- "description": {
- "en": "Add a missing map",
- "nl": "Voeg een ontbrekende kaart toe",
- "it": "Aggiungi una mappa mancante",
- "fr": "Ajouter une carte manquante",
- "de": "Fehlende Karte hinzufügen"
- }
- }
- ],
- "wayHandling": 2
+ },
+ "width": {
+ "render": "8"
+ },
+ "iconSize": {
+ "render": "50,50,center"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": [
+ {
+ "tags": [
+ "tourism=map"
+ ],
+ "title": {
+ "en": "Map",
+ "nl": "Kaart",
+ "it": "Mappa",
+ "ru": "Карта",
+ "fr": "Carte",
+ "de": "Karte"
+ },
+ "description": {
+ "en": "Add a missing map",
+ "nl": "Voeg een ontbrekende kaart toe",
+ "it": "Aggiungi una mappa mancante",
+ "fr": "Ajouter une carte manquante",
+ "de": "Fehlende Karte hinzufügen"
+ }
+ }
+ ],
+ "wayHandling": 2
}
\ No newline at end of file
diff --git a/assets/layers/nature_reserve/nature_reserve.json b/assets/layers/nature_reserve/nature_reserve.json
index 3b4b7b7d4..2f217743d 100644
--- a/assets/layers/nature_reserve/nature_reserve.json
+++ b/assets/layers/nature_reserve/nature_reserve.json
@@ -1,462 +1,462 @@
{
- "id": "nature_reserve",
- "name": {
- "nl": "Natuurgebied"
- },
- "minzoom": 12,
- "source": {
- "osmTags": {
- "and": [
- {
- "or": [
- "leisure=nature_reserve",
+ "id": "nature_reserve",
+ "name": {
+ "nl": "Natuurgebied"
+ },
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
+ "and": [
+ {
+ "or": [
+ "leisure=nature_reserve",
+ {
+ "and": [
+ "protect_class!=98",
+ "boundary=protected_area"
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ "title": {
+ "render": {
+ "nl": "Natuurgebied"
+ },
+ "mappings": [
{
- "and": [
- "protect_class!=98",
- "boundary=protected_area"
- ]
+ "if": {
+ "and": [
+ "name:nl~*"
+ ]
+ },
+ "then": {
+ "nl": "{name:nl}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "name~*"
+ ]
+ },
+ "then": {
+ "nl": "{name}"
+ }
}
- ]
- }
- ]
- }
- },
- "title": {
- "render": {
- "nl": "Natuurgebied"
+ ]
},
- "mappings": [
- {
- "if": {
- "and": [
- "name:nl~*"
- ]
+ "description": {
+ "nl": "Een natuurgebied is een gebied waar actief ruimte gemaakt word voor de natuur. Typisch zijn deze in beheer van Natuurpunt of het Agentschap Natuur en Bos of zijn deze erkend door de overheid."
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "#": "Access tag",
+ "render": {
+ "nl": "De toegankelijkheid van dit gebied is: {access:description}"
+ },
+ "question": {
+ "nl": "Is dit gebied toegankelijk?"
+ },
+ "freeform": {
+ "key": "access:description"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "access=yes",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Vrij toegankelijk"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=no",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Niet toegankelijk"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=private",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Niet toegankelijk, want privégebied"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=permissive",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Toegankelijk, ondanks dat het privegebied is"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=guided",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Enkel toegankelijk met een gids of tijdens een activiteit"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=yes",
+ "fee=yes"
+ ]
+ },
+ "then": {
+ "nl": "Toegankelijk mits betaling"
+ }
+ }
+ ]
},
- "then": {
- "nl": "{name:nl}"
- }
- },
- {
- "if": {
- "and": [
- "name~*"
- ]
+ {
+ "#": "Operator tag",
+ "render": {
+ "nl": "Beheer door {operator}"
+ },
+ "question": {
+ "nl": "Wie beheert dit gebied?"
+ },
+ "freeform": {
+ "key": "operator"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "operator=Natuurpunt"
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied wordt beheerd door Natuurpunt"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "operator~(n|N)atuurpunt.*"
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied wordt beheerd door {operator}"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": {
+ "and": [
+ "operator=Agentschap Natuur en Bos"
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos"
+ }
+ }
+ ]
},
- "then": {
- "nl": "{name}"
+ {
+ "#": "Name:nl-tag",
+ "render": {
+ "nl": "Dit gebied heet {name:nl}"
+ },
+ "question": {
+ "nl": "Wat is de Nederlandstalige naam van dit gebied?"
+ },
+ "freeform": {
+ "key": "name:nl"
+ },
+ "condition": {
+ "and": [
+ "name:nl~*"
+ ]
+ }
+ },
+ {
+ "#": "Name tag",
+ "render": {
+ "nl": "Dit gebied heet {name}"
+ },
+ "question": {
+ "nl": "Wat is de naam van dit gebied?"
+ },
+ "freeform": {
+ "key": "name",
+ "addExtraTags": [
+ "noname="
+ ]
+ },
+ "condition": {
+ "and": [
+ "name:nl="
+ ]
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "noname=yes",
+ "name="
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied heeft geen naam"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Dogs?",
+ "question": {
+ "nl": "Zijn honden toegelaten in dit gebied?",
+ "en": "Are dogs allowed in this nature reserve?",
+ "it": "I cani sono ammessi in questa riserva naturale?",
+ "fr": "Les chiens sont-ils autorisés dans cette réserve naturelle ?",
+ "de": "Sind Hunde in diesem Naturschutzgebiet erlaubt?"
+ },
+ "condition": {
+ "or": [
+ "access=yes",
+ "access=permissive",
+ "access=guided"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "dog=leashed",
+ "then": {
+ "nl": "Honden moeten aan de leiband",
+ "en": "Dogs have to be leashed",
+ "it": "I cani devono essere tenuti al guinzaglio",
+ "fr": "Les chiens doivent être tenus en laisse",
+ "de": "Hunde müssen angeleint sein"
+ }
+ },
+ {
+ "if": "dog=no",
+ "then": {
+ "nl": "Honden zijn niet toegestaan",
+ "en": "No dogs allowed",
+ "it": "I cani non sono ammessi",
+ "fr": "Chiens interdits",
+ "de": "Hunde sind nicht erlaubt"
+ }
+ },
+ {
+ "if": "dog=yes",
+ "then": {
+ "nl": "Honden zijn welkom en mogen vrij rondlopen",
+ "en": "Dogs are allowed to roam freely",
+ "it": "I cani sono liberi di girare liberi",
+ "fr": "Les chiens sont autorisés à se promener librement",
+ "de": "Hunde dürfen frei herumlaufen"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Website",
+ "question": {
+ "en": "On which webpage can one find more information about this nature reserve?",
+ "nl": "Op welke webpagina kan men meer informatie vinden over dit natuurgebied?",
+ "it": "In quale pagina web si possono trovare altre informazioni riguardanti questa riserva naturale?",
+ "fr": "Sur quelle page web peut-on trouver plus d'informations sur cette réserve naturelle ?",
+ "de": "Auf welcher Webseite kann man mehr Informationen über dieses Naturschutzgebiet finden?"
+ },
+ "render": "{website}",
+ "freeform": {
+ "key": "website",
+ "type": "url"
+ }
+ },
+ {
+ "#": "Curator",
+ "question": {
+ "nl": "Wie is de conservator van dit gebied? Respecteer privacy - geef deze naam enkel als die duidelijk is gepubliceerd",
+ "en": "Whom is the curator of this nature reserve? Respect privacy - only fill out a name if this is widely published",
+ "it": "Chi è il curatore di questa riserva naturale? Rispetta la privacy (scrivi il nome solo se questo è noto pubblicamente)",
+ "fr": "Qui est en charge de la conservation de la réserve ? À ne remplir seulement que si le nom est diffusé au public"
+ },
+ "render": {
+ "nl": "{curator} is de beheerder van dit gebied",
+ "en": "{curator} is the curator of this nature reserve",
+ "it": "{curator} è il curatore di questa riserva naturale",
+ "fr": "{curator} est en charge de la conservation de la réserve"
+ },
+ "freeform": {
+ "key": "curator",
+ "type": "string"
+ }
+ },
+ {
+ "#": "Email",
+ "question": {
+ "nl": "Waar kan men naartoe emailen voor vragen en meldingen van dit natuurgebied? Respecteer privacy - geef enkel persoonlijke emailadressen als deze elders zijn gepubliceerd",
+ "en": "What email adress can one send to with questions and problems with this nature reserve? Respect privacy - only fill out a personal email address if this is widely published",
+ "it": "Qual è l’indirizzo email a cui scrivere per fare domande o segnalare problemi su questa riserva naturale? Rispetta la privacy (compila l’indirizzo email personale solo se è stato reso pubblico)",
+ "fr": "À quelle adresse courriel peut-on envoyer des questions et des problèmes concernant cette réserve naturelle ? Respecter la vie privée – renseignez une adresse électronique personnelle seulement si celle-ci est largement publiée"
+ },
+ "render": {
+ "nl": "{email}",
+ "en": "{email}",
+ "ca": "{email}",
+ "de": "{email}",
+ "fr": "{email}",
+ "it": "{email}",
+ "ru": "{email}",
+ "id": "{email}"
+ },
+ "freeform": {
+ "key": "email",
+ "type": "email"
+ }
+ },
+ {
+ "#": "phone",
+ "question": {
+ "nl": "Waar kan men naartoe bellen voor vragen en meldingen van dit natuurgebied? Respecteer privacy - geef enkel persoonlijke telefoonnummers als deze elders zijn gepubliceerd",
+ "en": "What phone number can one call to with questions and problems with this nature reserve? Respect privacy - only fill out a personal phone number address if this is widely published",
+ "it": "Quale numero di telefono comporre per fare domande o segnalare problemi riguardanti questa riserva naturale?br/>Rispetta la privacy (inserisci il numero di telefono privato solo se questo è noto pubblicamente)",
+ "fr": "Quel numéro de téléphone peut-on appeler pour poser des questions et résoudre des problèmes concernant cette réserve naturelle ? Respecter la vie privée – renseignez un numéro de téléphone personnel seulement si celui-ci est largement publié"
+ },
+ "render": {
+ "nl": "{phone}",
+ "en": "{phone}",
+ "ca": "{phone}",
+ "de": "{phone}",
+ "fr": "{phone}",
+ "it": "{phone}",
+ "ru": "{phone}",
+ "id": "{phone}"
+ },
+ "freeform": {
+ "key": "phone",
+ "type": "phone"
+ }
+ },
+ {
+ "#": "Non-editable description {description}",
+ "render": {
+ "nl": "Extra info: {description}"
+ },
+ "freeform": {
+ "key": "description"
+ }
+ },
+ {
+ "#": "Editable description {description:0}",
+ "question": "Is er extra info die je kwijt wil?",
+ "render": {
+ "nl": "Extra info: {description:0}"
+ },
+ "freeform": {
+ "key": "description:0"
+ }
+ },
+ {
+ "#": "Surface area",
+ "render": {
+ "en": "Surface area: {_surface:ha}Ha",
+ "nl": "Totale oppervlakte: {_surface:ha}Ha",
+ "it": "Area: {_surface:ha} ha",
+ "fr": "Superficie : {_surface:ha} ha"
+ },
+ "mappings": [
+ {
+ "if": "_surface:ha=0",
+ "then": {
+ "*": ""
+ }
+ }
+ ]
+ }
+ ],
+ "wayHandling": 2,
+ "icon": {
+ "render": "./assets/themes/buurtnatuur/nature_reserve.svg"
+ },
+ "width": {
+ "render": "1"
+ },
+ "iconSize": {
+ "render": "50,50,center"
+ },
+ "color": {
+ "render": "#3c3"
+ },
+ "presets": [
+ {
+ "tags": [
+ "leisure=nature_reserve",
+ "fixme=Toegevoegd met MapComplete, geometry nog uit te tekenen"
+ ],
+ "title": {
+ "nl": "Natuurreservaat"
+ },
+ "description": {
+ "nl": "Voeg een ontbrekend, erkend natuurreservaat toe, bv. een gebied dat beheerd wordt door het ANB of natuurpunt"
+ }
+ }
+ ],
+ "filter": [
+ {
+ "options": [
+ {
+ "question": {
+ "nl": "Vrij te bezoeken"
+ },
+ "osmTags": "access=yes"
+ }
+ ]
+ },
+ {
+ "options": [
+ {
+ "question": {
+ "nl": "Alle natuurgebieden"
+ }
+ },
+ {
+ "question": {
+ "nl": "Honden mogen vrij rondlopen"
+ },
+ "osmTags": "dog=yes"
+ },
+ {
+ "question": {
+ "nl": "Honden welkom aan de leiband"
+ },
+ "osmTags": {
+ "or": [
+ "dog=yes",
+ "dog=leashed"
+ ]
+ }
+ }
+ ]
}
- }
]
- },
- "description": {
- "nl": "Een natuurgebied is een gebied waar actief ruimte gemaakt word voor de natuur. Typisch zijn deze in beheer van Natuurpunt of het Agentschap Natuur en Bos of zijn deze erkend door de overheid."
- },
- "tagRenderings": [
- "images",
- {
- "#": "Access tag",
- "render": {
- "nl": "De toegankelijkheid van dit gebied is: {access:description}"
- },
- "question": {
- "nl": "Is dit gebied toegankelijk?"
- },
- "freeform": {
- "key": "access:description"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "access=yes",
- "fee="
- ]
- },
- "then": {
- "nl": "Vrij toegankelijk"
- }
- },
- {
- "if": {
- "and": [
- "access=no",
- "fee="
- ]
- },
- "then": {
- "nl": "Niet toegankelijk"
- }
- },
- {
- "if": {
- "and": [
- "access=private",
- "fee="
- ]
- },
- "then": {
- "nl": "Niet toegankelijk, want privégebied"
- }
- },
- {
- "if": {
- "and": [
- "access=permissive",
- "fee="
- ]
- },
- "then": {
- "nl": "Toegankelijk, ondanks dat het privegebied is"
- }
- },
- {
- "if": {
- "and": [
- "access=guided",
- "fee="
- ]
- },
- "then": {
- "nl": "Enkel toegankelijk met een gids of tijdens een activiteit"
- }
- },
- {
- "if": {
- "and": [
- "access=yes",
- "fee=yes"
- ]
- },
- "then": {
- "nl": "Toegankelijk mits betaling"
- }
- }
- ]
- },
- {
- "#": "Operator tag",
- "render": {
- "nl": "Beheer door {operator}"
- },
- "question": {
- "nl": "Wie beheert dit gebied?"
- },
- "freeform": {
- "key": "operator"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "operator=Natuurpunt"
- ]
- },
- "then": {
- "nl": "Dit gebied wordt beheerd door Natuurpunt"
- }
- },
- {
- "if": {
- "and": [
- "operator~(n|N)atuurpunt.*"
- ]
- },
- "then": {
- "nl": "Dit gebied wordt beheerd door {operator}"
- },
- "hideInAnswer": true
- },
- {
- "if": {
- "and": [
- "operator=Agentschap Natuur en Bos"
- ]
- },
- "then": {
- "nl": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos"
- }
- }
- ]
- },
- {
- "#": "Name:nl-tag",
- "render": {
- "nl": "Dit gebied heet {name:nl}"
- },
- "question": {
- "nl": "Wat is de Nederlandstalige naam van dit gebied?"
- },
- "freeform": {
- "key": "name:nl"
- },
- "condition": {
- "and": [
- "name:nl~*"
- ]
- }
- },
- {
- "#": "Name tag",
- "render": {
- "nl": "Dit gebied heet {name}"
- },
- "question": {
- "nl": "Wat is de naam van dit gebied?"
- },
- "freeform": {
- "key": "name",
- "addExtraTags": [
- "noname="
- ]
- },
- "condition": {
- "and": [
- "name:nl="
- ]
- },
- "mappings": [
- {
- "if": {
- "and": [
- "noname=yes",
- "name="
- ]
- },
- "then": {
- "nl": "Dit gebied heeft geen naam"
- }
- }
- ]
- },
- {
- "#": "Dogs?",
- "question": {
- "nl": "Zijn honden toegelaten in dit gebied?",
- "en": "Are dogs allowed in this nature reserve?",
- "it": "I cani sono ammessi in questa riserva naturale?",
- "fr": "Les chiens sont-ils autorisés dans cette réserve naturelle ?",
- "de": "Sind Hunde in diesem Naturschutzgebiet erlaubt?"
- },
- "condition": {
- "or": [
- "access=yes",
- "access=permissive",
- "access=guided"
- ]
- },
- "mappings": [
- {
- "if": "dog=leashed",
- "then": {
- "nl": "Honden moeten aan de leiband",
- "en": "Dogs have to be leashed",
- "it": "I cani devono essere tenuti al guinzaglio",
- "fr": "Les chiens doivent être tenus en laisse",
- "de": "Hunde müssen angeleint sein"
- }
- },
- {
- "if": "dog=no",
- "then": {
- "nl": "Honden zijn niet toegestaan",
- "en": "No dogs allowed",
- "it": "I cani non sono ammessi",
- "fr": "Chiens interdits",
- "de": "Hunde sind nicht erlaubt"
- }
- },
- {
- "if": "dog=yes",
- "then": {
- "nl": "Honden zijn welkom en mogen vrij rondlopen",
- "en": "Dogs are allowed to roam freely",
- "it": "I cani sono liberi di girare liberi",
- "fr": "Les chiens sont autorisés à se promener librement",
- "de": "Hunde dürfen frei herumlaufen"
- }
- }
- ]
- },
- {
- "#": "Website",
- "question": {
- "en": "On which webpage can one find more information about this nature reserve?",
- "nl": "Op welke webpagina kan men meer informatie vinden over dit natuurgebied?",
- "it": "In quale pagina web si possono trovare altre informazioni riguardanti questa riserva naturale?",
- "fr": "Sur quelle page web peut-on trouver plus d'informations sur cette réserve naturelle ?",
- "de": "Auf welcher Webseite kann man mehr Informationen über dieses Naturschutzgebiet finden?"
- },
- "render": "{website}",
- "freeform": {
- "key": "website",
- "type": "url"
- }
- },
- {
- "#": "Curator",
- "question": {
- "nl": "Wie is de conservator van dit gebied? Respecteer privacy - geef deze naam enkel als die duidelijk is gepubliceerd",
- "en": "Whom is the curator of this nature reserve? Respect privacy - only fill out a name if this is widely published",
- "it": "Chi è il curatore di questa riserva naturale? Rispetta la privacy (scrivi il nome solo se questo è noto pubblicamente)",
- "fr": "Qui est en charge de la conservation de la réserve ? À ne remplir seulement que si le nom est diffusé au public"
- },
- "render": {
- "nl": "{curator} is de beheerder van dit gebied",
- "en": "{curator} is the curator of this nature reserve",
- "it": "{curator} è il curatore di questa riserva naturale",
- "fr": "{curator} est en charge de la conservation de la réserve"
- },
- "freeform": {
- "key": "curator",
- "type": "string"
- }
- },
- {
- "#": "Email",
- "question": {
- "nl": "Waar kan men naartoe emailen voor vragen en meldingen van dit natuurgebied? Respecteer privacy - geef enkel persoonlijke emailadressen als deze elders zijn gepubliceerd",
- "en": "What email adress can one send to with questions and problems with this nature reserve? Respect privacy - only fill out a personal email address if this is widely published",
- "it": "Qual è l’indirizzo email a cui scrivere per fare domande o segnalare problemi su questa riserva naturale? Rispetta la privacy (compila l’indirizzo email personale solo se è stato reso pubblico)",
- "fr": "À quelle adresse courriel peut-on envoyer des questions et des problèmes concernant cette réserve naturelle ? Respecter la vie privée – renseignez une adresse électronique personnelle seulement si celle-ci est largement publiée"
- },
- "render": {
- "nl": "{email}",
- "en": "{email}",
- "ca": "{email}",
- "de": "{email}",
- "fr": "{email}",
- "it": "{email}",
- "ru": "{email}",
- "id": "{email}"
- },
- "freeform": {
- "key": "email",
- "type": "email"
- }
- },
- {
- "#": "phone",
- "question": {
- "nl": "Waar kan men naartoe bellen voor vragen en meldingen van dit natuurgebied? Respecteer privacy - geef enkel persoonlijke telefoonnummers als deze elders zijn gepubliceerd",
- "en": "What phone number can one call to with questions and problems with this nature reserve? Respect privacy - only fill out a personal phone number address if this is widely published",
- "it": "Quale numero di telefono comporre per fare domande o segnalare problemi riguardanti questa riserva naturale?br/>Rispetta la privacy (inserisci il numero di telefono privato solo se questo è noto pubblicamente)",
- "fr": "Quel numéro de téléphone peut-on appeler pour poser des questions et résoudre des problèmes concernant cette réserve naturelle ? Respecter la vie privée – renseignez un numéro de téléphone personnel seulement si celui-ci est largement publié"
- },
- "render": {
- "nl": "{phone}",
- "en": "{phone}",
- "ca": "{phone}",
- "de": "{phone}",
- "fr": "{phone}",
- "it": "{phone}",
- "ru": "{phone}",
- "id": "{phone}"
- },
- "freeform": {
- "key": "phone",
- "type": "phone"
- }
- },
- {
- "#": "Non-editable description {description}",
- "render": {
- "nl": "Extra info: {description}"
- },
- "freeform": {
- "key": "description"
- }
- },
- {
- "#": "Editable description {description:0}",
- "question": "Is er extra info die je kwijt wil?",
- "render": {
- "nl": "Extra info: {description:0}"
- },
- "freeform": {
- "key": "description:0"
- }
- },
- {
- "#": "Surface area",
- "render": {
- "en": "Surface area: {_surface:ha}Ha",
- "nl": "Totale oppervlakte: {_surface:ha}Ha",
- "it": "Area: {_surface:ha} ha",
- "fr": "Superficie : {_surface:ha} ha"
- },
- "mappings": [
- {
- "if": "_surface:ha=0",
- "then": {
- "*": ""
- }
- }
- ]
- }
- ],
- "wayHandling": 2,
- "icon": {
- "render": "./assets/themes/buurtnatuur/nature_reserve.svg"
- },
- "width": {
- "render": "1"
- },
- "iconSize": {
- "render": "50,50,center"
- },
- "color": {
- "render": "#3c3"
- },
- "presets": [
- {
- "tags": [
- "leisure=nature_reserve",
- "fixme=Toegevoegd met MapComplete, geometry nog uit te tekenen"
- ],
- "title": {
- "nl": "Natuurreservaat"
- },
- "description": {
- "nl": "Voeg een ontbrekend, erkend natuurreservaat toe, bv. een gebied dat beheerd wordt door het ANB of natuurpunt"
- }
- }
- ],
- "filter": [
- {
- "options": [
- {
- "question": {
- "nl": "Vrij te bezoeken"
- },
- "osmTags": "access=yes"
- }
- ]
- },
- {
- "options": [
- {
- "question": {
- "nl": "Alle natuurgebieden"
- }
- },
- {
- "question": {
- "nl": "Honden mogen vrij rondlopen"
- },
- "osmTags": "dog=yes"
- },
- {
- "question": {
- "nl": "Honden welkom aan de leiband"
- },
- "osmTags": {
- "or": [
- "dog=yes",
- "dog=leashed"
- ]
- }
- }
- ]
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/observation_tower/observation_tower.json b/assets/layers/observation_tower/observation_tower.json
index 373621fe4..3a13b9776 100644
--- a/assets/layers/observation_tower/observation_tower.json
+++ b/assets/layers/observation_tower/observation_tower.json
@@ -1,183 +1,183 @@
{
- "id": "observation_tower",
- "name": {
- "en": "Observation towers",
- "nl": "Uitkijktorens"
- },
- "minzoom": 8,
- "title": {
- "render": {
- "en": "Observation tower",
- "nl": "Uitkijktoren"
+ "id": "observation_tower",
+ "name": {
+ "en": "Observation towers",
+ "nl": "Uitkijktorens"
},
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "en": "{name}",
- "nl": "{name}"
- }
- }
- ]
- },
- "description": {
- "en": "Towers with a panoramic view",
- "nl": "Torens om van het uitzicht te genieten"
- },
- "tagRenderings": [
- "images",
- {
- "#": "name",
- "question": {
- "en": "What is the name of this tower?",
- "nl": "Heeft deze toren een naam?"
- },
- "render": {
- "en": "This tower is called {name}",
- "nl": "Deze toren heet {name}"
- },
- "freeform": {
- "key": "name"
- },
- "mappings": [
- {
- "if": "noname=yes",
- "then": {
- "en": "This tower doesn't have a specific name",
- "nl": "Deze toren heeft geen specifieke naam"
- }
- }
- ]
- },
- {
- "#": "Height",
- "question": {
- "en": "What is the height of this tower?",
- "nl": "Hoe hoog is deze toren?"
- },
- "render": {
- "en": "This tower is {height} high",
- "nl": "Deze toren is {height} hoog"
- },
- "freeform": {
- "key": "height",
- "type": "pfloat"
- }
- },
- {
- "#": "Operator",
- "question": {
- "en": "Who maintains this tower?",
- "nl": "Wie onderhoudt deze toren?"
- },
- "render": {
- "nl": "Wordt onderhouden door {operator}",
- "en": "Maintained by {operator}"
- },
- "freeform": {
- "key": "operator"
- }
- },
- "website",
- {
- "#": "Fee",
- "question": {
- "en": "How much does one have to pay to enter this tower?",
- "nl": "Hoeveel moet men betalen om deze toren te bezoeken?"
- },
- "render": {
- "en": "Visiting this tower costs {charge}",
- "nl": "Deze toren bezoeken kost {charge}"
- },
- "freeform": {
- "key": "charge",
- "addExtraTags": [
- "fee=yes"
+ "minzoom": 8,
+ "title": {
+ "render": {
+ "en": "Observation tower",
+ "nl": "Uitkijktoren"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "en": "{name}",
+ "nl": "{name}"
+ }
+ }
]
- },
- "mappings": [
+ },
+ "description": {
+ "en": "Towers with a panoramic view",
+ "nl": "Torens om van het uitzicht te genieten"
+ },
+ "tagRenderings": [
+ "images",
{
- "if": {
- "and": [
- "fee=no",
- "charge="
+ "#": "name",
+ "question": {
+ "en": "What is the name of this tower?",
+ "nl": "Heeft deze toren een naam?"
+ },
+ "render": {
+ "en": "This tower is called {name}",
+ "nl": "Deze toren heet {name}"
+ },
+ "freeform": {
+ "key": "name"
+ },
+ "mappings": [
+ {
+ "if": "noname=yes",
+ "then": {
+ "en": "This tower doesn't have a specific name",
+ "nl": "Deze toren heeft geen specifieke naam"
+ }
+ }
]
- },
- "then": {
- "en": "Free to visit",
- "nl": "Gratis te bezoeken"
- }
- }
- ]
- },
- {
- "#": "Payment methods",
- "builtin": "payment-options",
- "override": {
- "condition": {
- "or": [
- "fee=yes",
- "charge~*"
- ]
- }
- }
- },
- "wheelchair-access"
- ],
- "wayHandling": 1,
- "icon": {
- "render": "circle:white;./assets/layers/observation_tower/Tower_observation.svg"
- },
- "width": {
- "render": "2"
- },
- "iconSize": {
- "render": "40,40,center"
- },
- "color": {
- "render": "#00f"
- },
- "presets": [
- {
- "tags": [
- "man_made=tower",
- "tower:type=observation"
- ],
- "title": {
- "en": "observation tower",
- "nl": "Uitkijktoren"
- },
- "description": {
- "nl": "Een publiek toegankelijke uitkijktoren"
- }
- }
- ],
- "source": {
- "osmTags": {
- "and": [
- "tower:type=observation"
- ]
- }
- },
- "units": [
- {
- "appliesToKey": [
- "height"
- ],
- "applicableUnits": [
+ },
{
- "canonicalDenomination": "m",
- "alternativeDenomination": [
- "meter",
- "mtr"
- ],
- "human": {
- "nl": " meter",
- "en": " meter"
- }
+ "#": "Height",
+ "question": {
+ "en": "What is the height of this tower?",
+ "nl": "Hoe hoog is deze toren?"
+ },
+ "render": {
+ "en": "This tower is {height} high",
+ "nl": "Deze toren is {height} hoog"
+ },
+ "freeform": {
+ "key": "height",
+ "type": "pfloat"
+ }
+ },
+ {
+ "#": "Operator",
+ "question": {
+ "en": "Who maintains this tower?",
+ "nl": "Wie onderhoudt deze toren?"
+ },
+ "render": {
+ "nl": "Wordt onderhouden door {operator}",
+ "en": "Maintained by {operator}"
+ },
+ "freeform": {
+ "key": "operator"
+ }
+ },
+ "website",
+ {
+ "#": "Fee",
+ "question": {
+ "en": "How much does one have to pay to enter this tower?",
+ "nl": "Hoeveel moet men betalen om deze toren te bezoeken?"
+ },
+ "render": {
+ "en": "Visiting this tower costs {charge}",
+ "nl": "Deze toren bezoeken kost {charge}"
+ },
+ "freeform": {
+ "key": "charge",
+ "addExtraTags": [
+ "fee=yes"
+ ]
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "fee=no",
+ "charge="
+ ]
+ },
+ "then": {
+ "en": "Free to visit",
+ "nl": "Gratis te bezoeken"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Payment methods",
+ "builtin": "payment-options",
+ "override": {
+ "condition": {
+ "or": [
+ "fee=yes",
+ "charge~*"
+ ]
+ }
+ }
+ },
+ "wheelchair-access"
+ ],
+ "wayHandling": 1,
+ "icon": {
+ "render": "circle:white;./assets/layers/observation_tower/Tower_observation.svg"
+ },
+ "width": {
+ "render": "2"
+ },
+ "iconSize": {
+ "render": "40,40,center"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": [
+ {
+ "tags": [
+ "man_made=tower",
+ "tower:type=observation"
+ ],
+ "title": {
+ "en": "observation tower",
+ "nl": "Uitkijktoren"
+ },
+ "description": {
+ "nl": "Een publiek toegankelijke uitkijktoren"
+ }
}
- ],
- "eraseInvalidValues": true
- }
- ]
+ ],
+ "source": {
+ "osmTags": {
+ "and": [
+ "tower:type=observation"
+ ]
+ }
+ },
+ "units": [
+ {
+ "appliesToKey": [
+ "height"
+ ],
+ "applicableUnits": [
+ {
+ "canonicalDenomination": "m",
+ "alternativeDenomination": [
+ "meter",
+ "mtr"
+ ],
+ "human": {
+ "nl": " meter",
+ "en": " meter"
+ }
+ }
+ ],
+ "eraseInvalidValues": true
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/parking/parking.json b/assets/layers/parking/parking.json
index d4d1cab73..a17bd5987 100644
--- a/assets/layers/parking/parking.json
+++ b/assets/layers/parking/parking.json
@@ -1,192 +1,192 @@
{
- "id": "parking",
- "name": {
- "nl": "parking"
- },
- "minzoom": 12,
- "source": {
- "osmTags": {
- "and": [
- {
- "or": [
- "amenity=parking",
- "amenity=motorcycle_parking",
- "amenity=bicycle_parking"
- ]
- }
- ]
- }
- },
- "title": {
- "render": {
- "nl": "Parking"
+ "id": "parking",
+ "name": {
+ "nl": "parking"
},
- "mappings": [
- {
- "if": "amenity=parking",
- "then": {
- "nl": "{name:nl}"
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
+ "and": [
+ {
+ "or": [
+ "amenity=parking",
+ "amenity=motorcycle_parking",
+ "amenity=bicycle_parking"
+ ]
+ }
+ ]
}
- },
- {
- "if": "amenity=motorcycle_parking",
- "then": {
- "nl": "{name}"
+ },
+ "title": {
+ "render": {
+ "nl": "Parking"
+ },
+ "mappings": [
+ {
+ "if": "amenity=parking",
+ "then": {
+ "nl": "{name:nl}"
+ }
+ },
+ {
+ "if": "amenity=motorcycle_parking",
+ "then": {
+ "nl": "{name}"
+ }
+ },
+ {
+ "if": "amenity=bicycle_parking",
+ "then": {
+ "nl": "Fietsenstalling"
+ }
+ }
+ ]
+ },
+ "icon": {
+ "render": "./assets/layers/parking/parking.svg"
+ },
+ "description": {
+ "nl": "Parking"
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "#": "Access tag",
+ "render": {
+ "nl": "De toegankelijkheid van dit gebied is: {access:description}"
+ },
+ "question": {
+ "nl": "Is dit gebied toegankelijk?"
+ },
+ "freeform": {
+ "key": "access:description"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "access=yes",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Vrij toegankelijk"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=no",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Niet toegankelijk"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=private",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Niet toegankelijk, want privégebied"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=permissive",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Toegankelijk, ondanks dat het privegebied is"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=guided",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Enkel toegankelijk met een gids of tijdens een activiteit"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=yes",
+ "fee=yes"
+ ]
+ },
+ "then": {
+ "nl": "Toegankelijk mits betaling"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Operator tag",
+ "render": {
+ "nl": "Beheer door {operator}"
+ },
+ "question": {
+ "nl": "Wie beheert dit pad?"
+ },
+ "freeform": {
+ "key": "operator"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "operator=Natuurpunt"
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied wordt beheerd door Natuurpunt"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "operator~(n|N)atuurpunt.*"
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied wordt beheerd door {operator}"
+ },
+ "hideInAnswer": true
+ }
+ ]
}
- },
- {
- "if": "amenity=bicycle_parking",
- "then": {
- "nl": "Fietsenstalling"
+ ],
+ "wayHandling": 1,
+ "iconSize": {
+ "render": "36,36,center"
+ },
+ "color": {
+ "render": "#E1AD01"
+ },
+ "presets": [
+ {
+ "tags": [
+ "amenity=parking",
+ "amenity=motorcycle_parking",
+ "amenity=bicycle_parking",
+ "fixme=Toegevoegd met MapComplete, geometry nog uit te tekenen"
+ ],
+ "title": {
+ "nl": "Paden"
+ },
+ "description": {
+ "nl": "Voeg een ontbrekend, erkend pad toe."
+ }
}
- }
]
- },
- "icon": {
- "render": "./assets/layers/parking/parking.svg"
- },
- "description": {
- "nl": "Parking"
- },
- "tagRenderings": [
- "images",
- {
- "#": "Access tag",
- "render": {
- "nl": "De toegankelijkheid van dit gebied is: {access:description}"
- },
- "question": {
- "nl": "Is dit gebied toegankelijk?"
- },
- "freeform": {
- "key": "access:description"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "access=yes",
- "fee="
- ]
- },
- "then": {
- "nl": "Vrij toegankelijk"
- }
- },
- {
- "if": {
- "and": [
- "access=no",
- "fee="
- ]
- },
- "then": {
- "nl": "Niet toegankelijk"
- }
- },
- {
- "if": {
- "and": [
- "access=private",
- "fee="
- ]
- },
- "then": {
- "nl": "Niet toegankelijk, want privégebied"
- }
- },
- {
- "if": {
- "and": [
- "access=permissive",
- "fee="
- ]
- },
- "then": {
- "nl": "Toegankelijk, ondanks dat het privegebied is"
- }
- },
- {
- "if": {
- "and": [
- "access=guided",
- "fee="
- ]
- },
- "then": {
- "nl": "Enkel toegankelijk met een gids of tijdens een activiteit"
- }
- },
- {
- "if": {
- "and": [
- "access=yes",
- "fee=yes"
- ]
- },
- "then": {
- "nl": "Toegankelijk mits betaling"
- }
- }
- ]
- },
- {
- "#": "Operator tag",
- "render": {
- "nl": "Beheer door {operator}"
- },
- "question": {
- "nl": "Wie beheert dit pad?"
- },
- "freeform": {
- "key": "operator"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "operator=Natuurpunt"
- ]
- },
- "then": {
- "nl": "Dit gebied wordt beheerd door Natuurpunt"
- }
- },
- {
- "if": {
- "and": [
- "operator~(n|N)atuurpunt.*"
- ]
- },
- "then": {
- "nl": "Dit gebied wordt beheerd door {operator}"
- },
- "hideInAnswer": true
- }
- ]
- }
- ],
- "wayHandling": 1,
- "iconSize": {
- "render": "36,36,center"
- },
- "color": {
- "render": "#E1AD01"
- },
- "presets": [
- {
- "tags": [
- "amenity=parking",
- "amenity=motorcycle_parking",
- "amenity=bicycle_parking",
- "fixme=Toegevoegd met MapComplete, geometry nog uit te tekenen"
- ],
- "title": {
- "nl": "Paden"
- },
- "description": {
- "nl": "Voeg een ontbrekend, erkend pad toe."
- }
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/picnic_table/picnic_table.json b/assets/layers/picnic_table/picnic_table.json
index e35c08ca0..9bea66671 100644
--- a/assets/layers/picnic_table/picnic_table.json
+++ b/assets/layers/picnic_table/picnic_table.json
@@ -1,104 +1,104 @@
{
- "id": "picnic_table",
- "name": {
- "en": "Picnic tables",
- "nl": "Picnictafels",
- "it": "Tavoli da picnic",
- "ru": "Столы для пикника",
- "fr": "Tables de pique-nique",
- "de": "Picknick-Tische"
- },
- "minzoom": 12,
- "source": {
- "osmTags": "leisure=picnic_table"
- },
- "title": {
- "render": {
- "en": "Picnic table",
- "nl": "Picnictafel",
- "it": "Tavolo da picnic",
- "ru": "Стол для пикника",
- "fr": "Table de pique-nique",
- "de": "Picknick-Tisch"
- }
- },
- "description": {
- "en": "The layer showing picnic tables",
- "nl": "Deze laag toont picnictafels",
- "it": "Il livello che mostra i tavoli da picnic",
- "fr": "La couche montrant les tables de pique-nique",
- "ru": "Слой, отображающий столы для пикника"
- },
- "tagRenderings": [
- {
- "question": {
- "en": "What material is this picnic table made of?",
- "nl": "Van welk materiaal is deze picnictafel gemaakt?",
- "it": "Di che materiale è fatto questo tavolo da picnic?",
- "de": "Aus welchem Material besteht dieser Picknicktisch?",
- "ru": "Из чего изготовлен этот стол для пикника?",
- "fr": "En quel matériau est faite la table de pique-nique ?"
- },
- "render": {
- "en": "This picnic table is made of {material}",
- "nl": "Deze picnictafel is gemaakt van {material}",
- "it": "Questo tavolo da picnic è fatto di {material}",
- "de": "Dieser Picknicktisch besteht aus {material}",
- "ru": "Этот стол для пикника сделан из {material}",
- "fr": "La table est faite en {material}"
- },
- "freeform": {
- "key": "material"
- },
- "mappings": [
- {
- "if": "material=wood",
- "then": {
- "en": "This is a wooden picnic table",
- "nl": "Deze picnictafel is gemaakt uit hout",
- "it": "È un tavolo da picnic in legno",
- "ru": "Это деревянный стол для пикника",
- "de": "Dies ist ein Picknicktisch aus Holz",
- "fr": "C’est une table en bois"
- }
- },
- {
- "if": "material=concrete",
- "then": {
- "en": "This is a concrete picnic table",
- "nl": "Deze picnictafel is gemaakt uit beton",
- "it": "È un tavolo da picnic in cemento",
- "ru": "Это бетонный стол для пикника",
- "de": "Dies ist ein Picknicktisch aus Beton",
- "fr": "C’est une table en béton"
- }
+ "id": "picnic_table",
+ "name": {
+ "en": "Picnic tables",
+ "nl": "Picnictafels",
+ "it": "Tavoli da picnic",
+ "ru": "Столы для пикника",
+ "fr": "Tables de pique-nique",
+ "de": "Picknick-Tische"
+ },
+ "minzoom": 12,
+ "source": {
+ "osmTags": "leisure=picnic_table"
+ },
+ "title": {
+ "render": {
+ "en": "Picnic table",
+ "nl": "Picnictafel",
+ "it": "Tavolo da picnic",
+ "ru": "Стол для пикника",
+ "fr": "Table de pique-nique",
+ "de": "Picknick-Tisch"
}
- ]
- }
- ],
- "icon": {
- "render": "circle:#e6cf39;./assets/layers/picnic_table/picnic_table.svg"
- },
- "iconSize": {
- "render": "35,35,center"
- },
- "color": {
- "render": "#00f"
- },
- "presets": [
- {
- "tags": [
- "leisure=picnic_table"
- ],
- "title": {
- "en": "Picnic table",
- "nl": "Picnic-tafel",
- "it": "Tavolo da picnic",
- "ru": "Стол для пикника",
- "de": "Picknicktisch",
- "fr": "Table de pique-nique"
- }
- }
- ],
- "wayHandling": 1
+ },
+ "description": {
+ "en": "The layer showing picnic tables",
+ "nl": "Deze laag toont picnictafels",
+ "it": "Il livello che mostra i tavoli da picnic",
+ "fr": "La couche montrant les tables de pique-nique",
+ "ru": "Слой, отображающий столы для пикника"
+ },
+ "tagRenderings": [
+ {
+ "question": {
+ "en": "What material is this picnic table made of?",
+ "nl": "Van welk materiaal is deze picnictafel gemaakt?",
+ "it": "Di che materiale è fatto questo tavolo da picnic?",
+ "de": "Aus welchem Material besteht dieser Picknicktisch?",
+ "ru": "Из чего изготовлен этот стол для пикника?",
+ "fr": "En quel matériau est faite la table de pique-nique ?"
+ },
+ "render": {
+ "en": "This picnic table is made of {material}",
+ "nl": "Deze picnictafel is gemaakt van {material}",
+ "it": "Questo tavolo da picnic è fatto di {material}",
+ "de": "Dieser Picknicktisch besteht aus {material}",
+ "ru": "Этот стол для пикника сделан из {material}",
+ "fr": "La table est faite en {material}"
+ },
+ "freeform": {
+ "key": "material"
+ },
+ "mappings": [
+ {
+ "if": "material=wood",
+ "then": {
+ "en": "This is a wooden picnic table",
+ "nl": "Deze picnictafel is gemaakt uit hout",
+ "it": "È un tavolo da picnic in legno",
+ "ru": "Это деревянный стол для пикника",
+ "de": "Dies ist ein Picknicktisch aus Holz",
+ "fr": "C’est une table en bois"
+ }
+ },
+ {
+ "if": "material=concrete",
+ "then": {
+ "en": "This is a concrete picnic table",
+ "nl": "Deze picnictafel is gemaakt uit beton",
+ "it": "È un tavolo da picnic in cemento",
+ "ru": "Это бетонный стол для пикника",
+ "de": "Dies ist ein Picknicktisch aus Beton",
+ "fr": "C’est une table en béton"
+ }
+ }
+ ]
+ }
+ ],
+ "icon": {
+ "render": "circle:#e6cf39;./assets/layers/picnic_table/picnic_table.svg"
+ },
+ "iconSize": {
+ "render": "35,35,center"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": [
+ {
+ "tags": [
+ "leisure=picnic_table"
+ ],
+ "title": {
+ "en": "Picnic table",
+ "nl": "Picnic-tafel",
+ "it": "Tavolo da picnic",
+ "ru": "Стол для пикника",
+ "de": "Picknicktisch",
+ "fr": "Table de pique-nique"
+ }
+ }
+ ],
+ "wayHandling": 1
}
\ No newline at end of file
diff --git a/assets/layers/play_forest/play_forest.json b/assets/layers/play_forest/play_forest.json
index 5bbc4b512..cc6edbb31 100644
--- a/assets/layers/play_forest/play_forest.json
+++ b/assets/layers/play_forest/play_forest.json
@@ -1,115 +1,115 @@
{
- "id": "play_forest",
- "name": {
- "nl": "Speelbossen"
- },
- "minzoom": 13,
- "source": {
- "osmTags": {
- "and": [
- "playground=forest"
- ]
- }
- },
- "title": {
- "render": {
- "nl": "Speelbos"
+ "id": "play_forest",
+ "name": {
+ "nl": "Speelbossen"
},
- "mappings": [
- {
- "if": "name~Speelbos.*",
- "then": {
- "nl": "{name}"
+ "minzoom": 13,
+ "source": {
+ "osmTags": {
+ "and": [
+ "playground=forest"
+ ]
}
- },
- {
- "if": "name~*",
- "then": {
- "nl": "Speelbos {name}"
- }
- }
- ]
- },
- "description": {
- "nl": "Een speelbos is een vrij toegankelijke zone in een bos"
- },
- "tagRenderings": [
- "images",
- {
- "question": "Wie beheert dit gebied?",
- "render": "Dit gebied wordt beheerd door {operator}",
- "freeform": {
- "key": "operator"
- },
- "mappings": [
+ },
+ "title": {
+ "render": {
+ "nl": "Speelbos"
+ },
+ "mappings": [
+ {
+ "if": "name~Speelbos.*",
+ "then": {
+ "nl": "{name}"
+ }
+ },
+ {
+ "if": "name~*",
+ "then": {
+ "nl": "Speelbos {name}"
+ }
+ }
+ ]
+ },
+ "description": {
+ "nl": "Een speelbos is een vrij toegankelijke zone in een bos"
+ },
+ "tagRenderings": [
+ "images",
{
- "if": "operator~[aA][nN][bB]",
- "then": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos",
- "hideInAnswer": true
+ "question": "Wie beheert dit gebied?",
+ "render": "Dit gebied wordt beheerd door {operator}",
+ "freeform": {
+ "key": "operator"
+ },
+ "mappings": [
+ {
+ "if": "operator~[aA][nN][bB]",
+ "then": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos",
+ "hideInAnswer": true
+ },
+ {
+ "if": "operator=Agenstchap Natuur en Bos",
+ "then": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos"
+ }
+ ]
},
{
- "if": "operator=Agenstchap Natuur en Bos",
- "then": "Dit gebied wordt beheerd door het Agentschap Natuur en Bos"
- }
- ]
- },
- {
- "question": "Wanneer is deze speelzone toegankelijk?",
- "mappings": [
- {
- "if": "opening_hours=08:00-22:00",
- "then": "Het hele jaar door overdag toegankelijk (van 08:00 tot 22:00)"
+ "question": "Wanneer is deze speelzone toegankelijk?",
+ "mappings": [
+ {
+ "if": "opening_hours=08:00-22:00",
+ "then": "Het hele jaar door overdag toegankelijk (van 08:00 tot 22:00)"
+ },
+ {
+ "if": "opening_hours=Jul-Aug 08:00-22:00",
+ "then": "Enkel in de zomervakantie en overdag toegankelijk (van 1 juli tot 31 augustus, van 08:00 tot 22:00"
+ }
+ ]
},
{
- "if": "opening_hours=Jul-Aug 08:00-22:00",
- "then": "Enkel in de zomervakantie en overdag toegankelijk (van 1 juli tot 31 augustus, van 08:00 tot 22:00"
+ "question": "Wie kan men emailen indien er problemen zijn met de speelzone?",
+ "render": "De bevoegde dienst kan bereikt worden via {email}",
+ "freeform": {
+ "key": "email",
+ "type": "email"
+ }
+ },
+ {
+ "question": "Wie kan men bellen indien er problemen zijn met de speelzone?",
+ "render": "De bevoegde dienst kan getelefoneerd worden via {phone}",
+ "freeform": {
+ "key": "phone",
+ "type": "phone"
+ }
+ },
+ "questions",
+ {
+ "render": "{reviews(name, play_forest)}"
}
- ]
+ ],
+ "hideFromOverview": false,
+ "icon": {
+ "render": "./assets/layers/play_forest/icon.svg"
},
- {
- "question": "Wie kan men emailen indien er problemen zijn met de speelzone?",
- "render": "De bevoegde dienst kan bereikt worden via {email}",
- "freeform": {
- "key": "email",
- "type": "email"
- }
+ "width": {
+ "render": "2"
},
- {
- "question": "Wie kan men bellen indien er problemen zijn met de speelzone?",
- "render": "De bevoegde dienst kan getelefoneerd worden via {phone}",
- "freeform": {
- "key": "phone",
- "type": "phone"
- }
+ "iconSize": {
+ "render": "40,40,center"
},
- "questions",
- {
- "render": "{reviews(name, play_forest)}"
- }
- ],
- "hideFromOverview": false,
- "icon": {
- "render": "./assets/layers/play_forest/icon.svg"
- },
- "width": {
- "render": "2"
- },
- "iconSize": {
- "render": "40,40,center"
- },
- "color": {
- "render": "#007055"
- },
- "presets": [
- {
- "title": "Speelbos",
- "tags": [
- "leisure=playground",
- "playground=forest",
- "fixme=Toegevoegd met MapComplete, geometry nog uit te tekenen"
- ],
- "description": "Een zone in het bos, duidelijk gemarkeerd als speelzone met de overeenkomstige borden. "
- }
- ],
- "wayHandling": 2
+ "color": {
+ "render": "#007055"
+ },
+ "presets": [
+ {
+ "title": "Speelbos",
+ "tags": [
+ "leisure=playground",
+ "playground=forest",
+ "fixme=Toegevoegd met MapComplete, geometry nog uit te tekenen"
+ ],
+ "description": "Een zone in het bos, duidelijk gemarkeerd als speelzone met de overeenkomstige borden. "
+ }
+ ],
+ "wayHandling": 2
}
\ No newline at end of file
diff --git a/assets/layers/playground/playground.json b/assets/layers/playground/playground.json
index 6b6fe357f..e2d3e8a72 100644
--- a/assets/layers/playground/playground.json
+++ b/assets/layers/playground/playground.json
@@ -1,520 +1,520 @@
{
- "id": "playground",
- "name": {
- "nl": "Speeltuinen",
- "en": "Playgrounds",
- "ru": "Детские площадки",
- "de": "Spielplätze",
- "it": "Campi da gioco",
- "fr": "Aire de jeu"
- },
- "minzoom": 13,
- "source": {
- "osmTags": {
- "and": [
- "leisure=playground",
- "playground!=forest"
- ]
- }
- },
- "calculatedTags": [
- "_size_classification=Number(feat.properties._surface) < 10 ? 'small' : (Number(feat.properties._surface) < 100 ? 'medium' : 'large') "
- ],
- "description": {
- "nl": "Speeltuinen",
- "en": "Playgrounds",
- "it": "Parchi giochi",
- "ru": "Детские площадки",
- "de": "Spielplätze",
- "fr": "Aire de jeu"
- },
- "title": {
- "render": {
- "nl": "Speeltuin",
- "en": "Playground",
- "it": "Parco giochi",
- "ru": "Детская площадка",
- "de": "Spielplatz",
- "fr": "Aire de jeu"
+ "id": "playground",
+ "name": {
+ "nl": "Speeltuinen",
+ "en": "Playgrounds",
+ "ru": "Детские площадки",
+ "de": "Spielplätze",
+ "it": "Campi da gioco",
+ "fr": "Aire de jeu"
},
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "nl": "Speeltuin {name}",
- "en": "Playground {name}",
- "it": "Parco giochi {name}",
- "ru": "Детская площадка {name}",
- "de": "Spielplatz {name}",
- "fr": "Aire de jeu {name}"
+ "minzoom": 13,
+ "source": {
+ "osmTags": {
+ "and": [
+ "leisure=playground",
+ "playground!=forest"
+ ]
}
- }
- ]
- },
- "tagRenderings": [
- "images",
- {
- "question": {
- "nl": "Wat is de ondergrond van deze speeltuin? Indien er verschillende ondergronden zijn, neem de meest voorkomende",
- "en": "Which is the surface of this playground? If there are multiple, select the most occuring one",
- "it": "Qual è la superficie di questo parco giochi? Se ve ne è più di una, seleziona quella predominante",
- "de": "Welche Oberfläche hat dieser Spielplatz? Wenn es mehrere gibt, wähle die am häufigsten vorkommende aus",
- "fr": "De quelle matière est la surface de l’aire de jeu ? Pour plusieurs matières, sélectionner la principale"
- },
- "render": {
- "nl": "De ondergrond is {surface}",
- "en": "The surface is {surface}",
- "it": "La superficie è {surface}",
- "ru": "Поверхность - {surface}",
- "de": "Die Oberfläche ist {surface}",
- "fr": "La surface est en {surface}"
- },
- "freeform": {
- "key": "surface"
- },
- "mappings": [
- {
- "if": "surface=grass",
- "then": {
- "nl": "De ondergrond is gras",
- "en": "The surface is grass",
- "it": "La superficie è prato",
- "ru": "Поверхность - трава",
- "de": "Die Oberfläche ist Gras",
- "fr": "La surface est en gazon"
- }
- },
- {
- "if": "surface=sand",
- "then": {
- "nl": "De ondergrond is zand",
- "en": "The surface is sand",
- "it": "La superficie è sabbia",
- "ru": "Поверхность - песок",
- "de": "Die Oberfläche ist Sand",
- "fr": "La surface est en sable"
- }
- },
- {
- "if": "surface=woodchips",
- "then": {
- "nl": "De ondergrond bestaat uit houtsnippers",
- "en": "The surface consist of woodchips",
- "it": "La superficie consiste di trucioli di legno",
- "de": "Die Oberfläche besteht aus Holzschnitzeln",
- "ru": "Покрытие из щепы",
- "fr": "La surface est en copeaux de bois"
- }
- },
- {
- "if": "surface=paving_stones",
- "then": {
- "nl": "De ondergrond bestaat uit stoeptegels",
- "en": "The surface is paving stones",
- "it": "La superficie è mattonelle regolari",
- "ru": "Поверхность - брусчатка",
- "de": "Die Oberfläche ist Pflastersteine",
- "fr": "La surface est en pavés"
- }
- },
- {
- "if": "surface=asphalt",
- "then": {
- "nl": "De ondergrond is asfalt",
- "en": "The surface is asphalt",
- "it": "La superficie è asfalto",
- "ru": "Поверхность - асфальт",
- "de": "Die Oberfläche ist Asphalt",
- "fr": "La surface est en bitume"
- }
- },
- {
- "if": "surface=concrete",
- "then": {
- "nl": "De ondergrond is beton",
- "en": "The surface is concrete",
- "it": "La superficie è cemento",
- "ru": "Поверхность - бетон",
- "de": "Die Oberfläche ist Beton",
- "fr": "La surface est en béton"
- }
- },
- {
- "if": "surface=unpaved",
- "then": {
- "nl": "De ondergrond is onverhard",
- "en": "The surface is unpaved",
- "it": "La superficie è non pavimentato",
- "de": "Die Oberfläche ist unbefestigt",
- "fr": "La surface n’a pas de revêtement"
- },
- "hideInAnswer": true
- },
- {
- "if": "surface=paved",
- "then": {
- "nl": "De ondergrond is verhard",
- "en": "The surface is paved",
- "it": "La superficie è pavimentato",
- "de": "Die Oberfläche ist befestigt",
- "fr": "La surface a un revêtement"
- },
- "hideInAnswer": true
- }
- ]
},
- {
- "question": {
- "nl": "Is deze speeltuin 's nachts verlicht?",
- "en": "Is this playground lit at night?",
- "it": "È illuminato di notte questo parco giochi?",
- "fr": "Ce terrain de jeux est-il éclairé la nuit ?",
- "de": "Ist dieser Spielplatz nachts beleuchtet?",
- "ru": "Эта игровая площадка освещается ночью?"
- },
- "mappings": [
- {
- "if": "lit=yes",
- "then": {
- "nl": "Deze speeltuin is 's nachts verlicht",
- "en": "This playground is lit at night",
- "it": "Questo parco giochi è illuminato di notte",
- "de": "Dieser Spielplatz ist nachts beleuchtet",
- "ru": "Эта детская площадка освещается ночью",
- "fr": "L’aire de jeu est éclairée de nuit"
- }
- },
- {
- "if": "lit=no",
- "then": {
- "nl": "Deze speeltuin is 's nachts niet verlicht",
- "en": "This playground is not lit at night",
- "it": "Questo parco giochi non è illuminato di notte",
- "de": "Dieser Spielplatz ist nachts nicht beleuchtet",
- "ru": "Эта детская площадка не освещается ночью",
- "fr": "L’aire de jeu n’est pas éclairée de nuit"
- }
- }
- ]
+ "calculatedTags": [
+ "_size_classification=Number(feat.properties._surface) < 10 ? 'small' : (Number(feat.properties._surface) < 100 ? 'medium' : 'large') "
+ ],
+ "description": {
+ "nl": "Speeltuinen",
+ "en": "Playgrounds",
+ "it": "Parchi giochi",
+ "ru": "Детские площадки",
+ "de": "Spielplätze",
+ "fr": "Aire de jeu"
},
- {
- "render": {
- "nl": "Toegankelijk vanaf {min_age} jaar oud",
- "en": "Accessible to kids older than {min_age} years",
- "it": "Accessibile ai bambini di almeno {min_age} anni",
- "ru": "Доступно для детей старше {min_age} лет",
- "fr": "Accessible aux enfants de plus de {min_age} ans"
- },
- "question": {
- "nl": "Wat is de minimale leeftijd om op deze speeltuin te mogen?",
- "en": "What is the minimum age required to access this playground?",
- "it": "Qual è l’età minima per accedere a questo parco giochi?",
- "fr": "Quel est l'âge minimal requis pour accéder à ce terrain de jeux ?",
- "ru": "С какого возраста доступна эта детская площадка?"
- },
- "freeform": {
- "key": "min_age",
- "type": "pnat"
- }
- },
- {
- "render": {
- "nl": "Toegankelijk tot {max_age}",
- "en": "Accessible to kids of at most {max_age}",
- "it": "Accessibile ai bambini di età inferiore a {max_age}",
- "fr": "Accessible aux enfants de {max_age} au maximum",
- "ru": "Доступно детям до {max_age}"
- },
- "question": {
- "nl": "Wat is de maximaal toegestane leeftijd voor deze speeltuin?",
- "en": "What is the maximum age allowed to access this playground?",
- "it": "Qual è l’età massima per accedere a questo parco giochi?",
- "fr": "Quel est l’âge maximum autorisé pour utiliser l’aire de jeu ?"
- },
- "freeform": {
- "key": "max_age",
- "type": "pnat"
- }
- },
- {
- "question": {
- "nl": "Wie beheert deze speeltuin?",
- "en": "Who operates this playground?",
- "it": "Chi è il responsabile di questo parco giochi?",
- "de": "Wer betreibt diesen Spielplatz?",
- "fr": "Qui est en charge de l’exploitation de l’aire de jeu ?"
- },
- "render": {
- "nl": "Beheer door {operator}",
- "en": "Operated by {operator}",
- "it": "Gestito da {operator}",
- "fr": "Exploité par {operator}",
- "de": "Betrieben von {operator}"
- },
- "freeform": {
- "key": "operator"
- }
- },
- {
- "question": {
- "nl": "Is deze speeltuin vrij toegankelijk voor het publiek?",
- "en": "Is this playground accessible to the general public?",
- "it": "Questo parco giochi è pubblicamente accessibile?",
- "de": "Ist dieser Spielplatz für die Allgemeinheit zugänglich?",
- "fr": "L’aire de jeu est-elle accessible au public ?"
- },
- "mappings": [
- {
- "if": "access=",
- "then": {
- "en": "Accessible to the general public",
- "nl": "Vrij toegankelijk voor het publiek",
- "it": "Accessibile pubblicamente",
- "de": "Zugänglich für die Allgemeinheit",
- "fr": "Accessible au public"
- },
- "hideInAnswer": true
+ "title": {
+ "render": {
+ "nl": "Speeltuin",
+ "en": "Playground",
+ "it": "Parco giochi",
+ "ru": "Детская площадка",
+ "de": "Spielplatz",
+ "fr": "Aire de jeu"
},
- {
- "if": "access=yes",
- "then": {
- "en": "Accessible to the general public",
- "nl": "Vrij toegankelijk voor het publiek",
- "it": "Accessibile pubblicamente",
- "de": "Zugänglich für die Allgemeinheit",
- "fr": "Accessible au public"
- }
- },
- {
- "if": "access=customers",
- "then": {
- "en": "Only accessible for clients of the operating business",
- "nl": "Enkel toegankelijk voor klanten van de bijhorende zaak",
- "it": "Accessibile solamente ai clienti dell’attività che lo gestisce",
- "de": "Nur für Kunden des Betreibers zugänglich",
- "fr": "Réservée aux clients"
- }
- },
- {
- "if": "access=students",
- "then": {
- "en": "Only accessible to students of the school",
- "nl": "Vrij toegankelijk voor scholieren van de school",
- "it": "Accessibile solamente agli studenti della scuola",
- "de": "Nur für Schüler der Schule zugänglich",
- "fr": "Réservée aux élèves de l’école"
- }
- },
- {
- "if": "access=private",
- "then": {
- "en": "Not accessible",
- "nl": "Niet vrij toegankelijk",
- "it": "Non accessibile",
- "ru": "Недоступно",
- "fr": "Non accessible",
- "de": "Nicht zugänglich"
- }
- }
- ]
- },
- {
- "question": {
- "nl": "Wie kan men emailen indien er problemen zijn met de speeltuin?",
- "en": "What is the email address of the playground maintainer?",
- "it": "Qual è l’indirizzo email del gestore di questo parco giochi?",
- "fr": "Quelle est l'adresse électronique du responsable de l'aire de jeux ?",
- "de": "Wie lautet die E-Mail Adresse des Spielplatzbetreuers?"
- },
- "render": {
- "nl": "De bevoegde dienst kan bereikt worden via {email}",
- "en": "{email}",
- "ca": "{email}",
- "de": "{email}",
- "fr": "{email}",
- "it": "{email}",
- "ru": "{email}",
- "id": "{email}"
- },
- "freeform": {
- "key": "email",
- "type": "email"
- }
- },
- {
- "question": {
- "nl": "Wie kan men bellen indien er problemen zijn met de speeltuin?",
- "en": "What is the phone number of the playground maintainer?",
- "fr": "Quel est le numéro de téléphone du responsable du terrain de jeux ?",
- "it": "Qual è il numero di telefono del gestore del campetto?"
- },
- "render": {
- "nl": "De bevoegde dienst kan getelefoneerd worden via {phone}",
- "en": "{phone}",
- "ca": "{phone}",
- "de": "{phone}",
- "fr": "{phone}",
- "ru": "{phone}",
- "id": "{phone}",
- "it": "{phone}"
- },
- "freeform": {
- "key": "phone",
- "type": "phone"
- }
- },
- {
- "question": {
- "nl": "Is deze speeltuin toegankelijk voor rolstoelgebruikers?",
- "en": "Is this playground accessible to wheelchair users?",
- "fr": "Ce terrain de jeux est-il accessible aux personnes en fauteuil roulant ?",
- "de": "Ist dieser Spielplatz für Rollstuhlfahrer zugänglich?",
- "it": "Il campetto è accessibile a persone in sedia a rotelle?",
- "ru": "Доступна ли детская площадка пользователям кресел-колясок?"
- },
- "mappings": [
- {
- "if": "wheelchair=yes",
- "then": {
- "nl": "Geheel toegankelijk voor rolstoelgebruikers",
- "en": "Completely accessible for wheelchair users",
- "fr": "Entièrement accessible aux personnes en fauteuil roulant",
- "de": "Vollständig zugänglich für Rollstuhlfahrer",
- "it": "Completamente accessibile in sedia a rotelle",
- "ru": "Полностью доступна пользователям кресел-колясок"
- }
- },
- {
- "if": "wheelchair=limited",
- "then": {
- "nl": "Beperkt toegankelijk voor rolstoelgebruikers",
- "en": "Limited accessibility for wheelchair users",
- "fr": "Accessibilité limitée pour les personnes en fauteuil roulant",
- "de": "Eingeschränkte Zugänglichkeit für Rollstuhlfahrer",
- "it": "Accesso limitato in sedia a rotelle",
- "ru": "Частично доступна пользователям кресел-колясок"
- }
- },
- {
- "if": "wheelchair=no",
- "then": {
- "nl": "Niet toegankelijk voor rolstoelgebruikers",
- "en": "Not accessible for wheelchair users",
- "fr": "Non accessible aux personnes en fauteuil roulant",
- "de": "Nicht zugänglich für Rollstuhlfahrer",
- "it": "Non accessibile in sedia a rotelle",
- "ru": "Недоступна пользователям кресел-колясок"
- }
- }
- ]
- },
- {
- "freeform": {
- "key": "opening_hours",
- "type": "opening_hours"
- },
- "render": "{opening_hours_table(opening_hours)}",
- "question": {
- "nl": "Op welke uren is deze speeltuin toegankelijk?",
- "en": "When is this playground accessible?",
- "fr": "Quand ce terrain de jeux est-il accessible ?",
- "it": "Quando si può accedere a questo campetto?",
- "ru": "Когда открыта эта игровая площадка?"
- },
- "mappings": [
- {
- "if": "opening_hours=sunrise-sunset",
- "then": {
- "nl": "Van zonsopgang tot zonsondergang",
- "en": "Accessible from sunrise till sunset",
- "fr": "Accessible du lever au coucher du soleil",
- "it": "Si può accedere dall'alba al tramonto",
- "ru": "Открыто от рассвета до заката"
- }
- },
- {
- "if": "opening_hours=24/7",
- "then": {
- "nl": "Dag en nacht toegankelijk",
- "en": "Always accessible",
- "fr": "Toujours accessible",
- "ru": "Всегда доступен",
- "it": "Si può sempre accedere"
- }
- },
- {
- "if": "opening_hours=",
- "then": {
- "nl": "Dag en nacht toegankelijk",
- "en": "Always accessible",
- "ru": "Всегда доступен",
- "fr": "Toujours accessible",
- "it": "Si può sempre accedere"
- },
- "hideInAnswer": true
- }
- ]
- },
- "questions",
- {
- "render": "{reviews(name, playground)}"
- }
- ],
- "icon": {
- "render": "./assets/themes/playgrounds/playground.svg"
- },
- "iconOverlays": [
- {
- "if": {
- "and": [
- "opening_hours!=24/7",
- "opening_hours~*"
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "nl": "Speeltuin {name}",
+ "en": "Playground {name}",
+ "it": "Parco giochi {name}",
+ "ru": "Детская площадка {name}",
+ "de": "Spielplatz {name}",
+ "fr": "Aire de jeu {name}"
+ }
+ }
]
- },
- "then": "isOpen",
- "badge": true
- }
- ],
- "width": {
- "render": "1"
- },
- "iconSize": {
- "render": "40,40,center",
- "mappings": [
- {
- "if": "id~node/.*",
- "then": "40,40,center"
- },
- {
- "if": "_size_classification=small",
- "then": "25,25,center"
- },
- {
- "if": "_size_classification=medium",
- "then": "40,40,center"
- },
- {
- "if": "_size_classification=large",
- "then": "60,60,center"
- }
- ]
- },
- "color": {
- "render": "#5dbaa9"
- },
- "presets": [
- {
- "tags": [
- "leisure=playground"
- ],
- "title": {
- "nl": "Speeltuin",
- "en": "Playground",
- "ru": "Детская площадка",
- "fr": "Terrain de jeux",
- "it": "Campetto"
- }
- }
- ],
- "wayHandling": 2
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "nl": "Wat is de ondergrond van deze speeltuin? Indien er verschillende ondergronden zijn, neem de meest voorkomende",
+ "en": "Which is the surface of this playground? If there are multiple, select the most occuring one",
+ "it": "Qual è la superficie di questo parco giochi? Se ve ne è più di una, seleziona quella predominante",
+ "de": "Welche Oberfläche hat dieser Spielplatz? Wenn es mehrere gibt, wähle die am häufigsten vorkommende aus",
+ "fr": "De quelle matière est la surface de l’aire de jeu ? Pour plusieurs matières, sélectionner la principale"
+ },
+ "render": {
+ "nl": "De ondergrond is {surface}",
+ "en": "The surface is {surface}",
+ "it": "La superficie è {surface}",
+ "ru": "Поверхность - {surface}",
+ "de": "Die Oberfläche ist {surface}",
+ "fr": "La surface est en {surface}"
+ },
+ "freeform": {
+ "key": "surface"
+ },
+ "mappings": [
+ {
+ "if": "surface=grass",
+ "then": {
+ "nl": "De ondergrond is gras",
+ "en": "The surface is grass",
+ "it": "La superficie è prato",
+ "ru": "Поверхность - трава",
+ "de": "Die Oberfläche ist Gras",
+ "fr": "La surface est en gazon"
+ }
+ },
+ {
+ "if": "surface=sand",
+ "then": {
+ "nl": "De ondergrond is zand",
+ "en": "The surface is sand",
+ "it": "La superficie è sabbia",
+ "ru": "Поверхность - песок",
+ "de": "Die Oberfläche ist Sand",
+ "fr": "La surface est en sable"
+ }
+ },
+ {
+ "if": "surface=woodchips",
+ "then": {
+ "nl": "De ondergrond bestaat uit houtsnippers",
+ "en": "The surface consist of woodchips",
+ "it": "La superficie consiste di trucioli di legno",
+ "de": "Die Oberfläche besteht aus Holzschnitzeln",
+ "ru": "Покрытие из щепы",
+ "fr": "La surface est en copeaux de bois"
+ }
+ },
+ {
+ "if": "surface=paving_stones",
+ "then": {
+ "nl": "De ondergrond bestaat uit stoeptegels",
+ "en": "The surface is paving stones",
+ "it": "La superficie è mattonelle regolari",
+ "ru": "Поверхность - брусчатка",
+ "de": "Die Oberfläche ist Pflastersteine",
+ "fr": "La surface est en pavés"
+ }
+ },
+ {
+ "if": "surface=asphalt",
+ "then": {
+ "nl": "De ondergrond is asfalt",
+ "en": "The surface is asphalt",
+ "it": "La superficie è asfalto",
+ "ru": "Поверхность - асфальт",
+ "de": "Die Oberfläche ist Asphalt",
+ "fr": "La surface est en bitume"
+ }
+ },
+ {
+ "if": "surface=concrete",
+ "then": {
+ "nl": "De ondergrond is beton",
+ "en": "The surface is concrete",
+ "it": "La superficie è cemento",
+ "ru": "Поверхность - бетон",
+ "de": "Die Oberfläche ist Beton",
+ "fr": "La surface est en béton"
+ }
+ },
+ {
+ "if": "surface=unpaved",
+ "then": {
+ "nl": "De ondergrond is onverhard",
+ "en": "The surface is unpaved",
+ "it": "La superficie è non pavimentato",
+ "de": "Die Oberfläche ist unbefestigt",
+ "fr": "La surface n’a pas de revêtement"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "surface=paved",
+ "then": {
+ "nl": "De ondergrond is verhard",
+ "en": "The surface is paved",
+ "it": "La superficie è pavimentato",
+ "de": "Die Oberfläche ist befestigt",
+ "fr": "La surface a un revêtement"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "question": {
+ "nl": "Is deze speeltuin 's nachts verlicht?",
+ "en": "Is this playground lit at night?",
+ "it": "È illuminato di notte questo parco giochi?",
+ "fr": "Ce terrain de jeux est-il éclairé la nuit ?",
+ "de": "Ist dieser Spielplatz nachts beleuchtet?",
+ "ru": "Эта игровая площадка освещается ночью?"
+ },
+ "mappings": [
+ {
+ "if": "lit=yes",
+ "then": {
+ "nl": "Deze speeltuin is 's nachts verlicht",
+ "en": "This playground is lit at night",
+ "it": "Questo parco giochi è illuminato di notte",
+ "de": "Dieser Spielplatz ist nachts beleuchtet",
+ "ru": "Эта детская площадка освещается ночью",
+ "fr": "L’aire de jeu est éclairée de nuit"
+ }
+ },
+ {
+ "if": "lit=no",
+ "then": {
+ "nl": "Deze speeltuin is 's nachts niet verlicht",
+ "en": "This playground is not lit at night",
+ "it": "Questo parco giochi non è illuminato di notte",
+ "de": "Dieser Spielplatz ist nachts nicht beleuchtet",
+ "ru": "Эта детская площадка не освещается ночью",
+ "fr": "L’aire de jeu n’est pas éclairée de nuit"
+ }
+ }
+ ]
+ },
+ {
+ "render": {
+ "nl": "Toegankelijk vanaf {min_age} jaar oud",
+ "en": "Accessible to kids older than {min_age} years",
+ "it": "Accessibile ai bambini di almeno {min_age} anni",
+ "ru": "Доступно для детей старше {min_age} лет",
+ "fr": "Accessible aux enfants de plus de {min_age} ans"
+ },
+ "question": {
+ "nl": "Wat is de minimale leeftijd om op deze speeltuin te mogen?",
+ "en": "What is the minimum age required to access this playground?",
+ "it": "Qual è l’età minima per accedere a questo parco giochi?",
+ "fr": "Quel est l'âge minimal requis pour accéder à ce terrain de jeux ?",
+ "ru": "С какого возраста доступна эта детская площадка?"
+ },
+ "freeform": {
+ "key": "min_age",
+ "type": "pnat"
+ }
+ },
+ {
+ "render": {
+ "nl": "Toegankelijk tot {max_age}",
+ "en": "Accessible to kids of at most {max_age}",
+ "it": "Accessibile ai bambini di età inferiore a {max_age}",
+ "fr": "Accessible aux enfants de {max_age} au maximum",
+ "ru": "Доступно детям до {max_age}"
+ },
+ "question": {
+ "nl": "Wat is de maximaal toegestane leeftijd voor deze speeltuin?",
+ "en": "What is the maximum age allowed to access this playground?",
+ "it": "Qual è l’età massima per accedere a questo parco giochi?",
+ "fr": "Quel est l’âge maximum autorisé pour utiliser l’aire de jeu ?"
+ },
+ "freeform": {
+ "key": "max_age",
+ "type": "pnat"
+ }
+ },
+ {
+ "question": {
+ "nl": "Wie beheert deze speeltuin?",
+ "en": "Who operates this playground?",
+ "it": "Chi è il responsabile di questo parco giochi?",
+ "de": "Wer betreibt diesen Spielplatz?",
+ "fr": "Qui est en charge de l’exploitation de l’aire de jeu ?"
+ },
+ "render": {
+ "nl": "Beheer door {operator}",
+ "en": "Operated by {operator}",
+ "it": "Gestito da {operator}",
+ "fr": "Exploité par {operator}",
+ "de": "Betrieben von {operator}"
+ },
+ "freeform": {
+ "key": "operator"
+ }
+ },
+ {
+ "question": {
+ "nl": "Is deze speeltuin vrij toegankelijk voor het publiek?",
+ "en": "Is this playground accessible to the general public?",
+ "it": "Questo parco giochi è pubblicamente accessibile?",
+ "de": "Ist dieser Spielplatz für die Allgemeinheit zugänglich?",
+ "fr": "L’aire de jeu est-elle accessible au public ?"
+ },
+ "mappings": [
+ {
+ "if": "access=",
+ "then": {
+ "en": "Accessible to the general public",
+ "nl": "Vrij toegankelijk voor het publiek",
+ "it": "Accessibile pubblicamente",
+ "de": "Zugänglich für die Allgemeinheit",
+ "fr": "Accessible au public"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "access=yes",
+ "then": {
+ "en": "Accessible to the general public",
+ "nl": "Vrij toegankelijk voor het publiek",
+ "it": "Accessibile pubblicamente",
+ "de": "Zugänglich für die Allgemeinheit",
+ "fr": "Accessible au public"
+ }
+ },
+ {
+ "if": "access=customers",
+ "then": {
+ "en": "Only accessible for clients of the operating business",
+ "nl": "Enkel toegankelijk voor klanten van de bijhorende zaak",
+ "it": "Accessibile solamente ai clienti dell’attività che lo gestisce",
+ "de": "Nur für Kunden des Betreibers zugänglich",
+ "fr": "Réservée aux clients"
+ }
+ },
+ {
+ "if": "access=students",
+ "then": {
+ "en": "Only accessible to students of the school",
+ "nl": "Vrij toegankelijk voor scholieren van de school",
+ "it": "Accessibile solamente agli studenti della scuola",
+ "de": "Nur für Schüler der Schule zugänglich",
+ "fr": "Réservée aux élèves de l’école"
+ }
+ },
+ {
+ "if": "access=private",
+ "then": {
+ "en": "Not accessible",
+ "nl": "Niet vrij toegankelijk",
+ "it": "Non accessibile",
+ "ru": "Недоступно",
+ "fr": "Non accessible",
+ "de": "Nicht zugänglich"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "nl": "Wie kan men emailen indien er problemen zijn met de speeltuin?",
+ "en": "What is the email address of the playground maintainer?",
+ "it": "Qual è l’indirizzo email del gestore di questo parco giochi?",
+ "fr": "Quelle est l'adresse électronique du responsable de l'aire de jeux ?",
+ "de": "Wie lautet die E-Mail Adresse des Spielplatzbetreuers?"
+ },
+ "render": {
+ "nl": "De bevoegde dienst kan bereikt worden via {email}",
+ "en": "{email}",
+ "ca": "{email}",
+ "de": "{email}",
+ "fr": "{email}",
+ "it": "{email}",
+ "ru": "{email}",
+ "id": "{email}"
+ },
+ "freeform": {
+ "key": "email",
+ "type": "email"
+ }
+ },
+ {
+ "question": {
+ "nl": "Wie kan men bellen indien er problemen zijn met de speeltuin?",
+ "en": "What is the phone number of the playground maintainer?",
+ "fr": "Quel est le numéro de téléphone du responsable du terrain de jeux ?",
+ "it": "Qual è il numero di telefono del gestore del campetto?"
+ },
+ "render": {
+ "nl": "De bevoegde dienst kan getelefoneerd worden via {phone}",
+ "en": "{phone}",
+ "ca": "{phone}",
+ "de": "{phone}",
+ "fr": "{phone}",
+ "ru": "{phone}",
+ "id": "{phone}",
+ "it": "{phone}"
+ },
+ "freeform": {
+ "key": "phone",
+ "type": "phone"
+ }
+ },
+ {
+ "question": {
+ "nl": "Is deze speeltuin toegankelijk voor rolstoelgebruikers?",
+ "en": "Is this playground accessible to wheelchair users?",
+ "fr": "Ce terrain de jeux est-il accessible aux personnes en fauteuil roulant ?",
+ "de": "Ist dieser Spielplatz für Rollstuhlfahrer zugänglich?",
+ "it": "Il campetto è accessibile a persone in sedia a rotelle?",
+ "ru": "Доступна ли детская площадка пользователям кресел-колясок?"
+ },
+ "mappings": [
+ {
+ "if": "wheelchair=yes",
+ "then": {
+ "nl": "Geheel toegankelijk voor rolstoelgebruikers",
+ "en": "Completely accessible for wheelchair users",
+ "fr": "Entièrement accessible aux personnes en fauteuil roulant",
+ "de": "Vollständig zugänglich für Rollstuhlfahrer",
+ "it": "Completamente accessibile in sedia a rotelle",
+ "ru": "Полностью доступна пользователям кресел-колясок"
+ }
+ },
+ {
+ "if": "wheelchair=limited",
+ "then": {
+ "nl": "Beperkt toegankelijk voor rolstoelgebruikers",
+ "en": "Limited accessibility for wheelchair users",
+ "fr": "Accessibilité limitée pour les personnes en fauteuil roulant",
+ "de": "Eingeschränkte Zugänglichkeit für Rollstuhlfahrer",
+ "it": "Accesso limitato in sedia a rotelle",
+ "ru": "Частично доступна пользователям кресел-колясок"
+ }
+ },
+ {
+ "if": "wheelchair=no",
+ "then": {
+ "nl": "Niet toegankelijk voor rolstoelgebruikers",
+ "en": "Not accessible for wheelchair users",
+ "fr": "Non accessible aux personnes en fauteuil roulant",
+ "de": "Nicht zugänglich für Rollstuhlfahrer",
+ "it": "Non accessibile in sedia a rotelle",
+ "ru": "Недоступна пользователям кресел-колясок"
+ }
+ }
+ ]
+ },
+ {
+ "freeform": {
+ "key": "opening_hours",
+ "type": "opening_hours"
+ },
+ "render": "{opening_hours_table(opening_hours)}",
+ "question": {
+ "nl": "Op welke uren is deze speeltuin toegankelijk?",
+ "en": "When is this playground accessible?",
+ "fr": "Quand ce terrain de jeux est-il accessible ?",
+ "it": "Quando si può accedere a questo campetto?",
+ "ru": "Когда открыта эта игровая площадка?"
+ },
+ "mappings": [
+ {
+ "if": "opening_hours=sunrise-sunset",
+ "then": {
+ "nl": "Van zonsopgang tot zonsondergang",
+ "en": "Accessible from sunrise till sunset",
+ "fr": "Accessible du lever au coucher du soleil",
+ "it": "Si può accedere dall'alba al tramonto",
+ "ru": "Открыто от рассвета до заката"
+ }
+ },
+ {
+ "if": "opening_hours=24/7",
+ "then": {
+ "nl": "Dag en nacht toegankelijk",
+ "en": "Always accessible",
+ "fr": "Toujours accessible",
+ "ru": "Всегда доступен",
+ "it": "Si può sempre accedere"
+ }
+ },
+ {
+ "if": "opening_hours=",
+ "then": {
+ "nl": "Dag en nacht toegankelijk",
+ "en": "Always accessible",
+ "ru": "Всегда доступен",
+ "fr": "Toujours accessible",
+ "it": "Si può sempre accedere"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ "questions",
+ {
+ "render": "{reviews(name, playground)}"
+ }
+ ],
+ "icon": {
+ "render": "./assets/themes/playgrounds/playground.svg"
+ },
+ "iconOverlays": [
+ {
+ "if": {
+ "and": [
+ "opening_hours!=24/7",
+ "opening_hours~*"
+ ]
+ },
+ "then": "isOpen",
+ "badge": true
+ }
+ ],
+ "width": {
+ "render": "1"
+ },
+ "iconSize": {
+ "render": "40,40,center",
+ "mappings": [
+ {
+ "if": "id~node/.*",
+ "then": "40,40,center"
+ },
+ {
+ "if": "_size_classification=small",
+ "then": "25,25,center"
+ },
+ {
+ "if": "_size_classification=medium",
+ "then": "40,40,center"
+ },
+ {
+ "if": "_size_classification=large",
+ "then": "60,60,center"
+ }
+ ]
+ },
+ "color": {
+ "render": "#5dbaa9"
+ },
+ "presets": [
+ {
+ "tags": [
+ "leisure=playground"
+ ],
+ "title": {
+ "nl": "Speeltuin",
+ "en": "Playground",
+ "ru": "Детская площадка",
+ "fr": "Terrain de jeux",
+ "it": "Campetto"
+ }
+ }
+ ],
+ "wayHandling": 2
}
\ No newline at end of file
diff --git a/assets/layers/public_bookcase/public_bookcase.json b/assets/layers/public_bookcase/public_bookcase.json
index 234e9d379..786d7e220 100644
--- a/assets/layers/public_bookcase/public_bookcase.json
+++ b/assets/layers/public_bookcase/public_bookcase.json
@@ -1,475 +1,475 @@
{
- "id": "public_bookcase",
- "name": {
- "en": "Bookcases",
- "nl": "Boekenruilkastjes",
- "de": "Bücherschränke",
- "fr": "Microbibliothèque",
- "ru": "Книжные шкафы",
- "it": "Microbiblioteche"
- },
- "description": {
- "en": "A streetside cabinet with books, accessible to anyone",
- "nl": "Een straatkastje met boeken voor iedereen",
- "de": "Ein Bücherschrank am Straßenrand mit Büchern, für jedermann zugänglich",
- "fr": "Une armoire ou une boite contenant des livres en libre accès",
- "it": "Una vetrinetta ai bordi della strada contenente libri, aperta al pubblico",
- "ru": "Уличный шкаф с книгами, доступными для всех"
- },
- "source": {
- "osmTags": "amenity=public_bookcase"
- },
- "minzoom": 12,
- "wayHandling": 2,
- "title": {
- "render": {
- "en": "Bookcase",
- "nl": "Boekenruilkast",
- "de": "Bücherschrank",
- "fr": "Microbibliothèque",
- "ru": "Книжный шкаф",
- "it": "Microbiblioteca"
- },
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "en": "Public bookcase {name}",
- "nl": "Boekenruilkast {name}",
- "de": "Öffentlicher Bücherschrank {name}",
- "fr": "Microbibliothèque {name}",
- "ru": "Общественный книжный шкаф {name}",
- "it": "Microbiblioteca pubblica {name}"
- }
- }
- ]
- },
- "icon": {
- "render": "./assets/themes/bookcases/bookcase.svg;"
- },
- "label": {
- "mappings": [
- {
- "if": "name~*",
- "then": "
{name}
"
- }
- ]
- },
- "color": {
- "render": "#0000ff"
- },
- "width": {
- "render": "8"
- },
- "presets": [
- {
- "title": {
- "en": "Bookcase",
- "nl": "Boekenruilkast",
- "de": "Bücherschrank",
+ "id": "public_bookcase",
+ "name": {
+ "en": "Bookcases",
+ "nl": "Boekenruilkastjes",
+ "de": "Bücherschränke",
"fr": "Microbibliothèque",
- "ru": "Книжный шкаф",
- "it": "Microbiblioteca"
- },
- "tags": [
- "amenity=public_bookcase"
- ],
- "preciseInput": {
- "preferredBackground": "photo"
- }
- }
- ],
- "tagRenderings": [
- "images",
- {
- "render": "{minimap():height: 9rem; border-radius: 2.5rem; overflow:hidden;border:1px solid gray}"
+ "ru": "Книжные шкафы",
+ "it": "Microbiblioteche"
},
- {
- "render": {
- "en": "The name of this bookcase is {name}",
- "nl": "De naam van dit boekenruilkastje is {name}",
- "de": "Der Name dieses Bücherschrank lautet {name}",
- "fr": "Le nom de cette microbibliothèque est {name}",
- "ru": "Название книжного шкафа — {name}",
- "it": "Questa microbiblioteca si chiama {name}"
- },
- "question": {
- "en": "What is the name of this public bookcase?",
- "nl": "Wat is de naam van dit boekenuilkastje?",
- "de": "Wie heißt dieser öffentliche Bücherschrank?",
- "fr": "Quel est le nom de cette microbibliothèque ?",
- "ru": "Как называется этот общественный книжный шкаф?",
- "it": "Come si chiama questa microbiblioteca pubblica?"
- },
- "freeform": {
- "key": "name"
- },
- "mappings": [
+ "description": {
+ "en": "A streetside cabinet with books, accessible to anyone",
+ "nl": "Een straatkastje met boeken voor iedereen",
+ "de": "Ein Bücherschrank am Straßenrand mit Büchern, für jedermann zugänglich",
+ "fr": "Une armoire ou une boite contenant des livres en libre accès",
+ "it": "Una vetrinetta ai bordi della strada contenente libri, aperta al pubblico",
+ "ru": "Уличный шкаф с книгами, доступными для всех"
+ },
+ "source": {
+ "osmTags": "amenity=public_bookcase"
+ },
+ "minzoom": 12,
+ "wayHandling": 2,
+ "title": {
+ "render": {
+ "en": "Bookcase",
+ "nl": "Boekenruilkast",
+ "de": "Bücherschrank",
+ "fr": "Microbibliothèque",
+ "ru": "Книжный шкаф",
+ "it": "Microbiblioteca"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "en": "Public bookcase {name}",
+ "nl": "Boekenruilkast {name}",
+ "de": "Öffentlicher Bücherschrank {name}",
+ "fr": "Microbibliothèque {name}",
+ "ru": "Общественный книжный шкаф {name}",
+ "it": "Microbiblioteca pubblica {name}"
+ }
+ }
+ ]
+ },
+ "icon": {
+ "render": "./assets/themes/bookcases/bookcase.svg;"
+ },
+ "label": {
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": "
{name}
"
+ }
+ ]
+ },
+ "color": {
+ "render": "#0000ff"
+ },
+ "width": {
+ "render": "8"
+ },
+ "presets": [
{
- "if": {
+ "title": {
+ "en": "Bookcase",
+ "nl": "Boekenruilkast",
+ "de": "Bücherschrank",
+ "fr": "Microbibliothèque",
+ "ru": "Книжный шкаф",
+ "it": "Microbiblioteca"
+ },
+ "tags": [
+ "amenity=public_bookcase"
+ ],
+ "preciseInput": {
+ "preferredBackground": "photo"
+ }
+ }
+ ],
+ "tagRenderings": [
+ "images",
+ {
+ "render": "{minimap():height: 9rem; border-radius: 2.5rem; overflow:hidden;border:1px solid gray}"
+ },
+ {
+ "render": {
+ "en": "The name of this bookcase is {name}",
+ "nl": "De naam van dit boekenruilkastje is {name}",
+ "de": "Der Name dieses Bücherschrank lautet {name}",
+ "fr": "Le nom de cette microbibliothèque est {name}",
+ "ru": "Название книжного шкафа — {name}",
+ "it": "Questa microbiblioteca si chiama {name}"
+ },
+ "question": {
+ "en": "What is the name of this public bookcase?",
+ "nl": "Wat is de naam van dit boekenuilkastje?",
+ "de": "Wie heißt dieser öffentliche Bücherschrank?",
+ "fr": "Quel est le nom de cette microbibliothèque ?",
+ "ru": "Как называется этот общественный книжный шкаф?",
+ "it": "Come si chiama questa microbiblioteca pubblica?"
+ },
+ "freeform": {
+ "key": "name"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "noname=yes",
+ "name="
+ ]
+ },
+ "then": {
+ "en": "This bookcase doesn't have a name",
+ "nl": "Dit boekenruilkastje heeft geen naam",
+ "de": "Dieser Bücherschrank hat keinen Namen",
+ "fr": "Cette microbibliothèque n'a pas de nom",
+ "ru": "У этого книжного шкафа нет названия",
+ "it": "Questa microbiblioteca non ha un nome proprio"
+ }
+ }
+ ]
+ },
+ {
+ "render": {
+ "en": "{capacity} books fit in this bookcase",
+ "nl": "Er passen {capacity} boeken",
+ "de": "{capacity} Bücher passen in diesen Bücherschrank",
+ "fr": "{capacity} livres peuvent entrer dans cette microbibliothèque",
+ "it": "Questa microbiblioteca può contenere fino a {capacity} libri",
+ "ru": "{capacity} книг помещается в этот книжный шкаф"
+ },
+ "question": {
+ "en": "How many books fit into this public bookcase?",
+ "nl": "Hoeveel boeken passen er in dit boekenruilkastje?",
+ "de": "Wie viele Bücher passen in diesen öffentlichen Bücherschrank?",
+ "fr": "Combien de livres peuvent entrer dans cette microbibliothèque ?",
+ "ru": "Сколько книг помещается в этом общественном книжном шкафу?",
+ "it": "Quanti libri può contenere questa microbiblioteca?"
+ },
+ "freeform": {
+ "key": "capacity",
+ "type": "nat",
+ "inline": true
+ }
+ },
+ {
+ "question": {
+ "en": "What kind of books can be found in this public bookcase?",
+ "nl": "Voor welke doelgroep zijn de meeste boeken in dit boekenruilkastje?",
+ "de": "Welche Art von Büchern sind in diesem öffentlichen Bücherschrank zu finden?",
+ "fr": "Quel type de livres peut-on dans cette microbibliothèque ?",
+ "it": "Che tipo di libri si possono trovare in questa microbiblioteca?",
+ "ru": "Какие книги можно найти в этом общественном книжном шкафу?"
+ },
+ "mappings": [
+ {
+ "if": "books=children",
+ "then": {
+ "en": "Mostly children books",
+ "nl": "Voornamelijk kinderboeken",
+ "de": "Vorwiegend Kinderbücher",
+ "fr": "Livres pour enfants",
+ "ru": "В основном детские книги",
+ "it": "Principalmente libri per l'infanzia"
+ }
+ },
+ {
+ "if": "books=adults",
+ "then": {
+ "en": "Mostly books for adults",
+ "nl": "Voornamelijk boeken voor volwassenen",
+ "de": "Vorwiegend Bücher für Erwachsene",
+ "fr": "Livres pour les adultes",
+ "ru": "В основном книги для взрослых",
+ "it": "Principalmente libri per persone in età adulta"
+ }
+ },
+ {
+ "if": "books=children;adults",
+ "then": {
+ "en": "Both books for kids and adults",
+ "nl": "Boeken voor zowel kinderen als volwassenen",
+ "de": "Sowohl Bücher für Kinder als auch für Erwachsene",
+ "fr": "Livres pour enfants et adultes également",
+ "it": "Sia libri per l'infanzia, sia per l'età adulta",
+ "ru": "Книги и для детей, и для взрослых"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Is this bookcase located outdoors?",
+ "nl": "Staat dit boekenruilkastje binnen of buiten?",
+ "de": "Befindet sich dieser Bücherschrank im Freien?",
+ "fr": "Cette microbiliothèque est-elle en extérieur ?",
+ "it": "Questa microbiblioteca si trova all'aperto?"
+ },
+ "mappings": [
+ {
+ "then": {
+ "en": "This bookcase is located indoors",
+ "nl": "Dit boekenruilkastje staat binnen",
+ "de": "Dieser Bücherschrank befindet sich im Innenbereich",
+ "fr": "Cette microbibliothèque est en intérieur",
+ "it": "Questa microbiblioteca si trova al chiuso"
+ },
+ "if": "indoor=yes"
+ },
+ {
+ "then": {
+ "en": "This bookcase is located outdoors",
+ "nl": "Dit boekenruilkastje staat buiten",
+ "de": "Dieser Bücherschrank befindet sich im Freien",
+ "fr": "Cette microbibliothèque est en extérieur",
+ "it": "Questa microbiblioteca si trova all'aperto"
+ },
+ "if": "indoor=no"
+ },
+ {
+ "then": {
+ "en": "This bookcase is located outdoors",
+ "nl": "Dit boekenruilkastje staat buiten",
+ "de": "Dieser Bücherschrank befindet sich im Freien",
+ "fr": "Cette microbibliothèque est en extérieur",
+ "it": "Questa microbiblioteca si trova all'aperto"
+ },
+ "if": "indoor=",
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Is this public bookcase freely accessible?",
+ "nl": "Is dit boekenruilkastje publiek toegankelijk?",
+ "de": "Ist dieser öffentliche Bücherschrank frei zugänglich?",
+ "fr": "Cette microbibliothèque est-elle librement accèssible ?",
+ "it": "Questa microbiblioteca è ad accesso libero?",
+ "ru": "Имеется ли свободный доступ к этому общественному книжному шкафу?"
+ },
+ "condition": "indoor=yes",
+ "mappings": [
+ {
+ "then": {
+ "en": "Publicly accessible",
+ "nl": "Publiek toegankelijk",
+ "de": "Öffentlich zugänglich",
+ "fr": "Accèssible au public",
+ "it": "È ad accesso libero",
+ "ru": "Свободный доступ"
+ },
+ "if": "access=yes"
+ },
+ {
+ "then": {
+ "en": "Only accessible to customers",
+ "nl": "Enkel toegankelijk voor klanten",
+ "de": "Nur für Kunden zugänglich",
+ "fr": "Accèssible aux clients",
+ "it": "L'accesso è riservato ai clienti"
+ },
+ "if": "access=customers"
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Who maintains this public bookcase?",
+ "nl": "Wie is verantwoordelijk voor dit boekenruilkastje?",
+ "de": "Wer unterhält diesen öffentlichen Bücherschrank?",
+ "fr": "Qui entretien cette microbibliothèque ?",
+ "it": "Chi mantiene questa microbiblioteca?"
+ },
+ "render": {
+ "en": "Operated by {operator}",
+ "nl": "Onderhouden door {operator}",
+ "de": "Betrieben von {operator}",
+ "fr": "Entretenue par {operator}",
+ "it": "È gestita da {operator}"
+ },
+ "freeform": {
+ "type": "string",
+ "key": "operator"
+ }
+ },
+ {
+ "question": {
+ "en": "Is this public bookcase part of a bigger network?",
+ "nl": "Is dit boekenruilkastje deel van een netwerk?",
+ "de": "Ist dieser öffentliche Bücherschrank Teil eines größeren Netzwerks?",
+ "fr": "Cette microbibliothèque fait-elle partie d'un réseau/groupe ?",
+ "it": "Questa microbiblioteca fa parte di una rete?"
+ },
+ "render": {
+ "en": "This public bookcase is part of {brand}",
+ "nl": "Dit boekenruilkastje is deel van het netwerk {brand}",
+ "de": "Dieser Bücherschrank ist Teil von {brand}",
+ "fr": "Cette microbibliothèque fait partie du groupe {brand}",
+ "it": "Questa microbiblioteca fa parte di {brand}"
+ },
+ "condition": "ref=",
+ "freeform": {
+ "key": "brand"
+ },
+ "mappings": [
+ {
+ "then": {
+ "en": "Part of the network 'Little Free Library'",
+ "nl": "Deel van het netwerk 'Little Free Library'",
+ "de": "Teil des Netzwerks 'Little Free Library'",
+ "fr": "Fait partie du réseau Little Free Library",
+ "it": "Fa parte della rete 'Little Free Library'"
+ },
+ "if": {
+ "and": [
+ "brand=Little Free Library",
+ "nobrand="
+ ]
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "nobrand=yes",
+ "brand="
+ ]
+ },
+ "then": {
+ "en": "This public bookcase is not part of a bigger network",
+ "nl": "Dit boekenruilkastje maakt geen deel uit van een netwerk",
+ "de": "Dieser öffentliche Bücherschrank ist nicht Teil eines größeren Netzwerks",
+ "fr": "Cette microbibliothèque ne fait pas partie d'un réseau/groupe",
+ "it": "Questa microbiblioteca non fa parte di una rete"
+ }
+ }
+ ]
+ },
+ {
+ "render": {
+ "en": "The reference number of this public bookcase within {brand} is {ref}",
+ "nl": "Het referentienummer binnen {brand} is {ref}",
+ "de": "Die Referenznummer dieses öffentlichen Bücherschranks innerhalb {brand} lautet {ref}",
+ "fr": "Cette microbibliothèque du réseau {brand} possède le numéro {ref}",
+ "it": "Il numero identificativo di questa microbiblioteca nella rete {brand} è {ref}"
+ },
+ "question": {
+ "en": "What is the reference number of this public bookcase?",
+ "nl": "Wat is het referentienummer van dit boekenruilkastje?",
+ "de": "Wie lautet die Referenznummer dieses öffentlichen Bücherschranks?",
+ "fr": "Quelle est le numéro de référence de cette microbibliothèque ?",
+ "it": "Qual è il numero identificativo di questa microbiblioteca?"
+ },
+ "condition": "brand~*",
+ "freeform": {
+ "key": "ref"
+ },
+ "mappings": [
+ {
+ "then": {
+ "en": "This bookcase is not part of a bigger network",
+ "nl": "Dit boekenruilkastje maakt geen deel uit van een netwerk",
+ "de": "Dieser Bücherschrank ist nicht Teil eines größeren Netzwerks",
+ "fr": "Cette microbibliothèque ne fait pas partie d'un réseau/groupe",
+ "it": "Questa microbiblioteca non fa parte di una rete"
+ },
+ "if": {
+ "and": [
+ "nobrand=yes",
+ "brand=",
+ "ref="
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "When was this public bookcase installed?",
+ "nl": "Op welke dag werd dit boekenruilkastje geinstalleerd?",
+ "de": "Wann wurde dieser öffentliche Bücherschrank installiert?",
+ "fr": "Quand a été installée cette microbibliothèque ?",
+ "it": "Quando è stata inaugurata questa microbiblioteca?",
+ "ru": "Когда был установлен этот общественный книжный шкаф?"
+ },
+ "render": {
+ "en": "Installed on {start_date}",
+ "nl": "Geplaatst op {start_date}",
+ "de": "Installiert am {start_date}",
+ "fr": "Installée le {start_date}",
+ "it": "È stata inaugurata il {start_date}",
+ "ru": "Установлен {start_date}"
+ },
+ "freeform": {
+ "key": "start_date",
+ "type": "date"
+ }
+ },
+ {
+ "render": {
+ "en": "More info on the website",
+ "nl": "Meer info op de website",
+ "de": "Weitere Informationen auf der Webseite",
+ "fr": "Plus d'infos sur le site web",
+ "ru": "Более подробная информация на сайте",
+ "it": "Maggiori informazioni sul sito web"
+ },
+ "question": {
+ "en": "Is there a website with more information about this public bookcase?",
+ "nl": "Is er een website over dit boekenruilkastje?",
+ "de": "Gibt es eine Website mit weiteren Informationen über diesen öffentlichen Bücherschrank?",
+ "fr": "Y a-t-il un site web avec plus d'informations sur cette microbibliothèque ?",
+ "it": "C'è un sito web con maggiori informazioni su questa microbiblioteca?",
+ "ru": "Есть ли веб-сайт с более подробной информацией об этом общественном книжном шкафе?"
+ },
+ "freeform": {
+ "key": "website",
+ "type": "url"
+ }
+ }
+ ],
+ "deletion": {
+ "softDeletionTags": {
"and": [
- "noname=yes",
- "name="
+ "disused:amenity=public_bookcase",
+ "amenity="
]
- },
- "then": {
- "en": "This bookcase doesn't have a name",
- "nl": "Dit boekenruilkastje heeft geen naam",
- "de": "Dieser Bücherschrank hat keinen Namen",
- "fr": "Cette microbibliothèque n'a pas de nom",
- "ru": "У этого книжного шкафа нет названия",
- "it": "Questa microbiblioteca non ha un nome proprio"
- }
- }
- ]
- },
- {
- "render": {
- "en": "{capacity} books fit in this bookcase",
- "nl": "Er passen {capacity} boeken",
- "de": "{capacity} Bücher passen in diesen Bücherschrank",
- "fr": "{capacity} livres peuvent entrer dans cette microbibliothèque",
- "it": "Questa microbiblioteca può contenere fino a {capacity} libri",
- "ru": "{capacity} книг помещается в этот книжный шкаф"
- },
- "question": {
- "en": "How many books fit into this public bookcase?",
- "nl": "Hoeveel boeken passen er in dit boekenruilkastje?",
- "de": "Wie viele Bücher passen in diesen öffentlichen Bücherschrank?",
- "fr": "Combien de livres peuvent entrer dans cette microbibliothèque ?",
- "ru": "Сколько книг помещается в этом общественном книжном шкафу?",
- "it": "Quanti libri può contenere questa microbiblioteca?"
- },
- "freeform": {
- "key": "capacity",
- "type": "nat",
- "inline": true
- }
- },
- {
- "question": {
- "en": "What kind of books can be found in this public bookcase?",
- "nl": "Voor welke doelgroep zijn de meeste boeken in dit boekenruilkastje?",
- "de": "Welche Art von Büchern sind in diesem öffentlichen Bücherschrank zu finden?",
- "fr": "Quel type de livres peut-on dans cette microbibliothèque ?",
- "it": "Che tipo di libri si possono trovare in questa microbiblioteca?",
- "ru": "Какие книги можно найти в этом общественном книжном шкафу?"
- },
- "mappings": [
- {
- "if": "books=children",
- "then": {
- "en": "Mostly children books",
- "nl": "Voornamelijk kinderboeken",
- "de": "Vorwiegend Kinderbücher",
- "fr": "Livres pour enfants",
- "ru": "В основном детские книги",
- "it": "Principalmente libri per l'infanzia"
- }
},
- {
- "if": "books=adults",
- "then": {
- "en": "Mostly books for adults",
- "nl": "Voornamelijk boeken voor volwassenen",
- "de": "Vorwiegend Bücher für Erwachsene",
- "fr": "Livres pour les adultes",
- "ru": "В основном книги для взрослых",
- "it": "Principalmente libri per persone in età adulta"
- }
- },
- {
- "if": "books=children;adults",
- "then": {
- "en": "Both books for kids and adults",
- "nl": "Boeken voor zowel kinderen als volwassenen",
- "de": "Sowohl Bücher für Kinder als auch für Erwachsene",
- "fr": "Livres pour enfants et adultes également",
- "it": "Sia libri per l'infanzia, sia per l'età adulta",
- "ru": "Книги и для детей, и для взрослых"
- }
- }
- ]
+ "neededChangesets": 5
},
- {
- "question": {
- "en": "Is this bookcase located outdoors?",
- "nl": "Staat dit boekenruilkastje binnen of buiten?",
- "de": "Befindet sich dieser Bücherschrank im Freien?",
- "fr": "Cette microbiliothèque est-elle en extérieur ?",
- "it": "Questa microbiblioteca si trova all'aperto?"
- },
- "mappings": [
+ "filter": [
{
- "then": {
- "en": "This bookcase is located indoors",
- "nl": "Dit boekenruilkastje staat binnen",
- "de": "Dieser Bücherschrank befindet sich im Innenbereich",
- "fr": "Cette microbibliothèque est en intérieur",
- "it": "Questa microbiblioteca si trova al chiuso"
- },
- "if": "indoor=yes"
- },
- {
- "then": {
- "en": "This bookcase is located outdoors",
- "nl": "Dit boekenruilkastje staat buiten",
- "de": "Dieser Bücherschrank befindet sich im Freien",
- "fr": "Cette microbibliothèque est en extérieur",
- "it": "Questa microbiblioteca si trova all'aperto"
- },
- "if": "indoor=no"
- },
- {
- "then": {
- "en": "This bookcase is located outdoors",
- "nl": "Dit boekenruilkastje staat buiten",
- "de": "Dieser Bücherschrank befindet sich im Freien",
- "fr": "Cette microbibliothèque est en extérieur",
- "it": "Questa microbiblioteca si trova all'aperto"
- },
- "if": "indoor=",
- "hideInAnswer": true
- }
- ]
- },
- {
- "question": {
- "en": "Is this public bookcase freely accessible?",
- "nl": "Is dit boekenruilkastje publiek toegankelijk?",
- "de": "Ist dieser öffentliche Bücherschrank frei zugänglich?",
- "fr": "Cette microbibliothèque est-elle librement accèssible ?",
- "it": "Questa microbiblioteca è ad accesso libero?",
- "ru": "Имеется ли свободный доступ к этому общественному книжному шкафу?"
- },
- "condition": "indoor=yes",
- "mappings": [
- {
- "then": {
- "en": "Publicly accessible",
- "nl": "Publiek toegankelijk",
- "de": "Öffentlich zugänglich",
- "fr": "Accèssible au public",
- "it": "È ad accesso libero",
- "ru": "Свободный доступ"
- },
- "if": "access=yes"
- },
- {
- "then": {
- "en": "Only accessible to customers",
- "nl": "Enkel toegankelijk voor klanten",
- "de": "Nur für Kunden zugänglich",
- "fr": "Accèssible aux clients",
- "it": "L'accesso è riservato ai clienti"
- },
- "if": "access=customers"
- }
- ]
- },
- {
- "question": {
- "en": "Who maintains this public bookcase?",
- "nl": "Wie is verantwoordelijk voor dit boekenruilkastje?",
- "de": "Wer unterhält diesen öffentlichen Bücherschrank?",
- "fr": "Qui entretien cette microbibliothèque ?",
- "it": "Chi mantiene questa microbiblioteca?"
- },
- "render": {
- "en": "Operated by {operator}",
- "nl": "Onderhouden door {operator}",
- "de": "Betrieben von {operator}",
- "fr": "Entretenue par {operator}",
- "it": "È gestita da {operator}"
- },
- "freeform": {
- "type": "string",
- "key": "operator"
- }
- },
- {
- "question": {
- "en": "Is this public bookcase part of a bigger network?",
- "nl": "Is dit boekenruilkastje deel van een netwerk?",
- "de": "Ist dieser öffentliche Bücherschrank Teil eines größeren Netzwerks?",
- "fr": "Cette microbibliothèque fait-elle partie d'un réseau/groupe ?",
- "it": "Questa microbiblioteca fa parte di una rete?"
- },
- "render": {
- "en": "This public bookcase is part of {brand}",
- "nl": "Dit boekenruilkastje is deel van het netwerk {brand}",
- "de": "Dieser Bücherschrank ist Teil von {brand}",
- "fr": "Cette microbibliothèque fait partie du groupe {brand}",
- "it": "Questa microbiblioteca fa parte di {brand}"
- },
- "condition": "ref=",
- "freeform": {
- "key": "brand"
- },
- "mappings": [
- {
- "then": {
- "en": "Part of the network 'Little Free Library'",
- "nl": "Deel van het netwerk 'Little Free Library'",
- "de": "Teil des Netzwerks 'Little Free Library'",
- "fr": "Fait partie du réseau Little Free Library",
- "it": "Fa parte della rete 'Little Free Library'"
- },
- "if": {
- "and": [
- "brand=Little Free Library",
- "nobrand="
+ "options": [
+ {
+ "question": "Kinderboeken aanwezig?",
+ "osmTags": "books~.*children.*"
+ }
]
- }
},
{
- "if": {
- "and": [
- "nobrand=yes",
- "brand="
+ "options": [
+ {
+ "question": "Boeken voor volwassenen aanwezig?",
+ "osmTags": "books~.*adults.*"
+ }
]
- },
- "then": {
- "en": "This public bookcase is not part of a bigger network",
- "nl": "Dit boekenruilkastje maakt geen deel uit van een netwerk",
- "de": "Dieser öffentliche Bücherschrank ist nicht Teil eines größeren Netzwerks",
- "fr": "Cette microbibliothèque ne fait pas partie d'un réseau/groupe",
- "it": "Questa microbiblioteca non fa parte di una rete"
- }
- }
- ]
- },
- {
- "render": {
- "en": "The reference number of this public bookcase within {brand} is {ref}",
- "nl": "Het referentienummer binnen {brand} is {ref}",
- "de": "Die Referenznummer dieses öffentlichen Bücherschranks innerhalb {brand} lautet {ref}",
- "fr": "Cette microbibliothèque du réseau {brand} possède le numéro {ref}",
- "it": "Il numero identificativo di questa microbiblioteca nella rete {brand} è {ref}"
- },
- "question": {
- "en": "What is the reference number of this public bookcase?",
- "nl": "Wat is het referentienummer van dit boekenruilkastje?",
- "de": "Wie lautet die Referenznummer dieses öffentlichen Bücherschranks?",
- "fr": "Quelle est le numéro de référence de cette microbibliothèque ?",
- "it": "Qual è il numero identificativo di questa microbiblioteca?"
- },
- "condition": "brand~*",
- "freeform": {
- "key": "ref"
- },
- "mappings": [
- {
- "then": {
- "en": "This bookcase is not part of a bigger network",
- "nl": "Dit boekenruilkastje maakt geen deel uit van een netwerk",
- "de": "Dieser Bücherschrank ist nicht Teil eines größeren Netzwerks",
- "fr": "Cette microbibliothèque ne fait pas partie d'un réseau/groupe",
- "it": "Questa microbiblioteca non fa parte di una rete"
- },
- "if": {
- "and": [
- "nobrand=yes",
- "brand=",
- "ref="
- ]
- }
- }
- ]
- },
- {
- "question": {
- "en": "When was this public bookcase installed?",
- "nl": "Op welke dag werd dit boekenruilkastje geinstalleerd?",
- "de": "Wann wurde dieser öffentliche Bücherschrank installiert?",
- "fr": "Quand a été installée cette microbibliothèque ?",
- "it": "Quando è stata inaugurata questa microbiblioteca?",
- "ru": "Когда был установлен этот общественный книжный шкаф?"
- },
- "render": {
- "en": "Installed on {start_date}",
- "nl": "Geplaatst op {start_date}",
- "de": "Installiert am {start_date}",
- "fr": "Installée le {start_date}",
- "it": "È stata inaugurata il {start_date}",
- "ru": "Установлен {start_date}"
- },
- "freeform": {
- "key": "start_date",
- "type": "date"
- }
- },
- {
- "render": {
- "en": "More info on the website",
- "nl": "Meer info op de website",
- "de": "Weitere Informationen auf der Webseite",
- "fr": "Plus d'infos sur le site web",
- "ru": "Более подробная информация на сайте",
- "it": "Maggiori informazioni sul sito web"
- },
- "question": {
- "en": "Is there a website with more information about this public bookcase?",
- "nl": "Is er een website over dit boekenruilkastje?",
- "de": "Gibt es eine Website mit weiteren Informationen über diesen öffentlichen Bücherschrank?",
- "fr": "Y a-t-il un site web avec plus d'informations sur cette microbibliothèque ?",
- "it": "C'è un sito web con maggiori informazioni su questa microbiblioteca?",
- "ru": "Есть ли веб-сайт с более подробной информацией об этом общественном книжном шкафе?"
- },
- "freeform": {
- "key": "website",
- "type": "url"
- }
- }
- ],
- "deletion": {
- "softDeletionTags": {
- "and": [
- "disused:amenity=public_bookcase",
- "amenity="
- ]
- },
- "neededChangesets": 5
- },
- "filter": [
- {
- "options": [
- {
- "question": "Kinderboeken aanwezig?",
- "osmTags": "books~.*children.*"
- }
- ]
- },
- {
- "options": [
- {
- "question": "Boeken voor volwassenen aanwezig?",
- "osmTags": "books~.*adults.*"
- }
- ]
- },
- {
- "options": [
- {
- "question": "Binnen of buiten",
- "osmTags": {
- "and": []
- }
},
{
- "question": "Binnen?",
- "osmTags": "indoor=yes"
- },
- {
- "question": "Buiten?",
- "osmTags": {
- "or": [
- "indoor=no",
- "indoor="
+ "options": [
+ {
+ "question": "Binnen of buiten",
+ "osmTags": {
+ "and": []
+ }
+ },
+ {
+ "question": "Binnen?",
+ "osmTags": "indoor=yes"
+ },
+ {
+ "question": "Buiten?",
+ "osmTags": {
+ "or": [
+ "indoor=no",
+ "indoor="
+ ]
+ }
+ }
]
- }
}
- ]
- }
- ]
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/slow_roads/slow_roads.json b/assets/layers/slow_roads/slow_roads.json
index 2afbca07f..5ef6d2feb 100644
--- a/assets/layers/slow_roads/slow_roads.json
+++ b/assets/layers/slow_roads/slow_roads.json
@@ -1,253 +1,253 @@
{
- "id": "slow_roads",
- "name": {
- "nl": "Paadjes, trage wegen en autoluwe straten"
- },
- "icon": "./assets/layers/slow_roads/slow_road.svg",
- "minzoom": 16,
- "source": {
- "osmTags": {
- "and": [
- {
- "or": [
- "highway=pedestrian",
- "highway=footway",
- "highway=path",
- "highway=bridleway",
- "highway=living_street",
- "highway=track"
- ]
- },
- "access!=no",
- "access!=private"
- ]
- }
- },
- "title": {
- "render": {
- "nl": "Trage weg"
+ "id": "slow_roads",
+ "name": {
+ "nl": "Paadjes, trage wegen en autoluwe straten"
},
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "nl": "{name}"
+ "icon": "./assets/layers/slow_roads/slow_road.svg",
+ "minzoom": 16,
+ "source": {
+ "osmTags": {
+ "and": [
+ {
+ "or": [
+ "highway=pedestrian",
+ "highway=footway",
+ "highway=path",
+ "highway=bridleway",
+ "highway=living_street",
+ "highway=track"
+ ]
+ },
+ "access!=no",
+ "access!=private"
+ ]
}
- },
- {
- "if": "highway=footway",
- "then": {
- "nl": "Voetpad"
- }
- },
- {
- "if": "highway=cycleway",
- "then": {
- "nl": "Fietspad"
- }
- },
- {
- "if": "highway=pedestrian",
- "then": {
- "nl": "Voetgangersstraat"
- }
- },
- {
- "if": "highway=living_street",
- "then": {
- "nl": "Woonerf"
- }
- },
- {
- "if": "highway=path",
- "then": "Klein pad"
- }
- ]
- },
- "tagRenderings": [
- "images",
- {
- "mappings": [
- {
- "if": "highway=living_street",
- "then": {
- "nl:": "
Dit is een woonerf:
Voetgangers mogen hier de volledige breedte van de straat gebruiken
Gemotoriseerd verkeer mag maximaal 20km/h rijden
"
- }
- },
- {
- "if": "highway=pedestrian",
- "then": {
- "nl": "Dit is een brede, autovrije straat"
- }
- },
- {
- "if": "highway=footway",
- "then": {
- "nl": "Dit is een voetpaadje"
- }
- },
- {
- "if": "highway=path",
- "then": {
- "nl": "Dit is een wegeltje of bospad"
- }
- },
- {
- "if": "highway=bridleway",
- "then": {
- "nl": "Dit is een ruiterswegel"
- }
- },
- {
- "if": "highway=track",
- "then": {
- "nl": "Dit is een tractorspoor of weg om landbouwgrond te bereikken"
- }
- }
- ]
},
- {
- "question": {
- "nl": "Wat is de wegverharding van dit pad?"
- },
- "render": {
- "nl": "De ondergrond is {surface}",
- "en": "The surface is {surface}",
- "ru": "Поверхность - {surface}",
- "fr": "La surface en {surface}",
- "it": "La superficie è {surface}"
- },
- "freeform": {
- "key": "surface"
- },
- "mappings": [
- {
- "if": "surface=grass",
- "then": {
- "nl": "De ondergrond is gras",
- "en": "The surface is grass",
- "ru": "Поверхность - трава",
- "fr": "La surface est en herbe",
- "it": "La superficie è erba"
- }
+ "title": {
+ "render": {
+ "nl": "Trage weg"
},
- {
- "if": "surface=ground",
- "then": {
- "nl": "De ondergrond is aarde",
- "en": "The surface is ground",
- "ru": "Поверхность - земля",
- "fr": "La surface est en terre",
- "it": "La superficie è terreno"
- }
- },
- {
- "if": "surface=unpaved",
- "then": {
- "nl": "De ondergrond is onverhard",
- "en": "The surface is unpaved",
- "fr": "La surface est non pavée",
- "it": "La superficie è non pavimentata"
- },
- "hideInAnswer": true
- },
- {
- "if": "surface=sand",
- "then": {
- "nl": "De ondergrond is zand",
- "en": "The surface is sand",
- "ru": "Поверхность - песок",
- "fr": "La surface est en sable",
- "it": "La superficie è sabbia"
- }
- },
- {
- "if": "surface=paving_stones",
- "then": {
- "nl": "De ondergrond bestaat uit stoeptegels",
- "en": "The surface is paving stones",
- "ru": "Поверхность - брусчатка",
- "it": "La superficie è pietre irregolari",
- "fr": "La surface est en pierres pavées"
- }
- },
- {
- "if": "surface=asphalt",
- "then": {
- "nl": "De ondergrond is asfalt",
- "en": "The surface is asphalt",
- "ru": "Поверхность - асфальт",
- "it": "La superficie è asfalto",
- "fr": "La surface est en bitume"
- }
- },
- {
- "if": "surface=concrete",
- "then": {
- "nl": "De ondergrond is beton",
- "en": "The surface is concrete",
- "ru": "Поверхность - бетон",
- "fr": "La surface est en béton",
- "it": "La superficie è calcestruzzo"
- }
- },
- {
- "if": "surface=paved",
- "then": {
- "nl": "De ondergrond is verhard",
- "en": "The surface is paved",
- "fr": "La surface est pavée",
- "it": "La superficie è pavimentata"
- },
- "hideInAnswer": true
- }
- ]
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "nl": "{name}"
+ }
+ },
+ {
+ "if": "highway=footway",
+ "then": {
+ "nl": "Voetpad"
+ }
+ },
+ {
+ "if": "highway=cycleway",
+ "then": {
+ "nl": "Fietspad"
+ }
+ },
+ {
+ "if": "highway=pedestrian",
+ "then": {
+ "nl": "Voetgangersstraat"
+ }
+ },
+ {
+ "if": "highway=living_street",
+ "then": {
+ "nl": "Woonerf"
+ }
+ },
+ {
+ "if": "highway=path",
+ "then": "Klein pad"
+ }
+ ]
},
- {
- "question": "Is deze weg 's nachts verlicht?",
- "mappings": [
+ "tagRenderings": [
+ "images",
{
- "if": "lit=yes",
- "then": "'s nachts verlicht"
+ "mappings": [
+ {
+ "if": "highway=living_street",
+ "then": {
+ "nl:": "
Dit is een woonerf:
Voetgangers mogen hier de volledige breedte van de straat gebruiken
Gemotoriseerd verkeer mag maximaal 20km/h rijden
"
+ }
+ },
+ {
+ "if": "highway=pedestrian",
+ "then": {
+ "nl": "Dit is een brede, autovrije straat"
+ }
+ },
+ {
+ "if": "highway=footway",
+ "then": {
+ "nl": "Dit is een voetpaadje"
+ }
+ },
+ {
+ "if": "highway=path",
+ "then": {
+ "nl": "Dit is een wegeltje of bospad"
+ }
+ },
+ {
+ "if": "highway=bridleway",
+ "then": {
+ "nl": "Dit is een ruiterswegel"
+ }
+ },
+ {
+ "if": "highway=track",
+ "then": {
+ "nl": "Dit is een tractorspoor of weg om landbouwgrond te bereikken"
+ }
+ }
+ ]
},
{
- "if": "lit=no",
- "then": "Niet verlicht"
+ "question": {
+ "nl": "Wat is de wegverharding van dit pad?"
+ },
+ "render": {
+ "nl": "De ondergrond is {surface}",
+ "en": "The surface is {surface}",
+ "ru": "Поверхность - {surface}",
+ "fr": "La surface en {surface}",
+ "it": "La superficie è {surface}"
+ },
+ "freeform": {
+ "key": "surface"
+ },
+ "mappings": [
+ {
+ "if": "surface=grass",
+ "then": {
+ "nl": "De ondergrond is gras",
+ "en": "The surface is grass",
+ "ru": "Поверхность - трава",
+ "fr": "La surface est en herbe",
+ "it": "La superficie è erba"
+ }
+ },
+ {
+ "if": "surface=ground",
+ "then": {
+ "nl": "De ondergrond is aarde",
+ "en": "The surface is ground",
+ "ru": "Поверхность - земля",
+ "fr": "La surface est en terre",
+ "it": "La superficie è terreno"
+ }
+ },
+ {
+ "if": "surface=unpaved",
+ "then": {
+ "nl": "De ondergrond is onverhard",
+ "en": "The surface is unpaved",
+ "fr": "La surface est non pavée",
+ "it": "La superficie è non pavimentata"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "surface=sand",
+ "then": {
+ "nl": "De ondergrond is zand",
+ "en": "The surface is sand",
+ "ru": "Поверхность - песок",
+ "fr": "La surface est en sable",
+ "it": "La superficie è sabbia"
+ }
+ },
+ {
+ "if": "surface=paving_stones",
+ "then": {
+ "nl": "De ondergrond bestaat uit stoeptegels",
+ "en": "The surface is paving stones",
+ "ru": "Поверхность - брусчатка",
+ "it": "La superficie è pietre irregolari",
+ "fr": "La surface est en pierres pavées"
+ }
+ },
+ {
+ "if": "surface=asphalt",
+ "then": {
+ "nl": "De ondergrond is asfalt",
+ "en": "The surface is asphalt",
+ "ru": "Поверхность - асфальт",
+ "it": "La superficie è asfalto",
+ "fr": "La surface est en bitume"
+ }
+ },
+ {
+ "if": "surface=concrete",
+ "then": {
+ "nl": "De ondergrond is beton",
+ "en": "The surface is concrete",
+ "ru": "Поверхность - бетон",
+ "fr": "La surface est en béton",
+ "it": "La superficie è calcestruzzo"
+ }
+ },
+ {
+ "if": "surface=paved",
+ "then": {
+ "nl": "De ondergrond is verhard",
+ "en": "The surface is paved",
+ "fr": "La surface est pavée",
+ "it": "La superficie è pavimentata"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "question": "Is deze weg 's nachts verlicht?",
+ "mappings": [
+ {
+ "if": "lit=yes",
+ "then": "'s nachts verlicht"
+ },
+ {
+ "if": "lit=no",
+ "then": "Niet verlicht"
+ }
+ ]
}
- ]
- }
- ],
- "width": {
- "render": "7"
- },
- "dashArray": {
- "render": "",
- "mappings": [
- {
- "if": "highway=cycleway",
- "then": ""
- },
- {
- "if": "highway=path",
- "then": "0 12"
- },
- {
- "if": {
- "or": [
- "highway=footway",
- "highway=pedestrian"
- ]
- },
- "then": "12 18"
- },
- {
- "if": "highway=living_street",
- "then": "12 12 0 12"
- }
- ]
- },
- "color": {
- "render": "#eaba2a"
- },
- "presets": []
+ ],
+ "width": {
+ "render": "7"
+ },
+ "dashArray": {
+ "render": "",
+ "mappings": [
+ {
+ "if": "highway=cycleway",
+ "then": ""
+ },
+ {
+ "if": "highway=path",
+ "then": "0 12"
+ },
+ {
+ "if": {
+ "or": [
+ "highway=footway",
+ "highway=pedestrian"
+ ]
+ },
+ "then": "12 18"
+ },
+ {
+ "if": "highway=living_street",
+ "then": "12 12 0 12"
+ }
+ ]
+ },
+ "color": {
+ "render": "#eaba2a"
+ },
+ "presets": []
}
\ No newline at end of file
diff --git a/assets/layers/sport_pitch/sport_pitch.json b/assets/layers/sport_pitch/sport_pitch.json
index b871523f7..17e47f206 100644
--- a/assets/layers/sport_pitch/sport_pitch.json
+++ b/assets/layers/sport_pitch/sport_pitch.json
@@ -1,486 +1,486 @@
{
- "id": "sport_pitch",
- "name": {
- "nl": "Sportterrein",
- "fr": "Terrains de sport",
- "en": "Sport pitches",
- "ru": "Спортивные площадки",
- "it": "Campi sportivi"
- },
- "wayHandling": 1,
- "minzoom": 12,
- "source": {
- "osmTags": {
- "and": [
- "leisure=pitch"
- ]
- }
- },
- "calculatedTags": [
- "_size_classification=Number(feat.properties._surface) < 200 ? 'small' : (Number(feat.properties._surface) < 750 ? 'medium' : 'large') "
- ],
- "title": {
- "render": {
- "nl": "Sportterrein",
- "fr": "Terrain de sport",
- "en": "Sport pitch",
- "ru": "Спортивная площадка",
- "it": "Campo sportivo"
- }
- },
- "description": {
- "nl": "Een sportterrein",
- "fr": "Un terrain de sport",
- "en": "A sport pitch",
- "it": "Un campo sportivo",
- "ru": "Спортивная площадка"
- },
- "tagRenderings": [
- "images",
- {
- "render": {
- "nl": "Hier kan men {sport} beoefenen",
- "fr": "Ici on joue au {sport}",
- "en": "{sport} is played here",
- "it": "Qui si gioca a {sport}"
- },
- "freeform": {
- "key": "sport"
- },
- "question": {
- "nl": "Welke sporten kan men hier beoefenen?",
- "fr": "À quel sport peut-on jouer ici ?",
- "en": "Which sport can be played here?",
- "it": "Quale sport si gioca qui?"
- },
- "multiAnswer": true,
- "mappings": [
- {
- "if": {
- "and": [
- "sport=basketball"
- ]
- },
- "then": {
- "nl": "Hier kan men basketbal spelen",
- "fr": "Ici, on joue au basketball",
- "en": "Basketball is played here",
- "it": "Qui si gioca a basket",
- "ru": "Здесь можно играть в баскетбол"
- }
- },
- {
- "if": {
- "and": [
- "sport=soccer"
- ]
- },
- "then": {
- "nl": "Hier kan men voetbal spelen",
- "fr": "Ici, on joue au football",
- "en": "Soccer is played here",
- "it": "Qui si gioca a calcio",
- "ru": "Здесь можно играть в футбол"
- }
- },
- {
- "if": {
- "and": [
- "sport=table_tennis"
- ]
- },
- "then": {
- "nl": "Dit is een pingpongtafel",
- "fr": "C'est une table de ping-pong",
- "en": "This is a pingpong table",
- "ru": "Это стол для пинг-понга",
- "it": "Questo è un tavolo da ping pong"
- }
- },
- {
- "if": {
- "and": [
- "sport=tennis"
- ]
- },
- "then": {
- "nl": "Hier kan men tennis spelen",
- "fr": "Ici, on joue au tennis",
- "en": "Tennis is played here",
- "it": "Qui si gioca a tennis",
- "ru": "Здесь можно играть в теннис"
- }
- },
- {
- "if": {
- "and": [
- "sport=korfball"
- ]
- },
- "then": {
- "nl": "Hier kan men korfbal spelen",
- "fr": "Ici, on joue au korfball",
- "en": "Korfball is played here",
- "it": "Qui si gioca a korfball",
- "ru": "Здесь можно играть в корфбол"
- }
- },
- {
- "if": {
- "and": [
- "sport=basket"
- ]
- },
- "then": {
- "nl": "Hier kan men basketbal beoefenen",
- "fr": "Ici, on joue au basketball",
- "en": "Basketball is played here",
- "it": "Qui si gioca a basket",
- "ru": "Здесь можно играть в баскетбол"
- },
- "hideInAnswer": true
- }
- ]
- },
- {
- "question": {
- "nl": "Wat is de ondergrond van dit sportveld?",
- "fr": "De quelle surface est fait ce terrain de sport ?",
- "en": "Which is the surface of this sport pitch?",
- "it": "Qual è la superficie di questo campo sportivo?",
- "ru": "Какое покрытие на этой спортивной площадке?"
- },
- "render": {
- "nl": "De ondergrond is {surface}",
- "fr": "La surface est {surface}",
- "en": "The surface is {surface}",
- "ru": "Поверхность - {surface}",
- "it": "La superficie è {surface}"
- },
- "freeform": {
- "key": "surface"
- },
- "mappings": [
- {
- "if": "surface=grass",
- "then": {
- "nl": "De ondergrond is gras",
- "fr": "La surface est de l'herbe",
- "en": "The surface is grass",
- "ru": "Поверхность - трава",
- "it": "La superficie è erba"
- }
- },
- {
- "if": "surface=sand",
- "then": {
- "nl": "De ondergrond is zand",
- "fr": "La surface est du sable",
- "en": "The surface is sand",
- "ru": "Поверхность - песок",
- "it": "La superficie è sabbia"
- }
- },
- {
- "if": "surface=paving_stones",
- "then": {
- "nl": "De ondergrond bestaat uit stoeptegels",
- "fr": "La surface est des pavés",
- "en": "The surface is paving stones",
- "ru": "Поверхность - брусчатка",
- "it": "La superficie è pietre irregolari"
- }
- },
- {
- "if": "surface=asphalt",
- "then": {
- "nl": "De ondergrond is asfalt",
- "fr": "La surface est de l'asphalte",
- "en": "The surface is asphalt",
- "ru": "Поверхность - асфальт",
- "it": "La superficie è asfalto"
- }
- },
- {
- "if": "surface=concrete",
- "then": {
- "nl": "De ondergrond is beton",
- "fr": "La surface est du béton",
- "en": "The surface is concrete",
- "ru": "Поверхность - бетон",
- "it": "La superficie è calcestruzzo"
- }
- }
- ]
- },
- {
- "question": {
- "nl": "Is dit sportterrein publiek toegankelijk?",
- "fr": "Est-ce que ce terrain de sport est accessible au public ?",
- "en": "Is this sport pitch publicly accessible?",
- "it": "Questo campo sportivo è aperto al pubblico?",
- "ru": "Есть ли свободный доступ к этой спортивной площадке?"
- },
- "mappings": [
- {
- "if": "access=public",
- "then": {
- "nl": "Publiek toegankelijk",
- "fr": "Accessible au public",
- "en": "Public access",
- "it": "Aperto al pubblico",
- "ru": "Свободный доступ"
- }
- },
- {
- "if": "access=limited",
- "then": {
- "nl": "Beperkt toegankelijk (enkel na reservatie, tijdens bepaalde uren, ...)",
- "fr": "Accès limité (par exemple uniquement sur réservation, à certains horaires…)",
- "en": "Limited access (e.g. only with an appointment, during certain hours, ...)",
- "it": "Accesso limitato (p.es. solo con prenotazione, in certi orari, ...)",
- "ru": "Ограниченный доступ (напр., только по записи, в определённые часы, ...)"
- }
- },
- {
- "if": "access=members",
- "then": {
- "nl": "Enkel toegankelijk voor leden van de bijhorende sportclub",
- "fr": "Accessible uniquement aux membres du club",
- "en": "Only accessible for members of the club",
- "it": "Accesso limitato ai membri dell'associazione",
- "ru": "Доступ только членам клуба"
- }
- },
- {
- "if": "access=private",
- "then": {
- "nl": "Privaat en niet toegankelijk",
- "fr": "Privé - Pas accessible au public",
- "en": "Private - not accessible to the public",
- "it": "Privato - non aperto al pubblico"
- }
- }
- ]
- },
- {
- "question": {
- "nl": "Moet men reserveren om gebruik te maken van dit sportveld?",
- "fr": "Doit-on réserver pour utiliser ce terrain de sport ?",
- "en": "Does one have to make an appointment to use this sport pitch?",
- "it": "È necessario prenotarsi per usare questo campo sportivo?",
- "ru": "Нужна ли предварительная запись для доступа на эту спортивную площадку?"
- },
- "condition": {
- "and": [
- "access!=public",
- "access!=private",
- "access!=members"
- ]
- },
- "mappings": [
- {
- "if": "reservation=required",
- "then": {
- "nl": "Reserveren is verplicht om gebruik te maken van dit sportterrein",
- "fr": "Il est obligatoire de réserver pour utiliser ce terrain de sport",
- "en": "Making an appointment is obligatory to use this sport pitch",
- "it": "La prenotazione è obbligatoria per usare questo campo sportivo"
- }
- },
- {
- "if": "reservation=recommended",
- "then": {
- "nl": "Reserveren is sterk aangeraden om gebruik te maken van dit sportterrein",
- "fr": "Il est recommendé de réserver pour utiliser ce terrain de sport",
- "en": "Making an appointment is recommended when using this sport pitch",
- "it": "La prenotazione è consigliata per usare questo campo sportivo",
- "ru": "Желательна предварительная запись для доступа на эту спортивную площадку"
- }
- },
- {
- "if": "reservation=yes",
- "then": {
- "nl": "Reserveren is mogelijk, maar geen voorwaarde",
- "fr": "Il est possible de réserver, mais ce n'est pas nécéssaire pour utiliser ce terrain de sport",
- "en": "Making an appointment is possible, but not necessary to use this sport pitch",
- "it": "La prenotazione è consentita, ma non è obbligatoria per usare questo campo sportivo",
- "ru": "Предварительная запись для доступа на эту спортивную площадку возможна, но не обязательна"
- }
- },
- {
- "if": "reservation=no",
- "then": {
- "nl": "Reserveren is niet mogelijk",
- "fr": "On ne peut pas réserver",
- "en": "Making an appointment is not possible",
- "it": "Non è possibile prenotare",
- "ru": "Невозможна предварительная запись"
- }
- }
- ]
- },
- {
- "question": {
- "nl": "Wat is het telefoonnummer van de bevoegde dienst of uitbater?",
- "fr": "Quel est le numéro de téléphone du gérant ?",
- "en": "What is the phone number of the operator?",
- "it": "Qual è il numero di telefono del gestore?"
- },
- "freeform": {
- "key": "phone",
- "type": "phone"
- },
- "render": "{phone}"
- },
- {
- "question": {
- "nl": "Wat is het email-adres van de bevoegde dienst of uitbater?",
- "fr": "Quelle est l'adresse courriel du gérant ?",
- "en": "What is the email address of the operator?",
- "it": "Qual è l'indirizzo email del gestore?"
- },
- "freeform": {
- "key": "email",
- "type": "email"
- },
- "render": "{email}"
- },
- {
- "question": {
- "nl": "Wanneer is dit sportveld toegankelijk?",
- "fr": "Quand ce terrain est-il accessible ?",
- "en": "When is this pitch accessible?",
- "it": "Quando è aperto questo campo sportivo?",
- "ru": "В какое время доступна эта площадка?"
- },
- "render": "Openingsuren: {opening_hours_table()}",
- "freeform": {
- "key": "opening_hours",
- "type": "opening_hours"
- },
- "mappings": [
- {
- "if": "opening_hours=",
- "then": "24/7 toegankelijk",
- "hideInAnswer": true
- },
- {
- "if": "opening_hours=24/7",
- "then": {
- "nl": "24/7 toegankelijk",
- "fr": "Accessible en permanence",
- "en": "Always accessible",
- "ru": "Всегда доступен",
- "it": "Sempre aperto"
- }
- }
- ],
- "condition": "access~*"
- },
- "questions",
- {
- "render": "{reviews(name, sportpitch)}"
- }
- ],
- "icon": {
- "render": "circle:white;./assets/layers/sport_pitch/sport_pitch.svg",
- "mappings": [
- {
- "if": {
- "or": [
- "sport=baseball",
- "sport=basketball",
- "sport=beachvolleyball",
- "sport=boules",
- "sport=skateboard",
- "sport=soccer",
- "sport=table_tennis",
- "sport=tennis",
- "sport=volleyball"
- ]
- },
- "then": "circle:white;./assets/layers/sport_pitch/{sport}.svg"
- }
- ]
- },
- "iconOverlays": [
- {
- "if": {
- "and": [
- "opening_hours!=24/7",
- "opening_hours~*"
- ]
- },
- "then": "isOpen",
- "badge": true
- },
- {
- "if": {
- "or": [
- "access=customers",
- "access=private",
- "access=no"
- ]
- },
- "then": "circle:white;./assets/layers/sport_pitch/lock.svg",
- "badge": true
- }
- ],
- "width": {
- "render": "1"
- },
- "iconSize": {
- "render": "25,25,center",
- "mappings": [
- {
- "if": {
- "or": [
- "_size_classification=medium",
- "id~node/.*"
- ]
- },
- "then": "40,40,center"
- },
- {
- "if": "_size_classification=small",
- "then": "25,25,center"
- },
- {
- "if": "_size_classification=large",
- "then": "50,50,center"
- }
- ]
- },
- "color": {
- "render": "#7cb82f"
- },
- "presets": [
- {
- "title": {
- "nl": "Ping-pong tafel",
- "fr": "Table de ping-pong",
- "en": "Tabletennis table",
- "it": "Tavolo da tennistavolo",
- "ru": "Стол для настольного тенниса"
- },
- "tags": [
- "leisure=pitch",
- "sport=table_tennis"
- ]
- },
- {
- "title": {
+ "id": "sport_pitch",
+ "name": {
"nl": "Sportterrein",
- "fr": "Terrain de sport",
- "en": "Sport pitch",
- "ru": "Спортивная площадка",
- "it": "Campo sportivo"
- },
- "tags": [
- "leisure=pitch",
- "fixme=Toegevoegd met MapComplete, geometry nog uit te tekenen"
- ]
- }
- ]
+ "fr": "Terrains de sport",
+ "en": "Sport pitches",
+ "ru": "Спортивные площадки",
+ "it": "Campi sportivi"
+ },
+ "wayHandling": 1,
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
+ "and": [
+ "leisure=pitch"
+ ]
+ }
+ },
+ "calculatedTags": [
+ "_size_classification=Number(feat.properties._surface) < 200 ? 'small' : (Number(feat.properties._surface) < 750 ? 'medium' : 'large') "
+ ],
+ "title": {
+ "render": {
+ "nl": "Sportterrein",
+ "fr": "Terrain de sport",
+ "en": "Sport pitch",
+ "ru": "Спортивная площадка",
+ "it": "Campo sportivo"
+ }
+ },
+ "description": {
+ "nl": "Een sportterrein",
+ "fr": "Un terrain de sport",
+ "en": "A sport pitch",
+ "it": "Un campo sportivo",
+ "ru": "Спортивная площадка"
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "render": {
+ "nl": "Hier kan men {sport} beoefenen",
+ "fr": "Ici on joue au {sport}",
+ "en": "{sport} is played here",
+ "it": "Qui si gioca a {sport}"
+ },
+ "freeform": {
+ "key": "sport"
+ },
+ "question": {
+ "nl": "Welke sporten kan men hier beoefenen?",
+ "fr": "À quel sport peut-on jouer ici ?",
+ "en": "Which sport can be played here?",
+ "it": "Quale sport si gioca qui?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "sport=basketball"
+ ]
+ },
+ "then": {
+ "nl": "Hier kan men basketbal spelen",
+ "fr": "Ici, on joue au basketball",
+ "en": "Basketball is played here",
+ "it": "Qui si gioca a basket",
+ "ru": "Здесь можно играть в баскетбол"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "sport=soccer"
+ ]
+ },
+ "then": {
+ "nl": "Hier kan men voetbal spelen",
+ "fr": "Ici, on joue au football",
+ "en": "Soccer is played here",
+ "it": "Qui si gioca a calcio",
+ "ru": "Здесь можно играть в футбол"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "sport=table_tennis"
+ ]
+ },
+ "then": {
+ "nl": "Dit is een pingpongtafel",
+ "fr": "C'est une table de ping-pong",
+ "en": "This is a pingpong table",
+ "ru": "Это стол для пинг-понга",
+ "it": "Questo è un tavolo da ping pong"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "sport=tennis"
+ ]
+ },
+ "then": {
+ "nl": "Hier kan men tennis spelen",
+ "fr": "Ici, on joue au tennis",
+ "en": "Tennis is played here",
+ "it": "Qui si gioca a tennis",
+ "ru": "Здесь можно играть в теннис"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "sport=korfball"
+ ]
+ },
+ "then": {
+ "nl": "Hier kan men korfbal spelen",
+ "fr": "Ici, on joue au korfball",
+ "en": "Korfball is played here",
+ "it": "Qui si gioca a korfball",
+ "ru": "Здесь можно играть в корфбол"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "sport=basket"
+ ]
+ },
+ "then": {
+ "nl": "Hier kan men basketbal beoefenen",
+ "fr": "Ici, on joue au basketball",
+ "en": "Basketball is played here",
+ "it": "Qui si gioca a basket",
+ "ru": "Здесь можно играть в баскетбол"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "question": {
+ "nl": "Wat is de ondergrond van dit sportveld?",
+ "fr": "De quelle surface est fait ce terrain de sport ?",
+ "en": "Which is the surface of this sport pitch?",
+ "it": "Qual è la superficie di questo campo sportivo?",
+ "ru": "Какое покрытие на этой спортивной площадке?"
+ },
+ "render": {
+ "nl": "De ondergrond is {surface}",
+ "fr": "La surface est {surface}",
+ "en": "The surface is {surface}",
+ "ru": "Поверхность - {surface}",
+ "it": "La superficie è {surface}"
+ },
+ "freeform": {
+ "key": "surface"
+ },
+ "mappings": [
+ {
+ "if": "surface=grass",
+ "then": {
+ "nl": "De ondergrond is gras",
+ "fr": "La surface est de l'herbe",
+ "en": "The surface is grass",
+ "ru": "Поверхность - трава",
+ "it": "La superficie è erba"
+ }
+ },
+ {
+ "if": "surface=sand",
+ "then": {
+ "nl": "De ondergrond is zand",
+ "fr": "La surface est du sable",
+ "en": "The surface is sand",
+ "ru": "Поверхность - песок",
+ "it": "La superficie è sabbia"
+ }
+ },
+ {
+ "if": "surface=paving_stones",
+ "then": {
+ "nl": "De ondergrond bestaat uit stoeptegels",
+ "fr": "La surface est des pavés",
+ "en": "The surface is paving stones",
+ "ru": "Поверхность - брусчатка",
+ "it": "La superficie è pietre irregolari"
+ }
+ },
+ {
+ "if": "surface=asphalt",
+ "then": {
+ "nl": "De ondergrond is asfalt",
+ "fr": "La surface est de l'asphalte",
+ "en": "The surface is asphalt",
+ "ru": "Поверхность - асфальт",
+ "it": "La superficie è asfalto"
+ }
+ },
+ {
+ "if": "surface=concrete",
+ "then": {
+ "nl": "De ondergrond is beton",
+ "fr": "La surface est du béton",
+ "en": "The surface is concrete",
+ "ru": "Поверхность - бетон",
+ "it": "La superficie è calcestruzzo"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "nl": "Is dit sportterrein publiek toegankelijk?",
+ "fr": "Est-ce que ce terrain de sport est accessible au public ?",
+ "en": "Is this sport pitch publicly accessible?",
+ "it": "Questo campo sportivo è aperto al pubblico?",
+ "ru": "Есть ли свободный доступ к этой спортивной площадке?"
+ },
+ "mappings": [
+ {
+ "if": "access=public",
+ "then": {
+ "nl": "Publiek toegankelijk",
+ "fr": "Accessible au public",
+ "en": "Public access",
+ "it": "Aperto al pubblico",
+ "ru": "Свободный доступ"
+ }
+ },
+ {
+ "if": "access=limited",
+ "then": {
+ "nl": "Beperkt toegankelijk (enkel na reservatie, tijdens bepaalde uren, ...)",
+ "fr": "Accès limité (par exemple uniquement sur réservation, à certains horaires…)",
+ "en": "Limited access (e.g. only with an appointment, during certain hours, ...)",
+ "it": "Accesso limitato (p.es. solo con prenotazione, in certi orari, ...)",
+ "ru": "Ограниченный доступ (напр., только по записи, в определённые часы, ...)"
+ }
+ },
+ {
+ "if": "access=members",
+ "then": {
+ "nl": "Enkel toegankelijk voor leden van de bijhorende sportclub",
+ "fr": "Accessible uniquement aux membres du club",
+ "en": "Only accessible for members of the club",
+ "it": "Accesso limitato ai membri dell'associazione",
+ "ru": "Доступ только членам клуба"
+ }
+ },
+ {
+ "if": "access=private",
+ "then": {
+ "nl": "Privaat en niet toegankelijk",
+ "fr": "Privé - Pas accessible au public",
+ "en": "Private - not accessible to the public",
+ "it": "Privato - non aperto al pubblico"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "nl": "Moet men reserveren om gebruik te maken van dit sportveld?",
+ "fr": "Doit-on réserver pour utiliser ce terrain de sport ?",
+ "en": "Does one have to make an appointment to use this sport pitch?",
+ "it": "È necessario prenotarsi per usare questo campo sportivo?",
+ "ru": "Нужна ли предварительная запись для доступа на эту спортивную площадку?"
+ },
+ "condition": {
+ "and": [
+ "access!=public",
+ "access!=private",
+ "access!=members"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "reservation=required",
+ "then": {
+ "nl": "Reserveren is verplicht om gebruik te maken van dit sportterrein",
+ "fr": "Il est obligatoire de réserver pour utiliser ce terrain de sport",
+ "en": "Making an appointment is obligatory to use this sport pitch",
+ "it": "La prenotazione è obbligatoria per usare questo campo sportivo"
+ }
+ },
+ {
+ "if": "reservation=recommended",
+ "then": {
+ "nl": "Reserveren is sterk aangeraden om gebruik te maken van dit sportterrein",
+ "fr": "Il est recommendé de réserver pour utiliser ce terrain de sport",
+ "en": "Making an appointment is recommended when using this sport pitch",
+ "it": "La prenotazione è consigliata per usare questo campo sportivo",
+ "ru": "Желательна предварительная запись для доступа на эту спортивную площадку"
+ }
+ },
+ {
+ "if": "reservation=yes",
+ "then": {
+ "nl": "Reserveren is mogelijk, maar geen voorwaarde",
+ "fr": "Il est possible de réserver, mais ce n'est pas nécéssaire pour utiliser ce terrain de sport",
+ "en": "Making an appointment is possible, but not necessary to use this sport pitch",
+ "it": "La prenotazione è consentita, ma non è obbligatoria per usare questo campo sportivo",
+ "ru": "Предварительная запись для доступа на эту спортивную площадку возможна, но не обязательна"
+ }
+ },
+ {
+ "if": "reservation=no",
+ "then": {
+ "nl": "Reserveren is niet mogelijk",
+ "fr": "On ne peut pas réserver",
+ "en": "Making an appointment is not possible",
+ "it": "Non è possibile prenotare",
+ "ru": "Невозможна предварительная запись"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "nl": "Wat is het telefoonnummer van de bevoegde dienst of uitbater?",
+ "fr": "Quel est le numéro de téléphone du gérant ?",
+ "en": "What is the phone number of the operator?",
+ "it": "Qual è il numero di telefono del gestore?"
+ },
+ "freeform": {
+ "key": "phone",
+ "type": "phone"
+ },
+ "render": "{phone}"
+ },
+ {
+ "question": {
+ "nl": "Wat is het email-adres van de bevoegde dienst of uitbater?",
+ "fr": "Quelle est l'adresse courriel du gérant ?",
+ "en": "What is the email address of the operator?",
+ "it": "Qual è l'indirizzo email del gestore?"
+ },
+ "freeform": {
+ "key": "email",
+ "type": "email"
+ },
+ "render": "{email}"
+ },
+ {
+ "question": {
+ "nl": "Wanneer is dit sportveld toegankelijk?",
+ "fr": "Quand ce terrain est-il accessible ?",
+ "en": "When is this pitch accessible?",
+ "it": "Quando è aperto questo campo sportivo?",
+ "ru": "В какое время доступна эта площадка?"
+ },
+ "render": "Openingsuren: {opening_hours_table()}",
+ "freeform": {
+ "key": "opening_hours",
+ "type": "opening_hours"
+ },
+ "mappings": [
+ {
+ "if": "opening_hours=",
+ "then": "24/7 toegankelijk",
+ "hideInAnswer": true
+ },
+ {
+ "if": "opening_hours=24/7",
+ "then": {
+ "nl": "24/7 toegankelijk",
+ "fr": "Accessible en permanence",
+ "en": "Always accessible",
+ "ru": "Всегда доступен",
+ "it": "Sempre aperto"
+ }
+ }
+ ],
+ "condition": "access~*"
+ },
+ "questions",
+ {
+ "render": "{reviews(name, sportpitch)}"
+ }
+ ],
+ "icon": {
+ "render": "circle:white;./assets/layers/sport_pitch/sport_pitch.svg",
+ "mappings": [
+ {
+ "if": {
+ "or": [
+ "sport=baseball",
+ "sport=basketball",
+ "sport=beachvolleyball",
+ "sport=boules",
+ "sport=skateboard",
+ "sport=soccer",
+ "sport=table_tennis",
+ "sport=tennis",
+ "sport=volleyball"
+ ]
+ },
+ "then": "circle:white;./assets/layers/sport_pitch/{sport}.svg"
+ }
+ ]
+ },
+ "iconOverlays": [
+ {
+ "if": {
+ "and": [
+ "opening_hours!=24/7",
+ "opening_hours~*"
+ ]
+ },
+ "then": "isOpen",
+ "badge": true
+ },
+ {
+ "if": {
+ "or": [
+ "access=customers",
+ "access=private",
+ "access=no"
+ ]
+ },
+ "then": "circle:white;./assets/layers/sport_pitch/lock.svg",
+ "badge": true
+ }
+ ],
+ "width": {
+ "render": "1"
+ },
+ "iconSize": {
+ "render": "25,25,center",
+ "mappings": [
+ {
+ "if": {
+ "or": [
+ "_size_classification=medium",
+ "id~node/.*"
+ ]
+ },
+ "then": "40,40,center"
+ },
+ {
+ "if": "_size_classification=small",
+ "then": "25,25,center"
+ },
+ {
+ "if": "_size_classification=large",
+ "then": "50,50,center"
+ }
+ ]
+ },
+ "color": {
+ "render": "#7cb82f"
+ },
+ "presets": [
+ {
+ "title": {
+ "nl": "Ping-pong tafel",
+ "fr": "Table de ping-pong",
+ "en": "Tabletennis table",
+ "it": "Tavolo da tennistavolo",
+ "ru": "Стол для настольного тенниса"
+ },
+ "tags": [
+ "leisure=pitch",
+ "sport=table_tennis"
+ ]
+ },
+ {
+ "title": {
+ "nl": "Sportterrein",
+ "fr": "Terrain de sport",
+ "en": "Sport pitch",
+ "ru": "Спортивная площадка",
+ "it": "Campo sportivo"
+ },
+ "tags": [
+ "leisure=pitch",
+ "fixme=Toegevoegd met MapComplete, geometry nog uit te tekenen"
+ ]
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/surveillance_camera/surveillance_camera.json b/assets/layers/surveillance_camera/surveillance_camera.json
index 7a6a4248c..40bed359f 100644
--- a/assets/layers/surveillance_camera/surveillance_camera.json
+++ b/assets/layers/surveillance_camera/surveillance_camera.json
@@ -1,484 +1,484 @@
{
- "id": "surveillance_camera",
- "name": {
- "en": "Surveillance camera's",
- "nl": "Bewakingscamera's",
- "ru": "Камеры наблюдения",
- "fr": "Caméras de surveillance",
- "it": "Videocamere di sorveglianza"
- },
- "minzoom": 12,
- "source": {
- "osmTags": {
- "and": [
- "man_made=surveillance",
- {
- "or": [
- "surveillance:type=camera",
- "surveillance:type=ALPR",
- "surveillance:type=ANPR"
- ]
- }
- ]
- }
- },
- "title": {
- "render": {
- "en": "Surveillance Camera",
- "nl": "Bewakingscamera",
- "ru": "Камера наблюдения",
- "fr": "Caméra de surveillance",
- "it": "Videocamera di sorveglianza"
- }
- },
- "tagRenderings": [
- "images",
- {
- "#": "Camera type: fixed; panning; dome",
- "question": {
- "en": "What kind of camera is this?",
- "nl": "Wat voor soort camera is dit?",
- "fr": "Quel genre de caméra est-ce ?",
- "it": "Di che tipo di videocamera si tratta?",
- "ru": "Какая это камера?"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "camera:type=fixed"
- ]
- },
- "then": {
- "en": "A fixed (non-moving) camera",
- "nl": "Een vaste camera",
- "fr": "Une caméra fixe (non mobile)",
- "it": "Una videocamera fissa (non semovente)"
- }
- },
- {
- "if": {
- "and": [
- "camera:type=dome"
- ]
- },
- "then": {
- "en": "A dome camera (which can turn)",
- "nl": "Een dome (bolvormige camera die kan draaien)",
- "fr": "Une caméra dôme (qui peut tourner)",
- "it": "Una videocamera a cupola (che può ruotare)",
- "ru": "Камера с поворотным механизмом"
- }
- },
- {
- "if": {
- "and": [
- "camera:type=panning"
- ]
- },
- "then": {
- "en": "A panning camera",
- "nl": "Een camera die (met een motor) van links naar rechts kan draaien",
- "ru": "Панорамная камера",
- "fr": "Une caméra panoramique",
- "it": "Una videocamera panoramica"
- }
- }
- ]
+ "id": "surveillance_camera",
+ "name": {
+ "en": "Surveillance camera's",
+ "nl": "Bewakingscamera's",
+ "ru": "Камеры наблюдения",
+ "fr": "Caméras de surveillance",
+ "it": "Videocamere di sorveglianza"
},
- {
- "#": "direction. We don't ask this for a dome on a pole or ceiling as it has a 360° view",
- "question": {
- "en": "In which geographical direction does this camera film?",
- "nl": "In welke geografische richting filmt deze camera?",
- "fr": "Dans quelle direction géographique cette caméra filme-t-elle ?",
- "it": "In quale direzione geografica punta questa videocamera?"
- },
- "render": {
- "en": "Films to a compass heading of {camera:direction}",
- "nl": "Filmt in kompasrichting {camera:direction}",
- "fr": "Filme dans une direction {camera:direction}",
- "it": "Punta in direzione {camera:direction}"
- },
- "condition": {
- "or": [
- "camera:direction~*",
- "direction~*",
- "camera:type!=dome",
- {
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
"and": [
- "camera:type=dome",
- "camera:mount=wall"
+ "man_made=surveillance",
+ {
+ "or": [
+ "surveillance:type=camera",
+ "surveillance:type=ALPR",
+ "surveillance:type=ANPR"
+ ]
+ }
]
- }
- ]
- },
- "freeform": {
- "key": "camera:direction",
- "type": "direction"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "camera:direction=",
- "direction~*"
- ]
- },
- "then": {
- "en": "Films to a compass heading of {direction}",
- "nl": "Filmt in kompasrichting {direction}",
- "fr": "Filme dans une direction {direction}",
- "it": "Punta in direzione {direction}"
- },
- "hideInAnswer": true
}
- ]
},
- {
- "#": "Operator",
- "freeform": {
- "key": "operator"
- },
- "question": {
- "en": "Who operates this CCTV?",
- "nl": "Wie beheert deze bewakingscamera?",
- "fr": "Qui exploite ce système de vidéosurveillance ?",
- "it": "Chi gestisce questa videocamera a circuito chiuso?"
- },
- "render": {
- "en": "Operated by {operator}",
- "nl": "Beheer door {operator}",
- "fr": "Exploité par {operator}",
- "it": "È gestita da {operator}"
- }
- },
- {
- "#": "Surveillance type: public, outdoor, indoor",
- "question": {
- "en": "What kind of surveillance is this camera",
- "nl": "Wat soort bewaking wordt hier uitgevoerd?",
- "fr": "Quel genre de surveillance est cette caméra",
- "it": "Che cosa sorveglia questa videocamera"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "surveillance=public"
- ]
- },
- "then": {
- "en": "A public area is surveilled, such as a street, a bridge, a square, a park, a train station, a public corridor or tunnel,...",
- "nl": "Bewaking van de publieke ruilmte, dus een straat, een brug, een park, een plein, een stationsgebouw, een publiek toegankelijke gang of tunnel...",
- "fr": "Une zone publique est surveillée, telle qu'une rue, un pont, une place, un parc, une gare, un couloir ou un tunnel public…",
- "it": "Sorveglia un'area pubblica, come una strada, un ponte, una piazza, un parco, una stazione, un passaggio o un sottopasso pubblico, ..."
- }
- },
- {
- "if": {
- "and": [
- "surveillance=outdoor"
- ]
- },
- "then": {
- "en": "An outdoor, yet private area is surveilled (e.g. a parking lot, a fuel station, courtyard, entrance, private driveway, ...)",
- "nl": "Een buitenruimte met privaat karakter (zoals een privé-oprit, een parking, tankstation, ...)",
- "fr": "Une zone extérieure, mais privée, est surveillée (par exemple, un parking, une station-service, une cour, une entrée, une allée privée, etc.)",
- "it": "Sorveglia un'area esterna di proprietà privata (un parcheggio, una stazione di servizio, un cortile, un ingresso, un vialetto privato, ...)"
- }
- },
- {
- "if": {
- "and": [
- "surveillance=indoor"
- ]
- },
- "then": {
- "nl": "Een private binnenruimte wordt bewaakt, bv. een winkel, een parkeergarage, ...",
- "en": "A private indoor area is surveilled, e.g. a shop, a private underground parking, ...",
- "fr": "Une zone intérieure privée est surveillée, par exemple un magasin, un parking souterrain privé…",
- "it": "Sorveglia un ambiente interno di proprietà privata, per esempio un negozio, un parcheggio sotterraneo privato, ..."
- }
+ "title": {
+ "render": {
+ "en": "Surveillance Camera",
+ "nl": "Bewakingscamera",
+ "ru": "Камера наблюдения",
+ "fr": "Caméra de surveillance",
+ "it": "Videocamera di sorveglianza"
}
- ]
},
- {
- "#": "Indoor camera? This isn't clear for 'public'-cameras",
- "question": {
- "en": "Is the public space surveilled by this camera an indoor or outdoor space?",
- "nl": "Bevindt de bewaakte publieke ruimte camera zich binnen of buiten?",
- "fr": "L'espace public surveillé par cette caméra est-il un espace intérieur ou extérieur ?",
- "it": "Lo spazio pubblico sorvegliato da questa videocamera è all'aperto o al chiuso?"
- },
- "condition": {
- "and": [
- "surveillance:type=public"
- ]
- },
- "mappings": [
+ "tagRenderings": [
+ "images",
{
- "if": "indoor=yes",
- "then": {
- "en": "This camera is located indoors",
- "nl": "Deze camera bevindt zich binnen",
- "fr": "Cette caméra est située à l'intérieur",
- "it": "Questa videocamera si trova al chiuso"
- }
+ "#": "Camera type: fixed; panning; dome",
+ "question": {
+ "en": "What kind of camera is this?",
+ "nl": "Wat voor soort camera is dit?",
+ "fr": "Quel genre de caméra est-ce ?",
+ "it": "Di che tipo di videocamera si tratta?",
+ "ru": "Какая это камера?"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "camera:type=fixed"
+ ]
+ },
+ "then": {
+ "en": "A fixed (non-moving) camera",
+ "nl": "Een vaste camera",
+ "fr": "Une caméra fixe (non mobile)",
+ "it": "Una videocamera fissa (non semovente)"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "camera:type=dome"
+ ]
+ },
+ "then": {
+ "en": "A dome camera (which can turn)",
+ "nl": "Een dome (bolvormige camera die kan draaien)",
+ "fr": "Une caméra dôme (qui peut tourner)",
+ "it": "Una videocamera a cupola (che può ruotare)",
+ "ru": "Камера с поворотным механизмом"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "camera:type=panning"
+ ]
+ },
+ "then": {
+ "en": "A panning camera",
+ "nl": "Een camera die (met een motor) van links naar rechts kan draaien",
+ "ru": "Панорамная камера",
+ "fr": "Une caméra panoramique",
+ "it": "Una videocamera panoramica"
+ }
+ }
+ ]
},
{
- "if": "indoor=no",
- "then": {
- "en": "This camera is located outdoors",
- "nl": "Deze camera bevindt zich buiten",
- "fr": "Cette caméra est située à l'extérieur",
- "it": "Questa videocamera si trova all'aperto",
- "ru": "Эта камера расположена снаружи"
- }
+ "#": "direction. We don't ask this for a dome on a pole or ceiling as it has a 360° view",
+ "question": {
+ "en": "In which geographical direction does this camera film?",
+ "nl": "In welke geografische richting filmt deze camera?",
+ "fr": "Dans quelle direction géographique cette caméra filme-t-elle ?",
+ "it": "In quale direzione geografica punta questa videocamera?"
+ },
+ "render": {
+ "en": "Films to a compass heading of {camera:direction}",
+ "nl": "Filmt in kompasrichting {camera:direction}",
+ "fr": "Filme dans une direction {camera:direction}",
+ "it": "Punta in direzione {camera:direction}"
+ },
+ "condition": {
+ "or": [
+ "camera:direction~*",
+ "direction~*",
+ "camera:type!=dome",
+ {
+ "and": [
+ "camera:type=dome",
+ "camera:mount=wall"
+ ]
+ }
+ ]
+ },
+ "freeform": {
+ "key": "camera:direction",
+ "type": "direction"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "camera:direction=",
+ "direction~*"
+ ]
+ },
+ "then": {
+ "en": "Films to a compass heading of {direction}",
+ "nl": "Filmt in kompasrichting {direction}",
+ "fr": "Filme dans une direction {direction}",
+ "it": "Punta in direzione {direction}"
+ },
+ "hideInAnswer": true
+ }
+ ]
},
{
- "if": "indoor=",
- "then": {
- "en": "This camera is probably located outdoors",
- "nl": "Deze camera bevindt zich waarschijnlijk buiten",
- "fr": "Cette caméra est probablement située à l'extérieur",
- "it": "Questa videocamera si trova probabilmente all'esterno",
- "ru": "Возможно, эта камера расположена снаружи"
- },
- "hideInAnswer": true
+ "#": "Operator",
+ "freeform": {
+ "key": "operator"
+ },
+ "question": {
+ "en": "Who operates this CCTV?",
+ "nl": "Wie beheert deze bewakingscamera?",
+ "fr": "Qui exploite ce système de vidéosurveillance ?",
+ "it": "Chi gestisce questa videocamera a circuito chiuso?"
+ },
+ "render": {
+ "en": "Operated by {operator}",
+ "nl": "Beheer door {operator}",
+ "fr": "Exploité par {operator}",
+ "it": "È gestita da {operator}"
+ }
+ },
+ {
+ "#": "Surveillance type: public, outdoor, indoor",
+ "question": {
+ "en": "What kind of surveillance is this camera",
+ "nl": "Wat soort bewaking wordt hier uitgevoerd?",
+ "fr": "Quel genre de surveillance est cette caméra",
+ "it": "Che cosa sorveglia questa videocamera"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "surveillance=public"
+ ]
+ },
+ "then": {
+ "en": "A public area is surveilled, such as a street, a bridge, a square, a park, a train station, a public corridor or tunnel,...",
+ "nl": "Bewaking van de publieke ruilmte, dus een straat, een brug, een park, een plein, een stationsgebouw, een publiek toegankelijke gang of tunnel...",
+ "fr": "Une zone publique est surveillée, telle qu'une rue, un pont, une place, un parc, une gare, un couloir ou un tunnel public…",
+ "it": "Sorveglia un'area pubblica, come una strada, un ponte, una piazza, un parco, una stazione, un passaggio o un sottopasso pubblico, ..."
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "surveillance=outdoor"
+ ]
+ },
+ "then": {
+ "en": "An outdoor, yet private area is surveilled (e.g. a parking lot, a fuel station, courtyard, entrance, private driveway, ...)",
+ "nl": "Een buitenruimte met privaat karakter (zoals een privé-oprit, een parking, tankstation, ...)",
+ "fr": "Une zone extérieure, mais privée, est surveillée (par exemple, un parking, une station-service, une cour, une entrée, une allée privée, etc.)",
+ "it": "Sorveglia un'area esterna di proprietà privata (un parcheggio, una stazione di servizio, un cortile, un ingresso, un vialetto privato, ...)"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "surveillance=indoor"
+ ]
+ },
+ "then": {
+ "nl": "Een private binnenruimte wordt bewaakt, bv. een winkel, een parkeergarage, ...",
+ "en": "A private indoor area is surveilled, e.g. a shop, a private underground parking, ...",
+ "fr": "Une zone intérieure privée est surveillée, par exemple un magasin, un parking souterrain privé…",
+ "it": "Sorveglia un ambiente interno di proprietà privata, per esempio un negozio, un parcheggio sotterraneo privato, ..."
+ }
+ }
+ ]
+ },
+ {
+ "#": "Indoor camera? This isn't clear for 'public'-cameras",
+ "question": {
+ "en": "Is the public space surveilled by this camera an indoor or outdoor space?",
+ "nl": "Bevindt de bewaakte publieke ruimte camera zich binnen of buiten?",
+ "fr": "L'espace public surveillé par cette caméra est-il un espace intérieur ou extérieur ?",
+ "it": "Lo spazio pubblico sorvegliato da questa videocamera è all'aperto o al chiuso?"
+ },
+ "condition": {
+ "and": [
+ "surveillance:type=public"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "indoor=yes",
+ "then": {
+ "en": "This camera is located indoors",
+ "nl": "Deze camera bevindt zich binnen",
+ "fr": "Cette caméra est située à l'intérieur",
+ "it": "Questa videocamera si trova al chiuso"
+ }
+ },
+ {
+ "if": "indoor=no",
+ "then": {
+ "en": "This camera is located outdoors",
+ "nl": "Deze camera bevindt zich buiten",
+ "fr": "Cette caméra est située à l'extérieur",
+ "it": "Questa videocamera si trova all'aperto",
+ "ru": "Эта камера расположена снаружи"
+ }
+ },
+ {
+ "if": "indoor=",
+ "then": {
+ "en": "This camera is probably located outdoors",
+ "nl": "Deze camera bevindt zich waarschijnlijk buiten",
+ "fr": "Cette caméra est probablement située à l'extérieur",
+ "it": "Questa videocamera si trova probabilmente all'esterno",
+ "ru": "Возможно, эта камера расположена снаружи"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "#": "Level",
+ "question": {
+ "en": "On which level is this camera located?",
+ "nl": "Op welke verdieping bevindt deze camera zich?",
+ "fr": "À quel niveau se trouve cette caméra ?",
+ "it": "A che piano si trova questa videocamera?"
+ },
+ "render": {
+ "en": "Located on level {level}",
+ "nl": "Bevindt zich op verdieping {level}",
+ "fr": "Situé au niveau {level}",
+ "it": "Si trova al piano {level}"
+ },
+ "freeform": {
+ "key": "level",
+ "type": "nat"
+ },
+ "condition": {
+ "or": [
+ "indoor=yes",
+ "surveillance:type=ye"
+ ]
+ }
+ },
+ {
+ "#": "Surveillance:zone",
+ "question": {
+ "en": "What exactly is surveilled here?",
+ "nl": "Wat wordt hier precies bewaakt?",
+ "fr": "Qu'est-ce qui est surveillé ici ?",
+ "it": "Che cosa è sorvegliato qui?"
+ },
+ "freeform": {
+ "key": "surveillance:zone"
+ },
+ "render": {
+ "en": " Surveills a {surveillance:zone}",
+ "nl": "Bewaakt een {surveillance:zone}",
+ "fr": " Surveille un(e) {surveillance:zone}",
+ "it": " Sorveglia una {surveillance:zone}"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "surveillance:zone=parking"
+ ]
+ },
+ "then": {
+ "en": "Surveills a parking",
+ "nl": "Bewaakt een parking",
+ "fr": "Surveille un parking",
+ "it": "Sorveglia un parcheggio"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "surveillance:zone=traffic"
+ ]
+ },
+ "then": {
+ "en": "Surveills the traffic",
+ "nl": "Bewaakt het verkeer",
+ "fr": "Surveille la circulation",
+ "it": "Sorveglia il traffico"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "surveillance:zone=entrance"
+ ]
+ },
+ "then": {
+ "en": "Surveills an entrance",
+ "nl": "Bewaakt een ingang",
+ "fr": "Surveille une entrée",
+ "it": "Sorveglia un ingresso"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "surveillance:zone=corridor"
+ ]
+ },
+ "then": {
+ "en": "Surveills a corridor",
+ "nl": "Bewaakt een gang",
+ "fr": "Surveille un couloir",
+ "it": "Sorveglia un corridoio"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "surveillance:zone=public_transport_platform"
+ ]
+ },
+ "then": {
+ "en": "Surveills a public tranport platform",
+ "nl": "Bewaakt een perron of bushalte",
+ "fr": "Surveille un quai de transport public",
+ "it": "Sorveglia una pensilina del trasporto pubblico"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "surveillance:zone=shop"
+ ]
+ },
+ "then": {
+ "en": "Surveills a shop",
+ "nl": "Bewaakt een winkel",
+ "fr": "Surveille un magasin",
+ "it": "Sorveglia un negozio"
+ }
+ }
+ ]
+ },
+ {
+ "#": "camera:mount",
+ "question": {
+ "en": "How is this camera placed?",
+ "nl": "Hoe is deze camera geplaatst?",
+ "fr": "Comment cette caméra est-elle placée ?",
+ "it": "Com'è posizionata questa telecamera?",
+ "ru": "Как расположена эта камера?"
+ },
+ "render": {
+ "en": "Mounting method: {mount}",
+ "nl": "Montage: {camera:mount}",
+ "fr": "Méthode de montage : {mount}",
+ "it": "Metodo di montaggio: {mount}"
+ },
+ "freeform": {
+ "key": "camera:mount"
+ },
+ "mappings": [
+ {
+ "if": "camera:mount=wall",
+ "then": {
+ "en": "This camera is placed against a wall",
+ "nl": "Deze camera hangt aan een muur",
+ "fr": "Cette caméra est placée contre un mur",
+ "it": "Questa telecamera è posizionata contro un muro"
+ }
+ },
+ {
+ "if": "camera:mount=pole",
+ "then": {
+ "en": "This camera is placed one a pole",
+ "nl": "Deze camera staat op een paal",
+ "fr": "Cette caméra est placée sur un poteau",
+ "it": "Questa telecamera è posizionata su un palo"
+ }
+ },
+ {
+ "if": "camera:mount=ceiling",
+ "then": {
+ "en": "This camera is placed on the ceiling",
+ "nl": "Deze camera hangt aan het plafond",
+ "fr": "Cette caméra est placée au plafond",
+ "it": "Questa telecamera è posizionata sul soffitto"
+ }
+ }
+ ]
}
- ]
- },
- {
- "#": "Level",
- "question": {
- "en": "On which level is this camera located?",
- "nl": "Op welke verdieping bevindt deze camera zich?",
- "fr": "À quel niveau se trouve cette caméra ?",
- "it": "A che piano si trova questa videocamera?"
- },
- "render": {
- "en": "Located on level {level}",
- "nl": "Bevindt zich op verdieping {level}",
- "fr": "Situé au niveau {level}",
- "it": "Si trova al piano {level}"
- },
- "freeform": {
- "key": "level",
- "type": "nat"
- },
- "condition": {
- "or": [
- "indoor=yes",
- "surveillance:type=ye"
- ]
- }
- },
- {
- "#": "Surveillance:zone",
- "question": {
- "en": "What exactly is surveilled here?",
- "nl": "Wat wordt hier precies bewaakt?",
- "fr": "Qu'est-ce qui est surveillé ici ?",
- "it": "Che cosa è sorvegliato qui?"
- },
- "freeform": {
- "key": "surveillance:zone"
- },
- "render": {
- "en": " Surveills a {surveillance:zone}",
- "nl": "Bewaakt een {surveillance:zone}",
- "fr": " Surveille un(e) {surveillance:zone}",
- "it": " Sorveglia una {surveillance:zone}"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "surveillance:zone=parking"
- ]
- },
- "then": {
- "en": "Surveills a parking",
- "nl": "Bewaakt een parking",
- "fr": "Surveille un parking",
- "it": "Sorveglia un parcheggio"
- }
- },
- {
- "if": {
- "and": [
- "surveillance:zone=traffic"
- ]
- },
- "then": {
- "en": "Surveills the traffic",
- "nl": "Bewaakt het verkeer",
- "fr": "Surveille la circulation",
- "it": "Sorveglia il traffico"
- }
- },
- {
- "if": {
- "and": [
- "surveillance:zone=entrance"
- ]
- },
- "then": {
- "en": "Surveills an entrance",
- "nl": "Bewaakt een ingang",
- "fr": "Surveille une entrée",
- "it": "Sorveglia un ingresso"
- }
- },
- {
- "if": {
- "and": [
- "surveillance:zone=corridor"
- ]
- },
- "then": {
- "en": "Surveills a corridor",
- "nl": "Bewaakt een gang",
- "fr": "Surveille un couloir",
- "it": "Sorveglia un corridoio"
- }
- },
- {
- "if": {
- "and": [
- "surveillance:zone=public_transport_platform"
- ]
- },
- "then": {
- "en": "Surveills a public tranport platform",
- "nl": "Bewaakt een perron of bushalte",
- "fr": "Surveille un quai de transport public",
- "it": "Sorveglia una pensilina del trasporto pubblico"
- }
- },
- {
- "if": {
- "and": [
- "surveillance:zone=shop"
- ]
- },
- "then": {
- "en": "Surveills a shop",
- "nl": "Bewaakt een winkel",
- "fr": "Surveille un magasin",
- "it": "Sorveglia un negozio"
- }
- }
- ]
- },
- {
- "#": "camera:mount",
- "question": {
- "en": "How is this camera placed?",
- "nl": "Hoe is deze camera geplaatst?",
- "fr": "Comment cette caméra est-elle placée ?",
- "it": "Com'è posizionata questa telecamera?",
- "ru": "Как расположена эта камера?"
- },
- "render": {
- "en": "Mounting method: {mount}",
- "nl": "Montage: {camera:mount}",
- "fr": "Méthode de montage : {mount}",
- "it": "Metodo di montaggio: {mount}"
- },
- "freeform": {
- "key": "camera:mount"
- },
- "mappings": [
- {
- "if": "camera:mount=wall",
- "then": {
- "en": "This camera is placed against a wall",
- "nl": "Deze camera hangt aan een muur",
- "fr": "Cette caméra est placée contre un mur",
- "it": "Questa telecamera è posizionata contro un muro"
- }
- },
- {
- "if": "camera:mount=pole",
- "then": {
- "en": "This camera is placed one a pole",
- "nl": "Deze camera staat op een paal",
- "fr": "Cette caméra est placée sur un poteau",
- "it": "Questa telecamera è posizionata su un palo"
- }
- },
- {
- "if": "camera:mount=ceiling",
- "then": {
- "en": "This camera is placed on the ceiling",
- "nl": "Deze camera hangt aan het plafond",
- "fr": "Cette caméra est placée au plafond",
- "it": "Questa telecamera è posizionata sul soffitto"
- }
- }
- ]
- }
- ],
- "icon": {
- "render": "./assets/themes/surveillance/logo.svg",
- "mappings": [
- {
- "if": "camera:type=dome",
- "then": "./assets/themes/surveillance/dome.svg"
- },
- {
- "if": "_direction:leftright=right",
- "then": "./assets/themes/surveillance/cam_right.svg"
- },
- {
- "if": "_direction:leftright=left",
- "then": "./assets/themes/surveillance/cam_left.svg"
- }
- ]
- },
- "rotation": {
- "#": "Note: {camera:direction} is substituted by a number, giving the string 'calc(123deg + 90deg)' ; it is this string that is used as css property, which interprets the calc",
- "render": "calc({_direction:numerical}deg + 90deg)",
- "mappings": [
- {
- "if": "camera:type=dome",
- "then": "0"
- },
- {
- "if": "_direction:leftright=right",
- "then": "calc({_direction:numerical}deg - 90deg)"
- }
- ]
- },
- "width": {
- "render": "8"
- },
- "iconSize": {
- "mappings": [
- {
- "if": "camera:type=dome",
- "then": "50,50,center"
- },
- {
- "if": "_direction:leftright~*",
- "then": "100,35,center"
- }
],
- "render": "50,50,center"
- },
- "color": {
- "render": "#f00"
- },
- "presets": [
- {
- "tags": [
- "man_made=surveillance",
- "surveillance:type=camera"
- ],
- "title": "Surveillance camera"
- }
- ],
- "wayHandling": 2
+ "icon": {
+ "render": "./assets/themes/surveillance/logo.svg",
+ "mappings": [
+ {
+ "if": "camera:type=dome",
+ "then": "./assets/themes/surveillance/dome.svg"
+ },
+ {
+ "if": "_direction:leftright=right",
+ "then": "./assets/themes/surveillance/cam_right.svg"
+ },
+ {
+ "if": "_direction:leftright=left",
+ "then": "./assets/themes/surveillance/cam_left.svg"
+ }
+ ]
+ },
+ "rotation": {
+ "#": "Note: {camera:direction} is substituted by a number, giving the string 'calc(123deg + 90deg)' ; it is this string that is used as css property, which interprets the calc",
+ "render": "calc({_direction:numerical}deg + 90deg)",
+ "mappings": [
+ {
+ "if": "camera:type=dome",
+ "then": "0"
+ },
+ {
+ "if": "_direction:leftright=right",
+ "then": "calc({_direction:numerical}deg - 90deg)"
+ }
+ ]
+ },
+ "width": {
+ "render": "8"
+ },
+ "iconSize": {
+ "mappings": [
+ {
+ "if": "camera:type=dome",
+ "then": "50,50,center"
+ },
+ {
+ "if": "_direction:leftright~*",
+ "then": "100,35,center"
+ }
+ ],
+ "render": "50,50,center"
+ },
+ "color": {
+ "render": "#f00"
+ },
+ "presets": [
+ {
+ "tags": [
+ "man_made=surveillance",
+ "surveillance:type=camera"
+ ],
+ "title": "Surveillance camera"
+ }
+ ],
+ "wayHandling": 2
}
\ No newline at end of file
diff --git a/assets/layers/toilet/toilet.json b/assets/layers/toilet/toilet.json
index e70dc2b78..0963a1bab 100644
--- a/assets/layers/toilet/toilet.json
+++ b/assets/layers/toilet/toilet.json
@@ -1,405 +1,405 @@
{
- "id": "toilet",
- "name": {
- "en": "Toilets",
- "de": "Toiletten",
- "fr": "Toilettes",
- "nl": "Toiletten",
- "ru": "Туалеты",
- "it": "Servizi igienici"
- },
- "minzoom": 12,
- "source": {
- "osmTags": "amenity=toilets"
- },
- "title": {
- "render": {
- "en": "Toilet",
- "de": "Toilette",
- "fr": "Toilettes",
- "nl": "Toilet",
- "ru": "Туалет",
- "it": "Servizi igienici"
- }
- },
- "icon": {
- "render": "./assets/layers/toilet/toilets.svg",
- "mappings": [
- {
- "if": "wheelchair=yes",
- "then": "./assets/layers/toilet/wheelchair.svg"
- },
- {
- "if": {
- "or": [
- "toilets:position=urinals",
- "toilets:position=urinal"
- ]
- },
- "then": "./assets/layers/toilet/urinal.svg"
- }
- ]
- },
- "color": {
- "render": "#0000ff"
- },
- "wayHandling": 1,
- "presets": [
- {
- "title": {
- "en": "Toilet",
- "de": "Toilette",
+ "id": "toilet",
+ "name": {
+ "en": "Toilets",
+ "de": "Toiletten",
"fr": "Toilettes",
- "nl": "Toilet",
- "ru": "Туалет",
+ "nl": "Toiletten",
+ "ru": "Туалеты",
"it": "Servizi igienici"
- },
- "tags": [
- "amenity=toilets"
- ],
- "description": {
- "en": "A publicly accessible toilet or restroom",
- "de": "Eine öffentlich zugängliche Toilette",
- "fr": "Des toilettes",
- "nl": "Een publieke toilet",
- "it": "Servizi igienici aperti al pubblico",
- "ru": "Туалет или комната отдыха со свободным доступом"
- }
},
- {
- "title": {
- "en": "Toilets with wheelchair accessible toilet",
- "de": "Toiletten mit rollstuhlgerechter Toilette",
- "fr": "Toilettes accessible aux personnes à mobilité réduite",
- "nl": "Een rolstoeltoegankelijke toilet",
- "it": "Servizi igienici accessibili per persone in sedia a rotelle",
- "ru": "Туалет с доступом для пользователей кресел-колясок"
- },
- "tags": [
- "amenity=toilets",
- "wheelchair=yes"
- ],
- "description": {
- "en": "A restroom which has at least one wheelchair-accessible toilet",
- "de": "Eine Toilettenanlage mit mindestens einer rollstuhlgerechten Toilette",
- "fr": "Toilettes avec au moins un WC accessible aux personnes à mobilité réduite",
- "nl": "Deze toiletten hebben op zijn minst één rolstoeltoegankelijke WC",
- "it": "Servizi igienici che hanno almeno una toilette accessibile a persone in sedia a rotelle"
- }
- }
- ],
- "tagRenderings": [
- "images",
- {
- "question": {
- "en": "Are these toilets publicly accessible?",
- "de": "Sind diese Toiletten öffentlich zugänglich?",
- "fr": "Ces toilettes sont-elles accessibles au public ?",
- "nl": "Zijn deze toiletten publiek toegankelijk?",
- "it": "Questi servizi igienici sono aperti al pubblico?",
- "ru": "Есть ли свободный доступ к этим туалетам?"
- },
- "render": {
- "en": "Access is {access}",
- "de": "Zugang ist {access}",
- "fr": "L'accès est {access}",
- "nl": "Toegankelijkheid is {access}",
- "it": "L'accesso è {access}"
- },
- "freeform": {
- "key": "access",
- "addExtraTags": [
- "fixme=the tag access was filled out by the user and might need refinement"
+ "minzoom": 12,
+ "source": {
+ "osmTags": "amenity=toilets"
+ },
+ "title": {
+ "render": {
+ "en": "Toilet",
+ "de": "Toilette",
+ "fr": "Toilettes",
+ "nl": "Toilet",
+ "ru": "Туалет",
+ "it": "Servizi igienici"
+ }
+ },
+ "icon": {
+ "render": "./assets/layers/toilet/toilets.svg",
+ "mappings": [
+ {
+ "if": "wheelchair=yes",
+ "then": "./assets/layers/toilet/wheelchair.svg"
+ },
+ {
+ "if": {
+ "or": [
+ "toilets:position=urinals",
+ "toilets:position=urinal"
+ ]
+ },
+ "then": "./assets/layers/toilet/urinal.svg"
+ }
]
- },
- "mappings": [
- {
- "if": "access=yes",
- "then": {
- "en": "Public access",
- "de": "Öffentlicher Zugang",
- "fr": "Accès publique",
- "nl": "Publiek toegankelijk",
- "it": "Accesso pubblico",
- "ru": "Свободный доступ"
- }
- },
- {
- "if": "access=customers",
- "then": {
- "en": "Only access to customers",
- "de": "Nur Zugang für Kunden",
- "fr": "Accès réservé aux clients",
- "nl": "Enkel toegang voor klanten",
- "it": "Accesso riservato ai clienti e alle clienti"
- }
- },
- {
- "if": "access=no",
- "then": {
- "en": "Not accessible",
- "de": "Nicht zugänglich",
- "fr": "Toilettes privées",
- "nl": "Niet toegankelijk",
- "ru": "Недоступно",
- "it": "Non accessibile"
- }
- },
- {
- "if": "access=key",
- "then": {
- "en": "Accessible, but one has to ask a key to enter",
- "de": "Zugänglich, aber man muss einen Schlüssel für die Eingabe verlangen",
- "fr": "Accessible, mais vous devez demander la clé",
- "nl": "Toegankelijk na het vragen van de sleutel",
- "it": "Accessibile, ma occorre chiedere una chiave per accedere"
- }
- },
- {
- "if": "access=public",
- "then": {
- "en": "Public access",
- "de": "Öffentlicher Zugang",
- "fr": "Accès publique",
- "nl": "Publiek toegankelijk",
- "it": "Accesso pubblico",
- "ru": "Свободный доступ"
- },
- "hideInAnswer": true
- }
- ]
},
- {
- "question": {
- "en": "Are these toilets free to use?",
- "de": "Können diese Toiletten kostenlos benutzt werden?",
- "fr": "Ces toilettes sont-elles payantes ?",
- "nl": "Zijn deze toiletten gratis te gebruiken?",
- "it": "Questi servizi igienici sono gratuiti?"
- },
- "mappings": [
- {
- "then": {
- "en": "These are paid toilets",
- "de": "Dies sind bezahlte Toiletten",
- "fr": "Toilettes payantes",
- "nl": "Men moet betalen om deze toiletten te gebruiken",
- "ru": "Это платные туалеты",
- "it": "Questi servizi igienici sono a pagamento"
- },
- "if": "fee=yes"
- },
- {
- "if": "fee=no",
- "then": {
- "en": "Free to use",
- "de": "Kostenlose Nutzung",
- "fr": "Toilettes gratuites",
- "nl": "Gratis te gebruiken",
- "it": "Gratis"
- }
- }
- ]
+ "color": {
+ "render": "#0000ff"
},
- {
- "question": {
- "en": "How much does one have to pay for these toilets?",
- "de": "Wie viel muss man für diese Toiletten bezahlen?",
- "fr": "Quel est le prix d'accès de ces toilettes ?",
- "nl": "Hoeveel moet men betalen om deze toiletten te gebruiken?",
- "it": "Quanto costa l'accesso a questi servizi igienici?",
- "ru": "Сколько стоит посещение туалета?"
- },
- "render": {
- "en": "The fee is {charge}",
- "de": "Die Gebühr beträgt {charge}",
- "fr": "Le prix est {charge}",
- "nl": "De toiletten gebruiken kost {charge}",
- "it": "La tariffa è {charge}",
- "ru": "Стоимость {charge}"
- },
- "condition": "fee=yes",
- "freeform": {
- "key": "charge",
- "type": "string"
- }
- },
- {
- "question": {
- "en": "Is there a dedicated toilet for wheelchair users",
- "de": "Gibt es eine Toilette für Rollstuhlfahrer?",
- "fr": "Y a-t-il des toilettes réservées aux personnes en fauteuil roulant ?",
- "nl": "Is er een rolstoeltoegankelijke toilet voorzien?",
- "it": "C'è un WC riservato alle persone in sedia a rotelle"
- },
- "mappings": [
+ "wayHandling": 1,
+ "presets": [
{
- "then": {
- "en": "There is a dedicated toilet for wheelchair users",
- "de": "Es gibt eine Toilette für Rollstuhlfahrer",
- "fr": "Il y a des toilettes réservées pour les personnes à mobilité réduite",
- "nl": "Er is een toilet voor rolstoelgebruikers",
- "it": "C'è un WC riservato alle persone in sedia a rotelle"
- },
- "if": "wheelchair=yes"
+ "title": {
+ "en": "Toilet",
+ "de": "Toilette",
+ "fr": "Toilettes",
+ "nl": "Toilet",
+ "ru": "Туалет",
+ "it": "Servizi igienici"
+ },
+ "tags": [
+ "amenity=toilets"
+ ],
+ "description": {
+ "en": "A publicly accessible toilet or restroom",
+ "de": "Eine öffentlich zugängliche Toilette",
+ "fr": "Des toilettes",
+ "nl": "Een publieke toilet",
+ "it": "Servizi igienici aperti al pubblico",
+ "ru": "Туалет или комната отдыха со свободным доступом"
+ }
},
{
- "if": "wheelchair=no",
- "then": {
- "en": "No wheelchair access",
- "de": "Kein Zugang für Rollstuhlfahrer",
- "fr": "Non accessible aux personnes à mobilité réduite",
- "nl": "Niet toegankelijk voor rolstoelgebruikers",
- "it": "Non accessibile in sedia a rotelle",
- "ru": "Недоступно пользователям кресел-колясок"
- }
+ "title": {
+ "en": "Toilets with wheelchair accessible toilet",
+ "de": "Toiletten mit rollstuhlgerechter Toilette",
+ "fr": "Toilettes accessible aux personnes à mobilité réduite",
+ "nl": "Een rolstoeltoegankelijke toilet",
+ "it": "Servizi igienici accessibili per persone in sedia a rotelle",
+ "ru": "Туалет с доступом для пользователей кресел-колясок"
+ },
+ "tags": [
+ "amenity=toilets",
+ "wheelchair=yes"
+ ],
+ "description": {
+ "en": "A restroom which has at least one wheelchair-accessible toilet",
+ "de": "Eine Toilettenanlage mit mindestens einer rollstuhlgerechten Toilette",
+ "fr": "Toilettes avec au moins un WC accessible aux personnes à mobilité réduite",
+ "nl": "Deze toiletten hebben op zijn minst één rolstoeltoegankelijke WC",
+ "it": "Servizi igienici che hanno almeno una toilette accessibile a persone in sedia a rotelle"
+ }
}
- ]
- },
- {
- "question": {
- "en": "Which kind of toilets are this?",
- "de": "Welche Art von Toiletten sind das?",
- "fr": "De quel type sont ces toilettes ?",
- "nl": "Welke toiletten zijn dit?",
- "it": "Di che tipo di servizi igienici si tratta?",
- "ru": "Какие это туалеты?"
- },
- "mappings": [
+ ],
+ "tagRenderings": [
+ "images",
{
- "if": "toilets:position=seated",
- "then": {
- "en": "There are only seated toilets",
- "de": "Es gibt nur Sitztoiletten",
- "fr": "Il y a uniquement des sièges de toilettes",
- "nl": "Er zijn enkel WC's om op te zitten",
- "it": "Ci sono solo WC con sedile"
- }
+ "question": {
+ "en": "Are these toilets publicly accessible?",
+ "de": "Sind diese Toiletten öffentlich zugänglich?",
+ "fr": "Ces toilettes sont-elles accessibles au public ?",
+ "nl": "Zijn deze toiletten publiek toegankelijk?",
+ "it": "Questi servizi igienici sono aperti al pubblico?",
+ "ru": "Есть ли свободный доступ к этим туалетам?"
+ },
+ "render": {
+ "en": "Access is {access}",
+ "de": "Zugang ist {access}",
+ "fr": "L'accès est {access}",
+ "nl": "Toegankelijkheid is {access}",
+ "it": "L'accesso è {access}"
+ },
+ "freeform": {
+ "key": "access",
+ "addExtraTags": [
+ "fixme=the tag access was filled out by the user and might need refinement"
+ ]
+ },
+ "mappings": [
+ {
+ "if": "access=yes",
+ "then": {
+ "en": "Public access",
+ "de": "Öffentlicher Zugang",
+ "fr": "Accès publique",
+ "nl": "Publiek toegankelijk",
+ "it": "Accesso pubblico",
+ "ru": "Свободный доступ"
+ }
+ },
+ {
+ "if": "access=customers",
+ "then": {
+ "en": "Only access to customers",
+ "de": "Nur Zugang für Kunden",
+ "fr": "Accès réservé aux clients",
+ "nl": "Enkel toegang voor klanten",
+ "it": "Accesso riservato ai clienti e alle clienti"
+ }
+ },
+ {
+ "if": "access=no",
+ "then": {
+ "en": "Not accessible",
+ "de": "Nicht zugänglich",
+ "fr": "Toilettes privées",
+ "nl": "Niet toegankelijk",
+ "ru": "Недоступно",
+ "it": "Non accessibile"
+ }
+ },
+ {
+ "if": "access=key",
+ "then": {
+ "en": "Accessible, but one has to ask a key to enter",
+ "de": "Zugänglich, aber man muss einen Schlüssel für die Eingabe verlangen",
+ "fr": "Accessible, mais vous devez demander la clé",
+ "nl": "Toegankelijk na het vragen van de sleutel",
+ "it": "Accessibile, ma occorre chiedere una chiave per accedere"
+ }
+ },
+ {
+ "if": "access=public",
+ "then": {
+ "en": "Public access",
+ "de": "Öffentlicher Zugang",
+ "fr": "Accès publique",
+ "nl": "Publiek toegankelijk",
+ "it": "Accesso pubblico",
+ "ru": "Свободный доступ"
+ },
+ "hideInAnswer": true
+ }
+ ]
},
{
- "if": "toilets:position=urinal",
- "then": {
- "en": "There are only urinals here",
- "de": "Hier gibt es nur Pissoirs",
- "fr": "Il y a uniquement des urinoirs",
- "nl": "Er zijn enkel urinoirs",
- "it": "Ci sono solo urinali"
- }
+ "question": {
+ "en": "Are these toilets free to use?",
+ "de": "Können diese Toiletten kostenlos benutzt werden?",
+ "fr": "Ces toilettes sont-elles payantes ?",
+ "nl": "Zijn deze toiletten gratis te gebruiken?",
+ "it": "Questi servizi igienici sono gratuiti?"
+ },
+ "mappings": [
+ {
+ "then": {
+ "en": "These are paid toilets",
+ "de": "Dies sind bezahlte Toiletten",
+ "fr": "Toilettes payantes",
+ "nl": "Men moet betalen om deze toiletten te gebruiken",
+ "ru": "Это платные туалеты",
+ "it": "Questi servizi igienici sono a pagamento"
+ },
+ "if": "fee=yes"
+ },
+ {
+ "if": "fee=no",
+ "then": {
+ "en": "Free to use",
+ "de": "Kostenlose Nutzung",
+ "fr": "Toilettes gratuites",
+ "nl": "Gratis te gebruiken",
+ "it": "Gratis"
+ }
+ }
+ ]
},
{
- "if": "toilets:position=squat",
- "then": {
- "en": "There are only squat toilets here",
- "de": "Es gibt hier nur Hocktoiletten",
- "fr": "Il y a uniquement des toilettes turques",
- "nl": "Er zijn enkel hurktoiletten",
- "it": "Ci sono solo turche"
- }
+ "question": {
+ "en": "How much does one have to pay for these toilets?",
+ "de": "Wie viel muss man für diese Toiletten bezahlen?",
+ "fr": "Quel est le prix d'accès de ces toilettes ?",
+ "nl": "Hoeveel moet men betalen om deze toiletten te gebruiken?",
+ "it": "Quanto costa l'accesso a questi servizi igienici?",
+ "ru": "Сколько стоит посещение туалета?"
+ },
+ "render": {
+ "en": "The fee is {charge}",
+ "de": "Die Gebühr beträgt {charge}",
+ "fr": "Le prix est {charge}",
+ "nl": "De toiletten gebruiken kost {charge}",
+ "it": "La tariffa è {charge}",
+ "ru": "Стоимость {charge}"
+ },
+ "condition": "fee=yes",
+ "freeform": {
+ "key": "charge",
+ "type": "string"
+ }
},
{
- "if": "toilets:position=seated;urinal",
- "then": {
- "en": "Both seated toilets and urinals are available here",
- "de": "Sowohl Sitztoiletten als auch Pissoirs sind hier verfügbar",
- "fr": "Il y a des sièges de toilettes et des urinoirs",
- "nl": "Er zijn zowel urinoirs als zittoiletten",
- "it": "Ci sono sia sedili, sia urinali"
- }
+ "question": {
+ "en": "Is there a dedicated toilet for wheelchair users",
+ "de": "Gibt es eine Toilette für Rollstuhlfahrer?",
+ "fr": "Y a-t-il des toilettes réservées aux personnes en fauteuil roulant ?",
+ "nl": "Is er een rolstoeltoegankelijke toilet voorzien?",
+ "it": "C'è un WC riservato alle persone in sedia a rotelle"
+ },
+ "mappings": [
+ {
+ "then": {
+ "en": "There is a dedicated toilet for wheelchair users",
+ "de": "Es gibt eine Toilette für Rollstuhlfahrer",
+ "fr": "Il y a des toilettes réservées pour les personnes à mobilité réduite",
+ "nl": "Er is een toilet voor rolstoelgebruikers",
+ "it": "C'è un WC riservato alle persone in sedia a rotelle"
+ },
+ "if": "wheelchair=yes"
+ },
+ {
+ "if": "wheelchair=no",
+ "then": {
+ "en": "No wheelchair access",
+ "de": "Kein Zugang für Rollstuhlfahrer",
+ "fr": "Non accessible aux personnes à mobilité réduite",
+ "nl": "Niet toegankelijk voor rolstoelgebruikers",
+ "it": "Non accessibile in sedia a rotelle",
+ "ru": "Недоступно пользователям кресел-колясок"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Which kind of toilets are this?",
+ "de": "Welche Art von Toiletten sind das?",
+ "fr": "De quel type sont ces toilettes ?",
+ "nl": "Welke toiletten zijn dit?",
+ "it": "Di che tipo di servizi igienici si tratta?",
+ "ru": "Какие это туалеты?"
+ },
+ "mappings": [
+ {
+ "if": "toilets:position=seated",
+ "then": {
+ "en": "There are only seated toilets",
+ "de": "Es gibt nur Sitztoiletten",
+ "fr": "Il y a uniquement des sièges de toilettes",
+ "nl": "Er zijn enkel WC's om op te zitten",
+ "it": "Ci sono solo WC con sedile"
+ }
+ },
+ {
+ "if": "toilets:position=urinal",
+ "then": {
+ "en": "There are only urinals here",
+ "de": "Hier gibt es nur Pissoirs",
+ "fr": "Il y a uniquement des urinoirs",
+ "nl": "Er zijn enkel urinoirs",
+ "it": "Ci sono solo urinali"
+ }
+ },
+ {
+ "if": "toilets:position=squat",
+ "then": {
+ "en": "There are only squat toilets here",
+ "de": "Es gibt hier nur Hocktoiletten",
+ "fr": "Il y a uniquement des toilettes turques",
+ "nl": "Er zijn enkel hurktoiletten",
+ "it": "Ci sono solo turche"
+ }
+ },
+ {
+ "if": "toilets:position=seated;urinal",
+ "then": {
+ "en": "Both seated toilets and urinals are available here",
+ "de": "Sowohl Sitztoiletten als auch Pissoirs sind hier verfügbar",
+ "fr": "Il y a des sièges de toilettes et des urinoirs",
+ "nl": "Er zijn zowel urinoirs als zittoiletten",
+ "it": "Ci sono sia sedili, sia urinali"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Is a changing table (to change diapers) available?",
+ "de": "Ist ein Wickeltisch (zum Wechseln der Windeln) vorhanden?",
+ "fr": "Ces toilettes disposent-elles d'une table à langer ?",
+ "nl": "Is er een luiertafel beschikbaar?",
+ "it": "È disponibile un fasciatoio (per cambiare i pannolini)?"
+ },
+ "mappings": [
+ {
+ "then": {
+ "en": "A changing table is available",
+ "de": "Ein Wickeltisch ist verfügbar",
+ "fr": "Une table à langer est disponible",
+ "nl": "Er is een luiertafel",
+ "it": "È disponibile un fasciatoio"
+ },
+ "if": "changing_table=yes"
+ },
+ {
+ "if": "changing_table=no",
+ "then": {
+ "en": "No changing table is available",
+ "de": "Es ist kein Wickeltisch verfügbar",
+ "fr": "Aucune table à langer",
+ "nl": "Geen luiertafel",
+ "it": "Non è disponibile un fasciatoio"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "en": "Where is the changing table located?",
+ "de": "Wo befindet sich der Wickeltisch?",
+ "fr": "Où se situe la table à langer ?",
+ "nl": "Waar bevindt de luiertafel zich?",
+ "it": "Dove si trova il fasciatoio?"
+ },
+ "render": {
+ "en": "The changing table is located at {changing_table:location}",
+ "de": "Die Wickeltabelle befindet sich in {changing_table:location}",
+ "fr": "Emplacement de la table à langer : {changing_table:location}",
+ "nl": "De luiertafel bevindt zich in {changing_table:location}",
+ "it": "Il fasciatoio si trova presso {changing_table:location}"
+ },
+ "condition": "changing_table=yes",
+ "freeform": {
+ "key": "changing_table:location"
+ },
+ "mappings": [
+ {
+ "then": {
+ "en": "The changing table is in the toilet for women. ",
+ "de": "Der Wickeltisch befindet sich in der Damentoilette. ",
+ "fr": "La table à langer est dans les toilettes pour femmes. ",
+ "nl": "De luiertafel bevindt zich in de vrouwentoiletten ",
+ "it": "Il fasciatoio è nei servizi igienici femminili. "
+ },
+ "if": "changing_table:location=female_toilet"
+ },
+ {
+ "then": {
+ "en": "The changing table is in the toilet for men. ",
+ "de": "Der Wickeltisch befindet sich in der Herrentoilette. ",
+ "fr": "La table à langer est dans les toilettes pour hommes. ",
+ "nl": "De luiertafel bevindt zich in de herentoiletten ",
+ "it": "Il fasciatoio è nei servizi igienici maschili. "
+ },
+ "if": "changing_table:location=male_toilet"
+ },
+ {
+ "if": "changing_table:location=wheelchair_toilet",
+ "then": {
+ "en": "The changing table is in the toilet for wheelchair users. ",
+ "de": "Der Wickeltisch befindet sich in der Toilette für Rollstuhlfahrer. ",
+ "fr": "La table à langer est dans les toilettes pour personnes à mobilité réduite. ",
+ "nl": "De luiertafel bevindt zich in de rolstoeltoegankelijke toilet ",
+ "it": "Il fasciatoio è nei servizi igienici per persone in sedia a rotelle. "
+ }
+ },
+ {
+ "if": "changing_table:location=dedicated_room",
+ "then": {
+ "en": "The changing table is in a dedicated room. ",
+ "de": "Der Wickeltisch befindet sich in einem eigenen Raum. ",
+ "fr": "La table à langer est dans un espace dédié. ",
+ "nl": "De luiertafel bevindt zich in een daartoe voorziene kamer ",
+ "it": "Il fasciatoio è in una stanza dedicata. "
+ }
+ }
+ ]
}
- ]
- },
- {
- "question": {
- "en": "Is a changing table (to change diapers) available?",
- "de": "Ist ein Wickeltisch (zum Wechseln der Windeln) vorhanden?",
- "fr": "Ces toilettes disposent-elles d'une table à langer ?",
- "nl": "Is er een luiertafel beschikbaar?",
- "it": "È disponibile un fasciatoio (per cambiare i pannolini)?"
- },
- "mappings": [
- {
- "then": {
- "en": "A changing table is available",
- "de": "Ein Wickeltisch ist verfügbar",
- "fr": "Une table à langer est disponible",
- "nl": "Er is een luiertafel",
- "it": "È disponibile un fasciatoio"
- },
- "if": "changing_table=yes"
- },
- {
- "if": "changing_table=no",
- "then": {
- "en": "No changing table is available",
- "de": "Es ist kein Wickeltisch verfügbar",
- "fr": "Aucune table à langer",
- "nl": "Geen luiertafel",
- "it": "Non è disponibile un fasciatoio"
- }
- }
- ]
- },
- {
- "question": {
- "en": "Where is the changing table located?",
- "de": "Wo befindet sich der Wickeltisch?",
- "fr": "Où se situe la table à langer ?",
- "nl": "Waar bevindt de luiertafel zich?",
- "it": "Dove si trova il fasciatoio?"
- },
- "render": {
- "en": "The changing table is located at {changing_table:location}",
- "de": "Die Wickeltabelle befindet sich in {changing_table:location}",
- "fr": "Emplacement de la table à langer : {changing_table:location}",
- "nl": "De luiertafel bevindt zich in {changing_table:location}",
- "it": "Il fasciatoio si trova presso {changing_table:location}"
- },
- "condition": "changing_table=yes",
- "freeform": {
- "key": "changing_table:location"
- },
- "mappings": [
- {
- "then": {
- "en": "The changing table is in the toilet for women. ",
- "de": "Der Wickeltisch befindet sich in der Damentoilette. ",
- "fr": "La table à langer est dans les toilettes pour femmes. ",
- "nl": "De luiertafel bevindt zich in de vrouwentoiletten ",
- "it": "Il fasciatoio è nei servizi igienici femminili. "
- },
- "if": "changing_table:location=female_toilet"
- },
- {
- "then": {
- "en": "The changing table is in the toilet for men. ",
- "de": "Der Wickeltisch befindet sich in der Herrentoilette. ",
- "fr": "La table à langer est dans les toilettes pour hommes. ",
- "nl": "De luiertafel bevindt zich in de herentoiletten ",
- "it": "Il fasciatoio è nei servizi igienici maschili. "
- },
- "if": "changing_table:location=male_toilet"
- },
- {
- "if": "changing_table:location=wheelchair_toilet",
- "then": {
- "en": "The changing table is in the toilet for wheelchair users. ",
- "de": "Der Wickeltisch befindet sich in der Toilette für Rollstuhlfahrer. ",
- "fr": "La table à langer est dans les toilettes pour personnes à mobilité réduite. ",
- "nl": "De luiertafel bevindt zich in de rolstoeltoegankelijke toilet ",
- "it": "Il fasciatoio è nei servizi igienici per persone in sedia a rotelle. "
- }
- },
- {
- "if": "changing_table:location=dedicated_room",
- "then": {
- "en": "The changing table is in a dedicated room. ",
- "de": "Der Wickeltisch befindet sich in einem eigenen Raum. ",
- "fr": "La table à langer est dans un espace dédié. ",
- "nl": "De luiertafel bevindt zich in een daartoe voorziene kamer ",
- "it": "Il fasciatoio è in una stanza dedicata. "
- }
- }
- ]
- }
- ]
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/trail/trail.json b/assets/layers/trail/trail.json
index 4638de35e..c2c43c48b 100644
--- a/assets/layers/trail/trail.json
+++ b/assets/layers/trail/trail.json
@@ -1,207 +1,207 @@
{
- "id": "trail",
- "name": {
- "en": "Trails",
- "nl": "Wandeltochten"
- },
- "minzoom": 12,
- "source": {
- "osmTags": {
- "and": [
- {
- "or": [
- "route=hiking",
- "route=bycicle",
- "route=horse"
- ]
- }
- ]
- }
- },
- "title": {
- "render": {
- "en": "Trail",
- "nl": "Wandeltocht"
+ "id": "trail",
+ "name": {
+ "en": "Trails",
+ "nl": "Wandeltochten"
},
- "mappings": [
- {
- "if": "name~*",
- "then": "{name}"
- }
- ]
- },
- "tagRenderings": [
- "images",
- {
- "render": {
- "en": "The trail is {_length:km} kilometers long",
- "nl": "Deze wandeling is {_length:km} kilometer lang"
- }
- },
- {
- "#": "Name",
- "question": {
- "nl": "Wat is de naam van deze wandeling?"
- },
- "render": {
- "nl": "Deze wandeling heet {name}"
- },
- "freeform": {
- "key": "name"
- }
- },
- {
- "#": "Operator tag",
- "render": {
- "nl": "Beheer door {operator}"
- },
- "question": {
- "nl": "Wie beheert deze wandeltocht?"
- },
- "freeform": {
- "key": "operator"
- },
- "mappings": [
- {
- "if": {
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
"and": [
- "operator=Natuurpunt"
+ {
+ "or": [
+ "route=hiking",
+ "route=bycicle",
+ "route=horse"
+ ]
+ }
]
- },
- "then": {
- "nl": "Dit gebied wordt beheerd door Natuurpunt"
- }
+ }
+ },
+ "title": {
+ "render": {
+ "en": "Trail",
+ "nl": "Wandeltocht"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": "{name}"
+ }
+ ]
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "render": {
+ "en": "The trail is {_length:km} kilometers long",
+ "nl": "Deze wandeling is {_length:km} kilometer lang"
+ }
},
{
- "if": {
- "and": [
- "operator~(n|N)atuurpunt.*"
+ "#": "Name",
+ "question": {
+ "nl": "Wat is de naam van deze wandeling?"
+ },
+ "render": {
+ "nl": "Deze wandeling heet {name}"
+ },
+ "freeform": {
+ "key": "name"
+ }
+ },
+ {
+ "#": "Operator tag",
+ "render": {
+ "nl": "Beheer door {operator}"
+ },
+ "question": {
+ "nl": "Wie beheert deze wandeltocht?"
+ },
+ "freeform": {
+ "key": "operator"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "operator=Natuurpunt"
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied wordt beheerd door Natuurpunt"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "operator~(n|N)atuurpunt.*"
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied wordt beheerd door {operator}"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "#": "Color",
+ "question": {
+ "nl": "Welke kleur heeft deze wandeling?"
+ },
+ "render": {
+ "nl": "Deze wandeling heeft kleur {colour}"
+ },
+ "freeform": {
+ "key": "colour",
+ "type": "color"
+ },
+ "mappings": [
+ {
+ "if": "colour=blue",
+ "then": {
+ "nl": "Blauwe wandeling",
+ "en": "Blue trail"
+ }
+ },
+ {
+ "if": "colour=red",
+ "then": {
+ "nl": "Rode wandeling",
+ "en": "Red trail"
+ }
+ },
+ {
+ "if": "colour=green",
+ "then": {
+ "nl": "Groene wandeling",
+ "en": "Green trail"
+ }
+ },
+ {
+ "if": "colour=yellow",
+ "then": {
+ "nl": "Gele wandeling",
+ "en": "Yellow trail"
+ }
+ }
+ ]
+ },
+ {
+ "#": "Wheelchair access",
+ "question": {
+ "nl": "Is deze wandeling toegankelijk met de rolstoel?"
+ },
+ "mappings": [
+ {
+ "then": {
+ "nl": "deze wandeltocht is toegankelijk met de rolstoel"
+ },
+ "if": "wheelchair=yes"
+ },
+ {
+ "then": {
+ "nl": "deze wandeltocht is niet toegankelijk met de rolstoel"
+ },
+ "if": "wheelchair=no"
+ }
+ ]
+ },
+ {
+ "#": "pushchair access",
+ "question": {
+ "nl": "Is deze wandeltocht toegankelijk met de buggy?"
+ },
+ "mappings": [
+ {
+ "then": {
+ "nl": "deze wandeltocht is toegankelijk met de buggy"
+ },
+ "if": "pushchair=yes"
+ },
+ {
+ "then": {
+ "nl": "deze wandeltocht is niet toegankelijk met de buggy"
+ },
+ "if": "pushchair=no"
+ }
]
- },
- "then": {
- "nl": "Dit gebied wordt beheerd door {operator}"
- },
- "hideInAnswer": true
}
- ]
+ ],
+ "icon": {
+ "render": "./assets/layers/trail/trail.svg",
+ "mappings": [
+ {
+ "if": "wheelchair=yes",
+ "then": "./assets/layers/trail/wheelchair.svg"
+ },
+ {
+ "if": "pushchair=yes",
+ "then": "./assets/layers/trail/pushchair.svg"
+ }
+ ]
},
- {
- "#": "Color",
- "question": {
- "nl": "Welke kleur heeft deze wandeling?"
- },
- "render": {
- "nl": "Deze wandeling heeft kleur {colour}"
- },
- "freeform": {
- "key": "colour",
- "type": "color"
- },
- "mappings": [
- {
- "if": "colour=blue",
- "then": {
- "nl": "Blauwe wandeling",
- "en": "Blue trail"
- }
- },
- {
- "if": "colour=red",
- "then": {
- "nl": "Rode wandeling",
- "en": "Red trail"
- }
- },
- {
- "if": "colour=green",
- "then": {
- "nl": "Groene wandeling",
- "en": "Green trail"
- }
- },
- {
- "if": "colour=yellow",
- "then": {
- "nl": "Gele wandeling",
- "en": "Yellow trail"
- }
- }
- ]
+ "description": {
+ "nl": "Aangeduide wandeltochten"
},
- {
- "#": "Wheelchair access",
- "question": {
- "nl": "Is deze wandeling toegankelijk met de rolstoel?"
- },
- "mappings": [
- {
- "then": {
- "nl": "deze wandeltocht is toegankelijk met de rolstoel"
- },
- "if": "wheelchair=yes"
- },
- {
- "then": {
- "nl": "deze wandeltocht is niet toegankelijk met de rolstoel"
- },
- "if": "wheelchair=no"
- }
- ]
+ "wayHandling": 0,
+ "width": {
+ "render": "3"
},
- {
- "#": "pushchair access",
- "question": {
- "nl": "Is deze wandeltocht toegankelijk met de buggy?"
- },
- "mappings": [
- {
- "then": {
- "nl": "deze wandeltocht is toegankelijk met de buggy"
- },
- "if": "pushchair=yes"
- },
- {
- "then": {
- "nl": "deze wandeltocht is niet toegankelijk met de buggy"
- },
- "if": "pushchair=no"
- }
- ]
+ "iconSize": {
+ "render": "35,35,center"
+ },
+ "color": {
+ "render": "#335D9F",
+ "mappings": [
+ {
+ "if": "colour~*",
+ "then": "{colour}"
+ }
+ ]
+ },
+ "dashArray": {
+ "render": "5 5"
}
- ],
- "icon": {
- "render": "./assets/layers/trail/trail.svg",
- "mappings": [
- {
- "if": "wheelchair=yes",
- "then": "./assets/layers/trail/wheelchair.svg"
- },
- {
- "if": "pushchair=yes",
- "then": "./assets/layers/trail/pushchair.svg"
- }
- ]
- },
- "description": {
- "nl": "Aangeduide wandeltochten"
- },
- "wayHandling": 0,
- "width": {
- "render": "3"
- },
- "iconSize": {
- "render": "35,35,center"
- },
- "color": {
- "render": "#335D9F",
- "mappings": [
- {
- "if": "colour~*",
- "then": "{colour}"
- }
- ]
- },
- "dashArray": {
- "render": "5 5"
- }
}
\ No newline at end of file
diff --git a/assets/layers/tree_node/tree_node.json b/assets/layers/tree_node/tree_node.json
index 31e348441..3ae7384d6 100644
--- a/assets/layers/tree_node/tree_node.json
+++ b/assets/layers/tree_node/tree_node.json
@@ -1,559 +1,559 @@
{
- "id": "tree_node",
- "name": {
- "nl": "Boom",
- "en": "Tree",
- "it": "Albero",
- "ru": "Дерево",
- "fr": "Arbre"
- },
- "minzoom": 14,
- "source": {
- "osmTags": {
- "and": [
- "natural=tree"
- ]
- }
- },
- "title": {
- "render": {
- "nl": "Boom",
- "en": "Tree",
- "it": "Albero",
- "ru": "Дерево",
- "fr": "Arbre"
- },
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "nl": "{name}",
- "en": "{name}",
- "ca": "{name}",
- "de": "{name}",
- "fr": "{name}",
- "it": "{name}",
- "ru": "{name}",
- "id": "{name}"
- }
- }
- ]
- },
- "tagRenderings": [
- "images",
- {
- "render": {
- "nl": "Hoogte: {height}",
- "en": "Height: {height}",
- "it": "Altezza: {height}",
- "ru": "Высота: {height}",
- "fr": "Hauteur : {height}"
- },
- "condition": {
- "and": [
- "height~*"
- ]
- },
- "mappings": [
- {
- "if": {
- "and": [
- "height~^[0-9.]+$"
- ]
- },
- "then": {
- "nl": "Hoogte: {height} m",
- "en": "Height: {height} m",
- "it": "Altezza: {height} m",
- "ru": "Высота: {height} м",
- "fr": "Hauteur : {height} m"
- }
- }
- ]
- },
- {
- "question": {
- "nl": "Is dit een naald- of loofboom?",
- "en": "Is this a broadleaved or needleleaved tree?",
- "it": "Si tratta di un albero latifoglia o aghifoglia?",
- "fr": "Cet arbre est-il un feuillu ou un résineux ?"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "leaf_type=broadleaved"
- ]
- },
- "then": {
- "nl": " Loofboom",
- "en": " Broadleaved",
- "it": " Latifoglia",
- "fr": " Feuillu"
- }
- },
- {
- "if": {
- "and": [
- "leaf_type=needleleaved"
- ]
- },
- "then": {
- "nl": " Naaldboom",
- "en": " Needleleaved",
- "it": " Aghifoglia",
- "fr": " Résineux"
- }
- },
- {
- "if": {
- "and": [
- "leaf_type=leafless"
- ]
- },
- "then": {
- "nl": " Permanent bladloos",
- "en": " Permanently leafless",
- "it": " Privo di foglie (permanente)",
- "fr": " Sans feuilles (Permanent)"
- },
- "hideInAnswer": true
- }
- ]
- },
- {
- "question": {
- "nl": "Hoe significant is deze boom? Kies het eerste antwoord dat van toepassing is.",
- "en": "How significant is this tree? Choose the first answer that applies.",
- "it": "Quanto significativo è questo albero? Scegli la prima risposta che corrisponde.",
- "fr": "Quelle est l'importance de cet arbre ? Choisissez la première réponse qui s'applique."
- },
- "mappings": [
- {
- "if": {
- "and": [
- "denotation=landmark"
- ]
- },
- "then": {
- "nl": "De boom valt op door zijn grootte of prominente locatie. Hij is nuttig voor navigatie.",
- "en": "The tree is remarkable due to its size or prominent location. It is useful for navigation.",
- "it": "È un albero notevole per le sue dimensioni o per la posizione prominente. È utile alla navigazione.",
- "fr": "L'arbre est remarquable en raison de sa taille ou de son emplacement proéminent. Il est utile pour la navigation."
- }
- },
- {
- "if": {
- "and": [
- "denotation=natural_monument"
- ]
- },
- "then": {
- "nl": "De boom is een natuurlijk monument, bijvoorbeeld doordat hij bijzonder oud of van een waardevolle soort is.",
- "en": "The tree is a natural monument, e.g. because it is especially old, or of a valuable species.",
- "it": "L’albero è un monumento naturale, ad esempio perché specialmente antico o appartenente a specie importanti.",
- "fr": "Cet arbre est un monument naturel (ex : âge, espèce, etc…)"
- }
- },
- {
- "if": {
- "and": [
- "denotation=agricultural"
- ]
- },
- "then": {
- "nl": "De boom wordt voor landbouwdoeleinden gebruikt, bijvoorbeeld in een boomgaard.",
- "en": "The tree is used for agricultural purposes, e.g. in an orchard.",
- "it": "L’albero è usato per scopi agricoli, ad esempio in un frutteto.",
- "fr": "Cet arbre est utilisé à but d’agriculture (ex : dans un verger)"
- }
- },
- {
- "if": {
- "and": [
- "denotation=park"
- ]
- },
- "then": {
- "nl": "De boom staat in een park of dergelijke (begraafplaats, schoolterrein, …).",
- "en": "The tree is in a park or similar (cemetery, school grounds, …).",
- "it": "L’albero è in un parco o qualcosa di simile (cimitero, aree didattiche, etc.).",
- "fr": "Cet arbre est dans un parc ou une aire similaire (ex : cimetière, cour d’école, …)."
- }
- },
- {
- "if": {
- "and": [
- "denotation=garden"
- ]
- },
- "then": {
- "nl": "De boom staat in de tuin bij een woning/flatgebouw.",
- "en": "The tree is a residential garden.",
- "it": "L’albero è un giardino residenziale.",
- "fr": "Cet arbre est dans une cour résidentielle."
- }
- },
- {
- "if": {
- "and": [
- "denotation=avenue"
- ]
- },
- "then": {
- "nl": "Dit is een laanboom.",
- "en": "This is a tree along an avenue.",
- "it": "Fa parte di un viale alberato.",
- "fr": "C'est un arbre le long d'une avenue."
- }
- },
- {
- "if": {
- "and": [
- "denotation=urban"
- ]
- },
- "then": {
- "nl": "De boom staat in een woonkern.",
- "en": "The tree is an urban area.",
- "it": "L’albero si trova in un’area urbana.",
- "fr": "L'arbre est une zone urbaine."
- }
- },
- {
- "if": {
- "and": [
- "denotation=none"
- ]
- },
- "then": {
- "nl": "De boom staat buiten een woonkern.",
- "en": "The tree is outside of an urban area.",
- "it": "L’albero si trova fuori dall’area urbana.",
- "fr": "Cet arbre est en zone rurale."
- }
- }
- ]
- },
- {
- "question": {
- "nl": "Is deze boom groenblijvend of bladverliezend?",
- "en": "Is this tree evergreen or deciduous?",
- "it": "È un sempreverde o caduco?",
- "ru": "Это дерево вечнозелёное или листопадное?",
- "fr": "L’arbre est-il à feuillage persistant ou caduc ?"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "leaf_cycle=deciduous"
- ]
- },
- "then": {
- "nl": "Bladverliezend: de boom is een periode van het jaar kaal.",
- "en": "Deciduous: the tree loses its leaves for some time of the year.",
- "it": "Caduco: l’albero perde le sue foglie per un periodo dell’anno.",
- "ru": "Листопадное: у дерева опадают листья в определённое время года.",
- "fr": "Caduc : l’arbre perd son feuillage une partie de l’année."
- }
- },
- {
- "if": {
- "and": [
- "leaf_cycle=evergreen"
- ]
- },
- "then": {
- "nl": "Groenblijvend.",
- "en": "Evergreen.",
- "it": "Sempreverde.",
- "fr": "À feuilles persistantes.",
- "ru": "Вечнозелёное."
- }
- }
- ],
- "condition": {
- "and": [
- "leaf_type!~^leafless$"
- ]
- }
- },
- {
- "render": {
- "nl": "Naam: {name}",
- "en": "Name: {name}",
- "it": "Nome: {name}",
- "ru": "Название: {name}",
- "fr": "Nom : {name}",
- "id": "Nama: {name}"
- },
- "question": {
- "nl": "Heeft de boom een naam?",
- "en": "Does the tree have a name?",
- "it": "L’albero ha un nome?",
- "fr": "L'arbre a-t-il un nom ?",
- "ru": "Есть ли у этого дерева название?"
- },
- "freeform": {
- "key": "name",
- "addExtraTags": [
- "noname="
- ]
- },
- "mappings": [
- {
- "if": {
- "and": [
- "name=",
- "noname=yes"
- ]
- },
- "then": {
- "nl": "De boom heeft geen naam.",
- "en": "The tree does not have a name.",
- "it": "L’albero non ha un nome.",
- "fr": "L'arbre n'a pas de nom.",
- "ru": "У этого дерева нет названия."
- }
- }
- ],
- "condition": {
- "or": [
- "denotation=landmark",
- "denotation=natural_monument",
- "name~*"
- ]
- }
- },
- {
- "question": {
- "nl": "Is deze boom erkend als erfgoed?",
- "en": "Is this tree registered heritage?",
- "it": "Quest’albero è registrato come patrimonio?",
- "fr": "Cet arbre est-il inscrit au patrimoine ?"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "heritage=4",
- "heritage:operator=OnroerendErfgoed"
- ]
- },
- "then": {
- "nl": " Erkend als houtig erfgoed door Onroerend Erfgoed Vlaanderen",
- "en": " Registered as heritage by Onroerend Erfgoed Flanders",
- "it": "Registrato come patrimonio da Onroerend Erfgoed Flanders",
- "fr": " Fait partie du patrimoine par Onroerend Erfgoed"
- }
- },
- {
- "if": {
- "and": [
- "heritage=4",
- "heritage:operator=aatl"
- ]
- },
- "then": {
- "nl": "Erkend als natuurlijk erfgoed door Directie Cultureel Erfgoed Brussel",
- "en": "Registered as heritage by Direction du Patrimoine culturel Brussels",
- "it": "Registrato come patrimonio da Direction du Patrimoine culturel di Bruxelles",
- "fr": "Enregistré comme patrimoine par la Direction du Patrimoine culturel Bruxelles"
- }
- },
- {
- "if": {
- "and": [
- "heritage=yes",
- "heritage:operator="
- ]
- },
- "then": {
- "nl": "Erkend als erfgoed door een andere organisatie",
- "en": "Registered as heritage by a different organisation",
- "it": "Registrato come patrimonio da un’organizzazione differente",
- "fr": "Enregistré comme patrimoine par une autre organisation"
- }
- },
- {
- "if": {
- "and": [
- "heritage=no",
- "heritage:operator="
- ]
- },
- "then": {
- "nl": "Niet erkend als erfgoed",
- "en": "Not registered as heritage",
- "it": "Non è registrato come patrimonio",
- "fr": "Non enregistré comme patrimoine"
- }
- },
- {
- "if": {
- "and": [
- "heritage~*"
- ]
- },
- "then": {
- "nl": "Erkend als erfgoed door een andere organisatie",
- "en": "Registered as heritage by a different organisation",
- "it": "Registrato come patrimonio da un’organizzazione differente",
- "fr": "Enregistré comme patrimoine par une autre organisation"
- },
- "hideInAnswer": true
- }
- ],
- "condition": {
- "or": [
- "denotation=landmark",
- "denotation=natural_monument"
- ]
- }
- },
- {
- "render": {
- "nl": " Onroerend Erfgoed-ID: {ref:OnroerendErfgoed}",
- "en": " Onroerend Erfgoed ID: {ref:OnroerendErfgoed}",
- "it": " Onroerend Erfgoed ID: {ref:OnroerendErfgoed}",
- "ru": " Onroerend Erfgoed ID: {ref:OnroerendErfgoed}",
- "fr": " Identifiant Onroerend Erfgoed : {ref:OnroerendErfgoed}"
- },
- "question": {
- "nl": "Wat is het ID uitgegeven door Onroerend Erfgoed Vlaanderen?",
- "en": "What is the ID issued by Onroerend Erfgoed Flanders?",
- "it": "Qual è l’ID rilasciato da Onroerend Erfgoed Flanders?",
- "fr": "Quel est son identifiant donné par Onroerend Erfgoed ?"
- },
- "freeform": {
- "key": "ref:OnroerendErfgoed",
- "type": "nat"
- },
- "condition": {
- "and": [
- "heritage=4",
- "heritage:operator=OnroerendErfgoed"
- ]
- }
- },
- {
- "render": {
- "nl": " Wikidata: {wikidata}",
- "en": " Wikidata: {wikidata}",
- "it": " Wikidata: {wikidata}",
- "ru": " Wikidata: {wikidata}",
- "fr": " Wikidata : {wikidata}"
- },
- "question": {
- "nl": "Wat is het Wikidata-ID van deze boom?",
- "en": "What is the Wikidata ID for this tree?",
- "it": "Qual è l’ID Wikidata per questo albero?",
- "fr": "Quel est l'identifiant Wikidata de cet arbre ?"
- },
- "freeform": {
- "key": "wikidata",
- "type": "wikidata"
- },
- "condition": {
- "or": [
- "denotation=landmark",
- "denotation=natural_monument",
- "wikidata~*"
- ]
- }
- }
- ],
- "icon": {
- "render": "circle:#ffffff;./assets/themes/trees/unknown.svg",
- "mappings": [
- {
- "if": {
- "and": [
- "leaf_type=broadleaved"
- ]
- },
- "then": "circle:#ffffff;./assets/themes/trees/broadleaved.svg"
- },
- {
- "if": {
- "and": [
- "leaf_type=needleleaved"
- ]
- },
- "then": "circle:#ffffff;./assets/themes/trees/needleleaved.svg"
- }
- ]
- },
- "wayHandling": 1,
- "width": {
- "render": "8"
- },
- "iconSize": {
- "render": "40,40,bottom"
- },
- "color": {
- "render": "#00f"
- },
- "presets": [
- {
- "tags": [
- "natural=tree",
- "leaf_type=broadleaved"
- ],
- "title": {
- "nl": "Loofboom",
- "en": "Broadleaved tree",
- "it": "Albero latifoglia",
- "fr": "Arbre feuillu",
- "ru": "Лиственное дерево"
- },
- "description": {
- "nl": "Een boom van een soort die blaadjes heeft, bijvoorbeeld eik of populier.",
- "en": "A tree of a species with leaves, such as oak or populus.",
- "it": "Un albero di una specie con foglie larghe come la quercia o il pioppo.",
- "fr": "Un arbre d'une espèce avec de larges feuilles, comme le chêne ou le peuplier."
- }
- },
- {
- "tags": [
- "natural=tree",
- "leaf_type=needleleaved"
- ],
- "title": {
- "nl": "Naaldboom",
- "en": "Needleleaved tree",
- "it": "Albero aghifoglia",
- "ru": "Хвойное дерево",
- "fr": "Arbre résineux"
- },
- "description": {
- "nl": "Een boom van een soort met naalden, bijvoorbeeld den of spar.",
- "en": "A tree of a species with needles, such as pine or spruce.",
- "it": "Un albero di una specie con aghi come il pino o l’abete.",
- "ru": "Дерево с хвоей (иглами), например, сосна или ель.",
- "fr": "Une espèce d’arbre avec des épines comme le pin ou l’épicéa."
- }
- },
- {
- "tags": [
- "natural=tree"
- ],
- "title": {
+ "id": "tree_node",
+ "name": {
"nl": "Boom",
"en": "Tree",
"it": "Albero",
"ru": "Дерево",
- "fr": "Arbre",
- "id": "Pohon"
- },
- "description": {
- "nl": "Wanneer je niet zeker bent of het nu een loof- of naaldboom is.",
- "en": "If you're not sure whether it's a broadleaved or needleleaved tree.",
- "it": "Qualora non si sia sicuri se si tratta di un albero latifoglia o aghifoglia.",
- "fr": "Si vous n'êtes pas sûr(e) de savoir s'il s'agit d'un arbre à feuilles larges ou à aiguilles.",
- "ru": "Если вы не уверены в том, лиственное это дерево или хвойное."
- }
- }
- ]
+ "fr": "Arbre"
+ },
+ "minzoom": 14,
+ "source": {
+ "osmTags": {
+ "and": [
+ "natural=tree"
+ ]
+ }
+ },
+ "title": {
+ "render": {
+ "nl": "Boom",
+ "en": "Tree",
+ "it": "Albero",
+ "ru": "Дерево",
+ "fr": "Arbre"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "nl": "{name}",
+ "en": "{name}",
+ "ca": "{name}",
+ "de": "{name}",
+ "fr": "{name}",
+ "it": "{name}",
+ "ru": "{name}",
+ "id": "{name}"
+ }
+ }
+ ]
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "render": {
+ "nl": "Hoogte: {height}",
+ "en": "Height: {height}",
+ "it": "Altezza: {height}",
+ "ru": "Высота: {height}",
+ "fr": "Hauteur : {height}"
+ },
+ "condition": {
+ "and": [
+ "height~*"
+ ]
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "height~^[0-9.]+$"
+ ]
+ },
+ "then": {
+ "nl": "Hoogte: {height} m",
+ "en": "Height: {height} m",
+ "it": "Altezza: {height} m",
+ "ru": "Высота: {height} м",
+ "fr": "Hauteur : {height} m"
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "nl": "Is dit een naald- of loofboom?",
+ "en": "Is this a broadleaved or needleleaved tree?",
+ "it": "Si tratta di un albero latifoglia o aghifoglia?",
+ "fr": "Cet arbre est-il un feuillu ou un résineux ?"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "leaf_type=broadleaved"
+ ]
+ },
+ "then": {
+ "nl": " Loofboom",
+ "en": " Broadleaved",
+ "it": " Latifoglia",
+ "fr": " Feuillu"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "leaf_type=needleleaved"
+ ]
+ },
+ "then": {
+ "nl": " Naaldboom",
+ "en": " Needleleaved",
+ "it": " Aghifoglia",
+ "fr": " Résineux"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "leaf_type=leafless"
+ ]
+ },
+ "then": {
+ "nl": " Permanent bladloos",
+ "en": " Permanently leafless",
+ "it": " Privo di foglie (permanente)",
+ "fr": " Sans feuilles (Permanent)"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ },
+ {
+ "question": {
+ "nl": "Hoe significant is deze boom? Kies het eerste antwoord dat van toepassing is.",
+ "en": "How significant is this tree? Choose the first answer that applies.",
+ "it": "Quanto significativo è questo albero? Scegli la prima risposta che corrisponde.",
+ "fr": "Quelle est l'importance de cet arbre ? Choisissez la première réponse qui s'applique."
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "denotation=landmark"
+ ]
+ },
+ "then": {
+ "nl": "De boom valt op door zijn grootte of prominente locatie. Hij is nuttig voor navigatie.",
+ "en": "The tree is remarkable due to its size or prominent location. It is useful for navigation.",
+ "it": "È un albero notevole per le sue dimensioni o per la posizione prominente. È utile alla navigazione.",
+ "fr": "L'arbre est remarquable en raison de sa taille ou de son emplacement proéminent. Il est utile pour la navigation."
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "denotation=natural_monument"
+ ]
+ },
+ "then": {
+ "nl": "De boom is een natuurlijk monument, bijvoorbeeld doordat hij bijzonder oud of van een waardevolle soort is.",
+ "en": "The tree is a natural monument, e.g. because it is especially old, or of a valuable species.",
+ "it": "L’albero è un monumento naturale, ad esempio perché specialmente antico o appartenente a specie importanti.",
+ "fr": "Cet arbre est un monument naturel (ex : âge, espèce, etc…)"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "denotation=agricultural"
+ ]
+ },
+ "then": {
+ "nl": "De boom wordt voor landbouwdoeleinden gebruikt, bijvoorbeeld in een boomgaard.",
+ "en": "The tree is used for agricultural purposes, e.g. in an orchard.",
+ "it": "L’albero è usato per scopi agricoli, ad esempio in un frutteto.",
+ "fr": "Cet arbre est utilisé à but d’agriculture (ex : dans un verger)"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "denotation=park"
+ ]
+ },
+ "then": {
+ "nl": "De boom staat in een park of dergelijke (begraafplaats, schoolterrein, …).",
+ "en": "The tree is in a park or similar (cemetery, school grounds, …).",
+ "it": "L’albero è in un parco o qualcosa di simile (cimitero, aree didattiche, etc.).",
+ "fr": "Cet arbre est dans un parc ou une aire similaire (ex : cimetière, cour d’école, …)."
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "denotation=garden"
+ ]
+ },
+ "then": {
+ "nl": "De boom staat in de tuin bij een woning/flatgebouw.",
+ "en": "The tree is a residential garden.",
+ "it": "L’albero è un giardino residenziale.",
+ "fr": "Cet arbre est dans une cour résidentielle."
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "denotation=avenue"
+ ]
+ },
+ "then": {
+ "nl": "Dit is een laanboom.",
+ "en": "This is a tree along an avenue.",
+ "it": "Fa parte di un viale alberato.",
+ "fr": "C'est un arbre le long d'une avenue."
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "denotation=urban"
+ ]
+ },
+ "then": {
+ "nl": "De boom staat in een woonkern.",
+ "en": "The tree is an urban area.",
+ "it": "L’albero si trova in un’area urbana.",
+ "fr": "L'arbre est une zone urbaine."
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "denotation=none"
+ ]
+ },
+ "then": {
+ "nl": "De boom staat buiten een woonkern.",
+ "en": "The tree is outside of an urban area.",
+ "it": "L’albero si trova fuori dall’area urbana.",
+ "fr": "Cet arbre est en zone rurale."
+ }
+ }
+ ]
+ },
+ {
+ "question": {
+ "nl": "Is deze boom groenblijvend of bladverliezend?",
+ "en": "Is this tree evergreen or deciduous?",
+ "it": "È un sempreverde o caduco?",
+ "ru": "Это дерево вечнозелёное или листопадное?",
+ "fr": "L’arbre est-il à feuillage persistant ou caduc ?"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "leaf_cycle=deciduous"
+ ]
+ },
+ "then": {
+ "nl": "Bladverliezend: de boom is een periode van het jaar kaal.",
+ "en": "Deciduous: the tree loses its leaves for some time of the year.",
+ "it": "Caduco: l’albero perde le sue foglie per un periodo dell’anno.",
+ "ru": "Листопадное: у дерева опадают листья в определённое время года.",
+ "fr": "Caduc : l’arbre perd son feuillage une partie de l’année."
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "leaf_cycle=evergreen"
+ ]
+ },
+ "then": {
+ "nl": "Groenblijvend.",
+ "en": "Evergreen.",
+ "it": "Sempreverde.",
+ "fr": "À feuilles persistantes.",
+ "ru": "Вечнозелёное."
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "leaf_type!~^leafless$"
+ ]
+ }
+ },
+ {
+ "render": {
+ "nl": "Naam: {name}",
+ "en": "Name: {name}",
+ "it": "Nome: {name}",
+ "ru": "Название: {name}",
+ "fr": "Nom : {name}",
+ "id": "Nama: {name}"
+ },
+ "question": {
+ "nl": "Heeft de boom een naam?",
+ "en": "Does the tree have a name?",
+ "it": "L’albero ha un nome?",
+ "fr": "L'arbre a-t-il un nom ?",
+ "ru": "Есть ли у этого дерева название?"
+ },
+ "freeform": {
+ "key": "name",
+ "addExtraTags": [
+ "noname="
+ ]
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "name=",
+ "noname=yes"
+ ]
+ },
+ "then": {
+ "nl": "De boom heeft geen naam.",
+ "en": "The tree does not have a name.",
+ "it": "L’albero non ha un nome.",
+ "fr": "L'arbre n'a pas de nom.",
+ "ru": "У этого дерева нет названия."
+ }
+ }
+ ],
+ "condition": {
+ "or": [
+ "denotation=landmark",
+ "denotation=natural_monument",
+ "name~*"
+ ]
+ }
+ },
+ {
+ "question": {
+ "nl": "Is deze boom erkend als erfgoed?",
+ "en": "Is this tree registered heritage?",
+ "it": "Quest’albero è registrato come patrimonio?",
+ "fr": "Cet arbre est-il inscrit au patrimoine ?"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "heritage=4",
+ "heritage:operator=OnroerendErfgoed"
+ ]
+ },
+ "then": {
+ "nl": " Erkend als houtig erfgoed door Onroerend Erfgoed Vlaanderen",
+ "en": " Registered as heritage by Onroerend Erfgoed Flanders",
+ "it": "Registrato come patrimonio da Onroerend Erfgoed Flanders",
+ "fr": " Fait partie du patrimoine par Onroerend Erfgoed"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "heritage=4",
+ "heritage:operator=aatl"
+ ]
+ },
+ "then": {
+ "nl": "Erkend als natuurlijk erfgoed door Directie Cultureel Erfgoed Brussel",
+ "en": "Registered as heritage by Direction du Patrimoine culturel Brussels",
+ "it": "Registrato come patrimonio da Direction du Patrimoine culturel di Bruxelles",
+ "fr": "Enregistré comme patrimoine par la Direction du Patrimoine culturel Bruxelles"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "heritage=yes",
+ "heritage:operator="
+ ]
+ },
+ "then": {
+ "nl": "Erkend als erfgoed door een andere organisatie",
+ "en": "Registered as heritage by a different organisation",
+ "it": "Registrato come patrimonio da un’organizzazione differente",
+ "fr": "Enregistré comme patrimoine par une autre organisation"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "heritage=no",
+ "heritage:operator="
+ ]
+ },
+ "then": {
+ "nl": "Niet erkend als erfgoed",
+ "en": "Not registered as heritage",
+ "it": "Non è registrato come patrimonio",
+ "fr": "Non enregistré comme patrimoine"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "heritage~*"
+ ]
+ },
+ "then": {
+ "nl": "Erkend als erfgoed door een andere organisatie",
+ "en": "Registered as heritage by a different organisation",
+ "it": "Registrato come patrimonio da un’organizzazione differente",
+ "fr": "Enregistré comme patrimoine par une autre organisation"
+ },
+ "hideInAnswer": true
+ }
+ ],
+ "condition": {
+ "or": [
+ "denotation=landmark",
+ "denotation=natural_monument"
+ ]
+ }
+ },
+ {
+ "render": {
+ "nl": " Onroerend Erfgoed-ID: {ref:OnroerendErfgoed}",
+ "en": " Onroerend Erfgoed ID: {ref:OnroerendErfgoed}",
+ "it": " Onroerend Erfgoed ID: {ref:OnroerendErfgoed}",
+ "ru": " Onroerend Erfgoed ID: {ref:OnroerendErfgoed}",
+ "fr": " Identifiant Onroerend Erfgoed : {ref:OnroerendErfgoed}"
+ },
+ "question": {
+ "nl": "Wat is het ID uitgegeven door Onroerend Erfgoed Vlaanderen?",
+ "en": "What is the ID issued by Onroerend Erfgoed Flanders?",
+ "it": "Qual è l’ID rilasciato da Onroerend Erfgoed Flanders?",
+ "fr": "Quel est son identifiant donné par Onroerend Erfgoed ?"
+ },
+ "freeform": {
+ "key": "ref:OnroerendErfgoed",
+ "type": "nat"
+ },
+ "condition": {
+ "and": [
+ "heritage=4",
+ "heritage:operator=OnroerendErfgoed"
+ ]
+ }
+ },
+ {
+ "render": {
+ "nl": " Wikidata: {wikidata}",
+ "en": " Wikidata: {wikidata}",
+ "it": " Wikidata: {wikidata}",
+ "ru": " Wikidata: {wikidata}",
+ "fr": " Wikidata : {wikidata}"
+ },
+ "question": {
+ "nl": "Wat is het Wikidata-ID van deze boom?",
+ "en": "What is the Wikidata ID for this tree?",
+ "it": "Qual è l’ID Wikidata per questo albero?",
+ "fr": "Quel est l'identifiant Wikidata de cet arbre ?"
+ },
+ "freeform": {
+ "key": "wikidata",
+ "type": "wikidata"
+ },
+ "condition": {
+ "or": [
+ "denotation=landmark",
+ "denotation=natural_monument",
+ "wikidata~*"
+ ]
+ }
+ }
+ ],
+ "icon": {
+ "render": "circle:#ffffff;./assets/themes/trees/unknown.svg",
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "leaf_type=broadleaved"
+ ]
+ },
+ "then": "circle:#ffffff;./assets/themes/trees/broadleaved.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "leaf_type=needleleaved"
+ ]
+ },
+ "then": "circle:#ffffff;./assets/themes/trees/needleleaved.svg"
+ }
+ ]
+ },
+ "wayHandling": 1,
+ "width": {
+ "render": "8"
+ },
+ "iconSize": {
+ "render": "40,40,bottom"
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": [
+ {
+ "tags": [
+ "natural=tree",
+ "leaf_type=broadleaved"
+ ],
+ "title": {
+ "nl": "Loofboom",
+ "en": "Broadleaved tree",
+ "it": "Albero latifoglia",
+ "fr": "Arbre feuillu",
+ "ru": "Лиственное дерево"
+ },
+ "description": {
+ "nl": "Een boom van een soort die blaadjes heeft, bijvoorbeeld eik of populier.",
+ "en": "A tree of a species with leaves, such as oak or populus.",
+ "it": "Un albero di una specie con foglie larghe come la quercia o il pioppo.",
+ "fr": "Un arbre d'une espèce avec de larges feuilles, comme le chêne ou le peuplier."
+ }
+ },
+ {
+ "tags": [
+ "natural=tree",
+ "leaf_type=needleleaved"
+ ],
+ "title": {
+ "nl": "Naaldboom",
+ "en": "Needleleaved tree",
+ "it": "Albero aghifoglia",
+ "ru": "Хвойное дерево",
+ "fr": "Arbre résineux"
+ },
+ "description": {
+ "nl": "Een boom van een soort met naalden, bijvoorbeeld den of spar.",
+ "en": "A tree of a species with needles, such as pine or spruce.",
+ "it": "Un albero di una specie con aghi come il pino o l’abete.",
+ "ru": "Дерево с хвоей (иглами), например, сосна или ель.",
+ "fr": "Une espèce d’arbre avec des épines comme le pin ou l’épicéa."
+ }
+ },
+ {
+ "tags": [
+ "natural=tree"
+ ],
+ "title": {
+ "nl": "Boom",
+ "en": "Tree",
+ "it": "Albero",
+ "ru": "Дерево",
+ "fr": "Arbre",
+ "id": "Pohon"
+ },
+ "description": {
+ "nl": "Wanneer je niet zeker bent of het nu een loof- of naaldboom is.",
+ "en": "If you're not sure whether it's a broadleaved or needleleaved tree.",
+ "it": "Qualora non si sia sicuri se si tratta di un albero latifoglia o aghifoglia.",
+ "fr": "Si vous n'êtes pas sûr(e) de savoir s'il s'agit d'un arbre à feuilles larges ou à aiguilles.",
+ "ru": "Если вы не уверены в том, лиственное это дерево или хвойное."
+ }
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/viewpoint/viewpoint.json b/assets/layers/viewpoint/viewpoint.json
index f231df77b..31f2452bc 100644
--- a/assets/layers/viewpoint/viewpoint.json
+++ b/assets/layers/viewpoint/viewpoint.json
@@ -1,73 +1,73 @@
{
- "id": "viewpoint",
- "name": {
- "en": "Viewpoint",
- "nl": "Uitzicht",
- "de": "Aussichtspunkt",
- "fr": "Point de vue",
- "it": "Punto panoramico",
- "ru": "Смотровая площадка",
- "id": "Sudut pandang"
- },
- "description": {
- "en": "A nice viewpoint or nice view. Ideal to add an image if no other category fits",
- "nl": "Een mooi uitzicht - ideaal om een foto toe te voegen wanneer iets niet in een andere categorie past",
- "de": "Ein schöner Aussichtspunkt oder eine schöne Aussicht. Ideal zum Hinzufügen eines Bildes, wenn keine andere Kategorie passt",
- "fr": "Un beau point de vue ou une belle vue. Idéal pour ajouter une image si aucune autre catégorie ne convient",
- "it": "Un punto panoramico che offre una bella vista. L'ideale è aggiungere un'immagine, se nessun'altra categoria è appropriata"
- },
- "source": {
- "osmTags": "tourism=viewpoint"
- },
- "minzoom": 14,
- "icon": "./assets/layers/viewpoint/viewpoint.svg",
- "iconSize": "20,20,center",
- "color": "#ffffff",
- "width": "5",
- "wayhandling": 2,
- "presets": [
- {
- "title": {
+ "id": "viewpoint",
+ "name": {
"en": "Viewpoint",
"nl": "Uitzicht",
"de": "Aussichtspunkt",
"fr": "Point de vue",
- "ru": "Смотровая площадка",
"it": "Punto panoramico",
+ "ru": "Смотровая площадка",
"id": "Sudut pandang"
- },
- "tags": [
- "tourism=viewpoint"
- ]
- }
- ],
- "title": {
- "render": {
- "en": "Viewpoint",
- "nl": "Uitzicht",
- "de": "Aussichtspunkt",
- "fr": "Point de vue",
- "ru": "Смотровая площадка",
- "it": "Punto panoramico",
- "id": "Sudut pandang"
- }
- },
- "tagRenderings": [
- "images",
- {
- "question": {
- "en": "Do you want to add a description?",
- "nl": "Zijn er bijzonderheden die je wilt toevoegen?",
- "de": "Möchten Sie eine Beschreibung hinzufügen?",
- "ru": "Вы хотите добавить описание?",
- "fr": "Voulez-vous ajouter une description ?",
- "it": "Vuoi aggiungere una descrizione?",
- "id": "Apakah Anda ingin menambahkan deskripsi?"
- },
- "render": "{description}",
- "freeform": {
- "key": "description"
- }
- }
- ]
+ },
+ "description": {
+ "en": "A nice viewpoint or nice view. Ideal to add an image if no other category fits",
+ "nl": "Een mooi uitzicht - ideaal om een foto toe te voegen wanneer iets niet in een andere categorie past",
+ "de": "Ein schöner Aussichtspunkt oder eine schöne Aussicht. Ideal zum Hinzufügen eines Bildes, wenn keine andere Kategorie passt",
+ "fr": "Un beau point de vue ou une belle vue. Idéal pour ajouter une image si aucune autre catégorie ne convient",
+ "it": "Un punto panoramico che offre una bella vista. L'ideale è aggiungere un'immagine, se nessun'altra categoria è appropriata"
+ },
+ "source": {
+ "osmTags": "tourism=viewpoint"
+ },
+ "minzoom": 14,
+ "icon": "./assets/layers/viewpoint/viewpoint.svg",
+ "iconSize": "20,20,center",
+ "color": "#ffffff",
+ "width": "5",
+ "wayhandling": 2,
+ "presets": [
+ {
+ "title": {
+ "en": "Viewpoint",
+ "nl": "Uitzicht",
+ "de": "Aussichtspunkt",
+ "fr": "Point de vue",
+ "ru": "Смотровая площадка",
+ "it": "Punto panoramico",
+ "id": "Sudut pandang"
+ },
+ "tags": [
+ "tourism=viewpoint"
+ ]
+ }
+ ],
+ "title": {
+ "render": {
+ "en": "Viewpoint",
+ "nl": "Uitzicht",
+ "de": "Aussichtspunkt",
+ "fr": "Point de vue",
+ "ru": "Смотровая площадка",
+ "it": "Punto panoramico",
+ "id": "Sudut pandang"
+ }
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "question": {
+ "en": "Do you want to add a description?",
+ "nl": "Zijn er bijzonderheden die je wilt toevoegen?",
+ "de": "Möchten Sie eine Beschreibung hinzufügen?",
+ "ru": "Вы хотите добавить описание?",
+ "fr": "Voulez-vous ajouter une description ?",
+ "it": "Vuoi aggiungere una descrizione?",
+ "id": "Apakah Anda ingin menambahkan deskripsi?"
+ },
+ "render": "{description}",
+ "freeform": {
+ "key": "description"
+ }
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/village_green/village_green.json b/assets/layers/village_green/village_green.json
index 02dc02293..96fd02f3e 100644
--- a/assets/layers/village_green/village_green.json
+++ b/assets/layers/village_green/village_green.json
@@ -1,37 +1,37 @@
{
- "id": "village_green",
- "name": {
- "nl": "Speelweide"
- },
- "source": {
- "osmTags": "landuse=village_green"
- },
- "minzoom": 0,
- "title": {
- "render": {
- "nl": "Speelweide"
+ "id": "village_green",
+ "name": {
+ "nl": "Speelweide"
},
- "mappings": [
- {
- "if": "name~*",
- "then": {
- "nl": "{name}"
+ "source": {
+ "osmTags": "landuse=village_green"
+ },
+ "minzoom": 0,
+ "title": {
+ "render": {
+ "nl": "Speelweide"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": {
+ "nl": "{name}"
+ }
+ }
+ ]
+ },
+ "icon": "./assets/themes/playgrounds/playground.svg",
+ "iconSize": "40,40,center",
+ "width": "1",
+ "color": "#937f20",
+ "wayHandling": 2,
+ "tagRenderings": [
+ "images",
+ {
+ "render": "Dit is een klein stukje openbaar groen waar je mag spelen, picnicken, zitten, ..."
+ },
+ {
+ "render": "{reviews(name, landuse=village_green )}"
}
- }
]
- },
- "icon": "./assets/themes/playgrounds/playground.svg",
- "iconSize": "40,40,center",
- "width": "1",
- "color": "#937f20",
- "wayHandling": 2,
- "tagRenderings": [
- "images",
- {
- "render": "Dit is een klein stukje openbaar groen waar je mag spelen, picnicken, zitten, ..."
- },
- {
- "render": "{reviews(name, landuse=village_green )}"
- }
- ]
}
\ No newline at end of file
diff --git a/assets/layers/visitor_information_centre/visitor_information_centre.json b/assets/layers/visitor_information_centre/visitor_information_centre.json
index 10c3cd0de..1f066376a 100644
--- a/assets/layers/visitor_information_centre/visitor_information_centre.json
+++ b/assets/layers/visitor_information_centre/visitor_information_centre.json
@@ -1,65 +1,65 @@
{
- "id": "visitor_information_centre",
- "name": {
- "en": "Visitor Information Centre",
- "nl": "Bezoekerscentrum"
- },
- "minzoom": 12,
- "source": {
- "osmTags": {
- "and": [
- {
- "or": [
- "information=visitor_centre",
- "information=office"
- ]
- }
- ]
- }
- },
- "title": {
- "render": {
- "nl": "{name}",
- "en": "{name}"
+ "id": "visitor_information_centre",
+ "name": {
+ "en": "Visitor Information Centre",
+ "nl": "Bezoekerscentrum"
},
- "mappings": [
- {
- "if": {
- "and": [
- "name:nl~*"
- ]
- },
- "then": {
- "nl": "{name:nl}"
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
+ "and": [
+ {
+ "or": [
+ "information=visitor_centre",
+ "information=office"
+ ]
+ }
+ ]
}
- },
- {
- "if": {
- "and": [
- "name~*"
- ]
+ },
+ "title": {
+ "render": {
+ "nl": "{name}",
+ "en": "{name}"
},
- "then": {
- "nl": "{name}",
- "en": "{name}"
- }
- }
- ]
- },
- "description": {
- "en": "A visitor center offers information about a specific attraction or place of interest where it is located.",
- "nl": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd."
- },
- "tagRenderings": [],
- "icon": {
- "render": "./assets/layers/visitor_information_centre/information.svg"
- },
- "iconSize": {
- "render": "40,40,center"
- },
- "color": {
- "render": "#E64C00"
- },
- "presets": [],
- "wayHandling": 1
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "name:nl~*"
+ ]
+ },
+ "then": {
+ "nl": "{name:nl}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "name~*"
+ ]
+ },
+ "then": {
+ "nl": "{name}",
+ "en": "{name}"
+ }
+ }
+ ]
+ },
+ "description": {
+ "en": "A visitor center offers information about a specific attraction or place of interest where it is located.",
+ "nl": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd."
+ },
+ "tagRenderings": [],
+ "icon": {
+ "render": "./assets/layers/visitor_information_centre/information.svg"
+ },
+ "iconSize": {
+ "render": "40,40,center"
+ },
+ "color": {
+ "render": "#E64C00"
+ },
+ "presets": [],
+ "wayHandling": 1
}
\ No newline at end of file
diff --git a/assets/layers/waste_basket/waste_basket.json b/assets/layers/waste_basket/waste_basket.json
index 1dd17348b..8561f5c60 100644
--- a/assets/layers/waste_basket/waste_basket.json
+++ b/assets/layers/waste_basket/waste_basket.json
@@ -1,118 +1,118 @@
{
- "id": "waste_basket",
- "name": {
- "en": "Waste Basket",
- "nl": "Vuilnisbak"
- },
- "minzoom": 17,
- "source": {
- "osmTags": {
- "and": [
- "amenity=waste_basket"
- ]
- }
- },
- "title": {
- "render": {
- "en": "Waste Basket",
- "nl": "Vuilnisbak"
- }
- },
- "description": {
- "en": "This is a public waste basket, thrash can, where you can throw away your thrash.",
- "nl": "Dit is een publieke vuilnisbak waar je je afval kan weggooien."
- },
- "tagRenderings": [
- {
- "question": {
- "en": "What kind of waste basket is this?",
- "nl": "Wat voor soort vuilnisbak is dit?"
- },
- "multiAnswer": true,
- "mappings": [
- {
- "if": "waste=",
- "then": {
- "en": "A waste basket for general waste",
- "nl": "Een vuilnisbak voor zwerfvuil"
- },
- "hideInAnswer": true
- },
- {
- "if": "waste=trash",
- "then": {
- "en": "A waste basket for general waste",
- "nl": "Een vuilnisbak voor zwerfvuil"
- }
- },
- {
- "if": "waste=dog_excrement",
- "then": {
- "en": "A waste basket for dog excrements",
- "nl": "Een vuilnisbak specifiek voor hondenuitwerpselen"
- }
- },
- {
- "if": "waste=cigarettes",
- "then": {
- "en": "A waste basket for cigarettes",
- "nl": "Een vuilnisbak voor sigarettenpeuken"
- }
- },
- {
- "if": "waste=drugs",
- "then": {
- "en": "A waste basket for drugs",
- "nl": "Een vuilnisbak voor (vervallen) medicatie en drugs"
- }
- },
- {
- "if": "waste=sharps",
- "then": {
- "en": "A waste basket for needles and other sharp objects",
- "nl": "Een vuilnisbak voor injectienaalden en andere scherpe voorwerpen"
- }
- }
- ]
- }
- ],
- "icon": {
- "render": "./assets/themes/waste_basket/waste_basket.svg"
- },
- "width": {
- "render": "8"
- },
- "iconSize": {
- "render": "40,40,center",
- "mappings": [
- {
- "if": {
- "and": [
- "amenity=waste_basket"
- ]
- },
- "then": {
- "en": "Waste Basket",
- "nl": "Vuilnisbak"
- }
- }
- ]
- },
- "color": {
- "render": "#00f"
- },
- "presets": [
- {
- "tags": [
- "amenity=waste_basket"
- ],
- "title": {
+ "id": "waste_basket",
+ "name": {
"en": "Waste Basket",
"nl": "Vuilnisbak"
- },
- "presiceInput": {
- "preferredBackground": "photo"
- }
- }
- ]
+ },
+ "minzoom": 17,
+ "source": {
+ "osmTags": {
+ "and": [
+ "amenity=waste_basket"
+ ]
+ }
+ },
+ "title": {
+ "render": {
+ "en": "Waste Basket",
+ "nl": "Vuilnisbak"
+ }
+ },
+ "description": {
+ "en": "This is a public waste basket, thrash can, where you can throw away your thrash.",
+ "nl": "Dit is een publieke vuilnisbak waar je je afval kan weggooien."
+ },
+ "tagRenderings": [
+ {
+ "question": {
+ "en": "What kind of waste basket is this?",
+ "nl": "Wat voor soort vuilnisbak is dit?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "waste=",
+ "then": {
+ "en": "A waste basket for general waste",
+ "nl": "Een vuilnisbak voor zwerfvuil"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "waste=trash",
+ "then": {
+ "en": "A waste basket for general waste",
+ "nl": "Een vuilnisbak voor zwerfvuil"
+ }
+ },
+ {
+ "if": "waste=dog_excrement",
+ "then": {
+ "en": "A waste basket for dog excrements",
+ "nl": "Een vuilnisbak specifiek voor hondenuitwerpselen"
+ }
+ },
+ {
+ "if": "waste=cigarettes",
+ "then": {
+ "en": "A waste basket for cigarettes",
+ "nl": "Een vuilnisbak voor sigarettenpeuken"
+ }
+ },
+ {
+ "if": "waste=drugs",
+ "then": {
+ "en": "A waste basket for drugs",
+ "nl": "Een vuilnisbak voor (vervallen) medicatie en drugs"
+ }
+ },
+ {
+ "if": "waste=sharps",
+ "then": {
+ "en": "A waste basket for needles and other sharp objects",
+ "nl": "Een vuilnisbak voor injectienaalden en andere scherpe voorwerpen"
+ }
+ }
+ ]
+ }
+ ],
+ "icon": {
+ "render": "./assets/themes/waste_basket/waste_basket.svg"
+ },
+ "width": {
+ "render": "8"
+ },
+ "iconSize": {
+ "render": "40,40,center",
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "amenity=waste_basket"
+ ]
+ },
+ "then": {
+ "en": "Waste Basket",
+ "nl": "Vuilnisbak"
+ }
+ }
+ ]
+ },
+ "color": {
+ "render": "#00f"
+ },
+ "presets": [
+ {
+ "tags": [
+ "amenity=waste_basket"
+ ],
+ "title": {
+ "en": "Waste Basket",
+ "nl": "Vuilnisbak"
+ },
+ "presiceInput": {
+ "preferredBackground": "photo"
+ }
+ }
+ ]
}
\ No newline at end of file
diff --git a/assets/layers/watermill/watermill.json b/assets/layers/watermill/watermill.json
index 02b74566e..8fca7a9d6 100644
--- a/assets/layers/watermill/watermill.json
+++ b/assets/layers/watermill/watermill.json
@@ -1,173 +1,173 @@
{
- "id": "watermill",
- "name": {
- "nl": "watermolens",
- "en": "Watermill"
- },
- "minzoom": 12,
- "source": {
- "osmTags": {
- "and": [
- "man_made=watermill"
- ]
- }
- },
- "title": {
- "render": {
- "nl": "Watermolens"
+ "id": "watermill",
+ "name": {
+ "nl": "watermolens",
+ "en": "Watermill"
},
- "mappings": [
- {
- "if": {
- "and": [
- "name:nl~*"
- ]
- },
- "then": {
- "nl": "{name:nl}"
+ "minzoom": 12,
+ "source": {
+ "osmTags": {
+ "and": [
+ "man_made=watermill"
+ ]
}
- },
- {
- "if": {
- "and": [
- "name~*"
- ]
- },
- "then": {
- "nl": "{name}"
- }
- }
- ]
- },
- "description": {
- "nl": "Watermolens"
- },
- "tagRenderings": [
- "images",
- {
- "#": "Access tag",
- "render": {
- "nl": "De toegankelijkheid van dit gebied is: {access:description}"
- },
- "question": {
- "nl": "Is dit gebied toegankelijk?"
- },
- "freeform": {
- "key": "access:description"
- },
- "mappings": [
- {
- "if": {
- "and": [
- "access=yes",
- "fee="
- ]
- },
- "then": {
- "nl": "Vrij toegankelijk"
- }
- },
- {
- "if": {
- "and": [
- "access=no",
- "fee="
- ]
- },
- "then": {
- "nl": "Niet toegankelijk"
- }
- },
- {
- "if": {
- "and": [
- "access=private",
- "fee="
- ]
- },
- "then": {
- "nl": "Niet toegankelijk, want privégebied"
- }
- },
- {
- "if": {
- "and": [
- "access=permissive",
- "fee="
- ]
- },
- "then": {
- "nl": "Toegankelijk, ondanks dat het privegebied is"
- }
- },
- {
- "if": {
- "and": [
- "access=guided",
- "fee="
- ]
- },
- "then": {
- "nl": "Enkel toegankelijk met een gids of tijdens een activiteit"
- }
- },
- {
- "if": {
- "and": [
- "access=yes",
- "fee=yes"
- ]
- },
- "then": {
- "nl": "Toegankelijk mits betaling"
- }
- }
- ]
},
- {
- "#": "Operator tag",
- "render": {
- "nl": "Beheer door {operator}"
- },
- "question": {
- "nl": "Wie beheert dit pad?"
- },
- "freeform": {
- "key": "operator"
- },
- "mappings": [
+ "title": {
+ "render": {
+ "nl": "Watermolens"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "name:nl~*"
+ ]
+ },
+ "then": {
+ "nl": "{name:nl}"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "name~*"
+ ]
+ },
+ "then": {
+ "nl": "{name}"
+ }
+ }
+ ]
+ },
+ "description": {
+ "nl": "Watermolens"
+ },
+ "tagRenderings": [
+ "images",
{
- "if": {
- "and": [
- "operator=Natuurpunt"
+ "#": "Access tag",
+ "render": {
+ "nl": "De toegankelijkheid van dit gebied is: {access:description}"
+ },
+ "question": {
+ "nl": "Is dit gebied toegankelijk?"
+ },
+ "freeform": {
+ "key": "access:description"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "access=yes",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Vrij toegankelijk"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=no",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Niet toegankelijk"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=private",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Niet toegankelijk, want privégebied"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=permissive",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Toegankelijk, ondanks dat het privegebied is"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=guided",
+ "fee="
+ ]
+ },
+ "then": {
+ "nl": "Enkel toegankelijk met een gids of tijdens een activiteit"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "access=yes",
+ "fee=yes"
+ ]
+ },
+ "then": {
+ "nl": "Toegankelijk mits betaling"
+ }
+ }
]
- },
- "then": {
- "nl": "Dit gebied wordt beheerd door Natuurpunt"
- }
},
{
- "if": {
- "and": [
- "operator~(n|N)atuurpunt.*"
+ "#": "Operator tag",
+ "render": {
+ "nl": "Beheer door {operator}"
+ },
+ "question": {
+ "nl": "Wie beheert dit pad?"
+ },
+ "freeform": {
+ "key": "operator"
+ },
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "operator=Natuurpunt"
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied wordt beheerd door Natuurpunt"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "operator~(n|N)atuurpunt.*"
+ ]
+ },
+ "then": {
+ "nl": "Dit gebied wordt beheerd door {operator}"
+ },
+ "hideInAnswer": true
+ }
]
- },
- "then": {
- "nl": "Dit gebied wordt beheerd door {operator}"
- },
- "hideInAnswer": true
}
- ]
+ ],
+ "wayHandling": 1,
+ "icon": {
+ "render": "./assets/layers/watermill/watermill.svg"
+ },
+ "iconSize": {
+ "render": "50,50,center"
+ },
+ "color": {
+ "render": "#FFC0CB"
}
- ],
- "wayHandling": 1,
- "icon": {
- "render": "./assets/layers/watermill/watermill.svg"
- },
- "iconSize": {
- "render": "50,50,center"
- },
- "color": {
- "render": "#FFC0CB"
- }
}
\ No newline at end of file
diff --git a/scripts/generateTranslations.ts b/scripts/generateTranslations.ts
index f5f59afd8..aa15d9c3b 100644
--- a/scripts/generateTranslations.ts
+++ b/scripts/generateTranslations.ts
@@ -295,7 +295,7 @@ function mergeLayerTranslations() {
const layerFiles = ScriptUtils.getLayerFiles();
for (const layerFile of layerFiles) {
mergeLayerTranslation(layerFile.parsed, layerFile.path, loadTranslationFilesFrom("layers"))
- writeFileSync(layerFile.path, JSON.stringify(layerFile.parsed, null, " "))
+ writeFileSync(layerFile.path, JSON.stringify(layerFile.parsed, null, " "))
}
}
From e47224ecb812bc7be23c578f9c50105f99c564a5 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 22 Sep 2021 17:15:30 +0200
Subject: [PATCH 03/65] Small fixes to the UK-addresses theme
---
Logic/ExtraFunction.ts | 17 ++++++++++++-----
assets/themes/uk_addresses/uk_addresses.json | 12 ++++++++----
2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/Logic/ExtraFunction.ts b/Logic/ExtraFunction.ts
index 8b6834e09..04f7a64f6 100644
--- a/Logic/ExtraFunction.ts
+++ b/Logic/ExtraFunction.ts
@@ -134,11 +134,18 @@ export class ExtraFunction {
args: ["list of features or layer name", "amount of features", "unique tag key (optional)", "maxDistanceInMeters (optional)"]
},
(params, feature) => {
- return (features, amount, uniqueTag, maxDistanceInMeters) => ExtraFunction.GetClosestNFeatures(params, feature, features, {
- maxFeatures: Number(amount),
- uniqueTag: uniqueTag,
- maxDistance: Number(maxDistanceInMeters)
- })
+
+ return (features, amount, uniqueTag, maxDistanceInMeters) => {
+ let distance : number = Number(maxDistanceInMeters)
+ if(isNaN(distance)){
+ distance = undefined
+ }
+ return ExtraFunction.GetClosestNFeatures(params, feature, features, {
+ maxFeatures: Number(amount),
+ uniqueTag: uniqueTag,
+ maxDistance: distance
+ });
+ }
}
)
diff --git a/assets/themes/uk_addresses/uk_addresses.json b/assets/themes/uk_addresses/uk_addresses.json
index 654bb2177..e43f867ed 100644
--- a/assets/themes/uk_addresses/uk_addresses.json
+++ b/assets/themes/uk_addresses/uk_addresses.json
@@ -149,17 +149,17 @@
"mappings": [
{
"if": "addr:street:={_closest_street:0:name}",
- "then": "{_closest_street:0:name} {_closest_street:0:distance}m",
+ "then": "Located in {_closest_street:0:name} (~{_closest_street:0:distance}m away)",
"hideInAnswer": "_closest_street:0:name="
},
{
"if": "addr:street:={_closest_street:1:name}",
- "then": "{_closest_street:1:name} {_closest_street:1:distance}m",
+ "then": "Located in {_closest_street:1:name} (~{_closest_street:1:distance}m away)",
"hideInAnswer": "_closest_street:1:name="
},
{
"if": "addr:street:={_closest_street:2:name}",
- "then": "{_closest_street:2:name} {_closest_street:2:distance}m",
+ "then": "Located in {_closest_street:2:name} (~{_closest_street:2:distance}m away)",
"hideInAnswer": "_closest_street:2:name="
}
],
@@ -214,7 +214,11 @@
}
]
},
- "presets": []
+ "presets": [
+ {
+
+ }
+ ]
},
{
"id": "named_streets",
From e18eb06f14c1b29eec0e8bdff77e3337d7103685 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 22 Sep 2021 17:29:50 +0200
Subject: [PATCH 04/65] Add better error handling, fixes #452
---
InitUiElements.ts | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/InitUiElements.ts b/InitUiElements.ts
index e3e61ce2e..f6a6ce803 100644
--- a/InitUiElements.ts
+++ b/InitUiElements.ts
@@ -39,6 +39,8 @@ import LayoutConfig from "./Models/ThemeConfig/LayoutConfig";
import LayerConfig from "./Models/ThemeConfig/LayerConfig";
import Minimap from "./UI/Base/Minimap";
import Constants from "./Models/Constants";
+import Combine from "./UI/Base/Combine";
+import {SubtleButton} from "./UI/Base/SubtleButton";
export class InitUiElements {
static InitAll(
@@ -209,8 +211,8 @@ export class InitUiElements {
static LoadLayoutFromHash(
userLayoutParam: UIEventSource
): [LayoutConfig, string] {
- try {
let hash = location.hash.substr(1);
+ try {
const layoutFromBase64 = userLayoutParam.data;
// layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter
@@ -249,9 +251,21 @@ export class InitUiElements {
userLayoutParam.setData(layoutToUse.id);
return [layoutToUse, btoa(Utils.MinifyJSON(JSON.stringify(json)))];
} catch (e) {
- new FixedUiElement(
- "Error: could not parse the custom layout: " + e
- ).AttachTo("centermessage");
+
+ if(hash === undefined || hash.length < 10){
+ e = "Did you effectively add a theme? It seems no data could be found."
+ }
+
+ new Combine([
+ "Error: could not parse the custom layout:",
+ e,
+ new SubtleButton("./assets/svg/mapcomplete_logo.svg",
+ "Go back to the theme overview",
+ {url: window.location.protocol+"//"+ window.location.hostname+"/index.html", newTab: false})
+
+ ])
+ .SetClass("flex flex-col")
+ .AttachTo("centermessage");
throw e;
}
}
From b9f96155defc760f390d9b94015b1903801e5b22 Mon Sep 17 00:00:00 2001
From: Tobias Jordans
Date: Wed, 22 Sep 2021 18:53:08 +0200
Subject: [PATCH 05/65] Dev Instructions: Install `wget`
`npm run init` requires `wget` to be installed but the error message is tiny and easy to miss. Without wget preset, the init tasks does not all it needs to do.
Documenting it in the instructions explicitly works around this issue.
---
Docs/Development_deployment.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Docs/Development_deployment.md b/Docs/Development_deployment.md
index 9fa81f836..f95b7d284 100644
--- a/Docs/Development_deployment.md
+++ b/Docs/Development_deployment.md
@@ -30,6 +30,7 @@ To develop and build MapComplete, you
0. Make a fork and clone the repository.
1. Install `npm`. Linux: `sudo apt install npm` (or your favourite package manager), Windows: install
nodeJS: https://nodejs.org/en/download/
+0. Install `wget`, `brew install wget`
3. Run `npm run init` and generate some additional dependencies and generated files. Note that it'll install the
dependencies too
4. Run `npm run start` to host a local testversion at http://localhost:1234/index.html
@@ -125,4 +126,3 @@ Overview of package.json-scripts
- `deploy:staging`,`deploy:pietervdvn`, `deploy:production`: deploy the latest code on various locations
- `lint`: get depressed by the amount of warnings
- `clean`: remove some generated files which are annoying in the repo
-
From 204b431df0902069db9537c2a6a6c2f3fa6ec224 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 22 Sep 2021 20:12:53 +0200
Subject: [PATCH 06/65] Add more types to the charging stations theme, better
merge if translations already exist
---
InitUiElements.ts | 2 +-
Models/Constants.ts | 2 +-
.../charging_station/charging_station.json | 750 +++++++++++++++++-
.../charging_station.protojson | 28 +-
assets/layers/charging_station/csvToJson.ts | 83 +-
assets/layers/charging_station/types.csv | 24 +-
6 files changed, 851 insertions(+), 38 deletions(-)
diff --git a/InitUiElements.ts b/InitUiElements.ts
index f6a6ce803..1835c4e07 100644
--- a/InitUiElements.ts
+++ b/InitUiElements.ts
@@ -258,7 +258,7 @@ export class InitUiElements {
new Combine([
"Error: could not parse the custom layout:",
- e,
+ new FixedUiElement(""+e).SetClass("alert"),
new SubtleButton("./assets/svg/mapcomplete_logo.svg",
"Go back to the theme overview",
{url: window.location.protocol+"//"+ window.location.hostname+"/index.html", newTab: false})
diff --git a/Models/Constants.ts b/Models/Constants.ts
index 539ab8c6f..ec3fd96e6 100644
--- a/Models/Constants.ts
+++ b/Models/Constants.ts
@@ -2,7 +2,7 @@ import {Utils} from "../Utils";
export default class Constants {
- public static vNumber = "0.9.12";
+ public static vNumber = "0.9.13";
// The user journey states thresholds when a new feature gets unlocked
public static userJourney = {
diff --git a/assets/layers/charging_station/charging_station.json b/assets/layers/charging_station/charging_station.json
index 4446049ab..c726b52dd 100644
--- a/assets/layers/charging_station/charging_station.json
+++ b/assets/layers/charging_station/charging_station.json
@@ -93,8 +93,13 @@
]
},
{
- "question": "Who is allowed to use this charging station?",
- "render": "Access is {access}",
+ "#": "access",
+ "question": {
+ "en": "Who is allowed to use this charging station?"
+ },
+ "render": {
+ "en": "Access is {access}"
+ },
"freeform": {
"key": "access",
"addExtraTags": [
@@ -142,6 +147,7 @@
}
},
{
+ "#": "Available_charging_stations (generated)",
"question": {
"en": "Which charging stations are available here?"
},
@@ -153,6 +159,18 @@
"then": {
"en": " Schuko wall plug without ground pin (CEE7/4 type F)",
"nl": " Schuko stekker zonder aardingspin (CEE7/4 type F)"
+ },
+ "hideInAnswer": {
+ "or": [
+ "_country!=be",
+ "_country!=fr",
+ "_country!=ma",
+ "_country!=tn",
+ "_country!=pl",
+ "_country!=cs",
+ "_country!=sk",
+ "_country!=mo"
+ ]
}
},
{
@@ -335,10 +353,105 @@
"nl": " "
},
"hideInAnswer": true
+ },
+ {
+ "if": "socket:type2_cable=1",
+ "ifnot": "socket:type2_cable=",
+ "then": {
+ "en": " Type 2 with cable (mennekes)",
+ "nl": " Type 2 met kabel (J1772)"
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:type2_cable~*",
+ "socket:type2_cable!=1"
+ ]
+ },
+ "then": {
+ "en": " Type 2 with cable (mennekes)",
+ "nl": " Type 2 met kabel (J1772)"
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:tesla_supercharger_ccs=1",
+ "ifnot": "socket:tesla_supercharger_ccs=",
+ "then": {
+ "en": " Tesla Supercharger CCS (a branded type2_css)",
+ "nl": " "
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:tesla_supercharger_ccs~*",
+ "socket:tesla_supercharger_ccs!=1"
+ ]
+ },
+ "then": {
+ "en": " Tesla Supercharger CCS (a branded type2_css)",
+ "nl": " "
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:tesla_destination=1",
+ "ifnot": "socket:tesla_destination=",
+ "then": {
+ "en": " Tesla Supercharger (destination)",
+ "nl": " "
+ },
+ "hideInAnswer": {
+ "or": [
+ "_country!=us"
+ ]
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=1"
+ ]
+ },
+ "then": {
+ "en": " Tesla Supercharger (destination)",
+ "nl": " "
+ },
+ "hideInAnswer": true
+ },
+ {
+ "if": "socket:tesla_destination=1",
+ "ifnot": "socket:tesla_destination=",
+ "then": {
+ "en": " Tesla supercharger (destination (A Type 2 with cable branded as tesla)",
+ "nl": " "
+ },
+ "hideInAnswer": {
+ "or": [
+ "_country=us"
+ ]
+ }
+ },
+ {
+ "if": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=1"
+ ]
+ },
+ "then": {
+ "en": " Tesla supercharger (destination (A Type 2 with cable branded as tesla)",
+ "nl": " "
+ },
+ "hideInAnswer": true
}
]
},
{
+ "#": "plugs-0",
"question": {
"en": "How much plugs of type Schuko wall plug without ground pin (CEE7/4 type F) are available here?",
"nl": "Hoeveel stekkers van type Schuko stekker zonder aardingspin (CEE7/4 type F) heeft dit oplaadpunt?"
@@ -359,6 +472,7 @@
}
},
{
+ "#": "voltage-0",
"question": {
"en": "What voltage do the plugs with Schuko wall plug without ground pin (CEE7/4 type F) offer?",
"nl": "Welke spanning levert de stekker van type Schuko stekker zonder aardingspin (CEE7/4 type F) "
@@ -388,6 +502,7 @@
}
},
{
+ "#": "current-0",
"question": {
"en": "What current do the plugs with Schuko wall plug without ground pin (CEE7/4 type F) offer?",
"nl": "Welke stroom levert de stekker van type Schuko stekker zonder aardingspin (CEE7/4 type F) ?"
@@ -417,6 +532,7 @@
}
},
{
+ "#": "power-output-0",
"question": {
"en": "What power output does a single plug of type Schuko wall plug without ground pin (CEE7/4 type F) offer?",
"nl": "Welk vermogen levert een enkele stekker van type Schuko stekker zonder aardingspin (CEE7/4 type F) ?"
@@ -446,6 +562,7 @@
}
},
{
+ "#": "plugs-1",
"question": {
"en": "How much plugs of type European wall plug with ground pin (CEE7/4 type E) are available here?",
"nl": "Hoeveel stekkers van type Europese stekker met aardingspin (CEE7/4 type E) heeft dit oplaadpunt?"
@@ -466,6 +583,7 @@
}
},
{
+ "#": "voltage-1",
"question": {
"en": "What voltage do the plugs with European wall plug with ground pin (CEE7/4 type E) offer?",
"nl": "Welke spanning levert de stekker van type Europese stekker met aardingspin (CEE7/4 type E) "
@@ -495,6 +613,7 @@
}
},
{
+ "#": "current-1",
"question": {
"en": "What current do the plugs with European wall plug with ground pin (CEE7/4 type E) offer?",
"nl": "Welke stroom levert de stekker van type Europese stekker met aardingspin (CEE7/4 type E) ?"
@@ -524,6 +643,7 @@
}
},
{
+ "#": "power-output-1",
"question": {
"en": "What power output does a single plug of type European wall plug with ground pin (CEE7/4 type E) offer?",
"nl": "Welk vermogen levert een enkele stekker van type Europese stekker met aardingspin (CEE7/4 type E) ?"
@@ -560,6 +680,7 @@
}
},
{
+ "#": "plugs-2",
"question": {
"en": "How much plugs of type Chademo are available here?",
"nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
@@ -580,6 +701,7 @@
}
},
{
+ "#": "voltage-2",
"question": {
"en": "What voltage do the plugs with Chademo offer?",
"nl": "Welke spanning levert de stekker van type "
@@ -609,6 +731,7 @@
}
},
{
+ "#": "current-2",
"question": {
"en": "What current do the plugs with Chademo offer?",
"nl": "Welke stroom levert de stekker van type ?"
@@ -638,6 +761,7 @@
}
},
{
+ "#": "power-output-2",
"question": {
"en": "What power output does a single plug of type Chademo offer?",
"nl": "Welk vermogen levert een enkele stekker van type ?"
@@ -667,6 +791,7 @@
}
},
{
+ "#": "plugs-3",
"question": {
"en": "How much plugs of type Type 1 with cable (J1772) are available here?",
"nl": "Hoeveel stekkers van type Type 1 met kabel (J1772) heeft dit oplaadpunt?"
@@ -687,6 +812,7 @@
}
},
{
+ "#": "voltage-3",
"question": {
"en": "What voltage do the plugs with Type 1 with cable (J1772) offer?",
"nl": "Welke spanning levert de stekker van type Type 1 met kabel (J1772) "
@@ -723,6 +849,7 @@
}
},
{
+ "#": "current-3",
"question": {
"en": "What current do the plugs with Type 1 with cable (J1772) offer?",
"nl": "Welke stroom levert de stekker van type Type 1 met kabel (J1772) ?"
@@ -752,6 +879,7 @@
}
},
{
+ "#": "power-output-3",
"question": {
"en": "What power output does a single plug of type Type 1 with cable (J1772) offer?",
"nl": "Welk vermogen levert een enkele stekker van type Type 1 met kabel (J1772) ?"
@@ -788,6 +916,7 @@
}
},
{
+ "#": "plugs-4",
"question": {
"en": "How much plugs of type Type 1 without cable (J1772) are available here?",
"nl": "Hoeveel stekkers van type Type 1 zonder kabel (J1772) heeft dit oplaadpunt?"
@@ -808,6 +937,7 @@
}
},
{
+ "#": "voltage-4",
"question": {
"en": "What voltage do the plugs with Type 1 without cable (J1772) offer?",
"nl": "Welke spanning levert de stekker van type Type 1 zonder kabel (J1772) "
@@ -844,6 +974,7 @@
}
},
{
+ "#": "current-4",
"question": {
"en": "What current do the plugs with Type 1 without cable (J1772) offer?",
"nl": "Welke stroom levert de stekker van type Type 1 zonder kabel (J1772) ?"
@@ -873,6 +1004,7 @@
}
},
{
+ "#": "power-output-4",
"question": {
"en": "What power output does a single plug of type Type 1 without cable (J1772) offer?",
"nl": "Welk vermogen levert een enkele stekker van type Type 1 zonder kabel (J1772) ?"
@@ -923,6 +1055,7 @@
}
},
{
+ "#": "plugs-5",
"question": {
"en": "How much plugs of type Type 1 CCS (aka Type 1 Combo) are available here?",
"nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
@@ -943,6 +1076,7 @@
}
},
{
+ "#": "voltage-5",
"question": {
"en": "What voltage do the plugs with Type 1 CCS (aka Type 1 Combo) offer?",
"nl": "Welke spanning levert de stekker van type "
@@ -979,6 +1113,7 @@
}
},
{
+ "#": "current-5",
"question": {
"en": "What current do the plugs with Type 1 CCS (aka Type 1 Combo) offer?",
"nl": "Welke stroom levert de stekker van type ?"
@@ -1015,6 +1150,7 @@
}
},
{
+ "#": "power-output-5",
"question": {
"en": "What power output does a single plug of type Type 1 CCS (aka Type 1 Combo) offer?",
"nl": "Welk vermogen levert een enkele stekker van type ?"
@@ -1065,6 +1201,7 @@
}
},
{
+ "#": "plugs-6",
"question": {
"en": "How much plugs of type Tesla Supercharger are available here?",
"nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
@@ -1085,6 +1222,7 @@
}
},
{
+ "#": "voltage-6",
"question": {
"en": "What voltage do the plugs with Tesla Supercharger offer?",
"nl": "Welke spanning levert de stekker van type "
@@ -1114,6 +1252,7 @@
}
},
{
+ "#": "current-6",
"question": {
"en": "What current do the plugs with Tesla Supercharger offer?",
"nl": "Welke stroom levert de stekker van type ?"
@@ -1150,6 +1289,7 @@
}
},
{
+ "#": "power-output-6",
"question": {
"en": "What power output does a single plug of type Tesla Supercharger offer?",
"nl": "Welk vermogen levert een enkele stekker van type ?"
@@ -1193,6 +1333,7 @@
}
},
{
+ "#": "plugs-7",
"question": {
"en": "How much plugs of type Type 2 (mennekes) are available here?",
"nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
@@ -1213,6 +1354,7 @@
}
},
{
+ "#": "voltage-7",
"question": {
"en": "What voltage do the plugs with Type 2 (mennekes) offer?",
"nl": "Welke spanning levert de stekker van type "
@@ -1249,6 +1391,7 @@
}
},
{
+ "#": "current-7",
"question": {
"en": "What current do the plugs with Type 2 (mennekes) offer?",
"nl": "Welke stroom levert de stekker van type ?"
@@ -1285,6 +1428,7 @@
}
},
{
+ "#": "power-output-7",
"question": {
"en": "What power output does a single plug of type Type 2 (mennekes) offer?",
"nl": "Welk vermogen levert een enkele stekker van type ?"
@@ -1321,6 +1465,7 @@
}
},
{
+ "#": "plugs-8",
"question": {
"en": "How much plugs of type Type 2 CCS (mennekes) are available here?",
"nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
@@ -1341,6 +1486,7 @@
}
},
{
+ "#": "voltage-8",
"question": {
"en": "What voltage do the plugs with Type 2 CCS (mennekes) offer?",
"nl": "Welke spanning levert de stekker van type "
@@ -1377,6 +1523,7 @@
}
},
{
+ "#": "current-8",
"question": {
"en": "What current do the plugs with Type 2 CCS (mennekes) offer?",
"nl": "Welke stroom levert de stekker van type ?"
@@ -1413,6 +1560,7 @@
}
},
{
+ "#": "power-output-8",
"question": {
"en": "What power output does a single plug of type Type 2 CCS (mennekes) offer?",
"nl": "Welk vermogen levert een enkele stekker van type ?"
@@ -1441,6 +1589,527 @@
]
}
},
+ {
+ "#": "plugs-9",
+ "question": {
+ "en": "How much plugs of type Type 2 with cable (mennekes) are available here?",
+ "nl": "Hoeveel stekkers van type Type 2 met kabel (J1772) heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Type 2 with cable (mennekes) plugs of type Type 2 with cable (mennekes) available here",
+ "nl": "Hier zijn Type 2 met kabel (J1772) stekkers van het type Type 2 met kabel (J1772)"
+ },
+ "freeform": {
+ "key": "socket:type2_cable",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:type2_cable~*",
+ "socket:type2_cable!=0"
+ ]
+ }
+ },
+ {
+ "#": "voltage-9",
+ "question": {
+ "en": "What voltage do the plugs with Type 2 with cable (mennekes) offer?",
+ "nl": "Welke spanning levert de stekker van type Type 2 met kabel (J1772) "
+ },
+ "render": {
+ "en": "Type 2 with cable (mennekes) outputs {socket:type2_cable:voltage} volt",
+ "nl": "Type 2 met kabel (J1772) heeft een spanning van {socket:type2_cable:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:type2_cable:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type2_cable:voltage=230 V",
+ "then": {
+ "en": "Type 2 with cable (mennekes) outputs 230 volt",
+ "nl": "Type 2 met kabel (J1772) heeft een spanning van 230 volt"
+ }
+ },
+ {
+ "if": "socket:socket:type2_cable:voltage=400 V",
+ "then": {
+ "en": "Type 2 with cable (mennekes) outputs 400 volt",
+ "nl": "Type 2 met kabel (J1772) heeft een spanning van 400 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type2_cable~*",
+ "socket:type2_cable!=0"
+ ]
+ }
+ },
+ {
+ "#": "current-9",
+ "question": {
+ "en": "What current do the plugs with Type 2 with cable (mennekes) offer?",
+ "nl": "Welke stroom levert de stekker van type Type 2 met kabel (J1772) ?"
+ },
+ "render": {
+ "en": "Type 2 with cable (mennekes) outputs at most {socket:type2_cable:current}A",
+ "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal {socket:type2_cable:current}A"
+ },
+ "freeform": {
+ "key": "socket:type2_cable:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type2_cable:current=16 A",
+ "then": {
+ "en": "Type 2 with cable (mennekes) outputs at most 16 A",
+ "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 16 A"
+ }
+ },
+ {
+ "if": "socket:socket:type2_cable:current=32 A",
+ "then": {
+ "en": "Type 2 with cable (mennekes) outputs at most 32 A",
+ "nl": "Type 2 met kabel (J1772) levert een stroom van maximaal 32 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type2_cable~*",
+ "socket:type2_cable!=0"
+ ]
+ }
+ },
+ {
+ "#": "power-output-9",
+ "question": {
+ "en": "What power output does a single plug of type Type 2 with cable (mennekes) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type Type 2 met kabel (J1772) ?"
+ },
+ "render": {
+ "en": "Type 2 with cable (mennekes) outputs at most {socket:type2_cable:output}",
+ "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal {socket:type2_cable:output}"
+ },
+ "freeform": {
+ "key": "socket:type2_cable:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:type2_cable:output=11 kw",
+ "then": {
+ "en": "Type 2 with cable (mennekes) outputs at most 11 kw",
+ "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 11 kw"
+ }
+ },
+ {
+ "if": "socket:socket:type2_cable:output=22 kw",
+ "then": {
+ "en": "Type 2 with cable (mennekes) outputs at most 22 kw",
+ "nl": "Type 2 met kabel (J1772) levert een vermogen van maximaal 22 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:type2_cable~*",
+ "socket:type2_cable!=0"
+ ]
+ }
+ },
+ {
+ "#": "plugs-10",
+ "question": {
+ "en": "How much plugs of type Tesla Supercharger CCS (a branded type2_css) are available here?",
+ "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Tesla Supercharger CCS (a branded type2_css) plugs of type Tesla Supercharger CCS (a branded type2_css) available here",
+ "nl": "Hier zijn stekkers van het type "
+ },
+ "freeform": {
+ "key": "socket:tesla_supercharger_ccs",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:tesla_supercharger_ccs~*",
+ "socket:tesla_supercharger_ccs!=0"
+ ]
+ }
+ },
+ {
+ "#": "voltage-10",
+ "question": {
+ "en": "What voltage do the plugs with Tesla Supercharger CCS (a branded type2_css) offer?",
+ "nl": "Welke spanning levert de stekker van type "
+ },
+ "render": {
+ "en": "Tesla Supercharger CCS (a branded type2_css) outputs {socket:tesla_supercharger_ccs:voltage} volt",
+ "nl": " heeft een spanning van {socket:tesla_supercharger_ccs:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:tesla_supercharger_ccs:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_supercharger_ccs:voltage=500 V",
+ "then": {
+ "en": "Tesla Supercharger CCS (a branded type2_css) outputs 500 volt",
+ "nl": " heeft een spanning van 500 volt"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_supercharger_ccs:voltage=920 V",
+ "then": {
+ "en": "Tesla Supercharger CCS (a branded type2_css) outputs 920 volt",
+ "nl": " heeft een spanning van 920 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_supercharger_ccs~*",
+ "socket:tesla_supercharger_ccs!=0"
+ ]
+ }
+ },
+ {
+ "#": "current-10",
+ "question": {
+ "en": "What current do the plugs with Tesla Supercharger CCS (a branded type2_css) offer?",
+ "nl": "Welke stroom levert de stekker van type ?"
+ },
+ "render": {
+ "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most {socket:tesla_supercharger_ccs:current}A",
+ "nl": " levert een stroom van maximaal {socket:tesla_supercharger_ccs:current}A"
+ },
+ "freeform": {
+ "key": "socket:tesla_supercharger_ccs:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_supercharger_ccs:current=125 A",
+ "then": {
+ "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most 125 A",
+ "nl": " levert een stroom van maximaal 125 A"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_supercharger_ccs:current=350 A",
+ "then": {
+ "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most 350 A",
+ "nl": " levert een stroom van maximaal 350 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_supercharger_ccs~*",
+ "socket:tesla_supercharger_ccs!=0"
+ ]
+ }
+ },
+ {
+ "#": "power-output-10",
+ "question": {
+ "en": "What power output does a single plug of type Tesla Supercharger CCS (a branded type2_css) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type ?"
+ },
+ "render": {
+ "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most {socket:tesla_supercharger_ccs:output}",
+ "nl": " levert een vermogen van maximaal {socket:tesla_supercharger_ccs:output}"
+ },
+ "freeform": {
+ "key": "socket:tesla_supercharger_ccs:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_supercharger_ccs:output=50 kw",
+ "then": {
+ "en": "Tesla Supercharger CCS (a branded type2_css) outputs at most 50 kw",
+ "nl": " levert een vermogen van maximaal 50 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_supercharger_ccs~*",
+ "socket:tesla_supercharger_ccs!=0"
+ ]
+ }
+ },
+ {
+ "#": "plugs-11",
+ "question": {
+ "en": "How much plugs of type Tesla Supercharger (destination) are available here?",
+ "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Tesla Supercharger (destination) plugs of type Tesla Supercharger (destination) available here",
+ "nl": "Hier zijn stekkers van het type "
+ },
+ "freeform": {
+ "key": "socket:tesla_destination",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=0"
+ ]
+ }
+ },
+ {
+ "#": "voltage-11",
+ "question": {
+ "en": "What voltage do the plugs with Tesla Supercharger (destination) offer?",
+ "nl": "Welke spanning levert de stekker van type "
+ },
+ "render": {
+ "en": "Tesla Supercharger (destination) outputs {socket:tesla_destination:voltage} volt",
+ "nl": " heeft een spanning van {socket:tesla_destination:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:tesla_destination:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_destination:voltage=480 V",
+ "then": {
+ "en": "Tesla Supercharger (destination) outputs 480 volt",
+ "nl": " heeft een spanning van 480 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=0"
+ ]
+ }
+ },
+ {
+ "#": "current-11",
+ "question": {
+ "en": "What current do the plugs with Tesla Supercharger (destination) offer?",
+ "nl": "Welke stroom levert de stekker van type ?"
+ },
+ "render": {
+ "en": "Tesla Supercharger (destination) outputs at most {socket:tesla_destination:current}A",
+ "nl": " levert een stroom van maximaal {socket:tesla_destination:current}A"
+ },
+ "freeform": {
+ "key": "socket:tesla_destination:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_destination:current=125 A",
+ "then": {
+ "en": "Tesla Supercharger (destination) outputs at most 125 A",
+ "nl": " levert een stroom van maximaal 125 A"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_destination:current=350 A",
+ "then": {
+ "en": "Tesla Supercharger (destination) outputs at most 350 A",
+ "nl": " levert een stroom van maximaal 350 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=0"
+ ]
+ }
+ },
+ {
+ "#": "power-output-11",
+ "question": {
+ "en": "What power output does a single plug of type Tesla Supercharger (destination) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type ?"
+ },
+ "render": {
+ "en": "Tesla Supercharger (destination) outputs at most {socket:tesla_destination:output}",
+ "nl": " levert een vermogen van maximaal {socket:tesla_destination:output}"
+ },
+ "freeform": {
+ "key": "socket:tesla_destination:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_destination:output=120 kw",
+ "then": {
+ "en": "Tesla Supercharger (destination) outputs at most 120 kw",
+ "nl": " levert een vermogen van maximaal 120 kw"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_destination:output=150 kw",
+ "then": {
+ "en": "Tesla Supercharger (destination) outputs at most 150 kw",
+ "nl": " levert een vermogen van maximaal 150 kw"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_destination:output=250 kw",
+ "then": {
+ "en": "Tesla Supercharger (destination) outputs at most 250 kw",
+ "nl": " levert een vermogen van maximaal 250 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=0"
+ ]
+ }
+ },
+ {
+ "#": "plugs-12",
+ "question": {
+ "en": "How much plugs of type Tesla supercharger (destination (A Type 2 with cable branded as tesla) are available here?",
+ "nl": "Hoeveel stekkers van type heeft dit oplaadpunt?"
+ },
+ "render": {
+ "en": "There are Tesla supercharger (destination (A Type 2 with cable branded as tesla) plugs of type Tesla supercharger (destination (A Type 2 with cable branded as tesla) available here",
+ "nl": "Hier zijn stekkers van het type "
+ },
+ "freeform": {
+ "key": "socket:tesla_destination",
+ "type": "pnat"
+ },
+ "condition": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=0"
+ ]
+ }
+ },
+ {
+ "#": "voltage-12",
+ "question": {
+ "en": "What voltage do the plugs with Tesla supercharger (destination (A Type 2 with cable branded as tesla) offer?",
+ "nl": "Welke spanning levert de stekker van type "
+ },
+ "render": {
+ "en": "Tesla supercharger (destination (A Type 2 with cable branded as tesla) outputs {socket:tesla_destination:voltage} volt",
+ "nl": " heeft een spanning van {socket:tesla_destination:voltage} volt"
+ },
+ "freeform": {
+ "key": "socket:tesla_destination:voltage",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_destination:voltage=230 V",
+ "then": {
+ "en": "Tesla supercharger (destination (A Type 2 with cable branded as tesla) outputs 230 volt",
+ "nl": " heeft een spanning van 230 volt"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_destination:voltage=400 V",
+ "then": {
+ "en": "Tesla supercharger (destination (A Type 2 with cable branded as tesla) outputs 400 volt",
+ "nl": " heeft een spanning van 400 volt"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=0"
+ ]
+ }
+ },
+ {
+ "#": "current-12",
+ "question": {
+ "en": "What current do the plugs with Tesla supercharger (destination (A Type 2 with cable branded as tesla) offer?",
+ "nl": "Welke stroom levert de stekker van type ?"
+ },
+ "render": {
+ "en": "Tesla supercharger (destination (A Type 2 with cable branded as tesla) outputs at most {socket:tesla_destination:current}A",
+ "nl": " levert een stroom van maximaal {socket:tesla_destination:current}A"
+ },
+ "freeform": {
+ "key": "socket:tesla_destination:current",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_destination:current=16 A",
+ "then": {
+ "en": "Tesla supercharger (destination (A Type 2 with cable branded as tesla) outputs at most 16 A",
+ "nl": " levert een stroom van maximaal 16 A"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_destination:current=32 A",
+ "then": {
+ "en": "Tesla supercharger (destination (A Type 2 with cable branded as tesla) outputs at most 32 A",
+ "nl": " levert een stroom van maximaal 32 A"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=0"
+ ]
+ }
+ },
+ {
+ "#": "power-output-12",
+ "question": {
+ "en": "What power output does a single plug of type Tesla supercharger (destination (A Type 2 with cable branded as tesla) offer?",
+ "nl": "Welk vermogen levert een enkele stekker van type ?"
+ },
+ "render": {
+ "en": "Tesla supercharger (destination (A Type 2 with cable branded as tesla) outputs at most {socket:tesla_destination:output}",
+ "nl": " levert een vermogen van maximaal {socket:tesla_destination:output}"
+ },
+ "freeform": {
+ "key": "socket:tesla_destination:output",
+ "type": "pfloat"
+ },
+ "mappings": [
+ {
+ "if": "socket:socket:tesla_destination:output=11 kw",
+ "then": {
+ "en": "Tesla supercharger (destination (A Type 2 with cable branded as tesla) outputs at most 11 kw",
+ "nl": " levert een vermogen van maximaal 11 kw"
+ }
+ },
+ {
+ "if": "socket:socket:tesla_destination:output=22 kw",
+ "then": {
+ "en": "Tesla supercharger (destination (A Type 2 with cable branded as tesla) outputs at most 22 kw",
+ "nl": " levert een vermogen van maximaal 22 kw"
+ }
+ }
+ ],
+ "condition": {
+ "and": [
+ "socket:tesla_destination~*",
+ "socket:tesla_destination!=0"
+ ]
+ }
+ },
{
"#": "Authentication",
"question": {
@@ -1610,6 +2279,7 @@
]
},
{
+ "#": "payment-options",
"builtin": "payment-options",
"override": {
"condition": {
@@ -1627,6 +2297,16 @@
"nl": "Betalen via een app van het netwerk"
}
}
+ ],
+ "mappings": [
+ {
+ "if": "payment:app=yes",
+ "ifnot": "payment:app=no",
+ "then": {
+ "en": "Payment is done using a dedicated app",
+ "nl": "Betalen via een app van het netwerk"
+ }
+ }
]
}
},
@@ -1822,6 +2502,26 @@
}
}
]
+ },
+ {
+ "#": "Parking:fee",
+ "question": {
+ "en": "Does one have to pay a parking fee while charging?"
+ },
+ "mappings": [
+ {
+ "if": "parking:fee=no",
+ "then": {
+ "en": "No additional parking cost while charging"
+ }
+ },
+ {
+ "if": "parking:fee=yes",
+ "then": {
+ "en": "An additional parking fee should be paid while charging"
+ }
+ }
+ ]
}
],
"icon": {
@@ -2016,6 +2716,34 @@
"nl": "Heeft een "
},
"osmTags": "socket:type2_combo~*"
+ },
+ {
+ "question": {
+ "en": "Has a Type 2 with cable (mennekes) connector",
+ "nl": "Heeft een Type 2 met kabel (J1772) "
+ },
+ "osmTags": "socket:type2_cable~*"
+ },
+ {
+ "question": {
+ "en": "Has a Tesla Supercharger CCS (a branded type2_css) connector",
+ "nl": "Heeft een "
+ },
+ "osmTags": "socket:tesla_supercharger_ccs~*"
+ },
+ {
+ "question": {
+ "en": "Has a Tesla Supercharger (destination) connector",
+ "nl": "Heeft een "
+ },
+ "osmTags": "socket:tesla_destination~*"
+ },
+ {
+ "question": {
+ "en": "Has a Tesla supercharger (destination (A Type 2 with cable branded as tesla) connector",
+ "nl": "Heeft een "
+ },
+ "osmTags": "socket:tesla_destination~*"
}
]
}
@@ -2094,7 +2822,11 @@
"socket:type1_combo:voltage",
"socket:tesla_supercharger:voltage",
"socket:type2:voltage",
- "socket:type2_combo:voltage"
+ "socket:type2_combo:voltage",
+ "socket:type2_cable:voltage",
+ "socket:tesla_supercharger_ccs:voltage",
+ "socket:tesla_destination:voltage",
+ "socket:tesla_destination:voltage"
],
"applicableUnits": [
{
@@ -2124,7 +2856,11 @@
"socket:type1_combo:current",
"socket:tesla_supercharger:current",
"socket:type2:current",
- "socket:type2_combo:current"
+ "socket:type2_combo:current",
+ "socket:type2_cable:current",
+ "socket:tesla_supercharger_ccs:current",
+ "socket:tesla_destination:current",
+ "socket:tesla_destination:current"
],
"applicableUnits": [
{
@@ -2153,7 +2889,11 @@
"socket:type1_combo:output",
"socket:tesla_supercharger:output",
"socket:type2:output",
- "socket:type2_combo:output"
+ "socket:type2_combo:output",
+ "socket:type2_cable:output",
+ "socket:tesla_supercharger_ccs:output",
+ "socket:tesla_destination:output",
+ "socket:tesla_destination:output"
],
"applicableUnits": [
{
diff --git a/assets/layers/charging_station/charging_station.protojson b/assets/layers/charging_station/charging_station.protojson
index 7689ae905..536c876f1 100644
--- a/assets/layers/charging_station/charging_station.protojson
+++ b/assets/layers/charging_station/charging_station.protojson
@@ -93,8 +93,13 @@
]
},
{
- "question": "Who is allowed to use this charging station?",
- "render": "Access is {access}",
+ "#": "access",
+ "question": {
+ "en": "Who is allowed to use this charging station?"
+ },
+ "render": {
+ "en": "Access is {access}"
+ },
"freeform": {
"key": "access",
"addExtraTags": [
@@ -141,7 +146,7 @@
"type": "pnat"
}
},
- $$$
+ {"#": "$$$"},
{
"#": "Authentication",
"question": {
@@ -311,6 +316,7 @@
]
},
{
+ "#": "payment-options",
"builtin": "payment-options",
"override": {
"condition": {
@@ -395,8 +401,12 @@
},
{
"#": "Operator",
- "question": "Who is the operator of this charging station?",
- "render": "This charging station is operated by {operator}",
+ "question": {
+ "en": "Who is the operator of this charging station?"
+ },
+ "render": {
+ "en": "This charging station is operated by {operator}"
+ },
"freeform": {
"key": "operator"
},
@@ -407,7 +417,9 @@
"network:={operator}"
]
},
- "then": "Actually, {operator} is the network",
+ "then": {
+ "en": "Actually, {operator} is the network"
+ },
"addExtraTags": [
"operator="
],
@@ -460,7 +472,9 @@
"question": {
"en": "What is the reference number of this charging station?"
},
- "render": "Reference number is {ref}",
+ "render": {
+ "en": "Reference number is {ref}"
+ },
"freeform": {
"key": "ref"
}
diff --git a/assets/layers/charging_station/csvToJson.ts b/assets/layers/charging_station/csvToJson.ts
index 7ea31a10f..f02033f59 100644
--- a/assets/layers/charging_station/csvToJson.ts
+++ b/assets/layers/charging_station/csvToJson.ts
@@ -2,6 +2,7 @@ import {readFileSync, writeFileSync} from "fs";
import {Utils} from "../../../Utils";
import {TagRenderingConfigJson} from "../../../Models/ThemeConfig/Json/TagRenderingConfigJson";
import ScriptUtils from "../../../scripts/ScriptUtils";
+import {LayerConfigJson} from "../../../Models/ThemeConfig/Json/LayerConfigJson";
function colonSplit(value: string): string[] {
@@ -13,6 +14,7 @@ function loadCsv(file): {
image: string,
description: Map,
countryWhiteList?: string[],
+ countryBlackList?: string[],
commonVoltages?: number[],
commonCurrents?: number[],
commonOutputs?: string[]
@@ -27,7 +29,7 @@ function loadCsv(file): {
}
const v = {}
- const colonSeperated = ["commonVoltages", "commonOutputs", "commonCurrents", "countryWhiteList"]
+ const colonSeperated = ["commonVoltages", "commonOutputs", "commonCurrents", "countryWhiteList","countryBlackList"]
const descriptionTranslations = new Map()
for (let j = 0; j < header.length; j++) {
const key = header[j];
@@ -51,7 +53,7 @@ function loadCsv(file): {
function run(file, protojson) {
const overview_question_answers = []
- const questions: TagRenderingConfigJson[] = []
+ const questions: (TagRenderingConfigJson & {"#": string})[] = []
const filterOptions: { question: any, osmTags?: string } [] = [
{
question: {
@@ -62,7 +64,8 @@ function run(file, protojson) {
]
const entries = loadCsv(file)
- for (const e of entries) {
+ for (let i = 0; i < entries.length; i++){
+ const e = entries[i];
const txt = {
en: ` ${e.description.get("en")}`,
nl: ` ${e.description.get("nl")}`
@@ -73,9 +76,15 @@ function run(file, protojson) {
then: txt,
}
- if (e.countryWhiteList !== undefined && e.countryWhiteList.length > 0) {
+ if(e.countryWhiteList.length > 0 && e.countryBlackList.length > 0){
+ throw "Error for type "+e.key+": don't defined both a whitelist and a blacklist"
+ }
+ if (e.countryWhiteList.length > 0) {
const countries = e.countryWhiteList.map(country => "_country!=" + country) //HideInAnswer if it is in the wrong country
json["hideInAnswer"] = {or: countries}
+ }else if (e.countryBlackList .length > 0) {
+ const countries = e.countryBlackList.map(country => "_country=" + country) //HideInAnswer if it is in the wrong country
+ json["hideInAnswer"] = {or: countries}
}
overview_question_answers.push(json)
@@ -94,6 +103,7 @@ function run(file, protojson) {
const descrWithImage_nl = `${e.description.get("nl")} `
questions.push({
+ "#":"plugs-"+i,
question: {
en: `How much plugs of type ${descrWithImage_en} are available here?`,
nl: `Hoeveel stekkers van type ${descrWithImage_nl} heeft dit oplaadpunt?`,
@@ -112,6 +122,7 @@ function run(file, protojson) {
})
questions.push({
+ "#":"voltage-"+i,
question: {
en: `What voltage do the plugs with ${descrWithImage_en} offer?`,
nl: `Welke spanning levert de stekker van type ${descrWithImage_nl}`
@@ -140,6 +151,7 @@ function run(file, protojson) {
questions.push({
+ "#":"current-"+i,
question: {
en: `What current do the plugs with ${descrWithImage_en} offer?`,
nl: `Welke stroom levert de stekker van type ${descrWithImage_nl}?`,
@@ -168,6 +180,7 @@ function run(file, protojson) {
questions.push({
+ "#":"power-output-"+i,
question: {
en: `What power output does a single plug of type ${descrWithImage_en} offer?`,
nl: `Welk vermogen levert een enkele stekker van type ${descrWithImage_nl}?`,
@@ -204,6 +217,7 @@ function run(file, protojson) {
}
const toggles = {
+ "#":"Available_charging_stations (generated)",
"question": {
"en": "Which charging stations are available here?"
},
@@ -213,9 +227,20 @@ function run(file, protojson) {
questions.unshift(toggles)
const stringified = questions.map(q => JSON.stringify(q, null, " "))
- let proto = readFileSync(protojson, "utf8")
- proto = proto.replace("$$$", stringified.join(",\n") + ",")
- proto = JSON.parse(proto)
+ let protoString = readFileSync(protojson, "utf8")
+
+ protoString = protoString.replace("{\"#\": \"$$$\"}", stringified.join(",\n"))
+ const proto = JSON.parse(protoString)
+ proto.tagRenderings.forEach(tr => {
+ if(typeof tr === "string"){
+ return;
+ }
+ if(tr["#"] === undefined || typeof tr["#"] !== "string"){
+ console.error(tr)
+ throw "Every tagrendering should have an id, acting as comment"
+ }
+ })
+
proto["filter"].push({
options: filterOptions
})
@@ -274,7 +299,8 @@ function run(file, protojson) {
}
proto["units"].push(...extraUnits)
- writeFileSync("charging_station.json", JSON.stringify(proto, undefined, " "))
+ mergeTranslations("charging_station.json",proto)
+ writeFileSync("charging_station.json", JSON.stringify(proto, undefined, " "))
}
@@ -302,22 +328,51 @@ async function queryTagInfo(file, type, clean: ((s: string) => string)) {
}
const countsArray = Array.from(counts.keys())
countsArray.sort()
- // console.log(`${e.key}:${type} = ${countsArray.join(";")}`)
- console.log(`${countsArray.join(";")}`)
+ console.log(`${e.key}:${type} = ${countsArray.join(";")}`)
+ // console.log(`${countsArray.join(";")}`)
+ }
+}
+
+/**
+ * Adds the translations into the 'newConfig' object
+ * @param origPath
+ * @param newConfig
+ */
+function mergeTranslations(origPath, newConfig: LayerConfigJson){
+ const oldFile = JSON.parse(readFileSync(origPath, "utf-8"))
+ const newFile = newConfig
+ const renderingsOld = oldFile.tagRenderings
+ delete oldFile.tagRenderings
+ const newRenderings = newFile.tagRenderings
+ Utils.Merge(oldFile, newFile)
+
+ for (const oldRendering of renderingsOld) {
+
+ const oldRenderingName = oldRendering["#"]
+ if(oldRenderingName === undefined){
+ continue
+ }
+ const applicable = newRenderings.filter(r => r["#"] === oldRenderingName)[0]
+ if(applicable === undefined){
+ continue;
+ }
+ Utils.Merge(oldRendering, applicable)
}
}
try {
run("types.csv", "charging_station.protojson")
- // queryTagInfo("types.csv","voltage", true)
- // queryTagInfo("types.csv", "current", true)
- /* queryTagInfo("types.csv", "output", s => {
+ /*/
+ queryTagInfo("types.csv","voltage", s => s.trim())
+ queryTagInfo("types.csv", "current", s => s.trim())
+ queryTagInfo("types.csv", "output", s => {
if(s.endsWith("kW")){
s = s.substring(0, s.length - 2)
}
s = s.trim()
return s + " kW"
- })*/
+ })
+ //*/
} catch (e) {
console.error(e)
diff --git a/assets/layers/charging_station/types.csv b/assets/layers/charging_station/types.csv
index 5cf989085..4b76be6a7 100644
--- a/assets/layers/charging_station/types.csv
+++ b/assets/layers/charging_station/types.csv
@@ -1,10 +1,14 @@
-key,image,description:en,countryWhitelist,commonVoltages,commonCurrents,commonOutputs,description:nl
-socket:schuko,CEE7_4F.svg,Schuko wall plug without ground pin (CEE7/4 type F),be;fr;ma;tn;pl;cs;sk;mo,230,16,3.6 kW,Schuko stekker zonder aardingspin (CEE7/4 type F)
-socket:typee,TypeE.svg,European wall plug with ground pin (CEE7/4 type E),,230,16,3 kW;22 kW;,Europese stekker met aardingspin (CEE7/4 type E)
-socket:chademo,Chademo_type4.svg,Chademo,,500,120,50 kW,
-socket:type1_cable,Type1_J1772.svg,Type 1 with cable (J1772),,200;240,32,3.7 kW;7 kW,Type 1 met kabel (J1772)
-socket:type1,Type1_J1772.svg,Type 1 without cable (J1772),,200;240,32,3.7 kW;6.6 kW;7 kW;7.2 kW,Type 1 zonder kabel (J1772)
-socket:type1_combo,Type1-ccs.svg,Type 1 CCS (aka Type 1 Combo),,400;1000,50;125,50 kW;62.5 kW;150 kW;350 kW;,
-socket:tesla_supercharger,Tesla-hpwc-model-s.svg,Tesla Supercharger,,480,125;350,120 kW;150 kW;250 kW,
-socket:type2,Type2_socket.svg,Type 2 (mennekes),,230;400,16;32,11 kW;22 kW,
-socket:type2_combo,Type2_CCS.svg,Type 2 CCS (mennekes),,500;920,125;350,50 kW,
+key,image,description:en,countryWhiteList,countryBlackList,commonVoltages,commonCurrents,commonOutputs,description:nl
+socket:schuko,CEE7_4F.svg,Schuko wall plug without ground pin (CEE7/4 type F),be;fr;ma;tn;pl;cs;sk;mo,,230,16,3.6 kW,Schuko stekker zonder aardingspin (CEE7/4 type F)
+socket:typee,TypeE.svg,European wall plug with ground pin (CEE7/4 type E),,,230,16,3 kW;22 kW;,Europese stekker met aardingspin (CEE7/4 type E)
+socket:chademo,Chademo_type4.svg,Chademo,,,500,120,50 kW,
+socket:type1_cable,Type1_J1772.svg,Type 1 with cable (J1772),,,200;240,32,3.7 kW;7 kW,Type 1 met kabel (J1772)
+socket:type1,Type1_J1772.svg,Type 1 without cable (J1772),,,200;240,32,3.7 kW;6.6 kW;7 kW;7.2 kW,Type 1 zonder kabel (J1772)
+socket:type1_combo,Type1-ccs.svg,Type 1 CCS (aka Type 1 Combo),,,400;1000,50;125,50 kW;62.5 kW;150 kW;350 kW;,
+socket:tesla_supercharger,Tesla-hpwc-model-s.svg,Tesla Supercharger,,,480,125;350,120 kW;150 kW;250 kW,
+socket:type2,Type2_socket.svg,Type 2 (mennekes),,,230;400,16;32,11 kW;22 kW,
+socket:type2_combo,Type2_CCS.svg,Type 2 CCS (mennekes),,,500;920,125;350,50 kW,
+socket:type2_cable,Type2_tethered.svg,Type 2 with cable (mennekes),,,230;400,16;32,11 kW;22 kW,Type 2 met kabel (J1772)
+socket:tesla_supercharger_ccs,Type2_CCS.svg,Tesla Supercharger CCS (a branded type2_css),,,500;920,125;350,50 kW,
+socket:tesla_destination,Tesla-hpwc-model-s.svg,Tesla Supercharger (destination),us,,480,125;350,120 kW;150 kW;250 kW,
+socket:tesla_destination,Type2_tethered.svg,Tesla supercharger (destination (A Type 2 with cable branded as tesla),,us,230;400,16;32,11 kW;22 kW,
From 5509b56de8b539489f7eec6bfa3475b5ba1c6042 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 22 Sep 2021 20:13:54 +0200
Subject: [PATCH 07/65] Add membership card as payment option
---
assets/layers/charging_station/charging_station.protojson | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/assets/layers/charging_station/charging_station.protojson b/assets/layers/charging_station/charging_station.protojson
index 536c876f1..39714ef8a 100644
--- a/assets/layers/charging_station/charging_station.protojson
+++ b/assets/layers/charging_station/charging_station.protojson
@@ -333,6 +333,14 @@
"en": "Payment is done using a dedicated app",
"nl": "Betalen via een app van het netwerk"
}
+ },
+ {
+ "if": "payment:membership_card=yes",
+ "ifnot": "payment:membership_card=no",
+ "then": {
+ "en": "Payment is done using a membership card",
+ "nl": "Betalen via een lidkaart van het netwerk"
+ }
}
]
}
From b1900cdbc660fe4d8d9ece956d2d48c1990ac204 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 22 Sep 2021 20:44:53 +0200
Subject: [PATCH 08/65] Small robustifications
---
Models/ThemeConfig/LayerConfig.ts | 9 ++++++---
UI/Base/MinimapImplementation.ts | 16 ++++++++++++----
.../charging_station/charging_station.protojson | 4 +++-
assets/themes/uk_addresses/uk_addresses.json | 7 +------
4 files changed, 22 insertions(+), 14 deletions(-)
diff --git a/Models/ThemeConfig/LayerConfig.ts b/Models/ThemeConfig/LayerConfig.ts
index c3cadc1e0..18c9fe3b4 100644
--- a/Models/ThemeConfig/LayerConfig.ts
+++ b/Models/ThemeConfig/LayerConfig.ts
@@ -154,6 +154,9 @@ export default class LayerConfig {
this.minzoom = json.minzoom ?? 0;
this.minzoomVisible = json.minzoomVisible ?? this.minzoom;
this.wayHandling = json.wayHandling ?? 0;
+ if(json.presets !== undefined && json.presets?.map === undefined){
+ throw "Presets should be a list of items (at "+context+")"
+ }
this.presets = (json.presets ?? []).map((pr, i) => {
let preciseInput = undefined;
@@ -492,8 +495,8 @@ export default class LayerConfig {
const iconUrlStatic = render(this.icon);
const self = this;
- function genHtmlFromString(sourcePart: string, rotation: string): BaseUIElement {
- const style = `width:100%;height:100%;transform: rotate( ${rotation} );display:block;position: absolute; top: 0; left: 0`;
+ function genHtmlFromString(sourcePart: string, rotation: string, style?: string): BaseUIElement {
+ style = style ?? `width:100%;height:100%;transform: rotate( ${rotation} );display:block;position: absolute; top: 0; left: 0`;
let html: BaseUIElement = new FixedUiElement(
``
);
@@ -537,7 +540,7 @@ export default class LayerConfig {
.filter((prt) => prt != "");
for (const badgePartStr of partDefs) {
- badgeParts.push(genHtmlFromString(badgePartStr, "0"));
+ badgeParts.push(genHtmlFromString(badgePartStr, "0", `width:unset;height:100%;display:block;`));
}
const badgeCompound = new Combine(badgeParts).SetStyle(
diff --git a/UI/Base/MinimapImplementation.ts b/UI/Base/MinimapImplementation.ts
index 00fbc0f09..1761d1ada 100644
--- a/UI/Base/MinimapImplementation.ts
+++ b/UI/Base/MinimapImplementation.ts
@@ -50,7 +50,7 @@ export default class MinimapImplementation extends BaseUIElement implements Mini
if (typeof factor === "number") {
bounds = leaflet.getBounds()
leaflet.setMaxBounds(bounds.pad(factor))
- }else{
+ } else {
// @ts-ignore
leaflet.setMaxBounds(factor.toLeaflet())
bounds = leaflet.getBounds()
@@ -114,8 +114,12 @@ export default class MinimapImplementation extends BaseUIElement implements Mini
const self = this;
// @ts-ignore
const resizeObserver = new ResizeObserver(_ => {
- self.InitMap();
- self.leafletMap?.data?.invalidateSize()
+ try {
+ self.InitMap();
+ self.leafletMap?.data?.invalidateSize()
+ } catch (e) {
+ console.error("Could not construct a minimap:", e)
+ }
});
resizeObserver.observe(div);
@@ -141,8 +145,12 @@ export default class MinimapImplementation extends BaseUIElement implements Mini
const location = this._location;
const self = this;
let currentLayer = this._background.data.layer()
+ let latLon = <[number, number]>[location.data?.lat ?? 0, location.data?.lon ?? 0]
+ if(isNaN(latLon[0]) || isNaN(latLon[1])){
+ latLon = [0,0]
+ }
const options = {
- center: <[number, number]>[location.data?.lat ?? 0, location.data?.lon ?? 0],
+ center: latLon,
zoom: location.data?.zoom ?? 2,
layers: [currentLayer],
zoomControl: false,
diff --git a/assets/layers/charging_station/charging_station.protojson b/assets/layers/charging_station/charging_station.protojson
index 39714ef8a..f33620e80 100644
--- a/assets/layers/charging_station/charging_station.protojson
+++ b/assets/layers/charging_station/charging_station.protojson
@@ -538,7 +538,9 @@
}
},
{
- "if": "amenity=charging_station",
+ "if": {
+ "and": ["amenity=charging_station","operational_status="]
+ },
"then": {
"en": "This charging station works",
"nl": "Dit oplaadpunt werkt"
diff --git a/assets/themes/uk_addresses/uk_addresses.json b/assets/themes/uk_addresses/uk_addresses.json
index e43f867ed..b89d25e60 100644
--- a/assets/themes/uk_addresses/uk_addresses.json
+++ b/assets/themes/uk_addresses/uk_addresses.json
@@ -213,12 +213,7 @@
"then": "#ff0"
}
]
- },
- "presets": [
- {
-
- }
- ]
+ }
},
{
"id": "named_streets",
From 3780c5d38049ce904e7ba1a39adbcf63af70ad14 Mon Sep 17 00:00:00 2001
From: Pieter Vander Vennet
Date: Thu, 23 Sep 2021 20:45:57 +0200
Subject: [PATCH 09/65] remove incorrect return value which causes
unregistering of the callback
---
UI/Base/VariableUIElement.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/UI/Base/VariableUIElement.ts b/UI/Base/VariableUIElement.ts
index fbc3bb564..144459a75 100644
--- a/UI/Base/VariableUIElement.ts
+++ b/UI/Base/VariableUIElement.ts
@@ -17,7 +17,7 @@ export class VariableUiElement extends BaseUIElement {
}
if (contents === undefined) {
- return el;
+ return
}
if (typeof contents === "string") {
el.innerHTML = contents;
From c5e9448720f5b1afd0ea8b380492be3300dc2a1d Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Sun, 26 Sep 2021 17:36:39 +0200
Subject: [PATCH 10/65] Add initial clustering per tile, very broken
---
Docs/Tools/GenerateSeries.ts | 4 +-
InitUiElements.ts | 118 +++++--
Logic/Actors/OverpassFeatureSource.ts | 79 +++--
Logic/ExtraFunction.ts | 5 +-
Logic/FeatureSource/FeaturePipeline.ts | 31 +-
.../Sources/FeatureSourceMerger.ts | 3 +-
.../Sources/FilteringFeatureSource.ts | 26 +-
Logic/FeatureSource/Sources/GeoJsonSource.ts | 6 +-
.../Sources/RememberingSource.ts | 14 +-
.../Sources/SimpleFeatureSource.ts | 3 +-
.../Sources/StaticFeatureSource.ts | 7 +-
.../WayHandlingApplyingFeatureSource.ts | 5 +-
.../DynamicGeoJsonTileSource.ts | 4 +-
.../TiledFeatureSource/DynamicTileSource.ts | 7 +-
.../TiledFeatureSource/TileHierarchyMerger.ts | 5 +-
.../TiledFeatureSource/TiledFeatureSource.ts | 17 +-
.../TiledFromLocalStorageSource.ts | 13 +-
Logic/GeoOperations.ts | 11 +-
.../ImageProviders/ImageAttributionSource.ts | 9 +-
Logic/ImageProviders/Imgur.ts | 52 +--
Logic/ImageProviders/Mapillary.ts | 53 ++-
Logic/ImageProviders/Wikimedia.ts | 46 +--
Logic/MetaTagging.ts | 66 ++--
Logic/Osm/OsmConnection.ts | 1 +
Logic/SimpleMetaTagger.ts | 52 +--
Models/Constants.ts | 1 +
Models/ThemeConfig/LayerConfig.ts | 12 +-
Models/ThemeConfig/LayoutConfig.ts | 4 +-
Models/TileRange.ts | 102 ++++++
UI/Base/ScrollableFullScreen.ts | 2 +
UI/Base/VariableUIElement.ts | 22 +-
UI/BaseUIElement.ts | 2 -
UI/Image/Attribution.ts | 11 +-
UI/Image/DeleteImage.ts | 2 +-
UI/Input/LocationInput.ts | 1 -
UI/Popup/EditableTagRendering.ts | 6 +-
UI/Popup/SplitRoadWizard.ts | 2 +-
UI/ShowDataLayer/PerTileCountAggregator.ts | 156 +++++++++
UI/ShowDataLayer/ShowDataLayer.ts | 37 ++-
UI/ShowDataLayer/ShowDataLayerOptions.ts | 1 +
UI/ShowDataLayer/ShowTileInfo.ts | 79 +++++
Utils.ts | 105 +-----
.../charging_station/charging_station.json | 136 +++++---
.../layers/drinking_water/drinking_water.json | 307 +++++++++---------
assets/layers/food/food.json | 1 +
.../public_bookcase/public_bookcase.json | 2 +-
assets/themes/benches/benches.json | 2 +-
assets/themes/bicyclelib/bicyclelib.json | 2 +-
.../bike_monitoring_stations.json | 2 +-
assets/themes/binoculars/binoculars.json | 2 +-
assets/themes/buurtnatuur/buurtnatuur.json | 2 +-
.../themes/cafes_and_pubs/cafes_and_pubs.json | 2 +-
assets/themes/campersite/campersite.json | 2 +-
.../charging_stations/charging_stations.json | 2 +-
assets/themes/climbing/climbing.json | 2 +-
.../themes/cycle_highways/cycle_highways.json | 2 +-
assets/themes/cycle_infra/cycle_infra.json | 2 +-
assets/themes/cyclofix/cyclofix.json | 2 +-
.../themes/facadegardens/facadegardens.json | 2 +-
assets/themes/food/food.json | 2 +-
assets/themes/fritures/fritures.json | 2 +-
assets/themes/fruit_trees/fruit_trees.json | 2 +-
assets/themes/ghostbikes/ghostbikes.json | 2 +-
assets/themes/grb.json | 2 +-
assets/themes/hackerspaces/hackerspaces.json | 2 +-
assets/themes/hailhydrant/hailhydrant.json | 2 +-
assets/themes/maps/maps.json | 2 +-
assets/themes/nature/nature.json | 2 +-
assets/themes/natuurpunt/natuurpunt.json | 2 +-
.../observation_towers.json | 2 +-
assets/themes/parkings/parkings.json | 2 +-
assets/themes/personal/personal.json | 2 +-
assets/themes/play_forests/play_forests.json | 2 +-
assets/themes/playgrounds/playgrounds.json | 2 +-
assets/themes/shops/shops.json | 2 +-
assets/themes/speelplekken/speelplekken.json | 2 +-
.../speelplekken/speelplekken_temp.json | 2 +-
.../themes/sport_pitches/sport_pitches.json | 2 +-
assets/themes/surveillance/surveillance.json | 2 +-
.../toerisme_vlaanderen.json | 2 +-
assets/themes/toilets/toilets.json | 2 +-
assets/themes/trees/trees.json | 2 +-
assets/themes/uk_addresses/uk_addresses.json | 2 +-
assets/themes/waste_basket/waste_basket.json | 2 +-
assets/themes/widths/width.json | 2 +-
scripts/ScriptUtils.ts | 7 +-
scripts/generateCache.ts | 12 +-
scripts/generateTranslations.ts | 6 +-
88 files changed, 1080 insertions(+), 651 deletions(-)
create mode 100644 UI/ShowDataLayer/PerTileCountAggregator.ts
create mode 100644 UI/ShowDataLayer/ShowTileInfo.ts
diff --git a/Docs/Tools/GenerateSeries.ts b/Docs/Tools/GenerateSeries.ts
index 5cced5a6b..73e97e9a4 100644
--- a/Docs/Tools/GenerateSeries.ts
+++ b/Docs/Tools/GenerateSeries.ts
@@ -75,9 +75,7 @@ class StatsDownloader {
while (url) {
ScriptUtils.erasableLog(`Downloading stats for ${year}-${month}, page ${page} ${url}`)
- const result = await ScriptUtils.DownloadJSON(url, {
- headers: headers
- })
+ const result = await ScriptUtils.DownloadJSON(url, headers)
page++;
allFeatures.push(...result.features)
if (result.features === undefined) {
diff --git a/InitUiElements.ts b/InitUiElements.ts
index c36b22b77..0bc6506d1 100644
--- a/InitUiElements.ts
+++ b/InitUiElements.ts
@@ -15,7 +15,6 @@ import Link from "./UI/Base/Link";
import * as personal from "./assets/themes/personal/personal.json";
import * as L from "leaflet";
import Img from "./UI/Base/Img";
-import UserDetails from "./Logic/Osm/OsmConnection";
import Attribution from "./UI/BigComponents/Attribution";
import BackgroundLayerResetter from "./Logic/Actors/BackgroundLayerResetter";
import FullWelcomePaneWithTabs from "./UI/BigComponents/FullWelcomePaneWithTabs";
@@ -38,6 +37,9 @@ import Minimap from "./UI/Base/Minimap";
import SelectedFeatureHandler from "./Logic/Actors/SelectedFeatureHandler";
import Combine from "./UI/Base/Combine";
import {SubtleButton} from "./UI/Base/SubtleButton";
+import ShowTileInfo from "./UI/ShowDataLayer/ShowTileInfo";
+import {Tiles} from "./Models/TileRange";
+import PerTileCountAggregator from "./UI/ShowDataLayer/PerTileCountAggregator";
export class InitUiElements {
static InitAll(
@@ -167,22 +169,38 @@ export class InitUiElements {
).AttachTo("messagesbox");
}
- State.state.osmConnection.userDetails
- .map((userDetails: UserDetails) => userDetails?.home)
- .addCallbackAndRunD((home) => {
- const color = getComputedStyle(document.body).getPropertyValue(
- "--subtle-detail-color"
- );
- const icon = L.icon({
- iconUrl: Img.AsData(
- Svg.home_white_bg.replace(/#ffffff/g, color)
- ),
- iconSize: [30, 30],
- iconAnchor: [15, 15],
- });
- const marker = L.marker([home.lat, home.lon], {icon: icon});
- marker.addTo(State.state.leafletMap.data);
+ function addHomeMarker() {
+ const userDetails = State.state.osmConnection.userDetails.data;
+ if (userDetails === undefined) {
+ return false;
+ }
+ console.log("Adding home location of ", userDetails)
+ const home = userDetails.home;
+ if (home === undefined) {
+ return userDetails.loggedIn; // If logged in, the home is not set and we unregister. If not logged in, we stay registered if a login still comes
+ }
+ const leaflet = State.state.leafletMap.data;
+ if (leaflet === undefined) {
+ return false;
+ }
+ const color = getComputedStyle(document.body).getPropertyValue(
+ "--subtle-detail-color"
+ );
+ const icon = L.icon({
+ iconUrl: Img.AsData(
+ Svg.home_white_bg.replace(/#ffffff/g, color)
+ ),
+ iconSize: [30, 30],
+ iconAnchor: [15, 15],
});
+ const marker = L.marker([home.lat, home.lon], {icon: icon});
+ marker.addTo(leaflet);
+ return true;
+ }
+
+ State.state.osmConnection.userDetails
+ .addCallbackAndRunD(_ => addHomeMarker());
+ State.state.leafletMap.addCallbackAndRunD(_ => addHomeMarker())
if (layoutToUse.id === personal.id) {
updateFavs();
@@ -209,7 +227,7 @@ export class InitUiElements {
static LoadLayoutFromHash(
userLayoutParam: UIEventSource
): [LayoutConfig, string] {
- let hash = location.hash.substr(1);
+ let hash = location.hash.substr(1);
try {
const layoutFromBase64 = userLayoutParam.data;
// layoutFromBase64 contains the name of the theme. This is partly to do tracking with goat counter
@@ -249,18 +267,18 @@ export class InitUiElements {
userLayoutParam.setData(layoutToUse.id);
return [layoutToUse, btoa(Utils.MinifyJSON(JSON.stringify(json)))];
} catch (e) {
-
- if(hash === undefined || hash.length < 10){
+
+ if (hash === undefined || hash.length < 10) {
e = "Did you effectively add a theme? It seems no data could be found."
}
-
+
new Combine([
"Error: could not parse the custom layout:",
- new FixedUiElement(""+e).SetClass("alert"),
- new SubtleButton("./assets/svg/mapcomplete_logo.svg",
- "Go back to the theme overview",
- {url: window.location.protocol+"//"+ window.location.hostname+"/index.html", newTab: false})
-
+ new FixedUiElement("" + e).SetClass("alert"),
+ new SubtleButton("./assets/svg/mapcomplete_logo.svg",
+ "Go back to the theme overview",
+ {url: window.location.protocol + "//" + window.location.hostname + "/index.html", newTab: false})
+
])
.SetClass("flex flex-col")
.AttachTo("centermessage");
@@ -361,12 +379,12 @@ export class InitUiElements {
const layout = State.state.layoutToUse.data;
if (layout.lockLocation) {
if (layout.lockLocation === true) {
- const tile = Utils.embedded_tile(
+ const tile = Tiles.embedded_tile(
layout.startLat,
layout.startLon,
layout.startZoom - 1
);
- const bounds = Utils.tile_bounds(tile.z, tile.x, tile.y);
+ const bounds = Tiles.tile_bounds(tile.z, tile.x, tile.y);
// We use the bounds to get a sense of distance for this zoom level
const latDiff = bounds[0][0] - bounds[1][0];
const lonDiff = bounds[0][1] - bounds[1][1];
@@ -402,6 +420,9 @@ export class InitUiElements {
const flayer = {
isDisplayed: isDisplayed,
layerDef: layer,
+ isSufficientlyZoomed: state.locationControl.map(l => {
+ return l.zoom >= (layer.minzoomVisible ?? layer.minzoom)
+ }),
appliedFilters: new UIEventSource(undefined),
};
flayers.push(flayer);
@@ -409,13 +430,54 @@ export class InitUiElements {
return flayers;
});
+ const clusterCounter = new PerTileCountAggregator(State.state.locationControl.map(l => {
+ const z = l.zoom + 1
+ if(z < 7){
+ return 7
+ }
+ return z
+ }))
+ const clusterShow = Math.min(...State.state.layoutToUse.data.layers.map(layer => layer.minzoomVisible ?? layer.minzoom))
+ new ShowDataLayer({
+ features: clusterCounter,
+ leafletMap: State.state.leafletMap,
+ layerToShow: ShowTileInfo.styling,
+ doShowLayer: State.state.locationControl.map(l => l.zoom < clusterShow)
+ })
State.state.featurePipeline = new FeaturePipeline(
source => {
+ const clustering = State.state.layoutToUse.data.clustering
+ const doShowFeatures = source.features.map(
+ f => {
+ const z = State.state.locationControl.data.zoom
+ if(z >= clustering.maxZoom){
+ return true
+ }
+ if(z < source.layer.layerDef.minzoom){
+ return false;
+ }
+ if(f.length > clustering.minNeededElements){
+ console.log("Activating clustering for tile ", Tiles.tile_from_index(source.tileIndex)," as it has ", f.length, "features (clustering starts at)", clustering.minNeededElements)
+ return false
+ }
+
+ return true
+ }, [State.state.locationControl]
+ )
+ clusterCounter.addTile(source, doShowFeatures.map(b => !b))
+
+ /*
+ new ShowTileInfo({source: source,
+ leafletMap: State.state.leafletMap,
+ layer: source.layer.layerDef,
+ doShowLayer: doShowFeatures.map(b => !b)
+ })*/
new ShowDataLayer(
{
features: source,
leafletMap: State.state.leafletMap,
- layerToShow: source.layer.layerDef
+ layerToShow: source.layer.layerDef,
+ doShowLayer: doShowFeatures
}
);
}, state
diff --git a/Logic/Actors/OverpassFeatureSource.ts b/Logic/Actors/OverpassFeatureSource.ts
index 1e7ace7cd..7ddafacd8 100644
--- a/Logic/Actors/OverpassFeatureSource.ts
+++ b/Logic/Actors/OverpassFeatureSource.ts
@@ -24,9 +24,9 @@ export default class OverpassFeatureSource implements FeatureSource, FeatureSour
public readonly sufficientlyZoomed: UIEventSource;
public readonly runningQuery: UIEventSource = new UIEventSource(false);
public readonly timeout: UIEventSource = new UIEventSource(0);
-
+
public readonly relationsTracker: RelationsTracker;
-
+
private readonly retries: UIEventSource = new UIEventSource(0);
/**
@@ -44,7 +44,6 @@ export default class OverpassFeatureSource implements FeatureSource, FeatureSour
readonly overpassUrl: UIEventSource;
readonly overpassTimeout: UIEventSource;
}
-
/**
* The most important layer should go first, as that one gets first pick for the questions
*/
@@ -57,6 +56,7 @@ export default class OverpassFeatureSource implements FeatureSource, FeatureSour
readonly overpassTimeout: UIEventSource;
readonly overpassMaxZoom: UIEventSource
}) {
+ console.trace("Initializing an overpass FS")
this.state = state
@@ -153,7 +153,12 @@ export default class OverpassFeatureSource implements FeatureSource, FeatureSour
return new Overpass(new Or(filters), extraScripts, this.state.overpassUrl, this.state.overpassTimeout, this.relationsTracker);
}
- private update(): void {
+ private update() {
+ this.updateAsync().then(_ => {
+ })
+ }
+
+ private async updateAsync(): Promise {
if (this.runningQuery.data) {
console.log("Still running a query, not updating");
return;
@@ -179,54 +184,46 @@ export default class OverpassFeatureSource implements FeatureSource, FeatureSour
const self = this;
const overpass = this.GetFilter();
-
+
if (overpass === undefined) {
return;
}
this.runningQuery.setData(true);
- overpass.queryGeoJson(queryBounds).
- then(([data, date]) => {
- self._previousBounds.get(z).push(queryBounds);
- self.retries.setData(0);
- const features = data.features.map(f => ({feature: f, freshness: date}));
- SimpleMetaTagger.objectMetaInfo.addMetaTags(features)
- try{
- self.features.setData(features);
- }catch(e){
- console.error("Got the overpass response, but could not process it: ", e, e.stack)
- }
- self.runningQuery.setData(false);
- })
- .catch((reason) => {
+ let data: any = undefined
+ let date: Date = undefined
+
+ do {
+
+ try {
+ [data, date] = await overpass.queryGeoJson(queryBounds)
+ } catch (e) {
+ console.error(`QUERY FAILED (retrying in ${5 * self.retries.data} sec) due to`, e);
+
self.retries.data++;
- self.ForceRefresh();
- self.timeout.setData(self.retries.data * 5);
- console.error(`QUERY FAILED (retrying in ${5 * self.retries.data} sec) due to`, reason);
self.retries.ping();
+
+ self.timeout.setData(self.retries.data * 5);
self.runningQuery.setData(false);
- function countDown() {
- window?.setTimeout(
- function () {
- if (self.timeout.data > 1) {
- self.timeout.setData(self.timeout.data - 1);
- window.setTimeout(
- countDown,
- 1000
- )
- } else {
- self.timeout.setData(0);
- self.update()
- }
- }, 1000
- )
+ while (self.timeout.data > 0) {
+ await Utils.waitFor(1000)
+ self.timeout.data--
+ self.timeout.ping();
}
-
- countDown();
-
}
- );
+ } while (data === undefined);
+
+ self._previousBounds.get(z).push(queryBounds);
+ self.retries.setData(0);
+
+ try {
+ data.features.forEach(feature => SimpleMetaTagger.objectMetaInfo.applyMetaTagsOnFeature(feature, date));
+ self.features.setData(data.features.map(f => ({feature: f, freshness: date})));
+ } catch (e) {
+ console.error("Got the overpass response, but could not process it: ", e, e.stack)
+ }
+ self.runningQuery.setData(false);
}
diff --git a/Logic/ExtraFunction.ts b/Logic/ExtraFunction.ts
index 04f7a64f6..5839fca08 100644
--- a/Logic/ExtraFunction.ts
+++ b/Logic/ExtraFunction.ts
@@ -256,7 +256,7 @@ export class ExtraFunction {
let closestFeatures: { feat: any, distance: number }[] = [];
for(const featureList of features) {
for (const otherFeature of featureList) {
- if (otherFeature == feature || otherFeature.id == feature.id) {
+ if (otherFeature === feature || otherFeature.id === feature.id) {
continue; // We ignore self
}
let distance = undefined;
@@ -268,7 +268,8 @@ export class ExtraFunction {
[feature._lon, feature._lat]
)
}
- if (distance === undefined) {
+ if (distance === undefined || distance === null) {
+ console.error("Could not calculate the distance between", feature, "and", otherFeature)
throw "Undefined distance!"
}
if (distance > maxDistance) {
diff --git a/Logic/FeatureSource/FeaturePipeline.ts b/Logic/FeatureSource/FeaturePipeline.ts
index c6206eac4..1e033dad7 100644
--- a/Logic/FeatureSource/FeaturePipeline.ts
+++ b/Logic/FeatureSource/FeaturePipeline.ts
@@ -37,7 +37,7 @@ export default class FeaturePipeline implements FeatureSourceState {
private readonly perLayerHierarchy: Map;
constructor(
- handleFeatureSource: (source: FeatureSourceForLayer) => void,
+ handleFeatureSource: (source: FeatureSourceForLayer & Tiled) => void,
state: {
filteredLayers: UIEventSource,
locationControl: UIEventSource,
@@ -52,7 +52,6 @@ export default class FeaturePipeline implements FeatureSourceState {
const self = this
const updater = new OverpassFeatureSource(state);
- updater.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(updater))
this.overpassUpdater = updater;
this.sufficientlyZoomed = updater.sufficientlyZoomed
this.runningQuery = updater.runningQuery
@@ -65,14 +64,15 @@ export default class FeaturePipeline implements FeatureSourceState {
const perLayerHierarchy = new Map()
this.perLayerHierarchy = perLayerHierarchy
- const patchedHandleFeatureSource = function (src: FeatureSourceForLayer & IndexedFeatureSource) {
+ const patchedHandleFeatureSource = function (src: FeatureSourceForLayer & IndexedFeatureSource & Tiled) {
// This will already contain the merged features for this tile. In other words, this will only be triggered once for every tile
const srcFiltered =
- new FilteringFeatureSource(state,
+ new FilteringFeatureSource(state, src.tileIndex,
new WayHandlingApplyingFeatureSource(
new ChangeGeometryApplicator(src, state.changes)
)
)
+
handleFeatureSource(srcFiltered)
self.somethingLoaded.setData(true)
};
@@ -102,10 +102,12 @@ export default class FeaturePipeline implements FeatureSourceState {
if (source.geojsonZoomLevel === undefined) {
// This is a 'load everything at once' geojson layer
- // We split them up into tiles
+ // We split them up into tiles anyway
const src = new GeoJsonSource(filteredLayer)
TiledFeatureSource.createHierarchy(src, {
layer: src.layer,
+ minZoomLevel:14,
+ dontEnforceMinZoom: true,
registerTile: (tile) => {
new RegisteringAllFromFeatureSourceActor(tile)
addToHierarchy(tile, id)
@@ -115,14 +117,11 @@ export default class FeaturePipeline implements FeatureSourceState {
} else {
new DynamicGeoJsonTileSource(
filteredLayer,
- src => TiledFeatureSource.createHierarchy(src, {
- layer: src.layer,
- registerTile: (tile) => {
+ tile => {
new RegisteringAllFromFeatureSourceActor(tile)
addToHierarchy(tile, id)
tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile))
- }
- }),
+ },
state
)
}
@@ -133,13 +132,17 @@ export default class FeaturePipeline implements FeatureSourceState {
new PerLayerFeatureSourceSplitter(state.filteredLayers,
(source) => TiledFeatureSource.createHierarchy(source, {
layer: source.layer,
+ minZoomLevel: 14,
+ dontEnforceMinZoom: true,
registerTile: (tile) => {
// We save the tile data for the given layer to local storage
new SaveTileToLocalStorageActor(tile, tile.tileIndex)
- addToHierarchy(tile, source.layer.layerDef.id);
+ addToHierarchy(new RememberingSource(tile), source.layer.layerDef.id);
+ tile.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(tile))
+
}
}),
- new RememberingSource(updater))
+ updater)
// Also load points/lines that are newly added.
@@ -152,6 +155,8 @@ export default class FeaturePipeline implements FeatureSourceState {
addToHierarchy(perLayer, perLayer.layer.layerDef.id)
// AT last, we always apply the metatags whenever possible
perLayer.features.addCallbackAndRunD(_ => self.applyMetaTags(perLayer))
+ perLayer.features.addCallbackAndRunD(_ => self.newDataLoadedSignal.setData(perLayer))
+
},
newGeometry
)
@@ -166,6 +171,7 @@ export default class FeaturePipeline implements FeatureSourceState {
private applyMetaTags(src: FeatureSourceForLayer){
const self = this
+ console.log("Applying metatagging onto ", src.name)
MetaTagging.addMetatags(
src.features.data,
{
@@ -183,6 +189,7 @@ export default class FeaturePipeline implements FeatureSourceState {
private updateAllMetaTagging() {
const self = this;
+ console.log("Reupdating all metatagging")
this.perLayerHierarchy.forEach(hierarchy => {
hierarchy.loadedTiles.forEach(src => {
self.applyMetaTags(src)
diff --git a/Logic/FeatureSource/Sources/FeatureSourceMerger.ts b/Logic/FeatureSource/Sources/FeatureSourceMerger.ts
index fb349ae5d..44ae28543 100644
--- a/Logic/FeatureSource/Sources/FeatureSourceMerger.ts
+++ b/Logic/FeatureSource/Sources/FeatureSourceMerger.ts
@@ -7,6 +7,7 @@ import FeatureSource, {FeatureSourceForLayer, IndexedFeatureSource, Tiled} from
import FilteredLayer from "../../../Models/FilteredLayer";
import {BBox} from "../../GeoOperations";
import {Utils} from "../../../Utils";
+import {Tiles} from "../../../Models/TileRange";
export default class FeatureSourceMerger implements FeatureSourceForLayer, Tiled, IndexedFeatureSource {
@@ -23,7 +24,7 @@ export default class FeatureSourceMerger implements FeatureSourceForLayer, Tiled
this.bbox = bbox;
this._sources = sources;
this.layer = layer;
- this.name = "FeatureSourceMerger("+layer.layerDef.id+", "+Utils.tile_from_index(tileIndex).join(",")+")"
+ this.name = "FeatureSourceMerger("+layer.layerDef.id+", "+Tiles.tile_from_index(tileIndex).join(",")+")"
const self = this;
const handledSources = new Set();
diff --git a/Logic/FeatureSource/Sources/FilteringFeatureSource.ts b/Logic/FeatureSource/Sources/FilteringFeatureSource.ts
index 6848f9f26..70d5a566c 100644
--- a/Logic/FeatureSource/Sources/FilteringFeatureSource.ts
+++ b/Logic/FeatureSource/Sources/FilteringFeatureSource.ts
@@ -1,24 +1,29 @@
import {UIEventSource} from "../../UIEventSource";
import LayerConfig from "../../../Models/ThemeConfig/LayerConfig";
import FilteredLayer from "../../../Models/FilteredLayer";
-import {FeatureSourceForLayer} from "../FeatureSource";
+import {FeatureSourceForLayer, Tiled} from "../FeatureSource";
import Hash from "../../Web/Hash";
+import {BBox} from "../../GeoOperations";
-export default class FilteringFeatureSource implements FeatureSourceForLayer {
+export default class FilteringFeatureSource implements FeatureSourceForLayer , Tiled {
public features: UIEventSource<{ feature: any; freshness: Date }[]> =
new UIEventSource<{ feature: any; freshness: Date }[]>([]);
public readonly name;
public readonly layer: FilteredLayer;
-
+public readonly tileIndex : number
+ public readonly bbox : BBox
constructor(
state: {
locationControl: UIEventSource<{ zoom: number }>,
selectedElement: UIEventSource,
},
+ tileIndex,
upstream: FeatureSourceForLayer
) {
const self = this;
this.name = "FilteringFeatureSource("+upstream.name+")"
+ this.tileIndex = tileIndex
+ this.bbox = BBox.fromTileIndex(tileIndex)
this.layer = upstream.layer;
const layer = upstream.layer;
@@ -51,7 +56,7 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer {
return false;
}
}
- if (!FilteringFeatureSource.showLayer(layer, state.locationControl.data)) {
+ if (!layer.isDisplayed) {
// The layer itself is either disabled or hidden due to zoom constraints
// We should return true, but it might still match some other layer
return false;
@@ -66,10 +71,7 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer {
update();
});
- let isShown = state.locationControl.map((l) => FilteringFeatureSource.showLayer(layer, l),
- [layer.isDisplayed])
-
- isShown.addCallback(isShown => {
+ layer.isDisplayed.addCallback(isShown => {
if (isShown) {
update();
} else {
@@ -78,7 +80,7 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer {
});
layer.appliedFilters.addCallback(_ => {
- if(!isShown.data){
+ if(!layer.isDisplayed.data){
// Currently not shown.
// Note that a change in 'isSHown' will trigger an update as well, so we don't have to watch it another time
return;
@@ -93,10 +95,8 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer {
layer: {
isDisplayed: UIEventSource;
layerDef: LayerConfig;
- },
- location: { zoom: number }) {
- return layer.isDisplayed.data &&
- layer.layerDef.minzoomVisible <= location.zoom;
+ }) {
+ return layer.isDisplayed.data;
}
}
diff --git a/Logic/FeatureSource/Sources/GeoJsonSource.ts b/Logic/FeatureSource/Sources/GeoJsonSource.ts
index e6d24fbca..6222fc729 100644
--- a/Logic/FeatureSource/Sources/GeoJsonSource.ts
+++ b/Logic/FeatureSource/Sources/GeoJsonSource.ts
@@ -6,6 +6,7 @@ import FilteredLayer from "../../../Models/FilteredLayer";
import {Utils} from "../../../Utils";
import {FeatureSourceForLayer, Tiled} from "../FeatureSource";
import {BBox} from "../../GeoOperations";
+import {Tiles} from "../../../Models/TileRange";
export default class GeoJsonSource implements FeatureSourceForLayer, Tiled {
@@ -35,10 +36,10 @@ export default class GeoJsonSource implements FeatureSourceForLayer, Tiled {
.replace('{z}', "" + z)
.replace('{x}', "" + x)
.replace('{y}', "" + y)
- this.tileIndex = Utils.tile_index(z, x, y)
+ this.tileIndex = Tiles.tile_index(z, x, y)
this.bbox = BBox.fromTile(z, x, y)
} else {
- this.tileIndex = Utils.tile_index(0, 0, 0)
+ this.tileIndex = Tiles.tile_index(0, 0, 0)
this.bbox = BBox.global;
}
@@ -89,7 +90,6 @@ export default class GeoJsonSource implements FeatureSourceForLayer, Tiled {
newFeatures.push({feature: feature, freshness: freshness})
}
- console.debug("Downloaded " + newFeatures.length + " new features and " + skipped + " already seen features from " + url);
if (newFeatures.length == 0) {
return;
diff --git a/Logic/FeatureSource/Sources/RememberingSource.ts b/Logic/FeatureSource/Sources/RememberingSource.ts
index 99f422478..b31097061 100644
--- a/Logic/FeatureSource/Sources/RememberingSource.ts
+++ b/Logic/FeatureSource/Sources/RememberingSource.ts
@@ -2,17 +2,23 @@
* Every previously added point is remembered, but new points are added.
* Data coming from upstream will always overwrite a previous value
*/
-import FeatureSource from "../FeatureSource";
+import FeatureSource, {Tiled} from "../FeatureSource";
import {UIEventSource} from "../../UIEventSource";
+import {BBox} from "../../GeoOperations";
-export default class RememberingSource implements FeatureSource {
+export default class RememberingSource implements FeatureSource , Tiled{
public readonly features: UIEventSource<{ feature: any, freshness: Date }[]>;
public readonly name;
-
- constructor(source: FeatureSource) {
+ public readonly tileIndex : number
+ public readonly bbox : BBox
+
+ constructor(source: FeatureSource & Tiled) {
const self = this;
this.name = "RememberingSource of " + source.name;
+ this.tileIndex= source.tileIndex
+ this.bbox = source.bbox;
+
const empty = [];
this.features = source.features.map(features => {
const oldFeatures = self.features?.data ?? empty;
diff --git a/Logic/FeatureSource/Sources/SimpleFeatureSource.ts b/Logic/FeatureSource/Sources/SimpleFeatureSource.ts
index ad8d7be5d..b3a476f5f 100644
--- a/Logic/FeatureSource/Sources/SimpleFeatureSource.ts
+++ b/Logic/FeatureSource/Sources/SimpleFeatureSource.ts
@@ -3,13 +3,14 @@ import FilteredLayer from "../../../Models/FilteredLayer";
import {FeatureSourceForLayer, Tiled} from "../FeatureSource";
import {BBox} from "../../GeoOperations";
import {Utils} from "../../../Utils";
+import {Tiles} from "../../../Models/TileRange";
export default class SimpleFeatureSource implements FeatureSourceForLayer, Tiled {
public readonly features: UIEventSource<{ feature: any; freshness: Date }[]> = new UIEventSource<{ feature: any; freshness: Date }[]>([]);
public readonly name: string = "SimpleFeatureSource";
public readonly layer: FilteredLayer;
public readonly bbox: BBox = BBox.global;
- public readonly tileIndex: number = Utils.tile_index(0, 0, 0);
+ public readonly tileIndex: number = Tiles.tile_index(0, 0, 0);
constructor(layer: FilteredLayer) {
this.name = "SimpleFeatureSource(" + layer.layerDef.id + ")"
diff --git a/Logic/FeatureSource/Sources/StaticFeatureSource.ts b/Logic/FeatureSource/Sources/StaticFeatureSource.ts
index 0cc58d656..d5795a1d5 100644
--- a/Logic/FeatureSource/Sources/StaticFeatureSource.ts
+++ b/Logic/FeatureSource/Sources/StaticFeatureSource.ts
@@ -8,12 +8,13 @@ export default class StaticFeatureSource implements FeatureSource {
public readonly features: UIEventSource<{ feature: any; freshness: Date }[]>;
public readonly name: string = "StaticFeatureSource"
- constructor(features: any[] | UIEventSource, useFeaturesDirectly = false) {
+ constructor(features: any[] | UIEventSource>, useFeaturesDirectly) {
const now = new Date();
- if(useFeaturesDirectly){
+ if (useFeaturesDirectly) {
// @ts-ignore
this.features = features
- }else if (features instanceof UIEventSource) {
+ } else if (features instanceof UIEventSource) {
+ // @ts-ignore
this.features = features.map(features => features.map(f => ({feature: f, freshness: now})))
} else {
this.features = new UIEventSource(features.map(f => ({
diff --git a/Logic/FeatureSource/Sources/WayHandlingApplyingFeatureSource.ts b/Logic/FeatureSource/Sources/WayHandlingApplyingFeatureSource.ts
index 37ee94b8a..cb36c4b21 100644
--- a/Logic/FeatureSource/Sources/WayHandlingApplyingFeatureSource.ts
+++ b/Logic/FeatureSource/Sources/WayHandlingApplyingFeatureSource.ts
@@ -12,10 +12,11 @@ export default class WayHandlingApplyingFeatureSource implements FeatureSourceFo
public readonly layer;
constructor(upstream: FeatureSourceForLayer) {
- this.name = "Wayhandling(" + upstream.name+")";
+
+ this.name = "Wayhandling(" + upstream.name + ")";
this.layer = upstream.layer
const layer = upstream.layer.layerDef;
-
+
if (layer.wayHandling === LayerConfig.WAYHANDLING_DEFAULT) {
// We don't have to do anything fancy
// lets just wire up the upstream
diff --git a/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts b/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts
index 357db85d4..8843b182a 100644
--- a/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts
+++ b/Logic/FeatureSource/TiledFeatureSource/DynamicGeoJsonTileSource.ts
@@ -1,5 +1,5 @@
import FilteredLayer from "../../../Models/FilteredLayer";
-import {FeatureSourceForLayer} from "../FeatureSource";
+import {FeatureSourceForLayer, Tiled} from "../FeatureSource";
import {UIEventSource} from "../../UIEventSource";
import Loc from "../../../Models/Loc";
import DynamicTileSource from "./DynamicTileSource";
@@ -8,7 +8,7 @@ import GeoJsonSource from "../Sources/GeoJsonSource";
export default class DynamicGeoJsonTileSource extends DynamicTileSource {
constructor(layer: FilteredLayer,
- registerLayer: (layer: FeatureSourceForLayer) => void,
+ registerLayer: (layer: FeatureSourceForLayer & Tiled) => void,
state: {
locationControl: UIEventSource
leafletMap: any
diff --git a/Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts b/Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts
index 43021587c..a6ef04458 100644
--- a/Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts
+++ b/Logic/FeatureSource/TiledFeatureSource/DynamicTileSource.ts
@@ -6,6 +6,7 @@ import {Utils} from "../../../Utils";
import {UIEventSource} from "../../UIEventSource";
import Loc from "../../../Models/Loc";
import TileHierarchy from "./TileHierarchy";
+import {Tiles} from "../../../Models/TileRange";
/***
* A tiled source which dynamically loads the required tiles at a fixed zoom level
@@ -46,9 +47,9 @@ export default class DynamicTileSource implements TileHierarchy Utils.tile_index(zoomlevel, x, y)).filter(i => !self._loadedTiles.has(i))
+ const needed = Tiles.MapRange(tileRange, (x, y) => Tiles.tile_index(zoomlevel, x, y)).filter(i => !self._loadedTiles.has(i))
if (needed.length === 0) {
return undefined
}
@@ -63,7 +64,7 @@ export default class DynamicTileSource implements TileHierarchy {
public readonly loadedTiles: Map = new Map();
@@ -13,7 +14,7 @@ export class TileHierarchyMerger implements TileHierarchy void;
- constructor(layer: FilteredLayer, handleTile: (src: FeatureSourceForLayer & IndexedFeatureSource, index: number) => void) {
+ constructor(layer: FilteredLayer, handleTile: (src: FeatureSourceForLayer & IndexedFeatureSource & Tiled, index: number) => void) {
this.layer = layer;
this._handleTile = handleTile;
}
@@ -37,7 +38,7 @@ export class TileHierarchyMerger implements TileHierarchy([src])
this.sources.set(index, sources)
- const merger = new FeatureSourceMerger(this.layer, index, BBox.fromTile(...Utils.tile_from_index(index)), sources)
+ const merger = new FeatureSourceMerger(this.layer, index, BBox.fromTile(...Tiles.tile_from_index(index)), sources)
this.loadedTiles.set(index, merger)
this._handleTile(merger, index)
}
diff --git a/Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource.ts b/Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource.ts
index 62a7c9e5e..2dcf3e6d2 100644
--- a/Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource.ts
+++ b/Logic/FeatureSource/TiledFeatureSource/TiledFeatureSource.ts
@@ -4,7 +4,7 @@ import {Utils} from "../../../Utils";
import {BBox} from "../../GeoOperations";
import FilteredLayer from "../../../Models/FilteredLayer";
import TileHierarchy from "./TileHierarchy";
-import {feature} from "@turf/turf";
+import {Tiles} from "../../../Models/TileRange";
/**
* Contains all features in a tiled fashion.
@@ -41,12 +41,12 @@ export default class TiledFeatureSource implements Tiled, IndexedFeatureSource,
this.x = x;
this.y = y;
this.bbox = BBox.fromTile(z, x, y)
- this.tileIndex = Utils.tile_index(z, x, y)
+ this.tileIndex = Tiles.tile_index(z, x, y)
this.name = `TiledFeatureSource(${z},${x},${y})`
this.parent = parent;
this.layer = options.layer
options = options ?? {}
- this.maxFeatureCount = options?.maxFeatureCount ?? 500;
+ this.maxFeatureCount = options?.maxFeatureCount ?? 250;
this.maxzoom = options.maxZoomLevel ?? 18
this.options = options;
if (parent === undefined) {
@@ -61,7 +61,7 @@ export default class TiledFeatureSource implements Tiled, IndexedFeatureSource,
} else {
this.root = this.parent.root;
this.loadedTiles = this.root.loadedTiles;
- const i = Utils.tile_index(z, x, y)
+ const i = Tiles.tile_index(z, x, y)
this.root.loadedTiles.set(i, this)
}
this.features = new UIEventSource([])
@@ -143,9 +143,7 @@ export default class TiledFeatureSource implements Tiled, IndexedFeatureSource,
for (const feature of features) {
const bbox = BBox.get(feature.feature)
- if (this.options.minZoomLevel === undefined) {
-
-
+ if (this.options.dontEnforceMinZoom || this.options.minZoomLevel === undefined) {
if (bbox.isContainedIn(this.upper_left.bbox)) {
ulf.push(feature)
} else if (bbox.isContainedIn(this.upper_right.bbox)) {
@@ -186,6 +184,11 @@ export interface TiledFeatureSourceOptions {
readonly maxFeatureCount?: number,
readonly maxZoomLevel?: number,
readonly minZoomLevel?: number,
+ /**
+ * IF minZoomLevel is set, and if a feature runs through a tile boundary, it would normally be duplicated.
+ * Setting 'dontEnforceMinZoomLevel' will still allow bigger zoom levels for those features
+ */
+ readonly dontEnforceMinZoom?: boolean,
readonly registerTile?: (tile: TiledFeatureSource & Tiled) => void,
readonly layer?: FilteredLayer
}
\ No newline at end of file
diff --git a/Logic/FeatureSource/TiledFeatureSource/TiledFromLocalStorageSource.ts b/Logic/FeatureSource/TiledFeatureSource/TiledFromLocalStorageSource.ts
index e88a1d82d..3e879bd4a 100644
--- a/Logic/FeatureSource/TiledFeatureSource/TiledFromLocalStorageSource.ts
+++ b/Logic/FeatureSource/TiledFeatureSource/TiledFromLocalStorageSource.ts
@@ -6,6 +6,7 @@ import TileHierarchy from "./TileHierarchy";
import {Utils} from "../../../Utils";
import SaveTileToLocalStorageActor from "../Actors/SaveTileToLocalStorageActor";
import {BBox} from "../../GeoOperations";
+import {Tiles} from "../../../Models/TileRange";
export default class TiledFromLocalStorageSource implements TileHierarchy {
public loadedTiles: Map = new Map();
@@ -17,6 +18,7 @@ export default class TiledFromLocalStorageSource implements TileHierarchy()
const prefix = SaveTileToLocalStorageActor.storageKey + "-" + layer.layerDef.id + "-"
// @ts-ignore
const indexes: number[] = Object.keys(localStorage)
@@ -27,7 +29,7 @@ export default class TiledFromLocalStorageSource implements TileHierarchy Utils.tile_from_index(i).join("/")).join(", "))
+ console.log("Layer", layer.layerDef.id, "has following tiles in available in localstorage", indexes.map(i => Tiles.tile_from_index(i).join("/")).join(", "))
const zLevels = indexes.map(i => i % 100)
const indexesSet = new Set(indexes)
@@ -57,9 +59,9 @@ export default class TiledFromLocalStorageSource implements TileHierarchy Utils.tile_index(z, x, y))
- .filter(i => !self.loadedTiles.has(i) && indexesSet.has(i))
+ const tileRange = Tiles.TileRangeBetween(z, bounds.getNorth(), bounds.getEast(), bounds.getSouth(), bounds.getWest())
+ const neededZ = Tiles.MapRange(tileRange, (x, y) => Tiles.tile_index(z, x, y))
+ .filter(i => !self.loadedTiles.has(i) && !undefinedTiles.has(i) && indexesSet.has(i))
needed.push(...neededZ)
}
@@ -84,12 +86,13 @@ export default class TiledFromLocalStorageSource implements TileHierarchy(features),
name: "FromLocalStorage(" + key + ")",
tileIndex: neededIndex,
- bbox: BBox.fromTile(...Utils.tile_from_index(neededIndex))
+ bbox: BBox.fromTileIndex(neededIndex)
}
handleFeatureSource(src, neededIndex)
self.loadedTiles.set(neededIndex, src)
} catch (e) {
console.error("Could not load data tile from local storage due to", e)
+ undefinedTiles.add(neededIndex)
}
}
diff --git a/Logic/GeoOperations.ts b/Logic/GeoOperations.ts
index 66fd90053..dd806ded4 100644
--- a/Logic/GeoOperations.ts
+++ b/Logic/GeoOperations.ts
@@ -1,5 +1,6 @@
import * as turf from '@turf/turf'
import {Utils} from "../Utils";
+import {Tiles} from "../Models/TileRange";
export class GeoOperations {
@@ -8,7 +9,7 @@ export class GeoOperations {
}
/**
- * Converts a GeoJSon feature to a point feature
+ * Converts a GeoJson feature to a point GeoJson feature
* @param feature
*/
static centerpoint(feature: any) {
@@ -451,8 +452,12 @@ export class BBox {
}
}
- static fromTile(z: number, x: number, y: number) {
- return new BBox(Utils.tile_bounds_lon_lat(z, x, y))
+ static fromTile(z: number, x: number, y: number): BBox {
+ return new BBox(Tiles.tile_bounds_lon_lat(z, x, y))
+ }
+
+ static fromTileIndex(i: number): BBox {
+ return BBox.fromTile(...Tiles.tile_from_index(i))
}
getEast() {
diff --git a/Logic/ImageProviders/ImageAttributionSource.ts b/Logic/ImageProviders/ImageAttributionSource.ts
index 7841c899b..1f0f097b7 100644
--- a/Logic/ImageProviders/ImageAttributionSource.ts
+++ b/Logic/ImageProviders/ImageAttributionSource.ts
@@ -12,8 +12,11 @@ export default abstract class ImageAttributionSource {
if (cached !== undefined) {
return cached;
}
- const src = this.DownloadAttribution(url)
+ const src = new UIEventSource(undefined)
this._cache.set(url, src)
+ this.DownloadAttribution(url).then(license =>
+ src.setData(license))
+ .catch(e => console.error("Could not download license information for ", url, " due to", e))
return src;
}
@@ -21,10 +24,10 @@ export default abstract class ImageAttributionSource {
public abstract SourceIcon(backlinkSource?: string): BaseUIElement;
/*Converts a value to a URL. Can return null if not applicable*/
- public PrepareUrl(value: string): string | UIEventSource{
+ public PrepareUrl(value: string): string | UIEventSource {
return value;
}
- protected abstract DownloadAttribution(url: string): UIEventSource;
+ protected abstract DownloadAttribution(url: string): Promise;
}
\ No newline at end of file
diff --git a/Logic/ImageProviders/Imgur.ts b/Logic/ImageProviders/Imgur.ts
index 4325d3e37..f85f3228a 100644
--- a/Logic/ImageProviders/Imgur.ts
+++ b/Logic/ImageProviders/Imgur.ts
@@ -2,8 +2,9 @@
import $ from "jquery"
import {LicenseInfo} from "./Wikimedia";
import ImageAttributionSource from "./ImageAttributionSource";
-import {UIEventSource} from "../UIEventSource";
import BaseUIElement from "../../UI/BaseUIElement";
+import {Utils} from "../../Utils";
+import Constants from "../../Models/Constants";
export class Imgur extends ImageAttributionSource {
@@ -86,50 +87,27 @@ export class Imgur extends ImageAttributionSource {
return undefined;
}
- protected DownloadAttribution(url: string): UIEventSource {
- const src = new UIEventSource(undefined)
-
-
+ protected async DownloadAttribution(url: string): Promise {
const hash = url.substr("https://i.imgur.com/".length).split(".jpg")[0];
const apiUrl = 'https://api.imgur.com/3/image/' + hash;
- const apiKey = '7070e7167f0a25a';
+ const response = await Utils.downloadJson(apiUrl, {Authorization: 'Client-ID ' + Constants.ImgurApiKey})
- const settings = {
- async: true,
- crossDomain: true,
- processData: false,
- contentType: false,
- type: 'GET',
- url: apiUrl,
- headers: {
- Authorization: 'Client-ID ' + apiKey,
- Accept: 'application/json',
- },
- };
- // @ts-ignore
- $.ajax(settings).done(function (response) {
- const descr: string = response.data.description ?? "";
- const data: any = {};
- for (const tag of descr.split("\n")) {
- const kv = tag.split(":");
- const k = kv[0];
- data[k] = kv[1].replace("\r", "");
- }
+ const descr: string = response.data.description ?? "";
+ const data: any = {};
+ for (const tag of descr.split("\n")) {
+ const kv = tag.split(":");
+ const k = kv[0];
+ data[k] = kv[1]?.replace("\r", "");
+ }
- const licenseInfo = new LicenseInfo();
+ const licenseInfo = new LicenseInfo();
- licenseInfo.licenseShortName = data.license;
- licenseInfo.artist = data.author;
+ licenseInfo.licenseShortName = data.license;
+ licenseInfo.artist = data.author;
- src.setData(licenseInfo)
-
- }).fail((reason) => {
- console.log("Getting metadata from to IMGUR failed", reason)
- });
-
- return src;
+ return licenseInfo
}
diff --git a/Logic/ImageProviders/Mapillary.ts b/Logic/ImageProviders/Mapillary.ts
index 3f992dbce..ae5808a01 100644
--- a/Logic/ImageProviders/Mapillary.ts
+++ b/Logic/ImageProviders/Mapillary.ts
@@ -8,7 +8,7 @@ import {Utils} from "../../Utils";
export class Mapillary extends ImageAttributionSource {
public static readonly singleton = new Mapillary();
-
+
private static readonly v4_cached_urls = new Map>();
private static readonly client_token_v3 = 'TXhLaWthQ1d4RUg0czVxaTVoRjFJZzowNDczNjUzNmIyNTQyYzI2'
@@ -23,8 +23,8 @@ export class Mapillary extends ImageAttributionSource {
isApiv4?: boolean
} {
if (value.startsWith("https://a.mapillary.com")) {
- const key = value.substring(0, value.lastIndexOf("?")).substring(value.lastIndexOf("/") + 1)
- return {key:key, isApiv4: !isNaN(Number(key))};
+ const key = value.substring(0, value.lastIndexOf("?")).substring(value.lastIndexOf("/") + 1)
+ return {key: key, isApiv4: !isNaN(Number(key))};
}
const newApiFormat = value.match(/https?:\/\/www.mapillary.com\/app\/\?pKey=([0-9]*)/)
if (newApiFormat !== null) {
@@ -32,11 +32,11 @@ export class Mapillary extends ImageAttributionSource {
}
const mapview = value.match(/https?:\/\/www.mapillary.com\/map\/im\/(.*)/)
- if(mapview !== null){
+ if (mapview !== null) {
const key = mapview[1]
- return {key:key, isApiv4: !isNaN(Number(key))};
+ return {key: key, isApiv4: !isNaN(Number(key))};
}
-
+
if (value.toLowerCase().startsWith("https://www.mapillary.com/map/im/")) {
// Extract the key of the image
@@ -62,48 +62,45 @@ export class Mapillary extends ImageAttributionSource {
return `https://images.mapillary.com/${keyV.key}/thumb-640.jpg?client_id=${Mapillary.client_token_v3}`
} else {
const key = keyV.key;
- if(Mapillary.v4_cached_urls.has(key)){
+ if (Mapillary.v4_cached_urls.has(key)) {
return Mapillary.v4_cached_urls.get(key)
}
- const metadataUrl ='https://graph.mapillary.com/' + key + '?fields=thumb_1024_url&&access_token=' + Mapillary.client_token_v4;
+ const metadataUrl = 'https://graph.mapillary.com/' + key + '?fields=thumb_1024_url&&access_token=' + Mapillary.client_token_v4;
const source = new UIEventSource(undefined)
Mapillary.v4_cached_urls.set(key, source)
Utils.downloadJson(metadataUrl).then(
- json => {
- console.warn("Got response on mapillary image", json, json["thumb_1024_url"])
- return source.setData(json["thumb_1024_url"]);
- }
+ json => {
+ console.warn("Got response on mapillary image", json, json["thumb_1024_url"])
+ return source.setData(json["thumb_1024_url"]);
+ }
)
return source
}
}
- protected DownloadAttribution(url: string): UIEventSource {
+ protected async DownloadAttribution(url: string): Promise {
const keyV = Mapillary.ExtractKeyFromURL(url)
- if(keyV.isApiv4){
+ if (keyV.isApiv4) {
const license = new LicenseInfo()
license.artist = "Contributor name unavailable";
license.license = "CC BY-SA 4.0";
// license.license = "Creative Commons Attribution-ShareAlike 4.0 International License";
license.attributionRequired = true;
- return new UIEventSource(license)
-
+ return license
+
}
const key = keyV.key
-
- const metadataURL = `https://a.mapillary.com/v3/images/${key}?client_id=TXhLaWthQ1d4RUg0czVxaTVoRjFJZzowNDczNjUzNmIyNTQyYzI2`
- const source = new UIEventSource(undefined)
- Utils.downloadJson(metadataURL).then(data => {
- const license = new LicenseInfo();
- license.artist = data.properties?.username;
- license.licenseShortName = "CC BY-SA 4.0";
- license.license = "Creative Commons Attribution-ShareAlike 4.0 International License";
- license.attributionRequired = true;
- source.setData(license);
- })
- return source
+ const metadataURL = `https://a.mapillary.com/v3/images/${key}?client_id=TXhLaWthQ1d4RUg0czVxaTVoRjFJZzowNDczNjUzNmIyNTQyYzI2`
+ const data = await Utils.downloadJson(metadataURL)
+ const license = new LicenseInfo();
+ license.artist = data.properties?.username;
+ license.licenseShortName = "CC BY-SA 4.0";
+ license.license = "Creative Commons Attribution-ShareAlike 4.0 International License";
+ license.attributionRequired = true;
+
+ return license
}
}
\ No newline at end of file
diff --git a/Logic/ImageProviders/Wikimedia.ts b/Logic/ImageProviders/Wikimedia.ts
index 32c762523..cd5aea5d5 100644
--- a/Logic/ImageProviders/Wikimedia.ts
+++ b/Logic/ImageProviders/Wikimedia.ts
@@ -1,7 +1,6 @@
import ImageAttributionSource from "./ImageAttributionSource";
import BaseUIElement from "../../UI/BaseUIElement";
import Svg from "../../Svg";
-import {UIEventSource} from "../UIEventSource";
import Link from "../../UI/Base/Link";
import {Utils} from "../../Utils";
@@ -124,43 +123,34 @@ export class Wikimedia extends ImageAttributionSource {
.replace(/'/g, '%27');
}
- protected DownloadAttribution(filename: string): UIEventSource {
-
- const source = new UIEventSource(undefined);
-
+ protected async DownloadAttribution(filename: string): Promise {
filename = Wikimedia.ExtractFileName(filename)
if (filename === "") {
- return source;
+ return undefined;
}
const url = "https://en.wikipedia.org/w/" +
"api.php?action=query&prop=imageinfo&iiprop=extmetadata&" +
"titles=" + filename +
"&format=json&origin=*";
- Utils.downloadJson(url).then(
- data => {
- const licenseInfo = new LicenseInfo();
- const license = (data.query.pages[-1].imageinfo ?? [])[0]?.extmetadata;
- if (license === undefined) {
- console.error("This file has no usable metedata or license attached... Please fix the license info file yourself!")
- source.setData(null)
- return;
- }
+ const data = await Utils.downloadJson(url)
+ const licenseInfo = new LicenseInfo();
+ const license = (data.query.pages[-1].imageinfo ?? [])[0]?.extmetadata;
+ if (license === undefined) {
+ console.error("This file has no usable metedata or license attached... Please fix the license info file yourself!")
+ return undefined;
+ }
- licenseInfo.artist = license.Artist?.value;
- licenseInfo.license = license.License?.value;
- licenseInfo.copyrighted = license.Copyrighted?.value;
- licenseInfo.attributionRequired = license.AttributionRequired?.value;
- licenseInfo.usageTerms = license.UsageTerms?.value;
- licenseInfo.licenseShortName = license.LicenseShortName?.value;
- licenseInfo.credit = license.Credit?.value;
- licenseInfo.description = license.ImageDescription?.value;
- source.setData(licenseInfo);
- }
- )
-
- return source;
+ licenseInfo.artist = license.Artist?.value;
+ licenseInfo.license = license.License?.value;
+ licenseInfo.copyrighted = license.Copyrighted?.value;
+ licenseInfo.attributionRequired = license.AttributionRequired?.value;
+ licenseInfo.usageTerms = license.UsageTerms?.value;
+ licenseInfo.licenseShortName = license.LicenseShortName?.value;
+ licenseInfo.credit = license.Credit?.value;
+ licenseInfo.description = license.ImageDescription?.value;
+ return licenseInfo;
}
diff --git a/Logic/MetaTagging.ts b/Logic/MetaTagging.ts
index 5745fa4ad..c7eda184b 100644
--- a/Logic/MetaTagging.ts
+++ b/Logic/MetaTagging.ts
@@ -2,6 +2,7 @@ import SimpleMetaTagger from "./SimpleMetaTagger";
import {ExtraFuncParams, ExtraFunction} from "./ExtraFunction";
import {UIEventSource} from "./UIEventSource";
import LayerConfig from "../Models/ThemeConfig/LayerConfig";
+import State from "../State";
/**
@@ -20,50 +21,68 @@ export default class MetaTagging {
* The given features should be part of the given layer
*/
public static addMetatags(features: { feature: any; freshness: Date }[],
- params: ExtraFuncParams,
- layer: LayerConfig,
- options?: {
- includeDates?: true | boolean,
- includeNonDates?: true | boolean
- }) {
+ params: ExtraFuncParams,
+ layer: LayerConfig,
+ options?: {
+ includeDates?: true | boolean,
+ includeNonDates?: true | boolean
+ }) {
if (features === undefined || features.length === 0) {
return;
}
- for (const metatag of SimpleMetaTagger.metatags) {
- try {
+ const metatagsToApply: SimpleMetaTagger [] = []
+ for (const metatag of SimpleMetaTagger.metatags) {
if (metatag.includesDates) {
if (options.includeDates ?? true) {
- metatag.addMetaTags(features);
+ metatagsToApply.push(metatag)
}
} else {
if (options.includeNonDates ?? true) {
- metatag.addMetaTags(features);
+ metatagsToApply.push(metatag)
}
}
-
- } catch (e) {
- console.error("Could not calculate metatag for ", metatag.keys.join(","), ":", e)
}
- }
- // The functions - per layer - which add the new keys
+ // The calculated functions - per layer - which add the new keys
const layerFuncs = this.createRetaggingFunc(layer)
- if (layerFuncs !== undefined) {
- for (const feature of features) {
- try {
- layerFuncs(params, feature.feature)
- } catch (e) {
- console.error(e)
+ for (let i = 0; i < features.length; i++) {
+ const ff = features[i];
+ const feature = ff.feature
+ const freshness = ff.freshness
+ let somethingChanged = false
+ for (const metatag of metatagsToApply) {
+ try {
+ if(!metatag.keys.some(key => feature.properties[key] === undefined)){
+ // All keys are already defined, we probably already ran this one
+ continue
+ }
+ somethingChanged = somethingChanged || metatag.applyMetaTagsOnFeature(feature, freshness)
+ } catch (e) {
+ console.error("Could not calculate metatag for ", metatag.keys.join(","), ":", e)
+ }
+ }
+
+ if(layerFuncs !== undefined){
+ try {
+ layerFuncs(params, feature)
+ } catch (e) {
+ console.error(e)
+ }
+ somethingChanged = true
+ }
+
+ if(somethingChanged){
+ State.state.allElements.getEventSourceById(feature.properties.id).ping()
}
}
- }
}
+
private static createRetaggingFunc(layer: LayerConfig):
((params: ExtraFuncParams, feature: any) => void) {
const calculatedTags: [string, string][] = layer.calculatedTags;
@@ -92,11 +111,13 @@ export default class MetaTagging {
d = JSON.stringify(d);
}
feature.properties[key] = d;
+ console.log("Written a delayed calculated tag onto ", feature.properties.id, ": ", key, ":==", d)
})
result = result.data
}
if (result === undefined || result === "") {
+ console.log("Calculated tag for", key, "gave undefined", feature.properties.id)
return;
}
if (typeof result !== "string") {
@@ -104,6 +125,7 @@ export default class MetaTagging {
result = JSON.stringify(result);
}
feature.properties[key] = result;
+ console.log("Written a calculated tag onto ", feature.properties.id, ": ", key, ":==", result)
} catch (e) {
if (MetaTagging.errorPrintCount < MetaTagging.stopErrorOutputAt) {
console.warn("Could not calculate a calculated tag defined by " + code + " due to " + e + ". This is code defined in the theme. Are you the theme creator? Doublecheck your code. Note that the metatags might not be stable on new features", e)
diff --git a/Logic/Osm/OsmConnection.ts b/Logic/Osm/OsmConnection.ts
index 01d18f8cd..5a5e82612 100644
--- a/Logic/Osm/OsmConnection.ts
+++ b/Logic/Osm/OsmConnection.ts
@@ -94,6 +94,7 @@ export class OsmConnection {
self.AttemptLogin()
}
});
+ this.isLoggedIn.addCallbackAndRunD(li => console.log("User is logged in!", li))
this._dryRun = dryRun;
this.updateAuthObject();
diff --git a/Logic/SimpleMetaTagger.ts b/Logic/SimpleMetaTagger.ts
index 6e8f3e0fc..4a2dac23b 100644
--- a/Logic/SimpleMetaTagger.ts
+++ b/Logic/SimpleMetaTagger.ts
@@ -31,7 +31,7 @@ export default class SimpleMetaTagger {
"_version_number"],
doc: "Information about the last edit of this object."
},
- (feature) => {/*Note: also handled by 'UpdateTagsFromOsmAPI'*/
+ (feature) => {/*Note: also called by 'UpdateTagsFromOsmAPI'*/
const tgs = feature.properties;
@@ -48,6 +48,7 @@ export default class SimpleMetaTagger {
move("changeset", "_last_edit:changeset")
move("timestamp", "_last_edit:timestamp")
move("version", "_version_number")
+ return true;
}
)
private static latlon = new SimpleMetaTagger({
@@ -62,6 +63,7 @@ export default class SimpleMetaTagger {
feature.properties["_lon"] = "" + lon;
feature._lon = lon; // This is dirty, I know
feature._lat = lat;
+ return true;
})
);
private static surfaceArea = new SimpleMetaTagger(
@@ -74,6 +76,7 @@ export default class SimpleMetaTagger {
feature.properties["_surface"] = "" + sqMeters;
feature.properties["_surface:ha"] = "" + Math.floor(sqMeters / 1000) / 10;
feature.area = sqMeters;
+ return true;
})
);
@@ -118,9 +121,7 @@ export default class SimpleMetaTagger {
}
}
- if (rewritten) {
- State.state.allElements.getEventSourceById(feature.id).ping();
- }
+ return rewritten
})
)
@@ -135,6 +136,7 @@ export default class SimpleMetaTagger {
const km = Math.floor(l / 1000)
const kmRest = Math.round((l - km * 1000) / 100)
feature.properties["_length:km"] = "" + km + "." + kmRest
+ return true;
})
)
private static country = new SimpleMetaTagger(
@@ -144,7 +146,6 @@ export default class SimpleMetaTagger {
},
feature => {
-
let centerPoint: any = GeoOperations.centerpoint(feature);
const lat = centerPoint.geometry.coordinates[1];
const lon = centerPoint.geometry.coordinates[0];
@@ -157,11 +158,11 @@ export default class SimpleMetaTagger {
const tagsSource = State.state.allElements.getEventSourceById(feature.properties.id);
tagsSource.ping();
}
-
} catch (e) {
console.warn(e)
}
})
+ return false;
}
)
private static isOpen = new SimpleMetaTagger(
@@ -174,7 +175,7 @@ export default class SimpleMetaTagger {
if (Utils.runningFromConsole) {
// We are running from console, thus probably creating a cache
// isOpen is irrelevant
- return
+ return false
}
const tagsSource = State.state.allElements.getEventSourceById(feature.properties.id);
@@ -199,7 +200,7 @@ export default class SimpleMetaTagger {
if (oldNextChange > (new Date()).getTime() &&
tags["_isOpen:oldvalue"] === tags["opening_hours"]) {
// Already calculated and should not yet be triggered
- return;
+ return false;
}
tags["_isOpen"] = oh.getState() ? "yes" : "no";
@@ -227,6 +228,7 @@ export default class SimpleMetaTagger {
}
}
updateTags();
+ return true;
} catch (e) {
console.warn("Error while parsing opening hours of ", tags.id, e);
tags["_isOpen"] = "parse_error";
@@ -244,11 +246,11 @@ export default class SimpleMetaTagger {
const tags = feature.properties;
const direction = tags["camera:direction"] ?? tags["direction"];
if (direction === undefined) {
- return;
+ return false;
}
const n = cardinalDirections[direction] ?? Number(direction);
if (isNaN(n)) {
- return;
+ return false;
}
// The % operator has range (-360, 360). We apply a trick to get [0, 360).
@@ -256,7 +258,7 @@ export default class SimpleMetaTagger {
tags["_direction:numerical"] = normalized;
tags["_direction:leftright"] = normalized <= 180 ? "right" : "left";
-
+ return true;
})
)
private static carriageWayWidth = new SimpleMetaTagger(
@@ -268,7 +270,7 @@ export default class SimpleMetaTagger {
const properties = feature.properties;
if (properties["width:carriageway"] === undefined) {
- return;
+ return false;
}
const carWidth = 2;
@@ -366,7 +368,7 @@ export default class SimpleMetaTagger {
properties["_width:difference"] = Utils.Round(targetWidth - width);
properties["_width:difference:no_pedestrians"] = Utils.Round(targetWidthIgnoringPedestrians - width);
-
+ return true;
}
);
private static currentTime = new SimpleMetaTagger(
@@ -375,7 +377,7 @@ export default class SimpleMetaTagger {
doc: "Adds the time that the data got loaded - pretty much the time of downloading from overpass. The format is YYYY-MM-DD hh:mm, aka 'sortable' aka ISO-8601-but-not-entirely",
includesDates: true
},
- (feature, _, freshness) => {
+ (feature, freshness) => {
const now = new Date();
if (typeof freshness === "string") {
@@ -394,7 +396,7 @@ export default class SimpleMetaTagger {
feature.properties["_now:datetime"] = datetime(now);
feature.properties["_loaded:date"] = date(freshness);
feature.properties["_loaded:datetime"] = datetime(freshness);
-
+ return true;
}
)
public static metatags = [
@@ -413,12 +415,18 @@ export default class SimpleMetaTagger {
public readonly keys: string[];
public readonly doc: string;
public readonly includesDates: boolean
- private readonly _f: (feature: any, index: number, freshness: Date) => void;
+ public readonly applyMetaTagsOnFeature: (feature: any, freshness: Date) => boolean;
- constructor(docs: { keys: string[], doc: string, includesDates?: boolean }, f: ((feature: any, index: number, freshness: Date) => void)) {
+ /***
+ * A function that adds some extra data to a feature
+ * @param docs: what does this extra data do?
+ * @param f: apply the changes. Returns true if something changed
+ */
+ constructor(docs: { keys: string[], doc: string, includesDates?: boolean },
+ f: ((feature: any, freshness: Date) => boolean)) {
this.keys = docs.keys;
this.doc = docs.doc;
- this._f = f;
+ this.applyMetaTagsOnFeature = f;
this.includesDates = docs.includesDates ?? false;
for (const key of docs.keys) {
if (!key.startsWith('_') && key.toLowerCase().indexOf("theme") < 0) {
@@ -450,12 +458,4 @@ export default class SimpleMetaTagger {
return new Combine(subElements).SetClass("flex-col")
}
- public addMetaTags(features: { feature: any, freshness: Date }[]) {
- for (let i = 0; i < features.length; i++) {
- let feature = features[i];
- this._f(feature.feature, i, feature.freshness);
- }
- }
-
-
}
diff --git a/Models/Constants.ts b/Models/Constants.ts
index d6f212ac6..66ca7227b 100644
--- a/Models/Constants.ts
+++ b/Models/Constants.ts
@@ -3,6 +3,7 @@ import {Utils} from "../Utils";
export default class Constants {
public static vNumber = "0.10.0-alpha-1";
+ public static ImgurApiKey = '7070e7167f0a25a'
// The user journey states thresholds when a new feature gets unlocked
public static userJourney = {
diff --git a/Models/ThemeConfig/LayerConfig.ts b/Models/ThemeConfig/LayerConfig.ts
index 18c9fe3b4..2ed02ae6d 100644
--- a/Models/ThemeConfig/LayerConfig.ts
+++ b/Models/ThemeConfig/LayerConfig.ts
@@ -18,6 +18,7 @@ import FilterConfig from "./FilterConfig";
import {Unit} from "../Unit";
import DeleteConfig from "./DeleteConfig";
import Svg from "../../Svg";
+import Img from "../../UI/Base/Img";
export default class LayerConfig {
static WAYHANDLING_DEFAULT = 0;
@@ -495,19 +496,20 @@ export default class LayerConfig {
const iconUrlStatic = render(this.icon);
const self = this;
- function genHtmlFromString(sourcePart: string, rotation: string, style?: string): BaseUIElement {
- style = style ?? `width:100%;height:100%;transform: rotate( ${rotation} );display:block;position: absolute; top: 0; left: 0`;
+ function genHtmlFromString(sourcePart: string, rotation: string): BaseUIElement {
+ const style = `width:100%;height:100%;transform: rotate( ${rotation} );display:block;position: absolute; top: 0; left: 0`;
let html: BaseUIElement = new FixedUiElement(
``
);
const match = sourcePart.match(/([a-zA-Z0-9_]*):([^;]*)/);
if (match !== null && Svg.All[match[1] + ".svg"] !== undefined) {
- html = new Combine([
+ html = new Img(
(Svg.All[match[1] + ".svg"] as string).replace(
/#000000/g,
match[2]
),
- ]).SetStyle(style);
+ true
+ ).SetStyle(style);
}
return html;
}
@@ -540,7 +542,7 @@ export default class LayerConfig {
.filter((prt) => prt != "");
for (const badgePartStr of partDefs) {
- badgeParts.push(genHtmlFromString(badgePartStr, "0", `width:unset;height:100%;display:block;`));
+ badgeParts.push(genHtmlFromString(badgePartStr, "0"));
}
const badgeCompound = new Combine(badgeParts).SetStyle(
diff --git a/Models/ThemeConfig/LayoutConfig.ts b/Models/ThemeConfig/LayoutConfig.ts
index dd0d472ed..b632d8a29 100644
--- a/Models/ThemeConfig/LayoutConfig.ts
+++ b/Models/ThemeConfig/LayoutConfig.ts
@@ -5,7 +5,6 @@ import SharedTagRenderings from "../../Customizations/SharedTagRenderings";
import AllKnownLayers from "../../Customizations/AllKnownLayers";
import {Utils} from "../../Utils";
import LayerConfig from "./LayerConfig";
-import {Unit} from "../Unit";
import {LayerConfigJson} from "./Json/LayerConfigJson";
export default class LayoutConfig {
@@ -87,6 +86,9 @@ export default class LayoutConfig {
this.startZoom = json.startZoom;
this.startLat = json.startLat;
this.startLon = json.startLon;
+ if(json.widenFactor < 1){
+ throw "Widenfactor too small"
+ }
this.widenFactor = json.widenFactor ?? 1.5;
this.roamingRenderings = (json.roamingRenderings ?? []).map((tr, i) => {
if (typeof tr === "string") {
diff --git a/Models/TileRange.ts b/Models/TileRange.ts
index e1dba5532..215d5a76f 100644
--- a/Models/TileRange.ts
+++ b/Models/TileRange.ts
@@ -5,4 +5,106 @@ export interface TileRange {
yend: number,
total: number,
zoomlevel: number
+}
+
+export class Tiles {
+
+ public static MapRange(tileRange: TileRange, f: (x: number, y: number) => T): T[] {
+ const result: T[] = []
+ for (let x = tileRange.xstart; x <= tileRange.xend; x++) {
+ for (let y = tileRange.ystart; y <= tileRange.yend; y++) {
+ const t = f(x, y);
+ result.push(t)
+ }
+ }
+ return result;
+ }
+
+
+ private static tile2long(x, z) {
+ return (x / Math.pow(2, z) * 360 - 180);
+ }
+
+ private static tile2lat(y, z) {
+ const n = Math.PI - 2 * Math.PI * y / Math.pow(2, z);
+ return (180 / Math.PI * Math.atan(0.5 * (Math.exp(n) - Math.exp(-n))));
+ }
+
+ private static lon2tile(lon, zoom) {
+ return (Math.floor((lon + 180) / 360 * Math.pow(2, zoom)));
+ }
+
+ private static lat2tile(lat, zoom) {
+ return (Math.floor((1 - Math.log(Math.tan(lat * Math.PI / 180) + 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom)));
+ }
+
+ /**
+ * Calculates the tile bounds of the
+ * @param z
+ * @param x
+ * @param y
+ * @returns [[maxlat, minlon], [minlat, maxlon]]
+ */
+ static tile_bounds(z: number, x: number, y: number): [[number, number], [number, number]] {
+ return [[Tiles.tile2lat(y, z), Tiles.tile2long(x, z)], [Tiles.tile2lat(y + 1, z), Tiles.tile2long(x + 1, z)]]
+ }
+
+
+ static tile_bounds_lon_lat(z: number, x: number, y: number): [[number, number], [number, number]] {
+ return [[Tiles.tile2long(x, z), Tiles.tile2lat(y, z)], [Tiles.tile2long(x + 1, z), Tiles.tile2lat(y + 1, z)]]
+ }
+
+ /**
+ * Returns the centerpoint [lon, lat] of the specified tile
+ * @param z
+ * @param x
+ * @param y
+ */
+ static centerPointOf(z: number, x: number, y: number): [number, number]{
+ return [(Tiles.tile2long(x, z) + Tiles.tile2long(x+1, z)) / 2, (Tiles.tile2lat(y, z) + Tiles.tile2lat(y+1, z)) / 2]
+ }
+
+ static tile_index(z: number, x: number, y: number): number {
+ return ((x * (2 << z)) + y) * 100 + z
+ }
+ /**
+ * Given a tile index number, returns [z, x, y]
+ * @param index
+ * @returns 'zxy'
+ */
+ static tile_from_index(index: number): [number, number, number] {
+ const z = index % 100;
+ const factor = 2 << z
+ index = Math.floor(index / 100)
+ const x = Math.floor(index / factor)
+ return [z, x, index % factor]
+ }
+
+ /**
+ * Return x, y of the tile containing (lat, lon) on the given zoom level
+ */
+ static embedded_tile(lat: number, lon: number, z: number): { x: number, y: number, z: number } {
+ return {x: Tiles.lon2tile(lon, z), y: Tiles.lat2tile(lat, z), z: z}
+ }
+
+ static TileRangeBetween(zoomlevel: number, lat0: number, lon0: number, lat1: number, lon1: number): TileRange {
+ const t0 = Tiles.embedded_tile(lat0, lon0, zoomlevel)
+ const t1 = Tiles.embedded_tile(lat1, lon1, zoomlevel)
+
+ const xstart = Math.min(t0.x, t1.x)
+ const xend = Math.max(t0.x, t1.x)
+ const ystart = Math.min(t0.y, t1.y)
+ const yend = Math.max(t0.y, t1.y)
+ const total = (1 + xend - xstart) * (1 + yend - ystart)
+
+ return {
+ xstart: xstart,
+ xend: xend,
+ ystart: ystart,
+ yend: yend,
+ total: total,
+ zoomlevel: zoomlevel
+ }
+ }
+
}
\ No newline at end of file
diff --git a/UI/Base/ScrollableFullScreen.ts b/UI/Base/ScrollableFullScreen.ts
index 4a158ec0a..da8114f8c 100644
--- a/UI/Base/ScrollableFullScreen.ts
+++ b/UI/Base/ScrollableFullScreen.ts
@@ -36,6 +36,8 @@ export default class ScrollableFullScreen extends UIElement {
this._component = this.BuildComponent(title("desktop"), content("desktop"), isShown)
.SetClass("hidden md:block");
this._fullscreencomponent = this.BuildComponent(title("mobile"), content("mobile"), isShown);
+
+
const self = this;
isShown.addCallback(isShown => {
if (isShown) {
diff --git a/UI/Base/VariableUIElement.ts b/UI/Base/VariableUIElement.ts
index fbc3bb564..cf53daf10 100644
--- a/UI/Base/VariableUIElement.ts
+++ b/UI/Base/VariableUIElement.ts
@@ -2,22 +2,23 @@ import {UIEventSource} from "../../Logic/UIEventSource";
import BaseUIElement from "../BaseUIElement";
export class VariableUiElement extends BaseUIElement {
- private _element: HTMLElement;
+ private readonly _contents: UIEventSource;
- constructor(
- contents: UIEventSource
- ) {
+ constructor(contents: UIEventSource) {
super();
+ this._contents = contents;
- this._element = document.createElement("span");
- const el = this._element;
- contents.addCallbackAndRun((contents) => {
+ }
+
+ protected InnerConstructElement(): HTMLElement {
+ const el = document.createElement("span");
+ this._contents.addCallbackAndRun((contents) => {
while (el.firstChild) {
el.removeChild(el.lastChild);
}
if (contents === undefined) {
- return el;
+ return;
}
if (typeof contents === "string") {
el.innerHTML = contents;
@@ -35,9 +36,6 @@ export class VariableUiElement extends BaseUIElement {
}
}
});
- }
-
- protected InnerConstructElement(): HTMLElement {
- return this._element;
+ return el;
}
}
diff --git a/UI/BaseUIElement.ts b/UI/BaseUIElement.ts
index 99462acbd..a11db9319 100644
--- a/UI/BaseUIElement.ts
+++ b/UI/BaseUIElement.ts
@@ -100,8 +100,6 @@ export default abstract class BaseUIElement {
throw "ERROR! This is not a correct baseUIElement: " + this.constructor.name
}
try {
-
-
const el = this.InnerConstructElement();
if (el === undefined) {
diff --git a/UI/Image/Attribution.ts b/UI/Image/Attribution.ts
index 30040482f..9afd9b815 100644
--- a/UI/Image/Attribution.ts
+++ b/UI/Image/Attribution.ts
@@ -13,17 +13,16 @@ export default class Attribution extends VariableUiElement {
}
super(
license.map((license: LicenseInfo) => {
-
- if (license?.artist === undefined) {
- return undefined;
+ if(license === undefined){
+ return undefined
}
-
+
return new Combine([
icon?.SetClass("block left").SetStyle("height: 2em; width: 2em; padding-right: 0.5em;"),
new Combine([
- Translations.W(license.artist).SetClass("block font-bold"),
- Translations.W((license.license ?? "") === "" ? "CC0" : (license.license ?? ""))
+ Translations.W(license?.artist ?? ".").SetClass("block font-bold"),
+ Translations.W((license?.license ?? "") === "" ? "CC0" : (license?.license ?? ""))
]).SetClass("flex flex-col")
]).SetClass("flex flex-row bg-black text-white text-sm absolute bottom-0 left-0 p-0.5 pl-5 pr-3 rounded-lg")
diff --git a/UI/Image/DeleteImage.ts b/UI/Image/DeleteImage.ts
index a5ee19266..fe3f2cf09 100644
--- a/UI/Image/DeleteImage.ts
+++ b/UI/Image/DeleteImage.ts
@@ -48,7 +48,7 @@ export default class DeleteImage extends Toggle {
tags.map(tags => (tags[key] ?? "") !== "")
),
undefined /*Login (and thus editing) is disabled*/,
- State.state?.featureSwitchUserbadge ?? new UIEventSource(true)
+ State.state.osmConnection.isLoggedIn
)
this.SetClass("cursor-pointer")
}
diff --git a/UI/Input/LocationInput.ts b/UI/Input/LocationInput.ts
index a350e38d3..0621eccc8 100644
--- a/UI/Input/LocationInput.ts
+++ b/UI/Input/LocationInput.ts
@@ -9,7 +9,6 @@ import State from "../../State";
import AvailableBaseLayers from "../../Logic/Actors/AvailableBaseLayers";
import {BBox, GeoOperations} from "../../Logic/GeoOperations";
import ShowDataLayer from "../ShowDataLayer/ShowDataLayer";
-import * as L from "leaflet";
import ShowDataMultiLayer from "../ShowDataLayer/ShowDataMultiLayer";
import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource";
import LayerConfig from "../../Models/ThemeConfig/LayerConfig";
diff --git a/UI/Popup/EditableTagRendering.ts b/UI/Popup/EditableTagRendering.ts
index 4e5c313f5..4c5a13ea5 100644
--- a/UI/Popup/EditableTagRendering.ts
+++ b/UI/Popup/EditableTagRendering.ts
@@ -31,8 +31,10 @@ export default class EditableTagRendering extends Toggle {
const answerWithEditButton = new Combine([answer,
- new Toggle(editButton, undefined, State.state.osmConnection.isLoggedIn)])
- .SetClass("flex justify-between w-full")
+ new Toggle(editButton,
+ undefined,
+ State.state.osmConnection.isLoggedIn)
+ ]).SetClass("flex justify-between w-full")
const cancelbutton =
diff --git a/UI/Popup/SplitRoadWizard.ts b/UI/Popup/SplitRoadWizard.ts
index 01fb00d05..b1df0a5fa 100644
--- a/UI/Popup/SplitRoadWizard.ts
+++ b/UI/Popup/SplitRoadWizard.ts
@@ -71,7 +71,7 @@ export default class SplitRoadWizard extends Toggle {
})
new ShowDataMultiLayer({
- features: new StaticFeatureSource([roadElement]),
+ features: new StaticFeatureSource([roadElement], false),
layers: State.state.filteredLayers,
leafletMap: miniMap.leafletMap,
enablePopups: false,
diff --git a/UI/ShowDataLayer/PerTileCountAggregator.ts b/UI/ShowDataLayer/PerTileCountAggregator.ts
new file mode 100644
index 000000000..82e247f74
--- /dev/null
+++ b/UI/ShowDataLayer/PerTileCountAggregator.ts
@@ -0,0 +1,156 @@
+import FeatureSource, {FeatureSourceForLayer, Tiled} from "../../Logic/FeatureSource/FeatureSource";
+import {BBox} from "../../Logic/GeoOperations";
+import LayerConfig from "../../Models/ThemeConfig/LayerConfig";
+import {UIEventSource} from "../../Logic/UIEventSource";
+import {Tiles} from "../../Models/TileRange";
+
+
+/**
+ * A feature source containing meta features.
+ * It will contain exactly one point for every tile of the specified (dynamic) zoom level
+ */
+export default class PerTileCountAggregator implements FeatureSource {
+ public readonly features: UIEventSource<{ feature: any; freshness: Date }[]> = new UIEventSource<{ feature: any; freshness: Date }[]>([]);
+ public readonly name: string = "PerTileCountAggregator"
+
+ private readonly perTile: Map = new Map()
+ private readonly _requestedZoomLevel: UIEventSource;
+
+ constructor(requestedZoomLevel: UIEventSource) {
+ this._requestedZoomLevel = requestedZoomLevel;
+ const self = this;
+ this._requestedZoomLevel.addCallbackAndRun(_ => self.update())
+ }
+
+ private update() {
+ const now = new Date()
+ const allCountsAsFeatures : {feature: any, freshness: Date}[] = []
+ const aggregate = this.calculatePerTileCount()
+ aggregate.forEach((totalsPerLayer, tileIndex) => {
+ const totals = {}
+ let totalCount = 0
+ totalsPerLayer.forEach((total, layerId) => {
+ totals[layerId] = total
+ totalCount += total
+ })
+ totals["tileId"] = tileIndex
+ totals["count"] = totalCount
+ const feature = {
+ "type": "Feature",
+ "properties": totals,
+ "geometry": {
+ "type": "Point",
+ "coordinates": Tiles.centerPointOf(...Tiles.tile_from_index(tileIndex))
+ }
+ }
+ allCountsAsFeatures.push({feature: feature, freshness: now})
+
+ const bbox= BBox.fromTileIndex(tileIndex)
+ const box = {
+ "type": "Feature",
+ "properties":totals,
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [bbox.minLon, bbox.minLat],
+ [bbox.minLon, bbox.maxLat],
+ [bbox.maxLon, bbox.maxLat],
+ [bbox.maxLon, bbox.minLat],
+ [bbox.minLon, bbox.minLat]
+ ]
+ ]
+ }
+ }
+ allCountsAsFeatures.push({feature:box, freshness: now})
+ })
+ this.features.setData(allCountsAsFeatures)
+ }
+
+ /**
+ * Calculates an aggregate count per tile and per subtile
+ * @private
+ */
+ private calculatePerTileCount() {
+ const perTileCount = new Map>()
+ const targetZoom = this._requestedZoomLevel.data;
+ // We only search for tiles of the same zoomlevel or a higher zoomlevel, which is embedded
+ for (const singleTileCounter of Array.from(this.perTile.values())) {
+
+ let tileZ = singleTileCounter.z
+ let tileX = singleTileCounter.x
+ let tileY = singleTileCounter.y
+ if (tileZ < targetZoom) {
+ continue;
+ }
+
+ while (tileZ > targetZoom) {
+ tileX = Math.floor(tileX / 2)
+ tileY = Math.floor(tileY / 2)
+ tileZ--
+ }
+ const tileI = Tiles.tile_index(tileZ, tileX, tileY)
+ let counts = perTileCount.get(tileI)
+ if (counts === undefined) {
+ counts = new Map()
+ perTileCount.set(tileI, counts)
+ }
+ singleTileCounter.countsPerLayer.data.forEach((count, layerId) => {
+ if (counts.has(layerId)) {
+ counts.set(layerId, count + counts.get(layerId))
+ } else {
+ counts.set(layerId, count)
+ }
+ })
+ }
+ return perTileCount;
+ }
+
+ public addTile(tile: FeatureSourceForLayer & Tiled, shouldBeCounted: UIEventSource) {
+ let counter = this.perTile.get(tile.tileIndex)
+ if (counter === undefined) {
+ counter = new SingleTileCounter(tile.tileIndex)
+ this.perTile.set(tile.tileIndex, counter)
+ // We do **NOT** add a callback on the perTile index, even though we could! It'll update just fine without it
+ }
+ counter.addTileCount(tile, shouldBeCounted)
+ }
+
+
+}
+
+/**
+ * Keeps track of a single tile
+ */
+class SingleTileCounter implements Tiled {
+ public readonly bbox: BBox;
+ public readonly tileIndex: number;
+ public readonly countsPerLayer: UIEventSource
{histogram(_length_hist)}"
+ },
+ "Rock type (crag/rock/cliff only)": {
"mappings": {
"0": {
- "then": "This climbing opportunity doesn't have a name"
+ "then": "Limestone"
}
},
- "question": "What is the name of this climbing opportunity?",
- "render": "{name}"
+ "question": "What is the rock type here?",
+ "render": "The rock type is {rock}"
},
- "7": {
+ "Type": {
"mappings": {
"0": {
"then": "A climbing boulder - a single rock or cliff with one or a few climbing routes which can be climbed safely without rope"
@@ -471,14 +375,14 @@
}
}
},
- "8": {
+ "name": {
"mappings": {
"0": {
- "then": "Limestone"
+ "then": "This climbing opportunity doesn't have a name"
}
},
- "question": "What is the rock type here?",
- "render": "The rock type is {rock}"
+ "question": "What is the name of this climbing opportunity?",
+ "render": "{name}"
}
},
"title": {
@@ -499,14 +403,110 @@
"render": "Climbing opportunity"
}
},
- "4": {
+ "climbing_club": {
+ "description": "A climbing club or organisations",
+ "name": "Climbing club",
+ "presets": {
+ "0": {
+ "description": "A climbing club",
+ "title": "Climbing club"
+ },
+ "1": {
+ "description": "A NGO working around climbing",
+ "title": "Climbing NGO"
+ }
+ },
+ "tagRenderings": {
+ "climbing_club-name": {
+ "question": "What is the name of this climbing club or NGO?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Climbing NGO"
+ }
+ },
+ "render": "Climbing club"
+ }
+ },
+ "climbing_gym": {
+ "description": "A climbing gym",
+ "name": "Climbing gyms",
+ "tagRenderings": {
+ "name": {
+ "question": "What is the name of this climbing gym?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Climbing gym {name}"
+ }
+ },
+ "render": "Climbing gym"
+ }
+ },
+ "climbing_route": {
+ "name": "Climbing routes",
+ "presets": {
+ "0": {
+ "title": "Climbing route"
+ }
+ },
+ "tagRenderings": {
+ "Bolts": {
+ "mappings": {
+ "0": {
+ "then": "This route is not bolted"
+ },
+ "1": {
+ "then": "This route is not bolted"
+ }
+ },
+ "question": "How much bolts does this route have before reaching the moulinette?",
+ "render": "This route has {climbing:bolts} bolts"
+ },
+ "Difficulty": {
+ "question": "What is the difficulty of this climbing route according to the french/belgian system?",
+ "render": "The difficulty is {climbing:grade:french} according to the french/belgian system"
+ },
+ "Length": {
+ "question": "How long is this climbing route (in meters)?",
+ "render": "This route is {canonical(climbing:length)} long"
+ },
+ "Name": {
+ "mappings": {
+ "0": {
+ "then": "This climbing route doesn't have a name"
+ }
+ },
+ "question": "What is the name of this climbing route?",
+ "render": "{name}"
+ },
+ "Rock type": {
+ "render": "The rock type is {_embedding_features_with_rock:rock} as stated on the surrounding crag"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Climbing route {name}"
+ }
+ },
+ "render": "Climbing route"
+ }
+ },
+ "maybe_climbing": {
"description": "A climbing opportunity?",
"name": "Climbing opportunities?",
"tagRenderings": {
- "1": {
+ "climbing-opportunity-name": {
"render": "{name}"
},
- "2": {
+ "climbing-possible": {
"mappings": {
"0": {
"then": "Climbing is not possible here"
@@ -668,7 +668,7 @@
"cycle_highways": {
"description": "This map shows cycle highways",
"layers": {
- "0": {
+ "cycle_highways": {
"name": "cycle highways",
"title": {
"render": "cycle highway"
@@ -685,11 +685,18 @@
"cyclestreets": {
"description": "A cyclestreet is is a street where motorized traffic is not allowed to overtake cyclists. They are signposted by a special traffic sign. Cyclestreets can be found in the Netherlands and Belgium, but also in Germany and France. ",
"layers": {
- "0": {
+ "all_streets": {
+ "description": "Layer to mark any street as cyclestreet",
+ "name": "All streets",
+ "title": {
+ "render": "Street"
+ }
+ },
+ "fietsstraat": {
"description": "A cyclestreet is a street where motorized traffic is not allowed to overtake a cyclist",
"name": "Cyclestreets"
},
- "1": {
+ "toekomstige_fietsstraat": {
"description": "This street will become a cyclestreet soon",
"name": "Future cyclestreet",
"title": {
@@ -700,13 +707,6 @@
},
"render": "Future cyclestreet"
}
- },
- "2": {
- "description": "Layer to mark any street as cyclestreet",
- "name": "All streets",
- "title": {
- "render": "Street"
- }
}
},
"roamingRenderings": {
@@ -746,7 +746,7 @@
"facadegardens": {
"description": "Facade gardens, green facades and trees in the city not only bring peace and quiet, but also a more beautiful city, greater biodiversity, a cooling effect and better air quality. Klimaan VZW and Mechelen Klimaatneutraal want to map existing and new facade gardens as an example for people who want to build their own garden or for city walkers who love nature. More info about the project at klimaan.be.",
"layers": {
- "0": {
+ "facadegardens": {
"description": "Facade gardens",
"name": "Facade gardens",
"presets": {
@@ -756,40 +756,15 @@
}
},
"tagRenderings": {
- "1": {
+ "facadegardens-description": {
+ "question": "Extra describing info about the garden (if needed and not yet described above)",
+ "render": "More details: {description}"
+ },
+ "facadegardens-direction": {
"question": "What is the orientation of the garden?",
"render": "Orientation: {direction} (where 0=N and 90=O)"
},
- "2": {
- "mappings": {
- "0": {
- "then": "The garden is in full sun"
- },
- "1": {
- "then": "The garden is in partial shade"
- },
- "2": {
- "then": "The garden is in the shade"
- }
- },
- "question": "Is the garden shaded or sunny?"
- },
- "3": {
- "mappings": {
- "0": {
- "then": "There is a rain barrel"
- },
- "1": {
- "then": "There is no rain barrel"
- }
- },
- "question": "Is there a water barrel installed for the garden?"
- },
- "4": {
- "question": "When was the garden constructed? (a year is sufficient)",
- "render": "Construction date of the garden: {start_date}"
- },
- "5": {
+ "facadegardens-edible": {
"mappings": {
"0": {
"then": "There are edible plants"
@@ -800,7 +775,7 @@
},
"question": "Are there any edible plants?"
},
- "6": {
+ "facadegardens-plants": {
"mappings": {
"0": {
"then": "There are vines"
@@ -817,9 +792,34 @@
},
"question": "What kinds of plants grow here?"
},
- "7": {
- "question": "Extra describing info about the garden (if needed and not yet described above)",
- "render": "More details: {description}"
+ "facadegardens-rainbarrel": {
+ "mappings": {
+ "0": {
+ "then": "There is a rain barrel"
+ },
+ "1": {
+ "then": "There is no rain barrel"
+ }
+ },
+ "question": "Is there a water barrel installed for the garden?"
+ },
+ "facadegardens-start_date": {
+ "question": "When was the garden constructed? (a year is sufficient)",
+ "render": "Construction date of the garden: {start_date}"
+ },
+ "facadegardens-sunshine": {
+ "mappings": {
+ "0": {
+ "then": "The garden is in full sun"
+ },
+ "1": {
+ "then": "The garden is in partial shade"
+ },
+ "2": {
+ "then": "The garden is in the shade"
+ }
+ },
+ "question": "Is the garden shaded or sunny?"
}
},
"title": {
@@ -836,7 +836,7 @@
"fritures": {
"layers": {
"0": {
- "override": {
+ "friture": {
"name": "Fries shop"
}
}
@@ -849,7 +849,7 @@
"hackerspaces": {
"description": "On this map you can see hackerspaces, add a new hackerspace or update data directly",
"layers": {
- "0": {
+ "hackerspaces": {
"description": "Hackerspace",
"icon": {
"mappings": {
@@ -870,22 +870,11 @@
}
},
"tagRenderings": {
- "0": {
- "mappings": {
- "0": {
- "then": "This is a makerspace"
- },
- "1": {
- "then": "This is a traditional (software oriented) hackerspace"
- }
- },
- "question": "Is this a hackerspace or a makerspace?"
- },
- "1": {
+ "hackerspaces-name": {
"question": "What is the name of this hackerspace?",
"render": "This hackerspace is named {name}"
},
- "5": {
+ "hackerspaces-opening_hours": {
"mappings": {
"0": {
"then": "Opened 24/7"
@@ -894,7 +883,11 @@
"question": "When is this hackerspace opened?",
"render": "{opening_hours_table()}"
},
- "7": {
+ "hackerspaces-start_date": {
+ "question": "When was this hackerspace founded?",
+ "render": "This hackerspace was founded at {start_date}"
+ },
+ "hs-club-mate": {
"mappings": {
"0": {
"then": "This hackerspace serves club mate"
@@ -905,9 +898,16 @@
},
"question": "Does this hackerspace serve Club Mate?"
},
- "8": {
- "question": "When was this hackerspace founded?",
- "render": "This hackerspace was founded at {start_date}"
+ "is_makerspace": {
+ "mappings": {
+ "0": {
+ "then": "This is a makerspace"
+ },
+ "1": {
+ "then": "This is a traditional (software oriented) hackerspace"
+ }
+ },
+ "question": "Is this a hackerspace or a makerspace?"
}
},
"title": {
@@ -926,7 +926,137 @@
"hailhydrant": {
"description": "On this map you can find and update hydrants, fire stations, ambulance stations, and extinguishers in your favorite neighborhoods. \n\nYou can track your precise location (mobile only) and select layers that are relevant for you in the bottom left corner. You can also use this tool to add or edit pins (points of interest) to the map and provide additional details by answering available questions. \n\nAll changes you make will automatically be saved in the global database of OpenStreetMap and can be freely re-used by others.",
"layers": {
- "0": {
+ "ambulancestation": {
+ "description": "An ambulance station is an area for storage of ambulance vehicles, medical equipment, personal protective equipment, and other medical supplies.",
+ "name": "Map of ambulance stations",
+ "presets": {
+ "0": {
+ "description": "Add an ambulance station to the map",
+ "title": "Ambulance station"
+ }
+ },
+ "tagRenderings": {
+ "ambulance-agency": {
+ "question": "What agency operates this station?",
+ "render": "This station is operated by {operator}."
+ },
+ "ambulance-name": {
+ "question": "What is the name of this ambulance station?",
+ "render": "This station is called {name}."
+ },
+ "ambulance-operator-type": {
+ "mappings": {
+ "0": {
+ "then": "The station is operated by the government."
+ },
+ "1": {
+ "then": "The station is operated by a community-based, or informal organization."
+ },
+ "2": {
+ "then": "The station is operated by a formal group of volunteers."
+ },
+ "3": {
+ "then": "The station is privately operated."
+ }
+ },
+ "question": "How is the station operator classified?",
+ "render": "The operator is a(n) {operator:type} entity."
+ },
+ "ambulance-place": {
+ "question": "Where is the station located? (e.g. name of neighborhood, villlage, or town)",
+ "render": "This station is found within {addr:place}."
+ },
+ "ambulance-street": {
+ "question": " What is the street name where the station located?",
+ "render": "This station is along a highway called {addr:street}."
+ }
+ },
+ "title": {
+ "render": "Ambulance Station"
+ }
+ },
+ "extinguisher": {
+ "description": "Map layer to show fire hydrants.",
+ "name": "Map of fire extinguishers.",
+ "presets": {
+ "0": {
+ "description": "A fire extinguisher is a small, portable device used to stop a fire",
+ "title": "Fire extinguisher"
+ }
+ },
+ "tagRenderings": {
+ "extinguisher-location": {
+ "mappings": {
+ "0": {
+ "then": "Found indoors."
+ },
+ "1": {
+ "then": "Found outdoors."
+ }
+ },
+ "question": "Where is it positioned?",
+ "render": "Location: {location}"
+ }
+ },
+ "title": {
+ "render": "Extinguishers"
+ }
+ },
+ "fire_stations": {
+ "description": "Map layer to show fire stations.",
+ "name": "Map of fire stations",
+ "presets": {
+ "0": {
+ "description": "A fire station is a place where the fire trucks and firefighters are located when not in operation.",
+ "title": "Fire station"
+ }
+ },
+ "tagRenderings": {
+ "station-agency": {
+ "mappings": {
+ "0": {
+ "then": "Bureau of Fire Protection"
+ }
+ },
+ "question": "What agency operates this station?",
+ "render": "This station is operated by {operator}."
+ },
+ "station-name": {
+ "question": "What is the name of this fire station?",
+ "render": "This station is called {name}."
+ },
+ "station-operator": {
+ "mappings": {
+ "0": {
+ "then": "The station is operated by the government."
+ },
+ "1": {
+ "then": "The station is operated by a community-based, or informal organization."
+ },
+ "2": {
+ "then": "The station is operated by a formal group of volunteers."
+ },
+ "3": {
+ "then": "The station is privately operated."
+ }
+ },
+ "question": "How is the station operator classified?",
+ "render": "The operator is a(n) {operator:type} entity."
+ },
+ "station-place": {
+ "question": "Where is the station located? (e.g. name of neighborhood, villlage, or town)",
+ "render": "This station is found within {addr:place}."
+ },
+ "station-street": {
+ "question": " What is the street name where the station located?",
+ "render": "This station is along a highway called {addr:street}."
+ }
+ },
+ "title": {
+ "render": "Fire Station"
+ }
+ },
+ "hydrants": {
"description": "Map layer to show fire hydrants.",
"name": "Map of hydrants",
"presets": {
@@ -936,7 +1066,7 @@
}
},
"tagRenderings": {
- "0": {
+ "hydrant-color": {
"mappings": {
"0": {
"then": "The hydrant color is unknown."
@@ -951,7 +1081,22 @@
"question": "What color is the hydrant?",
"render": "The hydrant color is {colour}"
},
- "1": {
+ "hydrant-state": {
+ "mappings": {
+ "0": {
+ "then": "The hydrant is (fully or partially) working."
+ },
+ "1": {
+ "then": "The hydrant is unavailable."
+ },
+ "2": {
+ "then": "The hydrant has been removed."
+ }
+ },
+ "question": "Update the lifecycle status of the hydrant.",
+ "render": "Lifecycle status"
+ },
+ "hydrant-type": {
"mappings": {
"0": {
"then": "The hydrant type is unknown."
@@ -971,156 +1116,11 @@
},
"question": "What type of hydrant is it?",
"render": " Hydrant type: {fire_hydrant:type}"
- },
- "2": {
- "mappings": {
- "0": {
- "then": "The hydrant is (fully or partially) working."
- },
- "1": {
- "then": "The hydrant is unavailable."
- },
- "2": {
- "then": "The hydrant has been removed."
- }
- },
- "question": "Update the lifecycle status of the hydrant.",
- "render": "Lifecycle status"
}
},
"title": {
"render": "Hydrant"
}
- },
- "1": {
- "description": "Map layer to show fire hydrants.",
- "name": "Map of fire extinguishers.",
- "presets": {
- "0": {
- "description": "A fire extinguisher is a small, portable device used to stop a fire",
- "title": "Fire extinguisher"
- }
- },
- "tagRenderings": {
- "0": {
- "mappings": {
- "0": {
- "then": "Found indoors."
- },
- "1": {
- "then": "Found outdoors."
- }
- },
- "question": "Where is it positioned?",
- "render": "Location: {location}"
- }
- },
- "title": {
- "render": "Extinguishers"
- }
- },
- "2": {
- "description": "Map layer to show fire stations.",
- "name": "Map of fire stations",
- "presets": {
- "0": {
- "description": "A fire station is a place where the fire trucks and firefighters are located when not in operation.",
- "title": "Fire station"
- }
- },
- "tagRenderings": {
- "0": {
- "question": "What is the name of this fire station?",
- "render": "This station is called {name}."
- },
- "1": {
- "question": " What is the street name where the station located?",
- "render": "This station is along a highway called {addr:street}."
- },
- "2": {
- "question": "Where is the station located? (e.g. name of neighborhood, villlage, or town)",
- "render": "This station is found within {addr:place}."
- },
- "3": {
- "mappings": {
- "0": {
- "then": "Bureau of Fire Protection"
- }
- },
- "question": "What agency operates this station?",
- "render": "This station is operated by {operator}."
- },
- "4": {
- "mappings": {
- "0": {
- "then": "The station is operated by the government."
- },
- "1": {
- "then": "The station is operated by a community-based, or informal organization."
- },
- "2": {
- "then": "The station is operated by a formal group of volunteers."
- },
- "3": {
- "then": "The station is privately operated."
- }
- },
- "question": "How is the station operator classified?",
- "render": "The operator is a(n) {operator:type} entity."
- }
- },
- "title": {
- "render": "Fire Station"
- }
- },
- "3": {
- "description": "An ambulance station is an area for storage of ambulance vehicles, medical equipment, personal protective equipment, and other medical supplies.",
- "name": "Map of ambulance stations",
- "presets": {
- "0": {
- "description": "Add an ambulance station to the map",
- "title": "Ambulance station"
- }
- },
- "tagRenderings": {
- "0": {
- "question": "What is the name of this ambulance station?",
- "render": "This station is called {name}."
- },
- "1": {
- "question": " What is the street name where the station located?",
- "render": "This station is along a highway called {addr:street}."
- },
- "2": {
- "question": "Where is the station located? (e.g. name of neighborhood, villlage, or town)",
- "render": "This station is found within {addr:place}."
- },
- "3": {
- "question": "What agency operates this station?",
- "render": "This station is operated by {operator}."
- },
- "4": {
- "mappings": {
- "0": {
- "then": "The station is operated by the government."
- },
- "1": {
- "then": "The station is operated by a community-based, or informal organization."
- },
- "2": {
- "then": "The station is operated by a formal group of volunteers."
- },
- "3": {
- "then": "The station is privately operated."
- }
- },
- "question": "How is the station operator classified?",
- "render": "The operator is a(n) {operator:type} entity."
- }
- },
- "title": {
- "render": "Ambulance Station"
- }
}
},
"shortDescription": "Map to show hydrants, extinguishers, fire stations, and ambulance stations.",
@@ -1144,7 +1144,7 @@
"openwindpowermap": {
"description": "A map for showing and editing wind turbines.",
"layers": {
- "0": {
+ "windturbine": {
"name": "wind turbine",
"presets": {
"0": {
@@ -1152,23 +1152,23 @@
}
},
"tagRenderings": {
- "0": {
- "question": "What is the power output of this wind turbine? (e.g. 2.3 MW)",
- "render": "The power output of this wind turbine is {generator:output:electricity}."
- },
- "1": {
- "question": "Who operates this wind turbine?",
- "render": "This wind turbine is operated by {operator}."
- },
- "2": {
- "question": "What is the total height of this wind turbine (including rotor radius), in metres?",
- "render": "The total height (including rotor radius) of this wind turbine is {height} metres."
- },
- "3": {
+ "turbine-diameter": {
"question": "What is the rotor diameter of this wind turbine, in metres?",
"render": "The rotor diameter of this wind turbine is {rotor:diameter} metres."
},
- "4": {
+ "turbine-height": {
+ "question": "What is the total height of this wind turbine (including rotor radius), in metres?",
+ "render": "The total height (including rotor radius) of this wind turbine is {height} metres."
+ },
+ "turbine-operator": {
+ "question": "Who operates this wind turbine?",
+ "render": "This wind turbine is operated by {operator}."
+ },
+ "turbine-output": {
+ "question": "What is the power output of this wind turbine? (e.g. 2.3 MW)",
+ "render": "The power output of this wind turbine is {generator:output:electricity}."
+ },
+ "turbine-start-date": {
"question": "When did this wind turbine go into operation?",
"render": "This wind turbine went into operation on/in {start_date}."
}
@@ -1227,7 +1227,7 @@
"shops": {
"description": "On this map, one can mark basic information about shops, add opening hours and phone numbers",
"layers": {
- "0": {
+ "shops": {
"description": "A shop",
"name": "Shop",
"presets": {
@@ -1237,10 +1237,22 @@
}
},
"tagRenderings": {
- "1": {
+ "shops-email": {
+ "question": "What is the email address of this shop?",
+ "render": "{email}"
+ },
+ "shops-name": {
"question": "What is the name of this shop?"
},
- "2": {
+ "shops-opening_hours": {
+ "question": "What are the opening hours of this shop?",
+ "render": "{opening_hours_table(opening_hours)}"
+ },
+ "shops-phone": {
+ "question": "What is the phone number?",
+ "render": "{phone}"
+ },
+ "shops-shop": {
"mappings": {
"0": {
"then": "Convenience store"
@@ -1267,21 +1279,9 @@
"question": "What does this shop sell?",
"render": "This shop sells {shop}"
},
- "3": {
- "question": "What is the phone number?",
- "render": "{phone}"
- },
- "4": {
+ "shops-website": {
"question": "What is the website of this shop?",
"render": "{website}"
- },
- "5": {
- "question": "What is the email address of this shop?",
- "render": "{email}"
- },
- "6": {
- "question": "What are the opening hours of this shop?",
- "render": "{opening_hours_table(opening_hours)}"
}
},
"title": {
diff --git a/langs/themes/es.json b/langs/themes/es.json
index 158b8b000..3b31ed8c4 100644
--- a/langs/themes/es.json
+++ b/langs/themes/es.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "Bienvenido a Open Artwork Map, un mapa de estatuas, bustos, grafitis y otras obras de arte de todo el mundo",
"layers": {
- "0": {
+ "artwork": {
"description": "Diversas piezas de obras de arte",
"name": "Obras de arte",
"presets": {
@@ -15,7 +15,7 @@
}
},
"tagRenderings": {
- "1": {
+ "artwork-artwork_type": {
"question": "Cuál es el tipo de esta obra de arte?",
"render": "Esta es un {artwork_type}"
}
diff --git a/langs/themes/fr.json b/langs/themes/fr.json
index c30ac520b..83ab9d4ce 100644
--- a/langs/themes/fr.json
+++ b/langs/themes/fr.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "Bienvenue sur la carte ouverte des œuvres d'art, une carte des statues, fresques, ... du monde entier",
"layers": {
- "0": {
+ "artwork": {
"description": "Diverses œuvres d'art",
"name": "Œuvres d'art",
"presets": {
@@ -15,7 +15,11 @@
}
},
"tagRenderings": {
- "1": {
+ "artwork-artist_name": {
+ "question": "Quel artiste a créé cette œuvre ?",
+ "render": "Créé par {artist_name}"
+ },
+ "artwork-artwork_type": {
"mappings": {
"0": {
"then": "Architecture"
@@ -57,15 +61,11 @@
"question": "Quel est le type de cette œuvre d'art?",
"render": "Type d'œuvre : {artwork_type}"
},
- "2": {
- "question": "Quel artiste a créé cette œuvre ?",
- "render": "Créé par {artist_name}"
- },
- "3": {
+ "artwork-website": {
"question": "Existe-t-il un site web où trouver plus d'informations sur cette œuvre d'art ?",
"render": "Plus d'info sûr ce site web"
},
- "4": {
+ "artwork-wikidata": {
"question": "Quelle entrée Wikidata correspond à cette œuvre d'art ?",
"render": "Correspond à {wikidata}"
}
@@ -98,7 +98,7 @@
"campersite": {
"description": "Ce site collecte les zones de camping officielles ainsi que les aires de vidange. Il est possible d’ajouter des détails à propos des services proposés ainsi que leurs coûts. Ajoutez vos images et avis. C’est un site et une application. Les données sont stockées sur OpenStreetMap, elles seront toujours gratuites et peuvent être réutilisées par n’importe quelle application.",
"layers": {
- "0": {
+ "caravansites": {
"description": "campings",
"name": "Campings",
"presets": {
@@ -108,11 +108,19 @@
}
},
"tagRenderings": {
- "1": {
- "question": "Comment s'appelle cet endroit ?",
- "render": "Cet endroit s'appelle {nom}"
+ "caravansites-capacity": {
+ "question": "Combien de personnes peuvent camper ici ? (Passez s’il n’y a pas de places délimitées)",
+ "render": "{capacity} personnes peuvent utiliser cet espace en même temps"
},
- "2": {
+ "caravansites-charge": {
+ "question": "Combien coûte cet endroit ?",
+ "render": "Ce site fait payer {charge}"
+ },
+ "caravansites-description": {
+ "question": "Souhaitez-vous ajouter une description générale du lieu ? (Ne pas répéter les informations précédentes et rester neutre, les opinions vont dans les avis)",
+ "render": "Plus de détails à propos du site : {description}"
+ },
+ "caravansites-fee": {
"mappings": {
"0": {
"then": "L’utilisation est payante"
@@ -123,26 +131,7 @@
},
"question": "Cet endroit est-il payant ?"
},
- "3": {
- "question": "Combien coûte cet endroit ?",
- "render": "Ce site fait payer {charge}"
- },
- "4": {
- "mappings": {
- "0": {
- "then": "Cet endroit a une station de vidange sanitaire"
- },
- "1": {
- "then": "Ce site ne possède pas de lieu de vidange"
- }
- },
- "question": "Ce site possède-t’il un lieu de vidange ?"
- },
- "5": {
- "question": "Combien de personnes peuvent camper ici ? (Passez s’il n’y a pas de places délimitées)",
- "render": "{capacity} personnes peuvent utiliser cet espace en même temps"
- },
- "6": {
+ "caravansites-internet": {
"mappings": {
"0": {
"then": "Il y a un accès internet"
@@ -156,7 +145,7 @@
},
"question": "Cet endroit offre-t-il un accès à Internet ?"
},
- "7": {
+ "caravansites-internet-fee": {
"mappings": {
"0": {
"then": "L’accès internet est en supplément"
@@ -167,22 +156,7 @@
},
"question": "L’accès internet est-il payant ?"
},
- "8": {
- "mappings": {
- "0": {
- "then": "Ce site a des toilettes"
- },
- "1": {
- "then": "Ce site n’a pas de toilettes"
- }
- },
- "question": "Y-a-t’il des toilettes sur le site ?"
- },
- "9": {
- "question": "Ce lieu a-t’il un site internet ?",
- "render": "Site officiel : {website}"
- },
- "10": {
+ "caravansites-long-term": {
"mappings": {
"0": {
"then": "Oui, mais il est possible d’y passer seulement une nuit"
@@ -196,9 +170,35 @@
},
"question": "Ce site permet-il la location longue durée ?"
},
- "11": {
- "question": "Souhaitez-vous ajouter une description générale du lieu ? (Ne pas répéter les informations précédentes et rester neutre, les opinions vont dans les avis)",
- "render": "Plus de détails à propos du site : {description}"
+ "caravansites-name": {
+ "question": "Comment s'appelle cet endroit ?",
+ "render": "Cet endroit s'appelle {nom}"
+ },
+ "caravansites-sanitary-dump": {
+ "mappings": {
+ "0": {
+ "then": "Cet endroit a une station de vidange sanitaire"
+ },
+ "1": {
+ "then": "Ce site ne possède pas de lieu de vidange"
+ }
+ },
+ "question": "Ce site possède-t’il un lieu de vidange ?"
+ },
+ "caravansites-toilets": {
+ "mappings": {
+ "0": {
+ "then": "Ce site a des toilettes"
+ },
+ "1": {
+ "then": "Ce site n’a pas de toilettes"
+ }
+ },
+ "question": "Y-a-t’il des toilettes sur le site ?"
+ },
+ "caravansites-website": {
+ "question": "Ce lieu a-t’il un site internet ?",
+ "render": "Site officiel : {website}"
}
},
"title": {
@@ -210,7 +210,7 @@
"render": "Camping {name}"
}
},
- "1": {
+ "dumpstations": {
"description": "Site de vidange",
"name": "Site de vidange",
"presets": {
@@ -220,55 +220,7 @@
}
},
"tagRenderings": {
- "1": {
- "mappings": {
- "0": {
- "then": "Ce site demande un paiement"
- },
- "1": {
- "then": "Ce site ne demande pas de paiement"
- }
- },
- "question": "Ce site est-il payant ?"
- },
- "2": {
- "question": "Combien ce site demande t’il de payer ?",
- "render": "Ce site fait payer {charge}"
- },
- "3": {
- "mappings": {
- "0": {
- "then": "Ce site a un point d’eau"
- },
- "1": {
- "then": "Ce site n’a pas de point d’eau"
- }
- },
- "question": "Ce site dispose-t’il d’un point d’eau ?"
- },
- "4": {
- "mappings": {
- "0": {
- "then": "Il est possible d’y vidanger ses eaux usées"
- },
- "1": {
- "then": "Il n’est pas possible d’y vidanger ses eaux usées"
- }
- },
- "question": "Est-il possible d’y faire sa vidange des eaux usées ?"
- },
- "5": {
- "mappings": {
- "0": {
- "then": "Il est possible d’y vidanger ses toilettes chimiques"
- },
- "1": {
- "then": "Il n’est pas possible d’y vidanger ses toilettes chimiques"
- }
- },
- "question": "Est-il possible d’y vidanger ses toilettes chimiques ?"
- },
- "6": {
+ "dumpstations-access": {
"mappings": {
"0": {
"then": "Un code est nécessaire"
@@ -285,9 +237,57 @@
},
"question": "Qui peut utiliser le site de vidange ?"
},
- "7": {
+ "dumpstations-charge": {
+ "question": "Combien ce site demande t’il de payer ?",
+ "render": "Ce site fait payer {charge}"
+ },
+ "dumpstations-chemical-waste": {
+ "mappings": {
+ "0": {
+ "then": "Il est possible d’y vidanger ses toilettes chimiques"
+ },
+ "1": {
+ "then": "Il n’est pas possible d’y vidanger ses toilettes chimiques"
+ }
+ },
+ "question": "Est-il possible d’y vidanger ses toilettes chimiques ?"
+ },
+ "dumpstations-fee": {
+ "mappings": {
+ "0": {
+ "then": "Ce site demande un paiement"
+ },
+ "1": {
+ "then": "Ce site ne demande pas de paiement"
+ }
+ },
+ "question": "Ce site est-il payant ?"
+ },
+ "dumpstations-grey-water": {
+ "mappings": {
+ "0": {
+ "then": "Il est possible d’y vidanger ses eaux usées"
+ },
+ "1": {
+ "then": "Il n’est pas possible d’y vidanger ses eaux usées"
+ }
+ },
+ "question": "Est-il possible d’y faire sa vidange des eaux usées ?"
+ },
+ "dumpstations-network": {
"question": "De quel réseau fait-elle partie ? (Passer si aucun)",
"render": "Cette station fait parte d’un réseau {network}"
+ },
+ "dumpstations-waterpoint": {
+ "mappings": {
+ "0": {
+ "then": "Ce site a un point d’eau"
+ },
+ "1": {
+ "then": "Ce site n’a pas de point d’eau"
+ }
+ },
+ "question": "Ce site dispose-t’il d’un point d’eau ?"
}
},
"title": {
@@ -324,103 +324,7 @@
"description": "Cette carte indique les sites d’escalades comme les salles d’escalade ou les sites naturels.",
"descriptionTail": "La carte a été créée par Christian Neumann. Merci de le contacter pour des avis ou des questions.
{histogram(_length_hist)}"
+ },
+ "Rock type (crag/rock/cliff only)": {
"mappings": {
"0": {
- "then": "Ce site n’a pas de nom"
+ "then": "Calcaire"
}
},
- "question": "Quel est le nom de ce site ?",
- "render": "{name}"
+ "question": "Quel est le type de roche ?",
+ "render": "La roche est du {rock}"
},
- "7": {
+ "Type": {
"mappings": {
"0": {
"then": "Rocher d’escalade, rocher avec une ou peu de voie permettant d’escalader sans corde"
@@ -458,14 +362,14 @@
}
}
},
- "8": {
+ "name": {
"mappings": {
"0": {
- "then": "Calcaire"
+ "then": "Ce site n’a pas de nom"
}
},
- "question": "Quel est le type de roche ?",
- "render": "La roche est du {rock}"
+ "question": "Quel est le nom de ce site ?",
+ "render": "{name}"
}
},
"title": {
@@ -486,14 +390,110 @@
"render": "Opportunité d’escalade"
}
},
- "4": {
+ "climbing_club": {
+ "description": "Club ou association d’escalade",
+ "name": "Club d’escalade",
+ "presets": {
+ "0": {
+ "description": "Un club d’escalade",
+ "title": "Club d’escalade"
+ },
+ "1": {
+ "description": "Une association d’escalade",
+ "title": "Association d’escalade"
+ }
+ },
+ "tagRenderings": {
+ "climbing_club-name": {
+ "question": "Quel est le nom du club ou de l’association ?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Association d’escalade"
+ }
+ },
+ "render": "Club d’escalade"
+ }
+ },
+ "climbing_gym": {
+ "description": "Une salle d’escalade",
+ "name": "Salle d’escalade",
+ "tagRenderings": {
+ "name": {
+ "question": "Quel est le nom de la salle d’escalade ?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Salle d’escalade {name}"
+ }
+ },
+ "render": "Salle d’escalade"
+ }
+ },
+ "climbing_route": {
+ "name": "Voies d’escalade",
+ "presets": {
+ "0": {
+ "title": "Voie d’escalade"
+ }
+ },
+ "tagRenderings": {
+ "Bolts": {
+ "mappings": {
+ "0": {
+ "then": "Cette voie n’a pas de prises"
+ },
+ "1": {
+ "then": "Cette voie n’a pas de prises"
+ }
+ },
+ "question": "Combien de prises cette voie possède avant d’atteindre la moulinette ?",
+ "render": "Cette voie a {climbing:bolts} prises"
+ },
+ "Difficulty": {
+ "question": "Quelle est la difficulté de cette voie selon le système franco-belge ?",
+ "render": "Selon le système franco-belge, la difficulté de cette voie est de {climbing:grade:french}"
+ },
+ "Length": {
+ "question": "Quelle est la longueur de cette voie (en mètres) ?",
+ "render": "Cette voie fait {canonical(climbing:length)} de long"
+ },
+ "Name": {
+ "mappings": {
+ "0": {
+ "then": "Cette voie n’a pas de nom"
+ }
+ },
+ "question": "Quel est le nom de cette voie d’escalade ?",
+ "render": "{name}"
+ },
+ "Rock type": {
+ "render": "Le type de roche est {_embedding_features_with_rock:rock} selon le mur"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Voie d’escalade {name}"
+ }
+ },
+ "render": "Voie d’escalade"
+ }
+ },
+ "maybe_climbing": {
"description": "Opportunité d’escalade ?",
"name": "Opportunités d’escalade ?",
"tagRenderings": {
- "1": {
+ "climbing-opportunity-name": {
"render": "{name}"
},
- "2": {
+ "climbing-possible": {
"mappings": {
"0": {
"then": "Escalader n’est pas possible"
@@ -621,7 +621,7 @@
"facadegardens": {
"description": "Les jardins muraux en ville n’apportent pas seulement paix et tranquillité mais contribuent à embellir la ville, favoriser la biodiversité, régule la température et assainit l’air. Klimaan VZW et Mechelen Klimaatneutraal veulent cartographier les jardins muraux comme exemple pour les personnes souhaitant en construire ainsi que celles aimant la nature. Plus d’infos sur klimaan.be.",
"layers": {
- "0": {
+ "facadegardens": {
"description": "Jardins muraux",
"name": "Jardins muraux",
"presets": {
@@ -631,40 +631,15 @@
}
},
"tagRenderings": {
- "1": {
+ "facadegardens-description": {
+ "question": "Détails supplémentaires sur le jardin (si nécessaire et non décrit précédemment)",
+ "render": "Plus de détails : {description}"
+ },
+ "facadegardens-direction": {
"question": "Quelle est l’orientation du jardin ?",
"render": "Orientation : {direction} (0 pour le Nord et 90 pour l’Ouest)"
},
- "2": {
- "mappings": {
- "0": {
- "then": "Le jardin est en plein soleil"
- },
- "1": {
- "then": "Le jardin est partiellement ensoleillé"
- },
- "2": {
- "then": "Le jardin est à l’ombre"
- }
- },
- "question": "Quel est l’ensoleillement du jardin ?"
- },
- "3": {
- "mappings": {
- "0": {
- "then": "Il y a des réserves"
- },
- "1": {
- "then": "Il n’y a pas de réserves"
- }
- },
- "question": "Des réserves d’eau ont-elles été installées pour le jardin ?"
- },
- "4": {
- "question": "Quand le jardin a-t’il été construit ? (L’année suffit)",
- "render": "Date de construction du jardin : {start_date}"
- },
- "5": {
+ "facadegardens-edible": {
"mappings": {
"0": {
"then": "Il y a des plantes comestibles"
@@ -675,7 +650,7 @@
},
"question": "Y-a-t’il des plantes comestibles ?"
},
- "6": {
+ "facadegardens-plants": {
"mappings": {
"0": {
"then": "Il y a des plantes grimpantes"
@@ -692,9 +667,34 @@
},
"question": "Quel type de plantes pousse ici ?"
},
- "7": {
- "question": "Détails supplémentaires sur le jardin (si nécessaire et non décrit précédemment)",
- "render": "Plus de détails : {description}"
+ "facadegardens-rainbarrel": {
+ "mappings": {
+ "0": {
+ "then": "Il y a des réserves"
+ },
+ "1": {
+ "then": "Il n’y a pas de réserves"
+ }
+ },
+ "question": "Des réserves d’eau ont-elles été installées pour le jardin ?"
+ },
+ "facadegardens-start_date": {
+ "question": "Quand le jardin a-t’il été construit ? (L’année suffit)",
+ "render": "Date de construction du jardin : {start_date}"
+ },
+ "facadegardens-sunshine": {
+ "mappings": {
+ "0": {
+ "then": "Le jardin est en plein soleil"
+ },
+ "1": {
+ "then": "Le jardin est partiellement ensoleillé"
+ },
+ "2": {
+ "then": "Le jardin est à l’ombre"
+ }
+ },
+ "question": "Quel est l’ensoleillement du jardin ?"
}
},
"title": {
@@ -708,7 +708,7 @@
"fritures": {
"layers": {
"0": {
- "override": {
+ "friture": {
"name": "Friteries"
}
}
@@ -722,7 +722,137 @@
"hailhydrant": {
"description": "Sur cette carte on trouve et met à jour les bornes incendies, extincteurs, casernes de pompiers et ambulanciers dans son quartier. Les options en haut à gauche permettent de localiser sa position (sur téléphone) et de filtrer les éléments. Il est possible d’utiliser cet outil pour ajouter et éditer les points d’intérêt de la carte et d’y ajouter des détails en répondant aux questions. Toutes les modifications sont automatiquement enregistrées dans la base de données OpenStreetMap et peuvent êtres librement réutilisées par d’autres.",
"layers": {
- "0": {
+ "ambulancestation": {
+ "description": "Une station d’ambulance est un lieu où sont stockés les véhicules d’urgence ainsi que de l’équipement médical.",
+ "name": "Couche des ambulances",
+ "presets": {
+ "0": {
+ "description": "Ajouter une station d’ambulances à la carte",
+ "title": "Station d’ambulances"
+ }
+ },
+ "tagRenderings": {
+ "ambulance-agency": {
+ "question": "Quel est l’exploitant de la station ?",
+ "render": "Cette station est opérée par {operator}."
+ },
+ "ambulance-name": {
+ "question": "Quel est le nom de cette station ?",
+ "render": "Cette station s’appelle {name}."
+ },
+ "ambulance-operator-type": {
+ "mappings": {
+ "0": {
+ "then": "La station est opérée par le gouvernement."
+ },
+ "1": {
+ "then": "La station est opérée par une organisation informelle."
+ },
+ "2": {
+ "then": "La station est opérée par un groupe officiel de bénévoles."
+ },
+ "3": {
+ "then": "La station est opérée par un groupe privé."
+ }
+ },
+ "question": "Quel est le type d’exploitant ?",
+ "render": "L’exploitant est de type {operator:type}."
+ },
+ "ambulance-place": {
+ "question": "Dans quelle localité la station est-elle située ?",
+ "render": "La station fait partie de {addr:place}."
+ },
+ "ambulance-street": {
+ "question": " Quel est le nom de la rue où la station se situe ?",
+ "render": "La station fait partie de {addr:street}."
+ }
+ },
+ "title": {
+ "render": "Station d’ambulances"
+ }
+ },
+ "extinguisher": {
+ "description": "Couche des lances à incendie.",
+ "name": "Couche des extincteurs.",
+ "presets": {
+ "0": {
+ "description": "Un extincteur est un appareil portatif servant à éteindre un feu",
+ "title": "Extincteur"
+ }
+ },
+ "tagRenderings": {
+ "extinguisher-location": {
+ "mappings": {
+ "0": {
+ "then": "Intérieur."
+ },
+ "1": {
+ "then": "Extérieur."
+ }
+ },
+ "question": "Où est-elle positionnée ?",
+ "render": "Emplacement : {location}"
+ }
+ },
+ "title": {
+ "render": "Exctincteurs"
+ }
+ },
+ "fire_stations": {
+ "description": "Couche des stations de pompiers.",
+ "name": "Couche des stations de pompiers",
+ "presets": {
+ "0": {
+ "description": "Une caserne de pompiers est un lieu où les pompiers et leur équipements sont situés en dehors des missions.",
+ "title": "Caserne de pompiers"
+ }
+ },
+ "tagRenderings": {
+ "station-agency": {
+ "mappings": {
+ "0": {
+ "then": "Brigade de Protection du Feu"
+ }
+ },
+ "question": "Quel est l’exploitant de la station ?",
+ "render": "Cette station est opérée par {operator}."
+ },
+ "station-name": {
+ "question": "Quel est le nom de la station ?",
+ "render": "Cette station s’appelle {name}."
+ },
+ "station-operator": {
+ "mappings": {
+ "0": {
+ "then": "La station est opérée par le gouvernement."
+ },
+ "1": {
+ "then": "La station est opérée par une organisation informelle."
+ },
+ "2": {
+ "then": "La station est opérée par un groupe officiel de bénévoles."
+ },
+ "3": {
+ "then": "La station est opérée par un groupe privé."
+ }
+ },
+ "question": "Quel est le type d’exploitant ?",
+ "render": "L’exploitant est de type {operator:type}."
+ },
+ "station-place": {
+ "question": "Dans quelle localité la station est-elle située ?",
+ "render": "La station fait partie de {addr:place}."
+ },
+ "station-street": {
+ "question": " Quel est le nom de la rue dans lequel elle se situe ?",
+ "render": "La station fait partie de la {addr:street}."
+ }
+ },
+ "title": {
+ "render": "Station de pompiers"
+ }
+ },
+ "hydrants": {
"description": "Couche des bornes incendie.",
"name": "Carte des bornes incendie",
"presets": {
@@ -732,7 +862,7 @@
}
},
"tagRenderings": {
- "0": {
+ "hydrant-color": {
"mappings": {
"0": {
"then": "La borne est de couleur inconnue."
@@ -747,7 +877,22 @@
"question": "Quelle est la couleur de la borne ?",
"render": "La borne est {colour}"
},
- "1": {
+ "hydrant-state": {
+ "mappings": {
+ "0": {
+ "then": "La borne est en état, ou partiellement en état, de fonctionner."
+ },
+ "1": {
+ "then": "La borne est hors-service."
+ },
+ "2": {
+ "then": "La borne a été retirée."
+ }
+ },
+ "question": "Mettre à jour l’état de la borne.",
+ "render": "État"
+ },
+ "hydrant-type": {
"mappings": {
"0": {
"then": "La borne est de type inconnu."
@@ -767,156 +912,11 @@
},
"question": "De quel type de borne s’agit-il ?",
"render": " Type de borne : {fire_hydrant:type}"
- },
- "2": {
- "mappings": {
- "0": {
- "then": "La borne est en état, ou partiellement en état, de fonctionner."
- },
- "1": {
- "then": "La borne est hors-service."
- },
- "2": {
- "then": "La borne a été retirée."
- }
- },
- "question": "Mettre à jour l’état de la borne.",
- "render": "État"
}
},
"title": {
"render": "Bornes incendie"
}
- },
- "1": {
- "description": "Couche des lances à incendie.",
- "name": "Couche des extincteurs.",
- "presets": {
- "0": {
- "description": "Un extincteur est un appareil portatif servant à éteindre un feu",
- "title": "Extincteur"
- }
- },
- "tagRenderings": {
- "0": {
- "mappings": {
- "0": {
- "then": "Intérieur."
- },
- "1": {
- "then": "Extérieur."
- }
- },
- "question": "Où est-elle positionnée ?",
- "render": "Emplacement : {location}"
- }
- },
- "title": {
- "render": "Exctincteurs"
- }
- },
- "2": {
- "description": "Couche des stations de pompiers.",
- "name": "Couche des stations de pompiers",
- "presets": {
- "0": {
- "description": "Une caserne de pompiers est un lieu où les pompiers et leur équipements sont situés en dehors des missions.",
- "title": "Caserne de pompiers"
- }
- },
- "tagRenderings": {
- "0": {
- "question": "Quel est le nom de la station ?",
- "render": "Cette station s’appelle {name}."
- },
- "1": {
- "question": " Quel est le nom de la rue dans lequel elle se situe ?",
- "render": "La station fait partie de la {addr:street}."
- },
- "2": {
- "question": "Dans quelle localité la station est-elle située ?",
- "render": "La station fait partie de {addr:place}."
- },
- "3": {
- "mappings": {
- "0": {
- "then": "Brigade de Protection du Feu"
- }
- },
- "question": "Quel est l’exploitant de la station ?",
- "render": "Cette station est opérée par {operator}."
- },
- "4": {
- "mappings": {
- "0": {
- "then": "La station est opérée par le gouvernement."
- },
- "1": {
- "then": "La station est opérée par une organisation informelle."
- },
- "2": {
- "then": "La station est opérée par un groupe officiel de bénévoles."
- },
- "3": {
- "then": "La station est opérée par un groupe privé."
- }
- },
- "question": "Quel est le type d’exploitant ?",
- "render": "L’exploitant est de type {operator:type}."
- }
- },
- "title": {
- "render": "Station de pompiers"
- }
- },
- "3": {
- "description": "Une station d’ambulance est un lieu où sont stockés les véhicules d’urgence ainsi que de l’équipement médical.",
- "name": "Couche des ambulances",
- "presets": {
- "0": {
- "description": "Ajouter une station d’ambulances à la carte",
- "title": "Station d’ambulances"
- }
- },
- "tagRenderings": {
- "0": {
- "question": "Quel est le nom de cette station ?",
- "render": "Cette station s’appelle {name}."
- },
- "1": {
- "question": " Quel est le nom de la rue où la station se situe ?",
- "render": "La station fait partie de {addr:street}."
- },
- "2": {
- "question": "Dans quelle localité la station est-elle située ?",
- "render": "La station fait partie de {addr:place}."
- },
- "3": {
- "question": "Quel est l’exploitant de la station ?",
- "render": "Cette station est opérée par {operator}."
- },
- "4": {
- "mappings": {
- "0": {
- "then": "La station est opérée par le gouvernement."
- },
- "1": {
- "then": "La station est opérée par une organisation informelle."
- },
- "2": {
- "then": "La station est opérée par un groupe officiel de bénévoles."
- },
- "3": {
- "then": "La station est opérée par un groupe privé."
- }
- },
- "question": "Quel est le type d’exploitant ?",
- "render": "L’exploitant est de type {operator:type}."
- }
- },
- "title": {
- "render": "Station d’ambulances"
- }
}
},
"shortDescription": "Carte indiquant les bornes incendies, extincteurs, casernes de pompiers et ambulanciers.",
@@ -930,7 +930,7 @@
"openwindpowermap": {
"description": "Une carte indiquant les éoliennes et permettant leur édition.",
"layers": {
- "0": {
+ "windturbine": {
"name": "Éolienne",
"presets": {
"0": {
@@ -938,23 +938,23 @@
}
},
"tagRenderings": {
- "0": {
- "question": "Quel est la puissance générée par cette éolienne ?",
- "render": "La puissance générée par cette éolienne est de {generator:output:electricity}."
- },
- "1": {
- "question": "Qui est l’exploitant de cette éolienne ?",
- "render": "Cette éolienne est opérée par {operator}."
- },
- "2": {
- "question": "Quelle est la hauteur totale de l’éolienne en mètres, pales incluses ?",
- "render": "La hauteur totale, incluant les pales, est de {height} mètres."
- },
- "3": {
+ "turbine-diameter": {
"question": "Quel est le diamètre du rotor en mètres ?",
"render": "Le diamètre du rotor est de {rotor:diameter} mètres."
},
- "4": {
+ "turbine-height": {
+ "question": "Quelle est la hauteur totale de l’éolienne en mètres, pales incluses ?",
+ "render": "La hauteur totale, incluant les pales, est de {height} mètres."
+ },
+ "turbine-operator": {
+ "question": "Qui est l’exploitant de cette éolienne ?",
+ "render": "Cette éolienne est opérée par {operator}."
+ },
+ "turbine-output": {
+ "question": "Quel est la puissance générée par cette éolienne ?",
+ "render": "La puissance générée par cette éolienne est de {generator:output:electricity}."
+ },
+ "turbine-start-date": {
"question": "Depuis quand l’éolienne est-elle en fonctionnement ?",
"render": "L’éolienne est active depuis {start_date}."
}
@@ -1008,7 +1008,7 @@
"shops": {
"description": "Sur cette carte, vous pouvez ajouter des informations sur les magasins, horaires d'ouverture et numéro de téléphone",
"layers": {
- "0": {
+ "shops": {
"description": "Un magasin",
"name": "Magasin",
"presets": {
@@ -1018,10 +1018,22 @@
}
},
"tagRenderings": {
- "1": {
+ "shops-email": {
+ "question": "Quelle est l'adresse électronique de ce magasin ?",
+ "render": "{email}"
+ },
+ "shops-name": {
"question": "Qu'est-ce que le nom de ce magasin?"
},
- "2": {
+ "shops-opening_hours": {
+ "question": "Quels sont les horaires d'ouverture de ce magasin ?",
+ "render": "{opening_hours_table(opening_hours)}"
+ },
+ "shops-phone": {
+ "question": "Quel est le numéro de téléphone ?",
+ "render": "{phone}"
+ },
+ "shops-shop": {
"mappings": {
"0": {
"then": "Épicerie/superette"
@@ -1048,21 +1060,9 @@
"question": "Que vends ce magasin ?",
"render": "Ce magasin vends {shop}"
},
- "3": {
- "question": "Quel est le numéro de téléphone ?",
- "render": "{phone}"
- },
- "4": {
+ "shops-website": {
"question": "Quel est le site internet de ce magasin ?",
"render": "{website}"
- },
- "5": {
- "question": "Quelle est l'adresse électronique de ce magasin ?",
- "render": "{email}"
- },
- "6": {
- "question": "Quels sont les horaires d'ouverture de ce magasin ?",
- "render": "{opening_hours_table(opening_hours)}"
}
},
"title": {
diff --git a/langs/themes/id.json b/langs/themes/id.json
index e95bb0454..0be2f3e01 100644
--- a/langs/themes/id.json
+++ b/langs/themes/id.json
@@ -6,10 +6,10 @@
"artwork": {
"description": "Selamat datang di Open Artwork Map, peta untuk patung, grafiti, dan karya seni lain di seluruh dunia",
"layers": {
- "0": {
+ "artwork": {
"name": "Karya seni",
"tagRenderings": {
- "3": {
+ "artwork-website": {
"render": "Info lanjut tersedia di laman web ini."
}
},
@@ -27,19 +27,16 @@
},
"campersite": {
"layers": {
- "0": {
+ "caravansites": {
"tagRenderings": {
- "1": {
- "question": "Apakah nama tempat ini?"
- },
- "2": {
+ "caravansites-fee": {
"mappings": {
"1": {
"then": "Boleh digunakan tanpa bayaran"
}
}
},
- "6": {
+ "caravansites-internet": {
"mappings": {
"0": {
"then": "Akses Web tersedia"
@@ -53,7 +50,10 @@
},
"question": "Tempat ini berbagi akses Web?"
},
- "8": {
+ "caravansites-name": {
+ "question": "Apakah nama tempat ini?"
+ },
+ "caravansites-toilets": {
"mappings": {
"0": {
"then": "Tempat sini ada tandas"
@@ -63,7 +63,7 @@
}
}
},
- "9": {
+ "caravansites-website": {
"question": "Tempat sini terada situs web?",
"render": "Situs resmi: {website}"
}
@@ -88,37 +88,37 @@
},
"climbing": {
"layers": {
- "0": {
+ "climbing": {
"tagRenderings": {
- "0": {
+ "name": {
"render": "{name}"
}
}
},
- "1": {
+ "climbing_club": {
"tagRenderings": {
- "3": {
+ "climbing_club-name": {
"render": "{name}"
}
}
},
- "2": {
+ "climbing_gym": {
"tagRenderings": {
- "3": {
+ "name": {
"render": "{name}"
}
}
},
- "3": {
+ "climbing_route": {
"tagRenderings": {
- "6": {
+ "Name": {
"render": "{name}"
}
}
},
- "4": {
+ "maybe_climbing": {
"tagRenderings": {
- "1": {
+ "climbing-opportunity-name": {
"render": "{name}"
}
}
@@ -127,9 +127,9 @@
},
"hailhydrant": {
"layers": {
- "0": {
+ "hydrants": {
"tagRenderings": {
- "1": {
+ "hydrant-type": {
"mappings": {
"3": {
"then": " Jenis dinding."
@@ -142,16 +142,16 @@
},
"shops": {
"layers": {
- "0": {
+ "shops": {
"tagRenderings": {
- "3": {
+ "shops-email": {
+ "render": "{email}"
+ },
+ "shops-phone": {
"render": "{phone}"
},
- "4": {
+ "shops-website": {
"render": "{website}"
- },
- "5": {
- "render": "{email}"
}
}
}
diff --git a/langs/themes/it.json b/langs/themes/it.json
index 8f7487108..fa17395bd 100644
--- a/langs/themes/it.json
+++ b/langs/themes/it.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "Benvenuto/a sulla mappa libera dell’arte, una mappa delle statue, i busti, i graffiti e le altre realizzazioni artistiche di tutto il mondo",
"layers": {
- "0": {
+ "artwork": {
"description": "Diverse opere d’arte",
"name": "Opere d’arte",
"presets": {
@@ -15,7 +15,11 @@
}
},
"tagRenderings": {
- "1": {
+ "artwork-artist_name": {
+ "question": "Quale artista ha creato quest’opera?",
+ "render": "Creato da {artist_name}"
+ },
+ "artwork-artwork_type": {
"mappings": {
"0": {
"then": "Architettura"
@@ -57,15 +61,11 @@
"question": "Che tipo di opera d’arte è questo?",
"render": "Si tratta di un {artwork_type}"
},
- "2": {
- "question": "Quale artista ha creato quest’opera?",
- "render": "Creato da {artist_name}"
- },
- "3": {
+ "artwork-website": {
"question": "Esiste un sito web con maggiori informazioni su quest’opera?",
"render": "Ulteriori informazioni su questo sito web"
},
- "4": {
+ "artwork-wikidata": {
"question": "Quale elemento Wikidata corrisponde a quest’opera d’arte?",
"render": "Corrisponde a {wikidata}"
}
@@ -98,7 +98,7 @@
"campersite": {
"description": "Questo sito raccoglie tutti i luoghi ufficiali dove sostare con il camper e aree dove è possibile scaricare acque grigie e nere. Puoi aggiungere dettagli riguardanti i servizi forniti e il loro costo. Aggiungi foto e recensioni. Questo è al contempo un sito web e una web app. I dati sono memorizzati su OpenStreetMap in modo tale che siano per sempre liberi e riutilizzabili da qualsiasi app.",
"layers": {
- "0": {
+ "caravansites": {
"description": "Aree camper",
"name": "Aree camper",
"presets": {
@@ -108,11 +108,19 @@
}
},
"tagRenderings": {
- "1": {
- "question": "Come viene chiamato questo luogo?",
- "render": "Questo luogo è chiamato {name}"
+ "caravansites-capacity": {
+ "question": "Quanti camper possono stare qua? (non rispondere se non c’è un numero chario di spazi o veicoli ammessi)",
+ "render": "{capacity} camper possono usare questo luogo al contempo"
},
- "2": {
+ "caravansites-charge": {
+ "question": "Quanto costa questo luogo?",
+ "render": "Questo luogo costa {charge}"
+ },
+ "caravansites-description": {
+ "question": "Desideri aggiungere una descrizione del luogo? (Non vanno ripetute informazioni già richieste e mostrate precedentemente. Si prega di attenersi a dati oggettivi - le opinioni vanno nelle recensioni)",
+ "render": "Maggiori dettagli su questo luogo: {description}"
+ },
+ "caravansites-fee": {
"mappings": {
"0": {
"then": "Devi pagare per usarlo"
@@ -123,26 +131,7 @@
},
"question": "Ha una tariffa questo luogo?"
},
- "3": {
- "question": "Quanto costa questo luogo?",
- "render": "Questo luogo costa {charge}"
- },
- "4": {
- "mappings": {
- "0": {
- "then": "Questo luogo ha una stazione per lo scarico delle acque"
- },
- "1": {
- "then": "Questo luogo non ha una stazione per lo scarico delle acque"
- }
- },
- "question": "Questo luogo ha una stazione per lo scarico delle acque?"
- },
- "5": {
- "question": "Quanti camper possono stare qua? (non rispondere se non c’è un numero chario di spazi o veicoli ammessi)",
- "render": "{capacity} camper possono usare questo luogo al contempo"
- },
- "6": {
+ "caravansites-internet": {
"mappings": {
"0": {
"then": "C’è l’accesso a internet"
@@ -156,7 +145,7 @@
},
"question": "Questo luogo ha l’accesso a internet?"
},
- "7": {
+ "caravansites-internet-fee": {
"mappings": {
"0": {
"then": "Occorre pagare un extra per avere l’accesso a internet"
@@ -167,22 +156,7 @@
},
"question": "Occorre pagare per avere l’accesso a internet?"
},
- "8": {
- "mappings": {
- "0": {
- "then": "Questo luogo ha i servizi igienici"
- },
- "1": {
- "then": "Questo luogo non ha i servizi igienici"
- }
- },
- "question": "Questo luogo dispone di servizi igienici?"
- },
- "9": {
- "question": "Questo luogo ha un sito web?",
- "render": "Sito web ufficiale: {website}"
- },
- "10": {
+ "caravansites-long-term": {
"mappings": {
"0": {
"then": "Sì, ci sono spazi per il noleggio a lungo termine, ma puoi anche pagare per singola giornata"
@@ -196,9 +170,35 @@
},
"question": "Questo luogo offre spazi per il noleggio a lungo termine?"
},
- "11": {
- "question": "Desideri aggiungere una descrizione del luogo? (Non vanno ripetute informazioni già richieste e mostrate precedentemente. Si prega di attenersi a dati oggettivi - le opinioni vanno nelle recensioni)",
- "render": "Maggiori dettagli su questo luogo: {description}"
+ "caravansites-name": {
+ "question": "Come viene chiamato questo luogo?",
+ "render": "Questo luogo è chiamato {name}"
+ },
+ "caravansites-sanitary-dump": {
+ "mappings": {
+ "0": {
+ "then": "Questo luogo ha una stazione per lo scarico delle acque"
+ },
+ "1": {
+ "then": "Questo luogo non ha una stazione per lo scarico delle acque"
+ }
+ },
+ "question": "Questo luogo ha una stazione per lo scarico delle acque?"
+ },
+ "caravansites-toilets": {
+ "mappings": {
+ "0": {
+ "then": "Questo luogo ha i servizi igienici"
+ },
+ "1": {
+ "then": "Questo luogo non ha i servizi igienici"
+ }
+ },
+ "question": "Questo luogo dispone di servizi igienici?"
+ },
+ "caravansites-website": {
+ "question": "Questo luogo ha un sito web?",
+ "render": "Sito web ufficiale: {website}"
}
},
"title": {
@@ -210,7 +210,7 @@
"render": "Area camper {name}"
}
},
- "1": {
+ "dumpstations": {
"description": "Luoghi di sversamento delle acque reflue",
"name": "Luoghi di sversamento delle acque reflue",
"presets": {
@@ -220,55 +220,7 @@
}
},
"tagRenderings": {
- "1": {
- "mappings": {
- "0": {
- "then": "A pagamento"
- },
- "1": {
- "then": "È gratuito"
- }
- },
- "question": "Questo luogo è a pagamento?"
- },
- "2": {
- "question": "Qual è la tariffa di questo luogo?",
- "render": "Ha una tariffa di {charge}"
- },
- "3": {
- "mappings": {
- "0": {
- "then": "Questo luogo ha un punto per l'approvvigionamento di acqua"
- },
- "1": {
- "then": "Questo luogo non ha un punto per l'approvvigionamento di acqua"
- }
- },
- "question": "Questo luogo ha un punto per l'approvvigionamento di acqua?"
- },
- "4": {
- "mappings": {
- "0": {
- "then": "Si possono smaltire le acque grigie qui"
- },
- "1": {
- "then": "Non si possono smaltire le acque grigie qui"
- }
- },
- "question": "Si possono smaltire le acque grigie qui?"
- },
- "5": {
- "mappings": {
- "0": {
- "then": "È possibile smaltire le acque del WC chimico qui"
- },
- "1": {
- "then": "Non è possibile smaltire le acque del WC chimico qui"
- }
- },
- "question": "È possibile smaltire le acque del WC chimico qui?"
- },
- "6": {
+ "dumpstations-access": {
"mappings": {
"0": {
"then": "Servono una chiave o un codice di accesso"
@@ -285,9 +237,57 @@
},
"question": "Chi può utilizzare questo luogo di sversamento?"
},
- "7": {
+ "dumpstations-charge": {
+ "question": "Qual è la tariffa di questo luogo?",
+ "render": "Ha una tariffa di {charge}"
+ },
+ "dumpstations-chemical-waste": {
+ "mappings": {
+ "0": {
+ "then": "È possibile smaltire le acque del WC chimico qui"
+ },
+ "1": {
+ "then": "Non è possibile smaltire le acque del WC chimico qui"
+ }
+ },
+ "question": "È possibile smaltire le acque del WC chimico qui?"
+ },
+ "dumpstations-fee": {
+ "mappings": {
+ "0": {
+ "then": "A pagamento"
+ },
+ "1": {
+ "then": "È gratuito"
+ }
+ },
+ "question": "Questo luogo è a pagamento?"
+ },
+ "dumpstations-grey-water": {
+ "mappings": {
+ "0": {
+ "then": "Si possono smaltire le acque grigie qui"
+ },
+ "1": {
+ "then": "Non si possono smaltire le acque grigie qui"
+ }
+ },
+ "question": "Si possono smaltire le acque grigie qui?"
+ },
+ "dumpstations-network": {
"question": "Di quale rete fa parte questo luogo? (se non fa parte di nessuna rete, salta)",
"render": "Questo luogo è parte della rete {network}"
+ },
+ "dumpstations-waterpoint": {
+ "mappings": {
+ "0": {
+ "then": "Questo luogo ha un punto per l'approvvigionamento di acqua"
+ },
+ "1": {
+ "then": "Questo luogo non ha un punto per l'approvvigionamento di acqua"
+ }
+ },
+ "question": "Questo luogo ha un punto per l'approvvigionamento di acqua?"
}
},
"title": {
@@ -327,9 +327,17 @@
},
"climbing": {
"layers": {
- "2": {
+ "climbing_route": {
"tagRenderings": {
- "3": {
+ "Difficulty": {
+ "question": "Qual è la difficoltà di questa via di arrampicata nel sistema francese/belga?",
+ "render": "Il grado di difficoltà è {climbing:grade:french} nel sistema francese/belga"
+ },
+ "Length": {
+ "question": "Quanto è lunga questa via di arrampicata (in metri)?",
+ "render": "Questo percorso è lungo {canonical(climbing:length)}"
+ },
+ "Name": {
"mappings": {
"0": {
"then": "Questa via di arrampicata non ha un nome"
@@ -337,14 +345,6 @@
},
"question": "Come si chiama questa via di arrampicata?",
"render": "{name}"
- },
- "4": {
- "question": "Quanto è lunga questa via di arrampicata (in metri)?",
- "render": "Questo percorso è lungo {canonical(climbing:length)}"
- },
- "5": {
- "question": "Qual è la difficoltà di questa via di arrampicata nel sistema francese/belga?",
- "render": "Il grado di difficoltà è {climbing:grade:french} nel sistema francese/belga"
}
},
"title": {
@@ -361,11 +361,18 @@
},
"cyclestreets": {
"layers": {
- "0": {
+ "all_streets": {
+ "description": "Livello per contrassegnare tutte le strade come strade ciclabili",
+ "name": "Tutte le strade",
+ "title": {
+ "render": "Strada"
+ }
+ },
+ "fietsstraat": {
"description": "Una strada ciclabile è una strada in cui i veicoli a motore non possono sorpassare le persone in bicicletta",
"name": "Strade ciclabili"
},
- "1": {
+ "toekomstige_fietsstraat": {
"description": "Questa strada diventerà presto una strada ciclabile",
"name": "Futura strada ciclabile",
"title": {
@@ -376,13 +383,6 @@
},
"render": "Futura strada ciclabile"
}
- },
- "2": {
- "description": "Livello per contrassegnare tutte le strade come strade ciclabili",
- "name": "Tutte le strade",
- "title": {
- "render": "Strada"
- }
}
},
"roamingRenderings": {
@@ -409,7 +409,7 @@
},
"facadegardens": {
"layers": {
- "0": {
+ "facadegardens": {
"presets": {
"0": {
"description": "Aggiungi un giardino verticale",
@@ -417,35 +417,11 @@
}
},
"tagRenderings": {
- "2": {
- "mappings": {
- "0": {
- "then": "Il giardino è completamente illuminato dal sole"
- },
- "1": {
- "then": "Il giardino è parzialmente in ombra"
- },
- "2": {
- "then": "Il giardino è in ombra"
- }
- },
- "question": "Il giardino è al sole o in ombra?"
+ "facadegardens-description": {
+ "question": "Altre informazioni per descrivere il giardino (se necessarie e non riportate qui sopra)",
+ "render": "Maggiori dettagli: {description}"
},
- "3": {
- "mappings": {
- "0": {
- "then": "C'è un contenitore per raccogliere la pioggia"
- },
- "1": {
- "then": "Non c'è un contenitore per raccogliere la pioggia"
- }
- }
- },
- "4": {
- "question": "Quando è stato realizzato il giardino? (è sufficiente l'anno)",
- "render": "Data di realizzazione del giardino: {start_date}"
- },
- "5": {
+ "facadegardens-edible": {
"mappings": {
"0": {
"then": "Ci sono piante commestibili"
@@ -456,7 +432,7 @@
},
"question": "Ci sono piante commestibili?"
},
- "6": {
+ "facadegardens-plants": {
"mappings": {
"0": {
"then": "Ci sono viti"
@@ -473,9 +449,33 @@
},
"question": "Che tipi di piante sono presenti qui?"
},
- "7": {
- "question": "Altre informazioni per descrivere il giardino (se necessarie e non riportate qui sopra)",
- "render": "Maggiori dettagli: {description}"
+ "facadegardens-rainbarrel": {
+ "mappings": {
+ "0": {
+ "then": "C'è un contenitore per raccogliere la pioggia"
+ },
+ "1": {
+ "then": "Non c'è un contenitore per raccogliere la pioggia"
+ }
+ }
+ },
+ "facadegardens-start_date": {
+ "question": "Quando è stato realizzato il giardino? (è sufficiente l'anno)",
+ "render": "Data di realizzazione del giardino: {start_date}"
+ },
+ "facadegardens-sunshine": {
+ "mappings": {
+ "0": {
+ "then": "Il giardino è completamente illuminato dal sole"
+ },
+ "1": {
+ "then": "Il giardino è parzialmente in ombra"
+ },
+ "2": {
+ "then": "Il giardino è in ombra"
+ }
+ },
+ "question": "Il giardino è al sole o in ombra?"
}
}
}
@@ -488,16 +488,32 @@
},
"hailhydrant": {
"layers": {
- "0": {
+ "fire_stations": {
+ "description": "Livello che mostra le caserme dei vigili del fuoco.",
+ "name": "Mappa delle caserme dei vigili del fuoco",
"tagRenderings": {
- "0": {
+ "station-name": {
+ "question": "Come si chiama questa caserma dei vigili del fuoco?",
+ "render": "Questa caserma si chiama {name}."
+ },
+ "station-street": {
+ "question": " Qual è il nome della via in cui si trova la caserma?"
+ }
+ },
+ "title": {
+ "render": "Caserma dei vigili del fuoco"
+ }
+ },
+ "hydrants": {
+ "tagRenderings": {
+ "hydrant-color": {
"mappings": {
"2": {
"then": "L'idrante è rosso."
}
}
},
- "1": {
+ "hydrant-type": {
"mappings": {
"0": {
"then": "Il tipo di idrante è sconosciuto."
@@ -507,22 +523,6 @@
"render": " Tipo di idrante: {fire_hydrant:type}"
}
}
- },
- "2": {
- "description": "Livello che mostra le caserme dei vigili del fuoco.",
- "name": "Mappa delle caserme dei vigili del fuoco",
- "tagRenderings": {
- "0": {
- "question": "Come si chiama questa caserma dei vigili del fuoco?",
- "render": "Questa caserma si chiama {name}."
- },
- "1": {
- "question": " Qual è il nome della via in cui si trova la caserma?"
- }
- },
- "title": {
- "render": "Caserma dei vigili del fuoco"
- }
}
}
},
diff --git a/langs/themes/ja.json b/langs/themes/ja.json
index d1b0cb22d..cb61f27de 100644
--- a/langs/themes/ja.json
+++ b/langs/themes/ja.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "オープン アートワーク マップへようこそ。世界中の銅像や胸像、壁の落書きなどのアートワークの地図です",
"layers": {
- "0": {
+ "artwork": {
"description": "多様な作品",
"name": "美術品",
"presets": {
@@ -15,7 +15,11 @@
}
},
"tagRenderings": {
- "1": {
+ "artwork-artist_name": {
+ "question": "どのアーティストが作ったんですか?",
+ "render": "作成者:{artist_name}"
+ },
+ "artwork-artwork_type": {
"mappings": {
"0": {
"then": "建物"
@@ -57,15 +61,11 @@
"question": "この作品の種類は何ですか?",
"render": "これは{artwork_type}です"
},
- "2": {
- "question": "どのアーティストが作ったんですか?",
- "render": "作成者:{artist_name}"
- },
- "3": {
+ "artwork-website": {
"question": "この作品についての詳しい情報はどのウェブサイトにありますか?",
"render": "Webサイトに詳細情報がある"
},
- "4": {
+ "artwork-wikidata": {
"question": "このアートワークに関するWikidataのエントリーはどれですか?",
"render": "{wikidata}に関連する"
}
@@ -98,7 +98,7 @@
"campersite": {
"description": "このWebサイトでは、すべてのキャンピングカーの公式停車場所と、汚水を捨てることができる場所を収集します。提供されるサービスとコストに関する詳細を追加できます。写真とレビューを追加します。これはウェブサイトとウェブアプリです。データはOpenStreetMapに保存されるので、永遠に無料で、どんなアプリからでも再利用できます。",
"layers": {
- "0": {
+ "caravansites": {
"description": "キャンプサイト",
"name": "キャンプサイト",
"presets": {
@@ -108,11 +108,19 @@
}
},
"tagRenderings": {
- "1": {
- "question": "ここは何というところですか?",
- "render": "この場所は {name} と呼ばれています"
+ "caravansites-capacity": {
+ "question": "ここには何人のキャンパーが泊まれますか?(許可された車両の数や駐車スペースが明らかでない場合は省略)",
+ "render": "{capacity} 人が同時に使用できます"
},
- "2": {
+ "caravansites-charge": {
+ "question": "ここはいくらかかりますか?",
+ "render": "この場所は{charge} が必要"
+ },
+ "caravansites-description": {
+ "question": "この場所の一般的な説明を追加しますか?(前に問い合わせた情報や上記の情報を繰り返し入力しないでください。客観的な意見はレビューに反映されます)",
+ "render": "この場所の詳細:{description}"
+ },
+ "caravansites-fee": {
"mappings": {
"0": {
"then": "使用料を支払う必要がある"
@@ -123,26 +131,7 @@
},
"question": "ここは有料ですか?"
},
- "3": {
- "question": "ここはいくらかかりますか?",
- "render": "この場所は{charge} が必要"
- },
- "4": {
- "mappings": {
- "0": {
- "then": "この場所には衛生的なゴミ捨て場がある"
- },
- "1": {
- "then": "この場所には衛生的なゴミ捨て場がない"
- }
- },
- "question": "この場所に衛生的なゴミ捨て場はありますか?"
- },
- "5": {
- "question": "ここには何人のキャンパーが泊まれますか?(許可された車両の数や駐車スペースが明らかでない場合は省略)",
- "render": "{capacity} 人が同時に使用できます"
- },
- "6": {
+ "caravansites-internet": {
"mappings": {
"0": {
"then": "インターネットアクセスがある"
@@ -156,7 +145,7 @@
},
"question": "この場所はインターネットにアクセスできますか?"
},
- "7": {
+ "caravansites-internet-fee": {
"mappings": {
"0": {
"then": "インターネット接続には別途料金が必要です"
@@ -167,22 +156,7 @@
},
"question": "インターネット接続にお金はかかりますか?"
},
- "8": {
- "mappings": {
- "0": {
- "then": "ここにはトイレがある"
- },
- "1": {
- "then": "ここにはトイレがない"
- }
- },
- "question": "ここにトイレはありますか?"
- },
- "9": {
- "question": "ここにはウェブサイトがありますか?",
- "render": "公式Webサイト: {website}"
- },
- "10": {
+ "caravansites-long-term": {
"mappings": {
"0": {
"then": "はい、長期レンタルのスポットもあり、日常的に滞在することもできます"
@@ -196,9 +170,35 @@
},
"question": "ここには長期レンタルのスポットがありますか?"
},
- "11": {
- "question": "この場所の一般的な説明を追加しますか?(前に問い合わせた情報や上記の情報を繰り返し入力しないでください。客観的な意見はレビューに反映されます)",
- "render": "この場所の詳細:{description}"
+ "caravansites-name": {
+ "question": "ここは何というところですか?",
+ "render": "この場所は {name} と呼ばれています"
+ },
+ "caravansites-sanitary-dump": {
+ "mappings": {
+ "0": {
+ "then": "この場所には衛生的なゴミ捨て場がある"
+ },
+ "1": {
+ "then": "この場所には衛生的なゴミ捨て場がない"
+ }
+ },
+ "question": "この場所に衛生的なゴミ捨て場はありますか?"
+ },
+ "caravansites-toilets": {
+ "mappings": {
+ "0": {
+ "then": "ここにはトイレがある"
+ },
+ "1": {
+ "then": "ここにはトイレがない"
+ }
+ },
+ "question": "ここにトイレはありますか?"
+ },
+ "caravansites-website": {
+ "question": "ここにはウェブサイトがありますか?",
+ "render": "公式Webサイト: {website}"
}
},
"title": {
@@ -210,7 +210,7 @@
"render": "キャンプサイト {name}"
}
},
- "1": {
+ "dumpstations": {
"description": "衛生ゴミ捨て場",
"name": "衛生ゴミ捨て場",
"presets": {
@@ -220,55 +220,7 @@
}
},
"tagRenderings": {
- "1": {
- "mappings": {
- "0": {
- "then": "使用料を支払う必要がある"
- },
- "1": {
- "then": "無料で使用可能"
- }
- },
- "question": "ここは有料ですか?"
- },
- "2": {
- "question": "ここはいくらかかりますか?",
- "render": "この場所は{charge} が必要"
- },
- "3": {
- "mappings": {
- "0": {
- "then": "この場所には給水所がある"
- },
- "1": {
- "then": "この場所には給水所がない"
- }
- },
- "question": "この場所には給水所がありますか?"
- },
- "4": {
- "mappings": {
- "0": {
- "then": "ここで汚水(雑排水)を捨てることができます"
- },
- "1": {
- "then": "ここでは汚水(雑排水)を捨てることはできない"
- }
- },
- "question": "汚水(雑排水)はこちらで処分できますか?"
- },
- "5": {
- "mappings": {
- "0": {
- "then": "携帯トイレのゴミはここで処分できます"
- },
- "1": {
- "then": "ここでは携帯トイレの廃棄物を処分することはできません"
- }
- },
- "question": "携帯トイレのゴミはこちらで処分できますか?"
- },
- "6": {
+ "dumpstations-access": {
"mappings": {
"0": {
"then": "これを使用するには、ネットワークキー/コードが必要です"
@@ -285,9 +237,57 @@
},
"question": "このゴミ捨て場は誰が使えるんですか?"
},
- "7": {
+ "dumpstations-charge": {
+ "question": "ここはいくらかかりますか?",
+ "render": "この場所は{charge} が必要"
+ },
+ "dumpstations-chemical-waste": {
+ "mappings": {
+ "0": {
+ "then": "携帯トイレのゴミはここで処分できます"
+ },
+ "1": {
+ "then": "ここでは携帯トイレの廃棄物を処分することはできません"
+ }
+ },
+ "question": "携帯トイレのゴミはこちらで処分できますか?"
+ },
+ "dumpstations-fee": {
+ "mappings": {
+ "0": {
+ "then": "使用料を支払う必要がある"
+ },
+ "1": {
+ "then": "無料で使用可能"
+ }
+ },
+ "question": "ここは有料ですか?"
+ },
+ "dumpstations-grey-water": {
+ "mappings": {
+ "0": {
+ "then": "ここで汚水(雑排水)を捨てることができます"
+ },
+ "1": {
+ "then": "ここでは汚水(雑排水)を捨てることはできない"
+ }
+ },
+ "question": "汚水(雑排水)はこちらで処分できますか?"
+ },
+ "dumpstations-network": {
"question": "ここは何のネットワークの一部ですか?(なければスキップ)",
"render": "このステーションはネットワーク{network}の一部です"
+ },
+ "dumpstations-waterpoint": {
+ "mappings": {
+ "0": {
+ "then": "この場所には給水所がある"
+ },
+ "1": {
+ "then": "この場所には給水所がない"
+ }
+ },
+ "question": "この場所には給水所がありますか?"
}
},
"title": {
@@ -329,81 +329,7 @@
"description": "この地図には、自然の中のクライミングジム、ボルダリングホール、岩など、さまざまなクライミングの機会があります。",
"descriptionTail": "登山地図はもともと Christian Neumann によって作成されたものです。フィードバックや質問がありましたら、ご連絡ください。
Over groen ingekleurde gebieden weten we alles wat we willen weten.
Bij rood ingekleurde gebieden ontbreekt nog heel wat info: klik een gebied aan en beantwoord de vragen.
Je kan altijd een vraag overslaan als je het antwoord niet weet of niet zeker bent
Je kan altijd een foto toevoegen
Je kan ook zelf een gebied toevoegen door op de kaart te klikken
Open buurtnatuur.be op je smartphone om al wandelend foto's te maken en vragen te beantwoorden
De oorspronkelijke data komt van OpenStreetMap en je antwoorden worden daar bewaard. Omdat iedereen vrij kan meewerken aan dit project, kunnen we niet garanderen dat er geen fouten opduiken.Kan je hier niet aanpassen wat je wilt, dan kan je dat zelf via OpenStreetMap.org doen. Groen kan geen enkele verantwoordelijkheid nemen over de kaart.
Je privacy is belangrijk. We tellen wel hoeveel gebruikers deze website bezoeken. We plaatsen een cookie waar geen persoonlijke informatie in bewaard wordt. Als je inlogt, komt er een tweede cookie bij met je inloggegevens.",
"layers": {
- "0": {
+ "forest": {
+ "description": "Een bos is een verzameling bomen, al dan niet als productiehout.",
+ "name": "Bos",
+ "presets": {
+ "0": {
+ "description": "Voeg een ontbrekend bos toe aan de kaart",
+ "title": "Bos"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "{name:nl}"
+ },
+ "1": {
+ "then": "{name}"
+ }
+ },
+ "render": "Bos"
+ }
+ },
+ "nature_reserve_buurtnatuur": {
"description": "Een natuurgebied is een gebied waar actief ruimte gemaakt word voor de natuur. Typisch zijn deze in beheer van Natuurpunt of het Agentschap Natuur en Bos of zijn deze erkend door de overheid.",
"name": "Natuurgebied",
"presets": {
@@ -129,7 +150,7 @@
"render": "Natuurgebied"
}
},
- "1": {
+ "parks": {
"description": "Een park is een publiek toegankelijke, groene ruimte binnen de stad. Ze is typisch ingericht voor recreatief gebruik, met (verharde) wandelpaden, zitbanken, vuilnisbakken, een gezellig vijvertje, ...",
"name": "Park",
"presets": {
@@ -149,27 +170,6 @@
},
"render": "Park"
}
- },
- "2": {
- "description": "Een bos is een verzameling bomen, al dan niet als productiehout.",
- "name": "Bos",
- "presets": {
- "0": {
- "description": "Voeg een ontbrekend bos toe aan de kaart",
- "title": "Bos"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "{name:nl}"
- },
- "1": {
- "then": "{name}"
- }
- },
- "render": "Bos"
- }
}
},
"roamingRenderings": {
@@ -245,15 +245,15 @@
"campersite": {
"description": "Deze website verzamelt en toont alle officiële plaatsen waar een camper mag overnachten en afvalwater kan lozen. Ook jij kan extra gegevens toevoegen, zoals welke services er geboden worden en hoeveel dit kot, ook afbeeldingen en reviews kan je toevoegen. De data wordt op OpenStreetMap opgeslagen en is dus altijd gratis te hergebruiken, ook door andere applicaties.",
"layers": {
- "0": {
+ "caravansites": {
"description": "camperplaatsen",
"name": "Camperplaatsen",
"tagRenderings": {
- "1": {
- "question": "Wat is de naam van deze plaats?",
- "render": "Deze plaats heet {name}"
+ "caravansites-charge": {
+ "question": "Hoeveel kost deze plaats?",
+ "render": "Deze plaats vraagt {charge}"
},
- "2": {
+ "caravansites-fee": {
"mappings": {
"0": {
"then": "Gebruik is betalend"
@@ -264,11 +264,11 @@
},
"question": "Moet men betalen om deze camperplaats te gebruiken?"
},
- "3": {
- "question": "Hoeveel kost deze plaats?",
- "render": "Deze plaats vraagt {charge}"
+ "caravansites-name": {
+ "question": "Wat is de naam van deze plaats?",
+ "render": "Deze plaats heet {name}"
},
- "9": {
+ "caravansites-website": {
"render": "Officiële website: : {website}"
}
},
@@ -293,88 +293,7 @@
"description": "Op deze kaart vind je verschillende klimgelegenheden, zoals klimzalen, bolderzalen en klimmen in de natuur",
"descriptionTail": "De klimkaart is oorspronkelijk gemaakt door Christian Neumann op kletterspots.de.",
"layers": {
- "0": {
- "description": "Een klimclub of organisatie",
- "name": "Klimclub",
- "presets": {
- "0": {
- "description": "Een klimclub",
- "title": "Klimclub"
- },
- "1": {
- "description": "Een VZW die werkt rond klimmen",
- "title": "Een klimorganisatie"
- }
- },
- "tagRenderings": {
- "0": {
- "question": "Wat is de naam van deze klimclub?",
- "render": "{name}"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Klimorganisatie"
- }
- },
- "render": "Klimclub"
- }
- },
- "1": {
- "description": "Een klimzaal",
- "name": "Klimzalen",
- "tagRenderings": {
- "3": {
- "question": "Wat is de naam van dit Klimzaal?",
- "render": "{name}"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Klimzaal {name}"
- }
- },
- "render": "Klimzaal"
- }
- },
- "2": {
- "name": "Klimroute",
- "presets": {
- "0": {
- "title": "Klimroute"
- }
- },
- "tagRenderings": {
- "3": {
- "mappings": {
- "0": {
- "then": "Deze klimroute heeft geen naam"
- }
- },
- "question": "Hoe heet deze klimroute?",
- "render": "{name}"
- },
- "4": {
- "question": "Hoe lang is deze klimroute (in meters)?",
- "render": "Deze klimroute is {canonical(climbing:length)} lang"
- },
- "5": {
- "question": "Hoe moeilijk is deze klimroute volgens het Franse/Belgische systeem?",
- "render": "De klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Klimroute {name}"
- }
- },
- "render": "Klimroute"
- }
- },
- "3": {
+ "climbing": {
"description": "Een klimgelegenheid",
"name": "Klimgelegenheden",
"presets": {
@@ -384,7 +303,14 @@
}
},
"tagRenderings": {
- "6": {
+ "Rock type (crag/rock/cliff only)": {
+ "mappings": {
+ "0": {
+ "then": "Kalksteen"
+ }
+ }
+ },
+ "name": {
"mappings": {
"0": {
"then": "Dit Klimgelegenheid heeft geen naam"
@@ -392,13 +318,6 @@
},
"question": "Wat is de naam van dit Klimgelegenheid?",
"render": "{name}"
- },
- "8": {
- "mappings": {
- "0": {
- "then": "Kalksteen"
- }
- }
}
},
"title": {
@@ -416,14 +335,95 @@
"render": "Klimgelegenheid"
}
},
- "4": {
+ "climbing_club": {
+ "description": "Een klimclub of organisatie",
+ "name": "Klimclub",
+ "presets": {
+ "0": {
+ "description": "Een klimclub",
+ "title": "Klimclub"
+ },
+ "1": {
+ "description": "Een VZW die werkt rond klimmen",
+ "title": "Een klimorganisatie"
+ }
+ },
+ "tagRenderings": {
+ "climbing_club-name": {
+ "question": "Wat is de naam van deze klimclub?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Klimorganisatie"
+ }
+ },
+ "render": "Klimclub"
+ }
+ },
+ "climbing_gym": {
+ "description": "Een klimzaal",
+ "name": "Klimzalen",
+ "tagRenderings": {
+ "name": {
+ "question": "Wat is de naam van dit Klimzaal?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Klimzaal {name}"
+ }
+ },
+ "render": "Klimzaal"
+ }
+ },
+ "climbing_route": {
+ "name": "Klimroute",
+ "presets": {
+ "0": {
+ "title": "Klimroute"
+ }
+ },
+ "tagRenderings": {
+ "Difficulty": {
+ "question": "Hoe moeilijk is deze klimroute volgens het Franse/Belgische systeem?",
+ "render": "De klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem"
+ },
+ "Length": {
+ "question": "Hoe lang is deze klimroute (in meters)?",
+ "render": "Deze klimroute is {canonical(climbing:length)} lang"
+ },
+ "Name": {
+ "mappings": {
+ "0": {
+ "then": "Deze klimroute heeft geen naam"
+ }
+ },
+ "question": "Hoe heet deze klimroute?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Klimroute {name}"
+ }
+ },
+ "render": "Klimroute"
+ }
+ },
+ "maybe_climbing": {
"description": "Een klimgelegenheid?",
"name": "Klimgelegenheiden?",
"tagRenderings": {
- "1": {
+ "climbing-opportunity-name": {
"render": "{name}"
},
- "2": {
+ "climbing-possible": {
"mappings": {
"0": {
"then": "Klimmen is hier niet mogelijk"
@@ -566,11 +566,18 @@
"cyclestreets": {
"description": "Een fietsstraat is een straat waar
Fietsers nog steeds voorrang aan rechts moeten verlenen - ook aan auto's en voetgangers op het zebrapad
Op deze open kaart kan je alle gekende fietsstraten zien en kan je ontbrekende fietsstraten aanduiden. Om de kaart aan te passen, moet je je aanmelden met OpenStreetMap en helemaal inzoomen tot straatniveau. ",
"layers": {
- "0": {
+ "all_streets": {
+ "description": "Laag waar je een straat als fietsstraat kan markeren",
+ "name": "Alle straten",
+ "title": {
+ "render": "Straat"
+ }
+ },
+ "fietsstraat": {
"description": "Een fietsstraat is een straat waar gemotoriseerd verkeer een fietser niet mag inhalen.",
"name": "Fietsstraten"
},
- "1": {
+ "toekomstige_fietsstraat": {
"description": "Deze straat wordt binnenkort een fietsstraat",
"name": "Toekomstige fietsstraat",
"title": {
@@ -581,13 +588,6 @@
},
"render": "Toekomstige fietsstraat"
}
- },
- "2": {
- "description": "Laag waar je een straat als fietsstraat kan markeren",
- "name": "Alle straten",
- "title": {
- "render": "Straat"
- }
}
},
"roamingRenderings": {
@@ -627,7 +627,7 @@
"facadegardens": {
"description": "Ontharde voortuintjes, groene gevels en bomen ín de stad brengen naast rust ook een mooiere stad, een grotere biodiversiteit, een verkoelend effect en een betere luchtkwaliteit. Klimaan VZW en 'Mechelen Klimaatneutraal' willen met het project Klim(t)aan je Gevel bestaande en nieuwe geveltuintjes in kaart brengen als voorbeeld voor mensen zelf een tuintje willen aanleggen of voor stadwandelaars die houden van de natuur. Meer info over het project op klimaan.be.",
"layers": {
- "0": {
+ "facadegardens": {
"description": "Geveltuintjes",
"name": "Geveltuintjes",
"presets": {
@@ -637,40 +637,15 @@
}
},
"tagRenderings": {
- "1": {
+ "facadegardens-description": {
+ "question": "Aanvullende omschrijving van de tuin (indien nodig, en voor zover nog niet omschreven hierboven)",
+ "render": "Meer details: {description}"
+ },
+ "facadegardens-direction": {
"question": "Hoe is de tuin georiënteerd?",
"render": "Oriëntatie: {direction} (waarbij 0=N en 90=O)"
},
- "2": {
- "mappings": {
- "0": {
- "then": "Het is een volle zon tuintje"
- },
- "1": {
- "then": "Het is een halfschaduw tuintje"
- },
- "2": {
- "then": "Het is een schaduw tuintje"
- }
- },
- "question": "Ligt de tuin in zon/half schaduw of schaduw?"
- },
- "3": {
- "mappings": {
- "0": {
- "then": "Er is een regenton"
- },
- "1": {
- "then": "Er is geen regenton"
- }
- },
- "question": "Is er een regenton voorzien bij het tuintje?"
- },
- "4": {
- "question": "Wanneer werd de tuin aangelegd? (vul gewoon een jaartal in)",
- "render": "Aanlegdatum van de tuin: {start_date}"
- },
- "5": {
+ "facadegardens-edible": {
"mappings": {
"0": {
"then": "Er staan eetbare planten"
@@ -681,7 +656,7 @@
},
"question": "Staan er eetbare planten?"
},
- "6": {
+ "facadegardens-plants": {
"mappings": {
"0": {
"then": "Er staat een klimplant"
@@ -698,9 +673,34 @@
},
"question": "Wat voor planten staan hier?"
},
- "7": {
- "question": "Aanvullende omschrijving van de tuin (indien nodig, en voor zover nog niet omschreven hierboven)",
- "render": "Meer details: {description}"
+ "facadegardens-rainbarrel": {
+ "mappings": {
+ "0": {
+ "then": "Er is een regenton"
+ },
+ "1": {
+ "then": "Er is geen regenton"
+ }
+ },
+ "question": "Is er een regenton voorzien bij het tuintje?"
+ },
+ "facadegardens-start_date": {
+ "question": "Wanneer werd de tuin aangelegd? (vul gewoon een jaartal in)",
+ "render": "Aanlegdatum van de tuin: {start_date}"
+ },
+ "facadegardens-sunshine": {
+ "mappings": {
+ "0": {
+ "then": "Het is een volle zon tuintje"
+ },
+ "1": {
+ "then": "Het is een halfschaduw tuintje"
+ },
+ "2": {
+ "then": "Het is een schaduw tuintje"
+ }
+ },
+ "question": "Ligt de tuin in zon/half schaduw of schaduw?"
}
},
"title": {
@@ -719,7 +719,7 @@
"description": "Op deze kaart vind je je favoriete frituur!",
"layers": {
"0": {
- "override": {
+ "friture": {
"name": "Frituren"
}
}
@@ -729,19 +729,7 @@
"fruit_trees": {
"description": "Op deze kaart vindt je boomgaarden en fruitbomen",
"layers": {
- "0": {
- "name": "Boomgaarden",
- "presets": {
- "0": {
- "description": "Voeg een boomgaard toe (als punt - omtrek nog te tekenen)",
- "title": "Boomgaard"
- }
- },
- "title": {
- "render": "Boomgaard"
- }
- },
- "1": {
+ "fruitboom": {
"description": "Een boom",
"name": "Boom",
"presets": {
@@ -751,26 +739,38 @@
}
},
"tagRenderings": {
- "0": {
- "question": "Wat is de soort van deze boom (in het Nederlands)?",
- "render": "De soort is {species:nl}"
- },
- "1": {
- "question": "Wat is het taxon (ras) van deze boom?",
- "render": "Het ras (taxon) van deze boom is {taxon}"
- },
- "2": {
+ "fruitboom-description": {
"question": "Welke beschrijving past bij deze boom?",
"render": "Beschrijving: {description}"
},
- "3": {
+ "fruitboom-ref": {
"question": "Is er een refernetienummer?",
"render": "Referentienummer: {ref}"
+ },
+ "fruitboom-species:nl": {
+ "question": "Wat is de soort van deze boom (in het Nederlands)?",
+ "render": "De soort is {species:nl}"
+ },
+ "fruitboom-taxon": {
+ "question": "Wat is het taxon (ras) van deze boom?",
+ "render": "Het ras (taxon) van deze boom is {taxon}"
}
},
"title": {
"render": "Boom"
}
+ },
+ "orchards": {
+ "name": "Boomgaarden",
+ "presets": {
+ "0": {
+ "description": "Voeg een boomgaard toe (als punt - omtrek nog te tekenen)",
+ "title": "Boomgaard"
+ }
+ },
+ "title": {
+ "render": "Boomgaard"
+ }
}
},
"shortDescription": "Boomgaarden en fruitbomen",
@@ -783,27 +783,11 @@
"grb": {
"description": "GRB Fixup",
"layers": {
- "0": {
+ "grb-fixmes": {
"description": "Dit gebouw heeft een foutmelding",
"name": "Fixmes op gebouwen",
"tagRenderings": {
- "0": {
- "mappings": {
- "0": {
- "then": "Geen huisnummer"
- }
- },
- "question": "Wat is het huisnummer?",
- "render": "Het huisnummer is {addr:housenumber}"
- },
- "1": {
- "render": "De wooneenheid-aanduiding is {addr:unit} "
- },
- "2": {
- "question": "Wat is de straat?",
- "render": "De straat is {addr:street}"
- },
- "3": {
+ "grb-fixme": {
"mappings": {
"0": {
"then": "Geen fixme"
@@ -812,9 +796,25 @@
"question": "Wat zegt de fixme?",
"render": "De fixme is {fixme}"
},
- "4": {
+ "grb-housenumber": {
+ "mappings": {
+ "0": {
+ "then": "Geen huisnummer"
+ }
+ },
+ "question": "Wat is het huisnummer?",
+ "render": "Het huisnummer is {addr:housenumber}"
+ },
+ "grb-min-level": {
"question": "Hoeveel verdiepingen ontbreken?",
"render": "Dit gebouw begint maar op de {building:min_level} verdieping"
+ },
+ "grb-street": {
+ "question": "Wat is de straat?",
+ "render": "De straat is {addr:street}"
+ },
+ "grb-unit": {
+ "render": "De wooneenheid-aanduiding is {addr:unit} "
}
},
"title": {
@@ -852,7 +852,7 @@
},
"openwindpowermap": {
"layers": {
- "0": {
+ "windturbine": {
"name": "windturbine",
"presets": {
"0": {
@@ -911,7 +911,7 @@
},
"shops": {
"layers": {
- "0": {
+ "shops": {
"description": "Een winkel",
"name": "Winkel",
"presets": {
@@ -921,10 +921,19 @@
}
},
"tagRenderings": {
- "1": {
+ "shops-email": {
+ "question": "Wat is het e-mailadres van deze winkel?"
+ },
+ "shops-name": {
"question": "Wat is de naam van deze winkel?"
},
- "2": {
+ "shops-opening_hours": {
+ "question": "Wat zijn de openingsuren van deze winkel?"
+ },
+ "shops-phone": {
+ "question": "Wat is het telefoonnummer?"
+ },
+ "shops-shop": {
"mappings": {
"1": {
"then": "Supermarkt"
@@ -937,17 +946,8 @@
}
}
},
- "3": {
- "question": "Wat is het telefoonnummer?"
- },
- "4": {
+ "shops-website": {
"question": "Wat is de website van deze winkel?"
- },
- "5": {
- "question": "Wat is het e-mailadres van deze winkel?"
- },
- "6": {
- "question": "Wat zijn de openingsuren van deze winkel?"
}
},
"title": {
@@ -959,13 +959,23 @@
"speelplekken": {
"description": "
Welkom bij de Groendoener!
De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan 200 grote en kleine speelplekken liggen er in parken, in bossen en op pleintjes te wachten om ontdekt te worden. De verschillende speelplekken werden getest én goedgekeurd door kinder- en jongerenreporters uit de Zuidrand. Met leuke challenges dagen de reporters jou uit om ook op ontdekking te gaan. Klik op een speelplek op de kaart, bekijk het filmpje en ga op verkenning!
Het project groendoener kadert binnen het strategisch project Beleefbare Open Ruimte in de Antwerpse Zuidrand en is een samenwerking tussen het departement Leefmilieu van provincie Antwerpen, Sportpret vzw, een OpenStreetMap-België Consultent en Createlli vzw. Het project kwam tot stand met steun van Departement Omgeving van de Vlaamse Overheid. ",
"layers": {
- "7": {
+ "walking_routes": {
"name": "Wandelroutes van provincie Antwerpen",
"tagRenderings": {
- "0": {
+ "walk-description": {
+ "render": "
Korte beschrijving:
{description}"
+ },
+ "walk-length": {
"render": "Deze wandeling is {_length:km}km lang"
},
- "1": {
+ "walk-operator": {
+ "question": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?"
+ },
+ "walk-operator-email": {
+ "question": "Naar wie kan men emailen bij problemen rond signalisatie?",
+ "render": "Bij problemen met signalisatie kan men emailen naar {operator:email}"
+ },
+ "walk-type": {
"mappings": {
"0": {
"then": "Dit is een internationale wandelroute"
@@ -980,16 +990,6 @@
"then": "Dit is een lokale wandelroute"
}
}
- },
- "2": {
- "render": "
Korte beschrijving:
{description}"
- },
- "3": {
- "question": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?"
- },
- "4": {
- "question": "Naar wie kan men emailen bij problemen rond signalisatie?",
- "render": "Bij problemen met signalisatie kan men emailen naar {operator:email}"
}
}
}
diff --git a/langs/themes/pt_BR.json b/langs/themes/pt_BR.json
index 1b202d8aa..cc97313f2 100644
--- a/langs/themes/pt_BR.json
+++ b/langs/themes/pt_BR.json
@@ -15,7 +15,7 @@
},
"campersite": {
"layers": {
- "0": {
+ "caravansites": {
"description": "Locais de acampamento",
"name": "Locais de acampamento",
"presets": {
@@ -24,11 +24,18 @@
}
},
"tagRenderings": {
- "1": {
- "question": "Qual o nome deste lugar?",
- "render": "Este lugar é chamado de {name}"
+ "caravansites-capacity": {
+ "question": "Quantos campistas podem ficar aqui? (pule se não houver um número óbvio de vagas ou veículos permitidos)",
+ "render": "{capacity} campistas podem usar este lugar ao mesmo tempo"
},
- "2": {
+ "caravansites-charge": {
+ "question": "Quanto este lugar cobra?",
+ "render": "Este lugar cobra {charge}"
+ },
+ "caravansites-description": {
+ "render": "Mais detalhes sobre este lugar: {description}"
+ },
+ "caravansites-fee": {
"mappings": {
"0": {
"then": "Você precisa pagar para usar"
@@ -39,26 +46,7 @@
},
"question": "Este lugar cobra alguma taxa?"
},
- "3": {
- "question": "Quanto este lugar cobra?",
- "render": "Este lugar cobra {charge}"
- },
- "4": {
- "mappings": {
- "0": {
- "then": "Este local tem uma estação de aterro sanitário"
- },
- "1": {
- "then": "Este local não tem uma estação de aterro sanitário"
- }
- },
- "question": "Este local tem uma estação de aterro sanitário?"
- },
- "5": {
- "question": "Quantos campistas podem ficar aqui? (pule se não houver um número óbvio de vagas ou veículos permitidos)",
- "render": "{capacity} campistas podem usar este lugar ao mesmo tempo"
- },
- "6": {
+ "caravansites-internet": {
"mappings": {
"0": {
"then": "Há acesso à internet"
@@ -72,7 +60,7 @@
},
"question": "Este lugar fornece acesso a internet?"
},
- "7": {
+ "caravansites-internet-fee": {
"mappings": {
"0": {
"then": "Você precisa pagar um extra pelo acesso à internet"
@@ -83,22 +71,7 @@
},
"question": "Você tem que pagar pelo acesso à internet?"
},
- "8": {
- "mappings": {
- "0": {
- "then": "Este lugar tem banheiros"
- },
- "1": {
- "then": "Este lugar não tem banheiros"
- }
- },
- "question": "Este lugar tem banheiros?"
- },
- "9": {
- "question": "Este lugar tem um website?",
- "render": "Site oficial: {website}"
- },
- "10": {
+ "caravansites-long-term": {
"mappings": {
"0": {
"then": "Sim, há alguns pontos para aluguel a longo prazo, mas você também pode ficar em uma base diária"
@@ -109,8 +82,35 @@
},
"question": "Este lugar oferece vagas para aluguel a longo prazo?"
},
- "11": {
- "render": "Mais detalhes sobre este lugar: {description}"
+ "caravansites-name": {
+ "question": "Qual o nome deste lugar?",
+ "render": "Este lugar é chamado de {name}"
+ },
+ "caravansites-sanitary-dump": {
+ "mappings": {
+ "0": {
+ "then": "Este local tem uma estação de aterro sanitário"
+ },
+ "1": {
+ "then": "Este local não tem uma estação de aterro sanitário"
+ }
+ },
+ "question": "Este local tem uma estação de aterro sanitário?"
+ },
+ "caravansites-toilets": {
+ "mappings": {
+ "0": {
+ "then": "Este lugar tem banheiros"
+ },
+ "1": {
+ "then": "Este lugar não tem banheiros"
+ }
+ },
+ "question": "Este lugar tem banheiros?"
+ },
+ "caravansites-website": {
+ "question": "Este lugar tem um website?",
+ "render": "Site oficial: {website}"
}
},
"title": {
@@ -122,11 +122,15 @@
"render": "Local de acampamento {name}"
}
},
- "1": {
+ "dumpstations": {
"description": "Estações de despejo sanitário",
"name": "Estações de despejo sanitário",
"tagRenderings": {
- "1": {
+ "dumpstations-charge": {
+ "question": "Quanto este lugar cobra?",
+ "render": "Este lugar cobra {charge}"
+ },
+ "dumpstations-fee": {
"mappings": {
"0": {
"then": "Você precisa pagar pelo uso"
@@ -137,11 +141,7 @@
},
"question": "Este lugar cobra alguma taxa?"
},
- "2": {
- "question": "Quanto este lugar cobra?",
- "render": "Este lugar cobra {charge}"
- },
- "3": {
+ "dumpstations-waterpoint": {
"mappings": {
"0": {
"then": "Este lugar tem um ponto de água"
diff --git a/langs/themes/ru.json b/langs/themes/ru.json
index e41b737a9..1c8f6076d 100644
--- a/langs/themes/ru.json
+++ b/langs/themes/ru.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "Добро пожаловать на Open Artwork Map, карту статуй, бюстов, граффити и других произведений искусства по всему миру",
"layers": {
- "0": {
+ "artwork": {
"description": "Разнообразные произведения искусства",
"name": "Произведения искусства",
"presets": {
@@ -15,7 +15,11 @@
}
},
"tagRenderings": {
- "1": {
+ "artwork-artist_name": {
+ "question": "Какой художник создал это?",
+ "render": "Создано {artist_name}"
+ },
+ "artwork-artwork_type": {
"mappings": {
"0": {
"then": "Архитектура"
@@ -57,15 +61,11 @@
"question": "К какому типу относится эта работа?",
"render": "Это {artwork_type}"
},
- "2": {
- "question": "Какой художник создал это?",
- "render": "Создано {artist_name}"
- },
- "3": {
+ "artwork-website": {
"question": "Есть ли сайт с более подробной информацией об этой работе?",
"render": "Больше информации на этом сайте"
},
- "4": {
+ "artwork-wikidata": {
"question": "Какая запись в Wikidata соответсвует этой работе?",
"render": "Запись об этой работе в wikidata: {wikidata}"
}
@@ -98,7 +98,7 @@
"campersite": {
"description": "На этом сайте собраны все официальные места остановки кемперов и места, где можно сбросить серую и черную воду. Вы можете добавить подробную информацию о предоставляемых услугах и их стоимости. Добавлять фотографии и отзывы. Это веб-сайт и веб-приложение. Данные хранятся в OpenStreetMap, поэтому они будут бесплатными всегда и могут быть повторно использованы любым приложением.",
"layers": {
- "0": {
+ "caravansites": {
"description": "площадки для кемпинга",
"name": "Площадки для кемпинга",
"presets": {
@@ -108,11 +108,19 @@
}
},
"tagRenderings": {
- "1": {
- "question": "Как называется это место?",
- "render": "Это место называется {name}"
+ "caravansites-capacity": {
+ "question": "Сколько кемперов может здесь остановиться? (пропустите, если нет очевидного количества мест или разрешённых транспортных средств)",
+ "render": "{capacity} кемперов могут использовать это место одновременно"
},
- "2": {
+ "caravansites-charge": {
+ "question": "Сколько это место взимает?",
+ "render": "Это место взимает {charge}"
+ },
+ "caravansites-description": {
+ "question": "Хотели бы вы добавить общее описание этого места? (Не повторяйте информацию, которая уже написана выше или на которую вы уже ответили ранее. Пожалуйста, будьте объективны - мнения должны быть в отзывах)",
+ "render": "Более подробная информация об этом месте: {description}"
+ },
+ "caravansites-fee": {
"mappings": {
"0": {
"then": "За использование нужно платить"
@@ -123,26 +131,7 @@
},
"question": "Взимается ли в этом месте плата?"
},
- "3": {
- "question": "Сколько это место взимает?",
- "render": "Это место взимает {charge}"
- },
- "4": {
- "mappings": {
- "0": {
- "then": "В этом кемпинге есть место для слива отходов из туалетных резервуаров"
- },
- "1": {
- "then": "В этом кемпинге нет места для слива отходов из туалетных резервуаров"
- }
- },
- "question": "В этом кемпинге есть место для слива отходов из туалетных резервуаров?"
- },
- "5": {
- "question": "Сколько кемперов может здесь остановиться? (пропустите, если нет очевидного количества мест или разрешённых транспортных средств)",
- "render": "{capacity} кемперов могут использовать это место одновременно"
- },
- "6": {
+ "caravansites-internet": {
"mappings": {
"0": {
"then": "Есть доступ в Интернет"
@@ -156,7 +145,7 @@
},
"question": "Предоставляет ли это место доступ в Интернет?"
},
- "7": {
+ "caravansites-internet-fee": {
"mappings": {
"0": {
"then": "За доступ в Интернет нужно платить дополнительно"
@@ -167,22 +156,7 @@
},
"question": "Нужно ли платить за доступ в Интернет?"
},
- "8": {
- "mappings": {
- "0": {
- "then": "В этом месте есть туалеты"
- },
- "1": {
- "then": "В этом месте нет туалетов"
- }
- },
- "question": "Здесь есть туалеты?"
- },
- "9": {
- "question": "Есть ли у этого места веб-сайт?",
- "render": "Официальный сайт: {website}"
- },
- "10": {
+ "caravansites-long-term": {
"mappings": {
"0": {
"then": "Да, здесь есть места для долгосрочной аренды, но вы можете остановиться и на сутки"
@@ -196,9 +170,35 @@
},
"question": "Предлагает ли эта площадка места для долгосрочной аренды?"
},
- "11": {
- "question": "Хотели бы вы добавить общее описание этого места? (Не повторяйте информацию, которая уже написана выше или на которую вы уже ответили ранее. Пожалуйста, будьте объективны - мнения должны быть в отзывах)",
- "render": "Более подробная информация об этом месте: {description}"
+ "caravansites-name": {
+ "question": "Как называется это место?",
+ "render": "Это место называется {name}"
+ },
+ "caravansites-sanitary-dump": {
+ "mappings": {
+ "0": {
+ "then": "В этом кемпинге есть место для слива отходов из туалетных резервуаров"
+ },
+ "1": {
+ "then": "В этом кемпинге нет места для слива отходов из туалетных резервуаров"
+ }
+ },
+ "question": "В этом кемпинге есть место для слива отходов из туалетных резервуаров?"
+ },
+ "caravansites-toilets": {
+ "mappings": {
+ "0": {
+ "then": "В этом месте есть туалеты"
+ },
+ "1": {
+ "then": "В этом месте нет туалетов"
+ }
+ },
+ "question": "Здесь есть туалеты?"
+ },
+ "caravansites-website": {
+ "question": "Есть ли у этого места веб-сайт?",
+ "render": "Официальный сайт: {website}"
}
},
"title": {
@@ -210,59 +210,11 @@
"render": "Место для кемпинга {name}"
}
},
- "1": {
+ "dumpstations": {
"description": "Ассенизационные сливные станции",
"name": "Места для слива отходов из туалетных резервуаров",
"tagRenderings": {
- "1": {
- "mappings": {
- "0": {
- "then": "За использование нужно платить"
- },
- "1": {
- "then": "Можно использовать бесплатно"
- }
- },
- "question": "Взимается ли в этом месте плата?"
- },
- "2": {
- "question": "Сколько это место взимает?",
- "render": "Это место взимает {charge}"
- },
- "3": {
- "mappings": {
- "0": {
- "then": "В этом месте есть водоснабжение"
- },
- "1": {
- "then": "В этом месте нет водоснабжения"
- }
- },
- "question": "Есть ли в этом месте водоснабжение?"
- },
- "4": {
- "mappings": {
- "0": {
- "then": "Вы можете утилизировать серую воду здесь"
- },
- "1": {
- "then": "Здесь нельзя утилизировать серую воду"
- }
- },
- "question": "Можно ли здесь утилизировать серую воду?"
- },
- "5": {
- "mappings": {
- "0": {
- "then": "Вы можете утилизировать отходы химических туалетов здесь"
- },
- "1": {
- "then": "Здесь нельзя утилизировать отходы химических туалетов"
- }
- },
- "question": "Можно ли здесь утилизировать отходы химических туалетов?"
- },
- "6": {
+ "dumpstations-access": {
"mappings": {
"2": {
"then": "Любой может воспользоваться этой станцией утилизации"
@@ -273,9 +225,57 @@
},
"question": "Кто может использовать эту станцию утилизации?"
},
- "7": {
+ "dumpstations-charge": {
+ "question": "Сколько это место взимает?",
+ "render": "Это место взимает {charge}"
+ },
+ "dumpstations-chemical-waste": {
+ "mappings": {
+ "0": {
+ "then": "Вы можете утилизировать отходы химических туалетов здесь"
+ },
+ "1": {
+ "then": "Здесь нельзя утилизировать отходы химических туалетов"
+ }
+ },
+ "question": "Можно ли здесь утилизировать отходы химических туалетов?"
+ },
+ "dumpstations-fee": {
+ "mappings": {
+ "0": {
+ "then": "За использование нужно платить"
+ },
+ "1": {
+ "then": "Можно использовать бесплатно"
+ }
+ },
+ "question": "Взимается ли в этом месте плата?"
+ },
+ "dumpstations-grey-water": {
+ "mappings": {
+ "0": {
+ "then": "Вы можете утилизировать серую воду здесь"
+ },
+ "1": {
+ "then": "Здесь нельзя утилизировать серую воду"
+ }
+ },
+ "question": "Можно ли здесь утилизировать серую воду?"
+ },
+ "dumpstations-network": {
"question": "К какой сети относится эта станция? (пропустите, если неприменимо)",
"render": "Эта станция - часть сети {network}"
+ },
+ "dumpstations-waterpoint": {
+ "mappings": {
+ "0": {
+ "then": "В этом месте есть водоснабжение"
+ },
+ "1": {
+ "then": "В этом месте нет водоснабжения"
+ }
+ },
+ "question": "Есть ли в этом месте водоснабжение?"
}
},
"title": {
@@ -298,7 +298,14 @@
"description": "На этой карте вы найдете различные возможности для скалолазания, такие как скалодромы, залы для боулдеринга и скалы на природе.",
"descriptionTail": "Создатель карты скалолазания — Christian Neumann. Пожалуйста, пишите если у вас есть отзыв или вопросы.
",
"layers": {
- "climbing": {
+ "0": {
+ "description": "A climbing club or organisations",
+ "name": "Climbing club",
+ "presets": {
+ "0": {
+ "description": "A climbing club",
+ "title": "Climbing club"
+ },
+ "1": {
+ "description": "A NGO working around climbing",
+ "title": "Climbing NGO"
+ }
+ },
+ "tagRenderings": {
+ "climbing_club-name": {
+ "question": "What is the name of this climbing club or NGO?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Climbing NGO"
+ }
+ },
+ "render": "Climbing club"
+ }
+ },
+ "1": {
+ "description": "A climbing gym",
+ "name": "Climbing gyms",
+ "tagRenderings": {
+ "name": {
+ "question": "What is the name of this climbing gym?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Climbing gym {name}"
+ }
+ },
+ "render": "Climbing gym"
+ }
+ },
+ "2": {
+ "name": "Climbing routes",
+ "presets": {
+ "0": {
+ "title": "Climbing route"
+ }
+ },
+ "tagRenderings": {
+ "Bolts": {
+ "mappings": {
+ "0": {
+ "then": "This route is not bolted"
+ },
+ "1": {
+ "then": "This route is not bolted"
+ }
+ },
+ "question": "How much bolts does this route have before reaching the moulinette?",
+ "render": "This route has {climbing:bolts} bolts"
+ },
+ "Difficulty": {
+ "question": "What is the difficulty of this climbing route according to the french/belgian system?",
+ "render": "The difficulty is {climbing:grade:french} according to the french/belgian system"
+ },
+ "Length": {
+ "question": "How long is this climbing route (in meters)?",
+ "render": "This route is {canonical(climbing:length)} long"
+ },
+ "Name": {
+ "mappings": {
+ "0": {
+ "then": "This climbing route doesn't have a name"
+ }
+ },
+ "question": "What is the name of this climbing route?",
+ "render": "{name}"
+ },
+ "Rock type": {
+ "render": "The rock type is {_embedding_features_with_rock:rock} as stated on the surrounding crag"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Climbing route {name}"
+ }
+ },
+ "render": "Climbing route"
+ }
+ },
+ "3": {
"description": "A climbing opportunity",
"name": "Climbing opportunities",
"presets": {
@@ -403,103 +499,7 @@
"render": "Climbing opportunity"
}
},
- "climbing_club": {
- "description": "A climbing club or organisations",
- "name": "Climbing club",
- "presets": {
- "0": {
- "description": "A climbing club",
- "title": "Climbing club"
- },
- "1": {
- "description": "A NGO working around climbing",
- "title": "Climbing NGO"
- }
- },
- "tagRenderings": {
- "climbing_club-name": {
- "question": "What is the name of this climbing club or NGO?",
- "render": "{name}"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Climbing NGO"
- }
- },
- "render": "Climbing club"
- }
- },
- "climbing_gym": {
- "description": "A climbing gym",
- "name": "Climbing gyms",
- "tagRenderings": {
- "name": {
- "question": "What is the name of this climbing gym?",
- "render": "{name}"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Climbing gym {name}"
- }
- },
- "render": "Climbing gym"
- }
- },
- "climbing_route": {
- "name": "Climbing routes",
- "presets": {
- "0": {
- "title": "Climbing route"
- }
- },
- "tagRenderings": {
- "Bolts": {
- "mappings": {
- "0": {
- "then": "This route is not bolted"
- },
- "1": {
- "then": "This route is not bolted"
- }
- },
- "question": "How much bolts does this route have before reaching the moulinette?",
- "render": "This route has {climbing:bolts} bolts"
- },
- "Difficulty": {
- "question": "What is the difficulty of this climbing route according to the french/belgian system?",
- "render": "The difficulty is {climbing:grade:french} according to the french/belgian system"
- },
- "Length": {
- "question": "How long is this climbing route (in meters)?",
- "render": "This route is {canonical(climbing:length)} long"
- },
- "Name": {
- "mappings": {
- "0": {
- "then": "This climbing route doesn't have a name"
- }
- },
- "question": "What is the name of this climbing route?",
- "render": "{name}"
- },
- "Rock type": {
- "render": "The rock type is {_embedding_features_with_rock:rock} as stated on the surrounding crag"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Climbing route {name}"
- }
- },
- "render": "Climbing route"
- }
- },
- "maybe_climbing": {
+ "4": {
"description": "A climbing opportunity?",
"name": "Climbing opportunities?",
"tagRenderings": {
@@ -668,7 +668,7 @@
"cycle_highways": {
"description": "This map shows cycle highways",
"layers": {
- "cycle_highways": {
+ "0": {
"name": "cycle highways",
"title": {
"render": "cycle highway"
@@ -685,18 +685,11 @@
"cyclestreets": {
"description": "A cyclestreet is is a street where motorized traffic is not allowed to overtake cyclists. They are signposted by a special traffic sign. Cyclestreets can be found in the Netherlands and Belgium, but also in Germany and France. ",
"layers": {
- "all_streets": {
- "description": "Layer to mark any street as cyclestreet",
- "name": "All streets",
- "title": {
- "render": "Street"
- }
- },
- "fietsstraat": {
+ "0": {
"description": "A cyclestreet is a street where motorized traffic is not allowed to overtake a cyclist",
"name": "Cyclestreets"
},
- "toekomstige_fietsstraat": {
+ "1": {
"description": "This street will become a cyclestreet soon",
"name": "Future cyclestreet",
"title": {
@@ -707,6 +700,13 @@
},
"render": "Future cyclestreet"
}
+ },
+ "2": {
+ "description": "Layer to mark any street as cyclestreet",
+ "name": "All streets",
+ "title": {
+ "render": "Street"
+ }
}
},
"roamingRenderings": {
@@ -746,7 +746,7 @@
"facadegardens": {
"description": "Facade gardens, green facades and trees in the city not only bring peace and quiet, but also a more beautiful city, greater biodiversity, a cooling effect and better air quality. Klimaan VZW and Mechelen Klimaatneutraal want to map existing and new facade gardens as an example for people who want to build their own garden or for city walkers who love nature. More info about the project at klimaan.be.",
"layers": {
- "facadegardens": {
+ "0": {
"description": "Facade gardens",
"name": "Facade gardens",
"presets": {
@@ -836,7 +836,7 @@
"fritures": {
"layers": {
"0": {
- "friture": {
+ "override": {
"name": "Fries shop"
}
}
@@ -849,7 +849,7 @@
"hackerspaces": {
"description": "On this map you can see hackerspaces, add a new hackerspace or update data directly",
"layers": {
- "hackerspaces": {
+ "0": {
"description": "Hackerspace",
"icon": {
"mappings": {
@@ -926,137 +926,7 @@
"hailhydrant": {
"description": "On this map you can find and update hydrants, fire stations, ambulance stations, and extinguishers in your favorite neighborhoods. \n\nYou can track your precise location (mobile only) and select layers that are relevant for you in the bottom left corner. You can also use this tool to add or edit pins (points of interest) to the map and provide additional details by answering available questions. \n\nAll changes you make will automatically be saved in the global database of OpenStreetMap and can be freely re-used by others.",
"layers": {
- "ambulancestation": {
- "description": "An ambulance station is an area for storage of ambulance vehicles, medical equipment, personal protective equipment, and other medical supplies.",
- "name": "Map of ambulance stations",
- "presets": {
- "0": {
- "description": "Add an ambulance station to the map",
- "title": "Ambulance station"
- }
- },
- "tagRenderings": {
- "ambulance-agency": {
- "question": "What agency operates this station?",
- "render": "This station is operated by {operator}."
- },
- "ambulance-name": {
- "question": "What is the name of this ambulance station?",
- "render": "This station is called {name}."
- },
- "ambulance-operator-type": {
- "mappings": {
- "0": {
- "then": "The station is operated by the government."
- },
- "1": {
- "then": "The station is operated by a community-based, or informal organization."
- },
- "2": {
- "then": "The station is operated by a formal group of volunteers."
- },
- "3": {
- "then": "The station is privately operated."
- }
- },
- "question": "How is the station operator classified?",
- "render": "The operator is a(n) {operator:type} entity."
- },
- "ambulance-place": {
- "question": "Where is the station located? (e.g. name of neighborhood, villlage, or town)",
- "render": "This station is found within {addr:place}."
- },
- "ambulance-street": {
- "question": " What is the street name where the station located?",
- "render": "This station is along a highway called {addr:street}."
- }
- },
- "title": {
- "render": "Ambulance Station"
- }
- },
- "extinguisher": {
- "description": "Map layer to show fire hydrants.",
- "name": "Map of fire extinguishers.",
- "presets": {
- "0": {
- "description": "A fire extinguisher is a small, portable device used to stop a fire",
- "title": "Fire extinguisher"
- }
- },
- "tagRenderings": {
- "extinguisher-location": {
- "mappings": {
- "0": {
- "then": "Found indoors."
- },
- "1": {
- "then": "Found outdoors."
- }
- },
- "question": "Where is it positioned?",
- "render": "Location: {location}"
- }
- },
- "title": {
- "render": "Extinguishers"
- }
- },
- "fire_stations": {
- "description": "Map layer to show fire stations.",
- "name": "Map of fire stations",
- "presets": {
- "0": {
- "description": "A fire station is a place where the fire trucks and firefighters are located when not in operation.",
- "title": "Fire station"
- }
- },
- "tagRenderings": {
- "station-agency": {
- "mappings": {
- "0": {
- "then": "Bureau of Fire Protection"
- }
- },
- "question": "What agency operates this station?",
- "render": "This station is operated by {operator}."
- },
- "station-name": {
- "question": "What is the name of this fire station?",
- "render": "This station is called {name}."
- },
- "station-operator": {
- "mappings": {
- "0": {
- "then": "The station is operated by the government."
- },
- "1": {
- "then": "The station is operated by a community-based, or informal organization."
- },
- "2": {
- "then": "The station is operated by a formal group of volunteers."
- },
- "3": {
- "then": "The station is privately operated."
- }
- },
- "question": "How is the station operator classified?",
- "render": "The operator is a(n) {operator:type} entity."
- },
- "station-place": {
- "question": "Where is the station located? (e.g. name of neighborhood, villlage, or town)",
- "render": "This station is found within {addr:place}."
- },
- "station-street": {
- "question": " What is the street name where the station located?",
- "render": "This station is along a highway called {addr:street}."
- }
- },
- "title": {
- "render": "Fire Station"
- }
- },
- "hydrants": {
+ "0": {
"description": "Map layer to show fire hydrants.",
"name": "Map of hydrants",
"presets": {
@@ -1121,6 +991,136 @@
"title": {
"render": "Hydrant"
}
+ },
+ "1": {
+ "description": "Map layer to show fire hydrants.",
+ "name": "Map of fire extinguishers.",
+ "presets": {
+ "0": {
+ "description": "A fire extinguisher is a small, portable device used to stop a fire",
+ "title": "Fire extinguisher"
+ }
+ },
+ "tagRenderings": {
+ "extinguisher-location": {
+ "mappings": {
+ "0": {
+ "then": "Found indoors."
+ },
+ "1": {
+ "then": "Found outdoors."
+ }
+ },
+ "question": "Where is it positioned?",
+ "render": "Location: {location}"
+ }
+ },
+ "title": {
+ "render": "Extinguishers"
+ }
+ },
+ "2": {
+ "description": "Map layer to show fire stations.",
+ "name": "Map of fire stations",
+ "presets": {
+ "0": {
+ "description": "A fire station is a place where the fire trucks and firefighters are located when not in operation.",
+ "title": "Fire station"
+ }
+ },
+ "tagRenderings": {
+ "station-agency": {
+ "mappings": {
+ "0": {
+ "then": "Bureau of Fire Protection"
+ }
+ },
+ "question": "What agency operates this station?",
+ "render": "This station is operated by {operator}."
+ },
+ "station-name": {
+ "question": "What is the name of this fire station?",
+ "render": "This station is called {name}."
+ },
+ "station-operator": {
+ "mappings": {
+ "0": {
+ "then": "The station is operated by the government."
+ },
+ "1": {
+ "then": "The station is operated by a community-based, or informal organization."
+ },
+ "2": {
+ "then": "The station is operated by a formal group of volunteers."
+ },
+ "3": {
+ "then": "The station is privately operated."
+ }
+ },
+ "question": "How is the station operator classified?",
+ "render": "The operator is a(n) {operator:type} entity."
+ },
+ "station-place": {
+ "question": "Where is the station located? (e.g. name of neighborhood, villlage, or town)",
+ "render": "This station is found within {addr:place}."
+ },
+ "station-street": {
+ "question": " What is the street name where the station located?",
+ "render": "This station is along a highway called {addr:street}."
+ }
+ },
+ "title": {
+ "render": "Fire Station"
+ }
+ },
+ "3": {
+ "description": "An ambulance station is an area for storage of ambulance vehicles, medical equipment, personal protective equipment, and other medical supplies.",
+ "name": "Map of ambulance stations",
+ "presets": {
+ "0": {
+ "description": "Add an ambulance station to the map",
+ "title": "Ambulance station"
+ }
+ },
+ "tagRenderings": {
+ "ambulance-agency": {
+ "question": "What agency operates this station?",
+ "render": "This station is operated by {operator}."
+ },
+ "ambulance-name": {
+ "question": "What is the name of this ambulance station?",
+ "render": "This station is called {name}."
+ },
+ "ambulance-operator-type": {
+ "mappings": {
+ "0": {
+ "then": "The station is operated by the government."
+ },
+ "1": {
+ "then": "The station is operated by a community-based, or informal organization."
+ },
+ "2": {
+ "then": "The station is operated by a formal group of volunteers."
+ },
+ "3": {
+ "then": "The station is privately operated."
+ }
+ },
+ "question": "How is the station operator classified?",
+ "render": "The operator is a(n) {operator:type} entity."
+ },
+ "ambulance-place": {
+ "question": "Where is the station located? (e.g. name of neighborhood, villlage, or town)",
+ "render": "This station is found within {addr:place}."
+ },
+ "ambulance-street": {
+ "question": " What is the street name where the station located?",
+ "render": "This station is along a highway called {addr:street}."
+ }
+ },
+ "title": {
+ "render": "Ambulance Station"
+ }
}
},
"shortDescription": "Map to show hydrants, extinguishers, fire stations, and ambulance stations.",
@@ -1144,7 +1144,7 @@
"openwindpowermap": {
"description": "A map for showing and editing wind turbines.",
"layers": {
- "windturbine": {
+ "0": {
"name": "wind turbine",
"presets": {
"0": {
@@ -1227,7 +1227,7 @@
"shops": {
"description": "On this map, one can mark basic information about shops, add opening hours and phone numbers",
"layers": {
- "shops": {
+ "0": {
"description": "A shop",
"name": "Shop",
"presets": {
diff --git a/langs/themes/es.json b/langs/themes/es.json
index 3b31ed8c4..80196c809 100644
--- a/langs/themes/es.json
+++ b/langs/themes/es.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "Bienvenido a Open Artwork Map, un mapa de estatuas, bustos, grafitis y otras obras de arte de todo el mundo",
"layers": {
- "artwork": {
+ "0": {
"description": "Diversas piezas de obras de arte",
"name": "Obras de arte",
"presets": {
diff --git a/langs/themes/fr.json b/langs/themes/fr.json
index 83ab9d4ce..530b9acb0 100644
--- a/langs/themes/fr.json
+++ b/langs/themes/fr.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "Bienvenue sur la carte ouverte des œuvres d'art, une carte des statues, fresques, ... du monde entier",
"layers": {
- "artwork": {
+ "0": {
"description": "Diverses œuvres d'art",
"name": "Œuvres d'art",
"presets": {
@@ -98,7 +98,7 @@
"campersite": {
"description": "Ce site collecte les zones de camping officielles ainsi que les aires de vidange. Il est possible d’ajouter des détails à propos des services proposés ainsi que leurs coûts. Ajoutez vos images et avis. C’est un site et une application. Les données sont stockées sur OpenStreetMap, elles seront toujours gratuites et peuvent être réutilisées par n’importe quelle application.",
"layers": {
- "caravansites": {
+ "0": {
"description": "campings",
"name": "Campings",
"presets": {
@@ -210,7 +210,7 @@
"render": "Camping {name}"
}
},
- "dumpstations": {
+ "1": {
"description": "Site de vidange",
"name": "Site de vidange",
"presets": {
@@ -324,7 +324,103 @@
"description": "Cette carte indique les sites d’escalades comme les salles d’escalade ou les sites naturels.",
"descriptionTail": "La carte a été créée par Christian Neumann. Merci de le contacter pour des avis ou des questions.
",
"layers": {
- "climbing": {
+ "0": {
+ "description": "Club ou association d’escalade",
+ "name": "Club d’escalade",
+ "presets": {
+ "0": {
+ "description": "Un club d’escalade",
+ "title": "Club d’escalade"
+ },
+ "1": {
+ "description": "Une association d’escalade",
+ "title": "Association d’escalade"
+ }
+ },
+ "tagRenderings": {
+ "climbing_club-name": {
+ "question": "Quel est le nom du club ou de l’association ?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Association d’escalade"
+ }
+ },
+ "render": "Club d’escalade"
+ }
+ },
+ "1": {
+ "description": "Une salle d’escalade",
+ "name": "Salle d’escalade",
+ "tagRenderings": {
+ "name": {
+ "question": "Quel est le nom de la salle d’escalade ?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Salle d’escalade {name}"
+ }
+ },
+ "render": "Salle d’escalade"
+ }
+ },
+ "2": {
+ "name": "Voies d’escalade",
+ "presets": {
+ "0": {
+ "title": "Voie d’escalade"
+ }
+ },
+ "tagRenderings": {
+ "Bolts": {
+ "mappings": {
+ "0": {
+ "then": "Cette voie n’a pas de prises"
+ },
+ "1": {
+ "then": "Cette voie n’a pas de prises"
+ }
+ },
+ "question": "Combien de prises cette voie possède avant d’atteindre la moulinette ?",
+ "render": "Cette voie a {climbing:bolts} prises"
+ },
+ "Difficulty": {
+ "question": "Quelle est la difficulté de cette voie selon le système franco-belge ?",
+ "render": "Selon le système franco-belge, la difficulté de cette voie est de {climbing:grade:french}"
+ },
+ "Length": {
+ "question": "Quelle est la longueur de cette voie (en mètres) ?",
+ "render": "Cette voie fait {canonical(climbing:length)} de long"
+ },
+ "Name": {
+ "mappings": {
+ "0": {
+ "then": "Cette voie n’a pas de nom"
+ }
+ },
+ "question": "Quel est le nom de cette voie d’escalade ?",
+ "render": "{name}"
+ },
+ "Rock type": {
+ "render": "Le type de roche est {_embedding_features_with_rock:rock} selon le mur"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Voie d’escalade {name}"
+ }
+ },
+ "render": "Voie d’escalade"
+ }
+ },
+ "3": {
"description": "Opportunité d’escalade",
"name": "Opportunité d’escalade",
"presets": {
@@ -390,103 +486,7 @@
"render": "Opportunité d’escalade"
}
},
- "climbing_club": {
- "description": "Club ou association d’escalade",
- "name": "Club d’escalade",
- "presets": {
- "0": {
- "description": "Un club d’escalade",
- "title": "Club d’escalade"
- },
- "1": {
- "description": "Une association d’escalade",
- "title": "Association d’escalade"
- }
- },
- "tagRenderings": {
- "climbing_club-name": {
- "question": "Quel est le nom du club ou de l’association ?",
- "render": "{name}"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Association d’escalade"
- }
- },
- "render": "Club d’escalade"
- }
- },
- "climbing_gym": {
- "description": "Une salle d’escalade",
- "name": "Salle d’escalade",
- "tagRenderings": {
- "name": {
- "question": "Quel est le nom de la salle d’escalade ?",
- "render": "{name}"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Salle d’escalade {name}"
- }
- },
- "render": "Salle d’escalade"
- }
- },
- "climbing_route": {
- "name": "Voies d’escalade",
- "presets": {
- "0": {
- "title": "Voie d’escalade"
- }
- },
- "tagRenderings": {
- "Bolts": {
- "mappings": {
- "0": {
- "then": "Cette voie n’a pas de prises"
- },
- "1": {
- "then": "Cette voie n’a pas de prises"
- }
- },
- "question": "Combien de prises cette voie possède avant d’atteindre la moulinette ?",
- "render": "Cette voie a {climbing:bolts} prises"
- },
- "Difficulty": {
- "question": "Quelle est la difficulté de cette voie selon le système franco-belge ?",
- "render": "Selon le système franco-belge, la difficulté de cette voie est de {climbing:grade:french}"
- },
- "Length": {
- "question": "Quelle est la longueur de cette voie (en mètres) ?",
- "render": "Cette voie fait {canonical(climbing:length)} de long"
- },
- "Name": {
- "mappings": {
- "0": {
- "then": "Cette voie n’a pas de nom"
- }
- },
- "question": "Quel est le nom de cette voie d’escalade ?",
- "render": "{name}"
- },
- "Rock type": {
- "render": "Le type de roche est {_embedding_features_with_rock:rock} selon le mur"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Voie d’escalade {name}"
- }
- },
- "render": "Voie d’escalade"
- }
- },
- "maybe_climbing": {
+ "4": {
"description": "Opportunité d’escalade ?",
"name": "Opportunités d’escalade ?",
"tagRenderings": {
@@ -621,7 +621,7 @@
"facadegardens": {
"description": "Les jardins muraux en ville n’apportent pas seulement paix et tranquillité mais contribuent à embellir la ville, favoriser la biodiversité, régule la température et assainit l’air. Klimaan VZW et Mechelen Klimaatneutraal veulent cartographier les jardins muraux comme exemple pour les personnes souhaitant en construire ainsi que celles aimant la nature. Plus d’infos sur klimaan.be.",
"layers": {
- "facadegardens": {
+ "0": {
"description": "Jardins muraux",
"name": "Jardins muraux",
"presets": {
@@ -708,7 +708,7 @@
"fritures": {
"layers": {
"0": {
- "friture": {
+ "override": {
"name": "Friteries"
}
}
@@ -722,137 +722,7 @@
"hailhydrant": {
"description": "Sur cette carte on trouve et met à jour les bornes incendies, extincteurs, casernes de pompiers et ambulanciers dans son quartier. Les options en haut à gauche permettent de localiser sa position (sur téléphone) et de filtrer les éléments. Il est possible d’utiliser cet outil pour ajouter et éditer les points d’intérêt de la carte et d’y ajouter des détails en répondant aux questions. Toutes les modifications sont automatiquement enregistrées dans la base de données OpenStreetMap et peuvent êtres librement réutilisées par d’autres.",
"layers": {
- "ambulancestation": {
- "description": "Une station d’ambulance est un lieu où sont stockés les véhicules d’urgence ainsi que de l’équipement médical.",
- "name": "Couche des ambulances",
- "presets": {
- "0": {
- "description": "Ajouter une station d’ambulances à la carte",
- "title": "Station d’ambulances"
- }
- },
- "tagRenderings": {
- "ambulance-agency": {
- "question": "Quel est l’exploitant de la station ?",
- "render": "Cette station est opérée par {operator}."
- },
- "ambulance-name": {
- "question": "Quel est le nom de cette station ?",
- "render": "Cette station s’appelle {name}."
- },
- "ambulance-operator-type": {
- "mappings": {
- "0": {
- "then": "La station est opérée par le gouvernement."
- },
- "1": {
- "then": "La station est opérée par une organisation informelle."
- },
- "2": {
- "then": "La station est opérée par un groupe officiel de bénévoles."
- },
- "3": {
- "then": "La station est opérée par un groupe privé."
- }
- },
- "question": "Quel est le type d’exploitant ?",
- "render": "L’exploitant est de type {operator:type}."
- },
- "ambulance-place": {
- "question": "Dans quelle localité la station est-elle située ?",
- "render": "La station fait partie de {addr:place}."
- },
- "ambulance-street": {
- "question": " Quel est le nom de la rue où la station se situe ?",
- "render": "La station fait partie de {addr:street}."
- }
- },
- "title": {
- "render": "Station d’ambulances"
- }
- },
- "extinguisher": {
- "description": "Couche des lances à incendie.",
- "name": "Couche des extincteurs.",
- "presets": {
- "0": {
- "description": "Un extincteur est un appareil portatif servant à éteindre un feu",
- "title": "Extincteur"
- }
- },
- "tagRenderings": {
- "extinguisher-location": {
- "mappings": {
- "0": {
- "then": "Intérieur."
- },
- "1": {
- "then": "Extérieur."
- }
- },
- "question": "Où est-elle positionnée ?",
- "render": "Emplacement : {location}"
- }
- },
- "title": {
- "render": "Exctincteurs"
- }
- },
- "fire_stations": {
- "description": "Couche des stations de pompiers.",
- "name": "Couche des stations de pompiers",
- "presets": {
- "0": {
- "description": "Une caserne de pompiers est un lieu où les pompiers et leur équipements sont situés en dehors des missions.",
- "title": "Caserne de pompiers"
- }
- },
- "tagRenderings": {
- "station-agency": {
- "mappings": {
- "0": {
- "then": "Brigade de Protection du Feu"
- }
- },
- "question": "Quel est l’exploitant de la station ?",
- "render": "Cette station est opérée par {operator}."
- },
- "station-name": {
- "question": "Quel est le nom de la station ?",
- "render": "Cette station s’appelle {name}."
- },
- "station-operator": {
- "mappings": {
- "0": {
- "then": "La station est opérée par le gouvernement."
- },
- "1": {
- "then": "La station est opérée par une organisation informelle."
- },
- "2": {
- "then": "La station est opérée par un groupe officiel de bénévoles."
- },
- "3": {
- "then": "La station est opérée par un groupe privé."
- }
- },
- "question": "Quel est le type d’exploitant ?",
- "render": "L’exploitant est de type {operator:type}."
- },
- "station-place": {
- "question": "Dans quelle localité la station est-elle située ?",
- "render": "La station fait partie de {addr:place}."
- },
- "station-street": {
- "question": " Quel est le nom de la rue dans lequel elle se situe ?",
- "render": "La station fait partie de la {addr:street}."
- }
- },
- "title": {
- "render": "Station de pompiers"
- }
- },
- "hydrants": {
+ "0": {
"description": "Couche des bornes incendie.",
"name": "Carte des bornes incendie",
"presets": {
@@ -917,6 +787,136 @@
"title": {
"render": "Bornes incendie"
}
+ },
+ "1": {
+ "description": "Couche des lances à incendie.",
+ "name": "Couche des extincteurs.",
+ "presets": {
+ "0": {
+ "description": "Un extincteur est un appareil portatif servant à éteindre un feu",
+ "title": "Extincteur"
+ }
+ },
+ "tagRenderings": {
+ "extinguisher-location": {
+ "mappings": {
+ "0": {
+ "then": "Intérieur."
+ },
+ "1": {
+ "then": "Extérieur."
+ }
+ },
+ "question": "Où est-elle positionnée ?",
+ "render": "Emplacement : {location}"
+ }
+ },
+ "title": {
+ "render": "Exctincteurs"
+ }
+ },
+ "2": {
+ "description": "Couche des stations de pompiers.",
+ "name": "Couche des stations de pompiers",
+ "presets": {
+ "0": {
+ "description": "Une caserne de pompiers est un lieu où les pompiers et leur équipements sont situés en dehors des missions.",
+ "title": "Caserne de pompiers"
+ }
+ },
+ "tagRenderings": {
+ "station-agency": {
+ "mappings": {
+ "0": {
+ "then": "Brigade de Protection du Feu"
+ }
+ },
+ "question": "Quel est l’exploitant de la station ?",
+ "render": "Cette station est opérée par {operator}."
+ },
+ "station-name": {
+ "question": "Quel est le nom de la station ?",
+ "render": "Cette station s’appelle {name}."
+ },
+ "station-operator": {
+ "mappings": {
+ "0": {
+ "then": "La station est opérée par le gouvernement."
+ },
+ "1": {
+ "then": "La station est opérée par une organisation informelle."
+ },
+ "2": {
+ "then": "La station est opérée par un groupe officiel de bénévoles."
+ },
+ "3": {
+ "then": "La station est opérée par un groupe privé."
+ }
+ },
+ "question": "Quel est le type d’exploitant ?",
+ "render": "L’exploitant est de type {operator:type}."
+ },
+ "station-place": {
+ "question": "Dans quelle localité la station est-elle située ?",
+ "render": "La station fait partie de {addr:place}."
+ },
+ "station-street": {
+ "question": " Quel est le nom de la rue dans lequel elle se situe ?",
+ "render": "La station fait partie de la {addr:street}."
+ }
+ },
+ "title": {
+ "render": "Station de pompiers"
+ }
+ },
+ "3": {
+ "description": "Une station d’ambulance est un lieu où sont stockés les véhicules d’urgence ainsi que de l’équipement médical.",
+ "name": "Couche des ambulances",
+ "presets": {
+ "0": {
+ "description": "Ajouter une station d’ambulances à la carte",
+ "title": "Station d’ambulances"
+ }
+ },
+ "tagRenderings": {
+ "ambulance-agency": {
+ "question": "Quel est l’exploitant de la station ?",
+ "render": "Cette station est opérée par {operator}."
+ },
+ "ambulance-name": {
+ "question": "Quel est le nom de cette station ?",
+ "render": "Cette station s’appelle {name}."
+ },
+ "ambulance-operator-type": {
+ "mappings": {
+ "0": {
+ "then": "La station est opérée par le gouvernement."
+ },
+ "1": {
+ "then": "La station est opérée par une organisation informelle."
+ },
+ "2": {
+ "then": "La station est opérée par un groupe officiel de bénévoles."
+ },
+ "3": {
+ "then": "La station est opérée par un groupe privé."
+ }
+ },
+ "question": "Quel est le type d’exploitant ?",
+ "render": "L’exploitant est de type {operator:type}."
+ },
+ "ambulance-place": {
+ "question": "Dans quelle localité la station est-elle située ?",
+ "render": "La station fait partie de {addr:place}."
+ },
+ "ambulance-street": {
+ "question": " Quel est le nom de la rue où la station se situe ?",
+ "render": "La station fait partie de {addr:street}."
+ }
+ },
+ "title": {
+ "render": "Station d’ambulances"
+ }
}
},
"shortDescription": "Carte indiquant les bornes incendies, extincteurs, casernes de pompiers et ambulanciers.",
@@ -930,7 +930,7 @@
"openwindpowermap": {
"description": "Une carte indiquant les éoliennes et permettant leur édition.",
"layers": {
- "windturbine": {
+ "0": {
"name": "Éolienne",
"presets": {
"0": {
@@ -1008,7 +1008,7 @@
"shops": {
"description": "Sur cette carte, vous pouvez ajouter des informations sur les magasins, horaires d'ouverture et numéro de téléphone",
"layers": {
- "shops": {
+ "0": {
"description": "Un magasin",
"name": "Magasin",
"presets": {
diff --git a/langs/themes/id.json b/langs/themes/id.json
index 0be2f3e01..7412ded69 100644
--- a/langs/themes/id.json
+++ b/langs/themes/id.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "Selamat datang di Open Artwork Map, peta untuk patung, grafiti, dan karya seni lain di seluruh dunia",
"layers": {
- "artwork": {
+ "0": {
"name": "Karya seni",
"tagRenderings": {
"artwork-website": {
@@ -27,7 +27,7 @@
},
"campersite": {
"layers": {
- "caravansites": {
+ "0": {
"tagRenderings": {
"caravansites-fee": {
"mappings": {
@@ -88,35 +88,35 @@
},
"climbing": {
"layers": {
- "climbing": {
- "tagRenderings": {
- "name": {
- "render": "{name}"
- }
- }
- },
- "climbing_club": {
+ "0": {
"tagRenderings": {
"climbing_club-name": {
"render": "{name}"
}
}
},
- "climbing_gym": {
+ "1": {
"tagRenderings": {
"name": {
"render": "{name}"
}
}
},
- "climbing_route": {
+ "2": {
"tagRenderings": {
"Name": {
"render": "{name}"
}
}
},
- "maybe_climbing": {
+ "3": {
+ "tagRenderings": {
+ "name": {
+ "render": "{name}"
+ }
+ }
+ },
+ "4": {
"tagRenderings": {
"climbing-opportunity-name": {
"render": "{name}"
@@ -127,7 +127,7 @@
},
"hailhydrant": {
"layers": {
- "hydrants": {
+ "0": {
"tagRenderings": {
"hydrant-type": {
"mappings": {
@@ -142,7 +142,7 @@
},
"shops": {
"layers": {
- "shops": {
+ "0": {
"tagRenderings": {
"shops-email": {
"render": "{email}"
diff --git a/langs/themes/it.json b/langs/themes/it.json
index fa17395bd..ecac81814 100644
--- a/langs/themes/it.json
+++ b/langs/themes/it.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "Benvenuto/a sulla mappa libera dell’arte, una mappa delle statue, i busti, i graffiti e le altre realizzazioni artistiche di tutto il mondo",
"layers": {
- "artwork": {
+ "0": {
"description": "Diverse opere d’arte",
"name": "Opere d’arte",
"presets": {
@@ -98,7 +98,7 @@
"campersite": {
"description": "Questo sito raccoglie tutti i luoghi ufficiali dove sostare con il camper e aree dove è possibile scaricare acque grigie e nere. Puoi aggiungere dettagli riguardanti i servizi forniti e il loro costo. Aggiungi foto e recensioni. Questo è al contempo un sito web e una web app. I dati sono memorizzati su OpenStreetMap in modo tale che siano per sempre liberi e riutilizzabili da qualsiasi app.",
"layers": {
- "caravansites": {
+ "0": {
"description": "Aree camper",
"name": "Aree camper",
"presets": {
@@ -210,7 +210,7 @@
"render": "Area camper {name}"
}
},
- "dumpstations": {
+ "1": {
"description": "Luoghi di sversamento delle acque reflue",
"name": "Luoghi di sversamento delle acque reflue",
"presets": {
@@ -327,7 +327,7 @@
},
"climbing": {
"layers": {
- "climbing_route": {
+ "2": {
"tagRenderings": {
"Difficulty": {
"question": "Qual è la difficoltà di questa via di arrampicata nel sistema francese/belga?",
@@ -361,18 +361,11 @@
},
"cyclestreets": {
"layers": {
- "all_streets": {
- "description": "Livello per contrassegnare tutte le strade come strade ciclabili",
- "name": "Tutte le strade",
- "title": {
- "render": "Strada"
- }
- },
- "fietsstraat": {
+ "0": {
"description": "Una strada ciclabile è una strada in cui i veicoli a motore non possono sorpassare le persone in bicicletta",
"name": "Strade ciclabili"
},
- "toekomstige_fietsstraat": {
+ "1": {
"description": "Questa strada diventerà presto una strada ciclabile",
"name": "Futura strada ciclabile",
"title": {
@@ -383,6 +376,13 @@
},
"render": "Futura strada ciclabile"
}
+ },
+ "2": {
+ "description": "Livello per contrassegnare tutte le strade come strade ciclabili",
+ "name": "Tutte le strade",
+ "title": {
+ "render": "Strada"
+ }
}
},
"roamingRenderings": {
@@ -409,7 +409,7 @@
},
"facadegardens": {
"layers": {
- "facadegardens": {
+ "0": {
"presets": {
"0": {
"description": "Aggiungi un giardino verticale",
@@ -488,23 +488,7 @@
},
"hailhydrant": {
"layers": {
- "fire_stations": {
- "description": "Livello che mostra le caserme dei vigili del fuoco.",
- "name": "Mappa delle caserme dei vigili del fuoco",
- "tagRenderings": {
- "station-name": {
- "question": "Come si chiama questa caserma dei vigili del fuoco?",
- "render": "Questa caserma si chiama {name}."
- },
- "station-street": {
- "question": " Qual è il nome della via in cui si trova la caserma?"
- }
- },
- "title": {
- "render": "Caserma dei vigili del fuoco"
- }
- },
- "hydrants": {
+ "0": {
"tagRenderings": {
"hydrant-color": {
"mappings": {
@@ -523,6 +507,22 @@
"render": " Tipo di idrante: {fire_hydrant:type}"
}
}
+ },
+ "2": {
+ "description": "Livello che mostra le caserme dei vigili del fuoco.",
+ "name": "Mappa delle caserme dei vigili del fuoco",
+ "tagRenderings": {
+ "station-name": {
+ "question": "Come si chiama questa caserma dei vigili del fuoco?",
+ "render": "Questa caserma si chiama {name}."
+ },
+ "station-street": {
+ "question": " Qual è il nome della via in cui si trova la caserma?"
+ }
+ },
+ "title": {
+ "render": "Caserma dei vigili del fuoco"
+ }
}
}
},
diff --git a/langs/themes/ja.json b/langs/themes/ja.json
index cb61f27de..5f12ec6cf 100644
--- a/langs/themes/ja.json
+++ b/langs/themes/ja.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "オープン アートワーク マップへようこそ。世界中の銅像や胸像、壁の落書きなどのアートワークの地図です",
"layers": {
- "artwork": {
+ "0": {
"description": "多様な作品",
"name": "美術品",
"presets": {
@@ -98,7 +98,7 @@
"campersite": {
"description": "このWebサイトでは、すべてのキャンピングカーの公式停車場所と、汚水を捨てることができる場所を収集します。提供されるサービスとコストに関する詳細を追加できます。写真とレビューを追加します。これはウェブサイトとウェブアプリです。データはOpenStreetMapに保存されるので、永遠に無料で、どんなアプリからでも再利用できます。",
"layers": {
- "caravansites": {
+ "0": {
"description": "キャンプサイト",
"name": "キャンプサイト",
"presets": {
@@ -210,7 +210,7 @@
"render": "キャンプサイト {name}"
}
},
- "dumpstations": {
+ "1": {
"description": "衛生ゴミ捨て場",
"name": "衛生ゴミ捨て場",
"presets": {
@@ -329,31 +329,7 @@
"description": "この地図には、自然の中のクライミングジム、ボルダリングホール、岩など、さまざまなクライミングの機会があります。",
"descriptionTail": "登山地図はもともと Christian Neumann によって作成されたものです。フィードバックや質問がありましたら、ご連絡ください。
Over groen ingekleurde gebieden weten we alles wat we willen weten.
Bij rood ingekleurde gebieden ontbreekt nog heel wat info: klik een gebied aan en beantwoord de vragen.
Je kan altijd een vraag overslaan als je het antwoord niet weet of niet zeker bent
Je kan altijd een foto toevoegen
Je kan ook zelf een gebied toevoegen door op de kaart te klikken
Open buurtnatuur.be op je smartphone om al wandelend foto's te maken en vragen te beantwoorden
De oorspronkelijke data komt van OpenStreetMap en je antwoorden worden daar bewaard. Omdat iedereen vrij kan meewerken aan dit project, kunnen we niet garanderen dat er geen fouten opduiken.Kan je hier niet aanpassen wat je wilt, dan kan je dat zelf via OpenStreetMap.org doen. Groen kan geen enkele verantwoordelijkheid nemen over de kaart.
Je privacy is belangrijk. We tellen wel hoeveel gebruikers deze website bezoeken. We plaatsen een cookie waar geen persoonlijke informatie in bewaard wordt. Als je inlogt, komt er een tweede cookie bij met je inloggegevens.",
"layers": {
- "forest": {
- "description": "Een bos is een verzameling bomen, al dan niet als productiehout.",
- "name": "Bos",
- "presets": {
- "0": {
- "description": "Voeg een ontbrekend bos toe aan de kaart",
- "title": "Bos"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "{name:nl}"
- },
- "1": {
- "then": "{name}"
- }
- },
- "render": "Bos"
- }
- },
- "nature_reserve_buurtnatuur": {
+ "0": {
"description": "Een natuurgebied is een gebied waar actief ruimte gemaakt word voor de natuur. Typisch zijn deze in beheer van Natuurpunt of het Agentschap Natuur en Bos of zijn deze erkend door de overheid.",
"name": "Natuurgebied",
"presets": {
@@ -150,7 +129,7 @@
"render": "Natuurgebied"
}
},
- "parks": {
+ "1": {
"description": "Een park is een publiek toegankelijke, groene ruimte binnen de stad. Ze is typisch ingericht voor recreatief gebruik, met (verharde) wandelpaden, zitbanken, vuilnisbakken, een gezellig vijvertje, ...",
"name": "Park",
"presets": {
@@ -170,6 +149,27 @@
},
"render": "Park"
}
+ },
+ "2": {
+ "description": "Een bos is een verzameling bomen, al dan niet als productiehout.",
+ "name": "Bos",
+ "presets": {
+ "0": {
+ "description": "Voeg een ontbrekend bos toe aan de kaart",
+ "title": "Bos"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "{name:nl}"
+ },
+ "1": {
+ "then": "{name}"
+ }
+ },
+ "render": "Bos"
+ }
}
},
"roamingRenderings": {
@@ -245,7 +245,7 @@
"campersite": {
"description": "Deze website verzamelt en toont alle officiële plaatsen waar een camper mag overnachten en afvalwater kan lozen. Ook jij kan extra gegevens toevoegen, zoals welke services er geboden worden en hoeveel dit kot, ook afbeeldingen en reviews kan je toevoegen. De data wordt op OpenStreetMap opgeslagen en is dus altijd gratis te hergebruiken, ook door andere applicaties.",
"layers": {
- "caravansites": {
+ "0": {
"description": "camperplaatsen",
"name": "Camperplaatsen",
"tagRenderings": {
@@ -293,7 +293,88 @@
"description": "Op deze kaart vind je verschillende klimgelegenheden, zoals klimzalen, bolderzalen en klimmen in de natuur",
"descriptionTail": "De klimkaart is oorspronkelijk gemaakt door Christian Neumann op kletterspots.de.",
"layers": {
- "climbing": {
+ "0": {
+ "description": "Een klimclub of organisatie",
+ "name": "Klimclub",
+ "presets": {
+ "0": {
+ "description": "Een klimclub",
+ "title": "Klimclub"
+ },
+ "1": {
+ "description": "Een VZW die werkt rond klimmen",
+ "title": "Een klimorganisatie"
+ }
+ },
+ "tagRenderings": {
+ "climbing_club-name": {
+ "question": "Wat is de naam van deze klimclub?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Klimorganisatie"
+ }
+ },
+ "render": "Klimclub"
+ }
+ },
+ "1": {
+ "description": "Een klimzaal",
+ "name": "Klimzalen",
+ "tagRenderings": {
+ "name": {
+ "question": "Wat is de naam van dit Klimzaal?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Klimzaal {name}"
+ }
+ },
+ "render": "Klimzaal"
+ }
+ },
+ "2": {
+ "name": "Klimroute",
+ "presets": {
+ "0": {
+ "title": "Klimroute"
+ }
+ },
+ "tagRenderings": {
+ "Difficulty": {
+ "question": "Hoe moeilijk is deze klimroute volgens het Franse/Belgische systeem?",
+ "render": "De klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem"
+ },
+ "Length": {
+ "question": "Hoe lang is deze klimroute (in meters)?",
+ "render": "Deze klimroute is {canonical(climbing:length)} lang"
+ },
+ "Name": {
+ "mappings": {
+ "0": {
+ "then": "Deze klimroute heeft geen naam"
+ }
+ },
+ "question": "Hoe heet deze klimroute?",
+ "render": "{name}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Klimroute {name}"
+ }
+ },
+ "render": "Klimroute"
+ }
+ },
+ "3": {
"description": "Een klimgelegenheid",
"name": "Klimgelegenheden",
"presets": {
@@ -335,88 +416,7 @@
"render": "Klimgelegenheid"
}
},
- "climbing_club": {
- "description": "Een klimclub of organisatie",
- "name": "Klimclub",
- "presets": {
- "0": {
- "description": "Een klimclub",
- "title": "Klimclub"
- },
- "1": {
- "description": "Een VZW die werkt rond klimmen",
- "title": "Een klimorganisatie"
- }
- },
- "tagRenderings": {
- "climbing_club-name": {
- "question": "Wat is de naam van deze klimclub?",
- "render": "{name}"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Klimorganisatie"
- }
- },
- "render": "Klimclub"
- }
- },
- "climbing_gym": {
- "description": "Een klimzaal",
- "name": "Klimzalen",
- "tagRenderings": {
- "name": {
- "question": "Wat is de naam van dit Klimzaal?",
- "render": "{name}"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Klimzaal {name}"
- }
- },
- "render": "Klimzaal"
- }
- },
- "climbing_route": {
- "name": "Klimroute",
- "presets": {
- "0": {
- "title": "Klimroute"
- }
- },
- "tagRenderings": {
- "Difficulty": {
- "question": "Hoe moeilijk is deze klimroute volgens het Franse/Belgische systeem?",
- "render": "De klimmoeilijkheid is {climbing:grade:french} volgens het Franse/Belgische systeem"
- },
- "Length": {
- "question": "Hoe lang is deze klimroute (in meters)?",
- "render": "Deze klimroute is {canonical(climbing:length)} lang"
- },
- "Name": {
- "mappings": {
- "0": {
- "then": "Deze klimroute heeft geen naam"
- }
- },
- "question": "Hoe heet deze klimroute?",
- "render": "{name}"
- }
- },
- "title": {
- "mappings": {
- "0": {
- "then": "Klimroute {name}"
- }
- },
- "render": "Klimroute"
- }
- },
- "maybe_climbing": {
+ "4": {
"description": "Een klimgelegenheid?",
"name": "Klimgelegenheiden?",
"tagRenderings": {
@@ -566,18 +566,11 @@
"cyclestreets": {
"description": "Een fietsstraat is een straat waar
Fietsers nog steeds voorrang aan rechts moeten verlenen - ook aan auto's en voetgangers op het zebrapad
Op deze open kaart kan je alle gekende fietsstraten zien en kan je ontbrekende fietsstraten aanduiden. Om de kaart aan te passen, moet je je aanmelden met OpenStreetMap en helemaal inzoomen tot straatniveau. ",
"layers": {
- "all_streets": {
- "description": "Laag waar je een straat als fietsstraat kan markeren",
- "name": "Alle straten",
- "title": {
- "render": "Straat"
- }
- },
- "fietsstraat": {
+ "0": {
"description": "Een fietsstraat is een straat waar gemotoriseerd verkeer een fietser niet mag inhalen.",
"name": "Fietsstraten"
},
- "toekomstige_fietsstraat": {
+ "1": {
"description": "Deze straat wordt binnenkort een fietsstraat",
"name": "Toekomstige fietsstraat",
"title": {
@@ -588,6 +581,13 @@
},
"render": "Toekomstige fietsstraat"
}
+ },
+ "2": {
+ "description": "Laag waar je een straat als fietsstraat kan markeren",
+ "name": "Alle straten",
+ "title": {
+ "render": "Straat"
+ }
}
},
"roamingRenderings": {
@@ -627,7 +627,7 @@
"facadegardens": {
"description": "Ontharde voortuintjes, groene gevels en bomen ín de stad brengen naast rust ook een mooiere stad, een grotere biodiversiteit, een verkoelend effect en een betere luchtkwaliteit. Klimaan VZW en 'Mechelen Klimaatneutraal' willen met het project Klim(t)aan je Gevel bestaande en nieuwe geveltuintjes in kaart brengen als voorbeeld voor mensen zelf een tuintje willen aanleggen of voor stadwandelaars die houden van de natuur. Meer info over het project op klimaan.be.",
"layers": {
- "facadegardens": {
+ "0": {
"description": "Geveltuintjes",
"name": "Geveltuintjes",
"presets": {
@@ -719,7 +719,7 @@
"description": "Op deze kaart vind je je favoriete frituur!",
"layers": {
"0": {
- "friture": {
+ "override": {
"name": "Frituren"
}
}
@@ -729,7 +729,19 @@
"fruit_trees": {
"description": "Op deze kaart vindt je boomgaarden en fruitbomen",
"layers": {
- "fruitboom": {
+ "0": {
+ "name": "Boomgaarden",
+ "presets": {
+ "0": {
+ "description": "Voeg een boomgaard toe (als punt - omtrek nog te tekenen)",
+ "title": "Boomgaard"
+ }
+ },
+ "title": {
+ "render": "Boomgaard"
+ }
+ },
+ "1": {
"description": "Een boom",
"name": "Boom",
"presets": {
@@ -759,18 +771,6 @@
"title": {
"render": "Boom"
}
- },
- "orchards": {
- "name": "Boomgaarden",
- "presets": {
- "0": {
- "description": "Voeg een boomgaard toe (als punt - omtrek nog te tekenen)",
- "title": "Boomgaard"
- }
- },
- "title": {
- "render": "Boomgaard"
- }
}
},
"shortDescription": "Boomgaarden en fruitbomen",
@@ -783,7 +783,7 @@
"grb": {
"description": "GRB Fixup",
"layers": {
- "grb-fixmes": {
+ "0": {
"description": "Dit gebouw heeft een foutmelding",
"name": "Fixmes op gebouwen",
"tagRenderings": {
@@ -852,7 +852,7 @@
},
"openwindpowermap": {
"layers": {
- "windturbine": {
+ "0": {
"name": "windturbine",
"presets": {
"0": {
@@ -911,7 +911,7 @@
},
"shops": {
"layers": {
- "shops": {
+ "0": {
"description": "Een winkel",
"name": "Winkel",
"presets": {
@@ -959,7 +959,7 @@
"speelplekken": {
"description": "
Welkom bij de Groendoener!
De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan 200 grote en kleine speelplekken liggen er in parken, in bossen en op pleintjes te wachten om ontdekt te worden. De verschillende speelplekken werden getest én goedgekeurd door kinder- en jongerenreporters uit de Zuidrand. Met leuke challenges dagen de reporters jou uit om ook op ontdekking te gaan. Klik op een speelplek op de kaart, bekijk het filmpje en ga op verkenning!
Het project groendoener kadert binnen het strategisch project Beleefbare Open Ruimte in de Antwerpse Zuidrand en is een samenwerking tussen het departement Leefmilieu van provincie Antwerpen, Sportpret vzw, een OpenStreetMap-België Consultent en Createlli vzw. Het project kwam tot stand met steun van Departement Omgeving van de Vlaamse Overheid. ",
"layers": {
- "walking_routes": {
+ "7": {
"name": "Wandelroutes van provincie Antwerpen",
"tagRenderings": {
"walk-description": {
diff --git a/langs/themes/pt_BR.json b/langs/themes/pt_BR.json
index cc97313f2..6c7de8bfd 100644
--- a/langs/themes/pt_BR.json
+++ b/langs/themes/pt_BR.json
@@ -15,7 +15,7 @@
},
"campersite": {
"layers": {
- "caravansites": {
+ "0": {
"description": "Locais de acampamento",
"name": "Locais de acampamento",
"presets": {
@@ -122,7 +122,7 @@
"render": "Local de acampamento {name}"
}
},
- "dumpstations": {
+ "1": {
"description": "Estações de despejo sanitário",
"name": "Estações de despejo sanitário",
"tagRenderings": {
diff --git a/langs/themes/ru.json b/langs/themes/ru.json
index 1c8f6076d..d03cdc427 100644
--- a/langs/themes/ru.json
+++ b/langs/themes/ru.json
@@ -6,7 +6,7 @@
"artwork": {
"description": "Добро пожаловать на Open Artwork Map, карту статуй, бюстов, граффити и других произведений искусства по всему миру",
"layers": {
- "artwork": {
+ "0": {
"description": "Разнообразные произведения искусства",
"name": "Произведения искусства",
"presets": {
@@ -98,7 +98,7 @@
"campersite": {
"description": "На этом сайте собраны все официальные места остановки кемперов и места, где можно сбросить серую и черную воду. Вы можете добавить подробную информацию о предоставляемых услугах и их стоимости. Добавлять фотографии и отзывы. Это веб-сайт и веб-приложение. Данные хранятся в OpenStreetMap, поэтому они будут бесплатными всегда и могут быть повторно использованы любым приложением.",
"layers": {
- "caravansites": {
+ "0": {
"description": "площадки для кемпинга",
"name": "Площадки для кемпинга",
"presets": {
@@ -210,7 +210,7 @@
"render": "Место для кемпинга {name}"
}
},
- "dumpstations": {
+ "1": {
"description": "Ассенизационные сливные станции",
"name": "Места для слива отходов из туалетных резервуаров",
"tagRenderings": {
@@ -298,14 +298,7 @@
"description": "На этой карте вы найдете различные возможности для скалолазания, такие как скалодромы, залы для боулдеринга и скалы на природе.",
"descriptionTail": "Создатель карты скалолазания — Christian Neumann. Пожалуйста, пишите если у вас есть отзыв или вопросы.
On this map, one can see all the ghost bikes which are known by OpenStreetMap. Is a ghost bike missing? Everyone can add or update information here - you only need to have a (free) OpenStreetMap account.
|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
|image= MapComplete_Screenshot.png
|genre= POI, editor, ghostbikes
}}
{{service_item
-|name= [https://mapcomplete.osm.be/shops shops]
+|name= [https://mapcomplete.osm.be/hackerspaces hackerspaces]
|region= Worldwide
-|lang= {{#language:en|en}}, {{#language:fr|en}}
-|descr= A MapComplete theme: On this map, one can mark basic information about shops, add opening hours and phone numbers
+|lang= {{#language:en|en}}
+|descr= A MapComplete theme: On this map you can see hackerspaces, add a new hackerspace or update data directly
|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
|image= MapComplete_Screenshot.png
-|genre= POI, editor, shops
+|genre= POI, editor, hackerspaces
}}
{{service_item
-|name= [https://mapcomplete.osm.be/drinking_water drinking_water]
+|name= [https://mapcomplete.osm.be/maps maps]
|region= Worldwide
-|lang= {{#language:en|en}}, {{#language:nl|en}}
-|descr= A MapComplete theme: On this map, publicly accessible drinkging water spots are shown and can be easily added
+|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:fr|en}}, {{#language:ja|en}}, {{#language:zh_Hant|en}}, {{#language:ru|en}}
+|descr= A MapComplete theme: On this map you can find all maps OpenStreetMap knows - typically a big map on an information board showing the area, city or region, e.g. a tourist map on the back of a billboard, a map of a nature reserve, a map of cycling networks in the region, ...)
If a map is missing, you can easily map this map on OpenStreetMap.
|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
|image= MapComplete_Screenshot.png
-|genre= POI, editor, drinking_water
+|genre= POI, editor, maps
}}
{{service_item
|name= [https://mapcomplete.osm.be/nature nature]
@@ -92,111 +222,93 @@
|genre= POI, editor, nature
}}
{{service_item
-|name= [https://mapcomplete.osm.be/fietsstraten fietsstraten]
-|region= Worldwide
-|lang= {{#language:nl|en}}
-|descr= A MapComplete theme: Een fietsstraat is een straat waar
Fietsers nog steeds voorrang aan rechts moeten verlenen - ook aan auto's en voetgangers op het zebrapad
Op deze open kaart kan je alle gekende fietsstraten zien en kan je ontbrekende fietsstraten aanduiden. Om de kaart aan te passen, moet je je aanmelden met OpenStreetMap en helemaal inzoomen tot straatniveau.
-|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
-|image= MapComplete_Screenshot.png
-|genre= POI, editor, fietsstraten
-}}
-{{service_item
-|name= [https://mapcomplete.osm.be/bicyclelib bicyclelib]
+|name= [https://mapcomplete.osm.be/observation_towers observation_towers]
|region= Worldwide
|lang= {{#language:en|en}}, {{#language:nl|en}}
-|descr= A MapComplete theme: A bicycle library is a place where bicycles can be lent, often for a small yearly fee. A notable use case are bicycle libraries for kids, which allows them to change for a bigger bike when they've outgrown their current bike
+|descr= A MapComplete theme: Publicly accessible towers to enjoy the view
|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
|image= MapComplete_Screenshot.png
-|genre= POI, editor, bicyclelib
+|genre= POI, editor, observation_towers
}}
{{service_item
-|name= [https://mapcomplete.osm.be/maps maps]
+|name= [https://mapcomplete.osm.be/openwindpowermap openwindpowermap]
|region= Worldwide
-|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:fr|en}}
-|descr= A MapComplete theme: On this map you can find all maps OpenStreetMap knows - typically a big map on an information board showing the area, city or region, e.g. a tourist map on the back of a billboard, a map of a nature reserve, a map of cycling networks in the region, ...)
If a map is missing, you can easily map this map on OpenStreetMap.
+|lang= {{#language:en|en}}, {{#language:fr|en}}, {{#language:nl|en}}
+|descr= A MapComplete theme: A map for showing and editing wind turbines.
+|material= {{yes|[https://mapcomplete.osm.be/ Yes, by Seppe Santens;]}}
+|image= MapComplete_Screenshot.png
+|genre= POI, editor, openwindpowermap
+}}
+{{service_item
+|name= [https://mapcomplete.osm.be/parkings parkings]
+|region= Worldwide
+|lang= {{#language:nl|en}}, {{#language:en|en}}
+|descr= A MapComplete theme: This map shows different parking spots
|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
|image= MapComplete_Screenshot.png
-|genre= POI, editor, maps
+|genre= POI, editor, parkings
}}
{{service_item
-|name= [https://mapcomplete.osm.be/fritures fritures]
+|name= [https://mapcomplete.osm.be/playgrounds playgrounds]
|region= Worldwide
-|lang= {{#language:nl|en}}, {{#language:fr|en}}
-|descr= A MapComplete theme: Op deze kaart vind je je favoriete frituur!
+|lang= {{#language:nl|en}}, {{#language:en|en}}, {{#language:fr|en}}, {{#language:ja|en}}, {{#language:zh_Hant|en}}, {{#language:ru|en}}
+|descr= A MapComplete theme: On this map, you find playgrounds and can add more information
|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
|image= MapComplete_Screenshot.png
-|genre= POI, editor, fritures
+|genre= POI, editor, playgrounds
}}
{{service_item
-|name= [https://mapcomplete.osm.be/benches benches]
+|name= [https://mapcomplete.osm.be/shops shops]
|region= Worldwide
-|lang= {{#language:en|en}}, {{#language:de|en}}, {{#language:fr|en}}
-|descr= A MapComplete theme: This map shows all benches that are recorded in OpenStreetMap: Individual benches, and benches belonging to public transport stops or shelters. With an OpenStreetMap account, you can map new benches or edit details of existing benches.
-|material= {{yes|[https://mapcomplete.osm.be/ Yes, by Florian Edelmann;]}}
-|image= MapComplete_Screenshot.png
-|genre= POI, editor, benches
-}}
-{{service_item
-|name= [https://mapcomplete.osm.be/charging_stations charging_stations]
-|region= Worldwide
-|lang= {{#language:en|en}}
-|descr= A MapComplete theme: On this open map, one can find and mark information about charging stations
+|lang= {{#language:en|en}}, {{#language:fr|en}}, {{#language:ja|en}}, {{#language:zh_Hant|en}}, {{#language:ru|en}}, {{#language:nl|en}}, {{#language:ca|en}}, {{#language:id|en}}
+|descr= A MapComplete theme: On this map, one can mark basic information about shops, add opening hours and phone numbers
|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
|image= MapComplete_Screenshot.png
-|genre= POI, editor, charging_stations
+|genre= POI, editor, shops
+}}
+{{service_item
+|name= [https://mapcomplete.osm.be/sport_pitches sport_pitches]
+|region= Worldwide
+|lang= {{#language:nl|en}}, {{#language:fr|en}}, {{#language:en|en}}, {{#language:ja|en}}, {{#language:zh_Hant|en}}, {{#language:ru|en}}
+|descr= A MapComplete theme: A sport pitch is an area where sports are played
+|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
+|image= MapComplete_Screenshot.png
+|genre= POI, editor, sport_pitches
}}
{{service_item
|name= [https://mapcomplete.osm.be/surveillance surveillance]
|region= Worldwide
-|lang= {{#language:en|en}}, {{#language:nl|en}}
+|lang= {{#language:en|en}}, {{#language:nl|en}}, {{#language:ja|en}}, {{#language:zh_Hant|en}}, {{#language:fr|en}}, {{#language:pl|en}}
|descr= A MapComplete theme: On this open map, you can find surveillance cameras.
|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
|image= MapComplete_Screenshot.png
|genre= POI, editor, surveillance
}}
{{service_item
-|name= [https://mapcomplete.osm.be/climbing climbing]
-|region= Worldwide
-|lang= {{#language:de|en}}, {{#language:en|en}}, {{#language:nl|en}}
-|descr= A MapComplete theme: On this map you will find various climbing opportunities such as climbing gyms, bouldering halls and rocks in nature.
-|material= {{yes|[https://mapcomplete.osm.be/ Yes, by Christian Neumann ;]}}
-|image= MapComplete_Screenshot.png
-|genre= POI, editor, climbing
-}}
-{{service_item
-|name= [https://mapcomplete.osm.be/playgrounds playgrounds]
-|region= Worldwide
-|lang= {{#language:nl|en}}
-|descr= A MapComplete theme: Op deze kaart vind je speelplekken zoals speeltuinen, speelbossen en sportterreinen
-|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
-|image= MapComplete_Screenshot.png
-|genre= POI, editor, playgrounds
-}}
-{{service_item
|name= [https://mapcomplete.osm.be/trees trees]
|region= Worldwide
-|lang= {{#language:nl|en}}, {{#language:en|en}}
+|lang= {{#language:nl|en}}, {{#language:en|en}}, {{#language:fr|en}}, {{#language:it|en}}, {{#language:ru|en}}, {{#language:ja|en}}, {{#language:zh_Hant|en}}, {{#language:pl|en}}
|descr= A MapComplete theme: Map all the trees!
|material= {{yes|[https://mapcomplete.osm.be/ Yes, by Midgard;]}}
|image= MapComplete_Screenshot.png
|genre= POI, editor, trees
}}
{{service_item
-|name= [https://mapcomplete.osm.be/campersite campersite]
+|name= [https://mapcomplete.osm.be/uk_addresses uk_addresses]
|region= Worldwide
|lang= {{#language:en|en}}
-|descr= A MapComplete theme: This site collects all official camper stopover places and places where you can dump grey and black water. You can add details about the services provided and the cost. Add pictures and reviews. This is a website and a webapp. The data is stored in OpenStreetMap, so it will be free forever and can be re-used by any app.
-|material= {{yes|[https://mapcomplete.osm.be/ Yes, by joost schouppe;]}}
+|descr= A MapComplete theme: Contribute to OpenStreetMap by filling out address information
+|material= {{yes|[https://mapcomplete.osm.be/ Yes, by Pieter Vander Vennet, Rob Nickerson, Russ Garrett;]}}
|image= MapComplete_Screenshot.png
-|genre= POI, editor, campersite
+|genre= POI, editor, uk_addresses
}}
{{service_item
-|name= [https://mapcomplete.osm.be/sport_pitches sport_pitches]
+|name= [https://mapcomplete.osm.be/waste_basket waste_basket]
|region= Worldwide
-|lang= {{#language:nl|en}}
-|descr= A MapComplete theme: Een sportveld is een ingerichte plaats met infrastructuur om een sport te beoefenen
+|lang= {{#language:en|en}}, {{#language:nl|en}}
+|descr= A MapComplete theme: On this map, you'll find waste baskets near you. If a waste basket is missing on this map, you can add it yourself
|material= {{yes|[https://mapcomplete.osm.be/ Yes]}}
|image= MapComplete_Screenshot.png
-|genre= POI, editor, sport_pitches
+|genre= POI, editor, waste_basket
}}
|}
\ No newline at end of file
From 6890c5189e79d5a4f5d044ba09d3aa69c1c1551d Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 29 Sep 2021 01:12:29 +0200
Subject: [PATCH 41/65] More refactoring
---
UI/BigComponents/BackgroundSelector.ts | 4 ++-
UI/BigComponents/DownloadPanel.ts | 2 +-
UI/BigComponents/ImportButton.ts | 4 +--
UI/BigComponents/SimpleAddUI.ts | 4 +--
UI/Image/DeleteImage.ts | 8 ++---
UI/Image/ImageUploadFlow.ts | 4 +--
UI/Input/DropDown.ts | 2 +-
UI/Popup/DeleteWizard.ts | 4 +--
UI/Popup/TagRenderingQuestion.ts | 4 +--
UI/ShowDataLayer/ShowDataLayer.ts | 32 +++++++++++--------
UI/ShowDataLayer/ShowTileInfo.ts | 24 ++------------
...gregator.ts => TileHierarchyAggregator.ts} | 19 ++++++-----
12 files changed, 52 insertions(+), 59 deletions(-)
rename UI/ShowDataLayer/{PerTileCountAggregator.ts => TileHierarchyAggregator.ts} (93%)
diff --git a/UI/BigComponents/BackgroundSelector.ts b/UI/BigComponents/BackgroundSelector.ts
index d13b4e9c0..f5d1a1415 100644
--- a/UI/BigComponents/BackgroundSelector.ts
+++ b/UI/BigComponents/BackgroundSelector.ts
@@ -25,7 +25,9 @@ export default class BackgroundSelector extends VariableUiElement {
if (baseLayers.length <= 1) {
return undefined;
}
- return new DropDown(Translations.t.general.backgroundMap.Clone(), baseLayers, State.state.backgroundLayer)
+ return new DropDown(Translations.t.general.backgroundMap.Clone(), baseLayers, State.state.backgroundLayer, {
+ select_class: 'bg-indigo-100 p-1 rounded hover:bg-indigo-200 w-full'
+ })
}
)
)
diff --git a/UI/BigComponents/DownloadPanel.ts b/UI/BigComponents/DownloadPanel.ts
index f23d98747..552f6f357 100644
--- a/UI/BigComponents/DownloadPanel.ts
+++ b/UI/BigComponents/DownloadPanel.ts
@@ -20,7 +20,7 @@ export class DownloadPanel extends Toggle {
constructor() {
const state: {
featurePipeline: FeaturePipeline,
- layoutToUse: UIEventSource,
+ layoutToUse: LayoutConfig,
currentBounds: UIEventSource
} = State.state
diff --git a/UI/BigComponents/ImportButton.ts b/UI/BigComponents/ImportButton.ts
index f62b912fd..160405264 100644
--- a/UI/BigComponents/ImportButton.ts
+++ b/UI/BigComponents/ImportButton.ts
@@ -31,14 +31,14 @@ export default class ImportButton extends Toggle {
const button = new SubtleButton(imageUrl, message)
- button.onClick(() => {
+ button.onClick(async () => {
if (isImported.data) {
return
}
originalTags.data["_imported"] = "yes"
originalTags.ping() // will set isImported as per its definition
const newElementAction = new CreateNewNodeAction(newTags.data, lat, lon)
- State.state.changes.applyAction(newElementAction)
+ await State.state.changes.applyAction(newElementAction)
State.state.selectedElement.setData(State.state.allElements.ContainingFeatures.get(
newElementAction.newElementId
))
diff --git a/UI/BigComponents/SimpleAddUI.ts b/UI/BigComponents/SimpleAddUI.ts
index ca758ab80..5e8a7b46d 100644
--- a/UI/BigComponents/SimpleAddUI.ts
+++ b/UI/BigComponents/SimpleAddUI.ts
@@ -56,9 +56,9 @@ export default class SimpleAddUI extends Toggle {
const presetsOverview = SimpleAddUI.CreateAllPresetsPanel(selectedPreset)
- function createNewPoint(tags: any[], location: { lat: number, lon: number }, snapOntoWay?: OsmWay) {
+ async function createNewPoint(tags: any[], location: { lat: number, lon: number }, snapOntoWay?: OsmWay) {
const newElementAction = new CreateNewNodeAction(tags, location.lat, location.lon, {snapOnto: snapOntoWay})
- State.state.changes.applyAction(newElementAction)
+ await State.state.changes.applyAction(newElementAction)
selectedPreset.setData(undefined)
isShown.setData(false)
State.state.selectedElement.setData(State.state.allElements.ContainingFeatures.get(
diff --git a/UI/Image/DeleteImage.ts b/UI/Image/DeleteImage.ts
index fe3f2cf09..800eec53c 100644
--- a/UI/Image/DeleteImage.ts
+++ b/UI/Image/DeleteImage.ts
@@ -15,15 +15,15 @@ export default class DeleteImage extends Toggle {
const isDeletedBadge = Translations.t.image.isDeleted.Clone()
.SetClass("rounded-full p-1")
.SetStyle("color:white;background:#ff8c8c")
- .onClick(() => {
- State.state?.changes?.applyAction(new ChangeTagAction(tags.data.id, new Tag(key, oldValue), tags.data))
+ .onClick(async() => {
+ await State.state?.changes?.applyAction(new ChangeTagAction(tags.data.id, new Tag(key, oldValue), tags.data))
});
const deleteButton = Translations.t.image.doDelete.Clone()
.SetClass("block w-full pl-4 pr-4")
.SetStyle("color:white;background:#ff8c8c; border-top-left-radius:30rem; border-top-right-radius: 30rem;")
- .onClick(() => {
- State.state?.changes?.applyAction(
+ .onClick( async() => {
+ await State.state?.changes?.applyAction(
new ChangeTagAction(tags.data.id, new Tag(key, ""), tags.data)
)
});
diff --git a/UI/Image/ImageUploadFlow.ts b/UI/Image/ImageUploadFlow.ts
index 432541395..4eec0b85c 100644
--- a/UI/Image/ImageUploadFlow.ts
+++ b/UI/Image/ImageUploadFlow.ts
@@ -29,10 +29,10 @@ export class ImageUploadFlow extends Toggle {
key = imagePrefix + ":" + freeIndex;
}
console.log("Adding image:" + key, url);
- State.state.changes
+ Promise.resolve(State.state.changes
.applyAction(new ChangeTagAction(
tags.id, new Tag(key, url), tagsSource.data
- ))
+ )))
})
diff --git a/UI/Input/DropDown.ts b/UI/Input/DropDown.ts
index 147ad0f50..fe8f8bc98 100644
--- a/UI/Input/DropDown.ts
+++ b/UI/Input/DropDown.ts
@@ -47,7 +47,7 @@ export class DropDown extends InputElement {
}
options = options ?? {}
- options.select_class = options.select_class ?? 'bg-indigo-100 p-1 rounded hover:bg-indigo-200 w-full'
+ options.select_class = options.select_class ?? 'bg-indigo-100 p-1 rounded hover:bg-indigo-200'
{
diff --git a/UI/Popup/DeleteWizard.ts b/UI/Popup/DeleteWizard.ts
index b81e82f47..6025ff890 100644
--- a/UI/Popup/DeleteWizard.ts
+++ b/UI/Popup/DeleteWizard.ts
@@ -51,14 +51,14 @@ export default class DeleteWizard extends Toggle {
const confirm = new UIEventSource(false)
- function softDelete(reason: string, tagsToApply: { k: string, v: string }[]) {
+ async function softDelete(reason: string, tagsToApply: { k: string, v: string }[]) {
if (reason !== undefined) {
tagsToApply.splice(0, 0, {
k: "fixme",
v: `A mapcomplete user marked this feature to be deleted (${reason})`
})
}
- (State.state?.changes ?? new Changes())
+ await (State.state?.changes ?? new Changes())
.applyAction(new ChangeTagAction(
id, new And(tagsToApply.map(kv => new Tag(kv.k, kv.v))), tagsSource.data
))
diff --git a/UI/Popup/TagRenderingQuestion.ts b/UI/Popup/TagRenderingQuestion.ts
index 5f0881d29..ea6839e14 100644
--- a/UI/Popup/TagRenderingQuestion.ts
+++ b/UI/Popup/TagRenderingQuestion.ts
@@ -58,10 +58,10 @@ export default class TagRenderingQuestion extends Combine {
console.error("MultiAnswer failed - probably not a single option was possible", configuration)
throw "MultiAnswer failed - probably not a single option was possible"
}
- const save = () => {
+ const save = async () => {
const selection = inputElement.GetValue().data;
if (selection) {
- (State.state?.changes ?? new Changes())
+ await (State.state?.changes ?? new Changes())
.applyAction(new ChangeTagAction(
tags.data.id, selection, tags.data
))
diff --git a/UI/ShowDataLayer/ShowDataLayer.ts b/UI/ShowDataLayer/ShowDataLayer.ts
index 0d02bcd4e..ade1860ae 100644
--- a/UI/ShowDataLayer/ShowDataLayer.ts
+++ b/UI/ShowDataLayer/ShowDataLayer.ts
@@ -63,6 +63,7 @@ export default class ShowDataLayer {
})
+
State.state.selectedElement.addCallbackAndRunD(selected => {
if (self._leafletMap.data === undefined) {
return;
@@ -76,17 +77,20 @@ export default class ShowDataLayer {
if (leafletLayer.getPopup().isOpen()) {
return;
}
- if (selected.properties.id === feature.properties.id) {
- // A small sanity check to prevent infinite loops:
- if (selected.geometry.type === feature.geometry.type // If a feature is rendered both as way and as point, opening one popup might trigger the other to open, which might trigger the one to open again
- && feature.id === feature.properties.id // the feature might have as id 'node/-1' and as 'feature.properties.id' = 'the newly assigned id'. That is no good too
- ) {
- leafletLayer.openPopup()
- }
- if (feature.id !== feature.properties.id) {
- console.trace("Not opening the popup for", feature)
- }
-
+ if (selected.properties.id !== feature.properties.id) {
+ return;
+ }
+
+ if (feature.id !== feature.properties.id) {
+ // Probably a feature which has renamed
+ console.trace("Not opening the popup for", feature)
+ return;
+ }
+ if (selected.geometry.type === feature.geometry.type // If a feature is rendered both as way and as point, opening one popup might trigger the other to open, which might trigger the one to open again
+ && feature.id === feature.properties.id // the feature might have as id 'node/-1' and as 'feature.properties.id' = 'the newly assigned id'. That is no good too
+ ) {
+ console.log("Opening popup of feature", feature)
+ leafletLayer.openPopup()
}
})
@@ -167,8 +171,10 @@ export default class ShowDataLayer {
return;
}
- const tagSource = feature.properties.id === undefined ? new UIEventSource(feature.properties) :
- State.state.allElements.getEventSourceById(feature.properties.id)
+ let tagSource = State.state.allElements.getEventSourceById(feature.properties.id)
+ if(tagSource === undefined){
+ tagSource = new UIEventSource(feature.properties)
+ }
const clickable = !(layer.title === undefined && (layer.tagRenderings ?? []).length === 0)
const style = layer.GenerateLeafletStyle(tagSource, clickable);
const baseElement = style.icon.html;
diff --git a/UI/ShowDataLayer/ShowTileInfo.ts b/UI/ShowDataLayer/ShowTileInfo.ts
index a2fa322b6..1bb636727 100644
--- a/UI/ShowDataLayer/ShowTileInfo.ts
+++ b/UI/ShowDataLayer/ShowTileInfo.ts
@@ -1,32 +1,14 @@
import FeatureSource, {Tiled} from "../../Logic/FeatureSource/FeatureSource";
import {UIEventSource} from "../../Logic/UIEventSource";
-import {Utils} from "../../Utils";
import LayerConfig from "../../Models/ThemeConfig/LayerConfig";
import ShowDataLayer from "./ShowDataLayer";
import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource";
import {GeoOperations} from "../../Logic/GeoOperations";
import {Tiles} from "../../Models/TileRange";
-
+import * as clusterstyle from "../../assets/layers/cluster_style/cluster_style.json"
export default class ShowTileInfo {
- public static readonly styling = new LayerConfig({
- id: "tileinfo_styling",
- title: {
- render: "Tile {z}/{x}/{y}"
- },
- tagRenderings: [
- "all_tags"
- ],
- source: {
- osmTags: "tileId~*"
- },
- color: {"render": "#3c3"},
- width: {
- "render": "1"
- },
- label: {
- render: "
{count}
"
- }
- }, "tileinfo", true)
+ public static readonly styling = new LayerConfig(
+ clusterstyle, "tileinfo", true)
constructor(options: {
source: FeatureSource & Tiled, leafletMap: UIEventSource, layer?: LayerConfig,
diff --git a/UI/ShowDataLayer/PerTileCountAggregator.ts b/UI/ShowDataLayer/TileHierarchyAggregator.ts
similarity index 93%
rename from UI/ShowDataLayer/PerTileCountAggregator.ts
rename to UI/ShowDataLayer/TileHierarchyAggregator.ts
index f313e741f..4b1685981 100644
--- a/UI/ShowDataLayer/PerTileCountAggregator.ts
+++ b/UI/ShowDataLayer/TileHierarchyAggregator.ts
@@ -22,7 +22,7 @@ export class TileHierarchyAggregator implements FeatureSource {
public readonly name;
private readonly featuresStatic = []
- private readonly featureProperties: { count: number, tileId: number };
+ private readonly featureProperties: { count: string, tileId: string, id: string };
private constructor(parent: TileHierarchyAggregator, z: number, x: number, y: number) {
this._parent = parent;
@@ -34,8 +34,9 @@ export class TileHierarchyAggregator implements FeatureSource {
this.name = "Count(" + this._tileIndex + ")"
const totals = {
- tileId: this._tileIndex,
- count: 0
+ id: ""+this._tileIndex,
+ tileId: ""+this._tileIndex,
+ count: ""+0
}
this.featureProperties = totals
@@ -106,7 +107,7 @@ export class TileHierarchyAggregator implements FeatureSource {
if (total === 0) {
this.features.setData(TileHierarchyAggregator.empty)
} else {
- this.featureProperties.count = total;
+ this.featureProperties.count = "" + total;
this.features.data = this.featuresStatic
this.features.ping()
}
@@ -145,7 +146,6 @@ export class TileHierarchyAggregator implements FeatureSource {
return new TileHierarchyAggregator(undefined, 0, 0, 0)
}
-
private visitSubTiles(f : (aggr: TileHierarchyAggregator) => boolean){
const visitFurther = f(this)
if(visitFurther){
@@ -153,8 +153,9 @@ export class TileHierarchyAggregator implements FeatureSource {
}
}
- getCountsForZoom(locationControl: UIEventSource<{ zoom : number }>, cutoff: number) : FeatureSource{
+ getCountsForZoom(locationControl: UIEventSource<{ zoom : number }>, cutoff: number = 0) : FeatureSource{
const self = this
+
return new StaticFeatureSource(
locationControl.map(loc => {
const features = []
@@ -205,9 +206,11 @@ class SingleTileCounter implements Tiled {
const self = this
source.features.map(f => {
- self.countsPerLayer.data.set(layer.id, f.length)
+ const isDisplayed = source.layer.isDisplayed.data
+ self.countsPerLayer.data.set(layer.id, isDisplayed ? f.length : 0)
self.countsPerLayer.ping()
- })
+ }, [source.layer.isDisplayed])
+
}
From c2d477c97af1d6083a8dfb29fb7c2a40c2082b5c Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 29 Sep 2021 01:12:38 +0200
Subject: [PATCH 42/65] More refactoring
---
InitUiElements.ts | 5 +-
Logic/Actors/TitleHandler.ts | 2 +-
Logic/ElementStorage.ts | 7 +-
Logic/FeatureSource/FeaturePipeline.ts | 64 ++++++++++---------
.../Sources/FilteringFeatureSource.ts | 20 +-----
Logic/MetaTagging.ts | 2 +-
Logic/Osm/Changes.ts | 15 ++---
Logic/Tags/RegexTag.ts | 3 +
Models/Constants.ts | 2 +-
.../layers/cluster_style/cluster_style.json | 36 +++++++++++
.../toerisme_vlaanderen.json | 6 +-
langs/themes/nl.json | 2 +-
12 files changed, 91 insertions(+), 73 deletions(-)
create mode 100644 assets/layers/cluster_style/cluster_style.json
diff --git a/InitUiElements.ts b/InitUiElements.ts
index 40932dfd2..d0eb8b0d4 100644
--- a/InitUiElements.ts
+++ b/InitUiElements.ts
@@ -25,20 +25,18 @@ import ScrollableFullScreen from "./UI/Base/ScrollableFullScreen";
import Translations from "./UI/i18n/Translations";
import MapControlButton from "./UI/MapControlButton";
import LZString from "lz-string";
-import AllKnownLayers from "./Customizations/AllKnownLayers";
import AvailableBaseLayers from "./Logic/Actors/AvailableBaseLayers";
import LeftControls from "./UI/BigComponents/LeftControls";
import RightControls from "./UI/BigComponents/RightControls";
import {LayoutConfigJson} from "./Models/ThemeConfig/Json/LayoutConfigJson";
import LayoutConfig from "./Models/ThemeConfig/LayoutConfig";
-import LayerConfig from "./Models/ThemeConfig/LayerConfig";
import Minimap from "./UI/Base/Minimap";
import SelectedFeatureHandler from "./Logic/Actors/SelectedFeatureHandler";
import Combine from "./UI/Base/Combine";
import {SubtleButton} from "./UI/Base/SubtleButton";
import ShowTileInfo from "./UI/ShowDataLayer/ShowTileInfo";
import {Tiles} from "./Models/TileRange";
-import {TileHierarchyAggregator} from "./UI/ShowDataLayer/PerTileCountAggregator";
+import {TileHierarchyAggregator} from "./UI/ShowDataLayer/TileHierarchyAggregator";
import FilterConfig from "./Models/ThemeConfig/FilterConfig";
import FilteredLayer from "./Models/FilteredLayer";
import {BBox} from "./Logic/BBox";
@@ -435,6 +433,7 @@ export class InitUiElements {
features: clusterCounter.getCountsForZoom(State.state.locationControl, State.state.layoutToUse.clustering.minNeededElements),
leafletMap: State.state.leafletMap,
layerToShow: ShowTileInfo.styling,
+ enablePopups: false
})
State.state.featurePipeline = new FeaturePipeline(
diff --git a/Logic/Actors/TitleHandler.ts b/Logic/Actors/TitleHandler.ts
index 699a33aa8..91ec89b0c 100644
--- a/Logic/Actors/TitleHandler.ts
+++ b/Logic/Actors/TitleHandler.ts
@@ -29,7 +29,7 @@ export default class TitleHandler {
if (layer.source.osmTags.matchesProperties(tags)) {
const tagsSource = state.allElements.getEventSourceById(tags.id)
const title = new TagRenderingAnswer(tagsSource, layer.title)
- return new Combine([defaultTitle, " | ", title]).ConstructElement().innerText;
+ return new Combine([defaultTitle, " | ", title]).ConstructElement()?.innerText ?? defaultTitle;
}
}
return defaultTitle
diff --git a/Logic/ElementStorage.ts b/Logic/ElementStorage.ts
index 91193ea6d..ae51094ae 100644
--- a/Logic/ElementStorage.ts
+++ b/Logic/ElementStorage.ts
@@ -39,11 +39,10 @@ export class ElementStorage {
}
getEventSourceById(elementId): UIEventSource {
- if (this._elements.has(elementId)) {
- return this._elements.get(elementId);
+ if(elementId === undefined){
+ return undefined;
}
- console.error("Can not find eventsource with id ", elementId);
- return undefined;
+ return this._elements.get(elementId);
}
has(id) {
diff --git a/Logic/FeatureSource/FeaturePipeline.ts b/Logic/FeatureSource/FeaturePipeline.ts
index d65771da2..e8d270f0b 100644
--- a/Logic/FeatureSource/FeaturePipeline.ts
+++ b/Logic/FeatureSource/FeaturePipeline.ts
@@ -62,11 +62,35 @@ export default class FeaturePipeline {
/**
* Maps tileid onto last download moment
*/
- const tileFreshnesses = new Map()
+ const tileFreshnesses = new UIEventSource>(new Map())
const osmSourceZoomLevel = 14
const useOsmApi = state.locationControl.map(l => l.zoom > (state.overpassMaxZoom.data ?? 12))
this.relationTracker = new RelationsTracker()
+ console.log("Tilefreshnesses are", tileFreshnesses.data)
+ const oldestAllowedDate = new Date(new Date().getTime() - (60 * 60 * 24 * 30 * 1000));
+ const neededTilesFromOsm = state.currentBounds.map(bbox => {
+ if (bbox === undefined) {
+ return
+ }
+ const range = bbox.containingTileRange(osmSourceZoomLevel)
+ const tileIndexes = []
+ if (range.total > 100) {
+ // Too much tiles!
+ return []
+ }
+ Tiles.MapRange(range, (x, y) => {
+ const i = Tiles.tile_index(osmSourceZoomLevel, x, y);
+ if (tileFreshnesses.data.get(i) > oldestAllowedDate) {
+ console.debug("Skipping tile", osmSourceZoomLevel, x, y, "as a decently fresh one is available")
+ // The cached tiles contain decently fresh data
+ return;
+ }
+ tileIndexes.push(i)
+ })
+ return tileIndexes
+ }, [tileFreshnesses])
+
const updater = new OverpassFeatureSource(state,
{
relationTracker: this.relationTracker,
@@ -75,8 +99,9 @@ export default class FeaturePipeline {
// This callback contains metadata of the overpass call
const range = bbox.containingTileRange(osmSourceZoomLevel)
Tiles.MapRange(range, (x, y) => {
- tileFreshnesses.set(Tiles.tile_index(osmSourceZoomLevel, x, y), freshness)
+ tileFreshnesses.data.set(Tiles.tile_index(osmSourceZoomLevel, x, y), freshness)
})
+ tileFreshnesses.ping();
}
});
@@ -137,17 +162,17 @@ export default class FeaturePipeline {
}, state)
localStorage.tileFreshness.forEach((value, key) => {
- if (tileFreshnesses.has(key)) {
- const previous = tileFreshnesses.get(key)
+ if (tileFreshnesses.data.has(key)) {
+ const previous = tileFreshnesses.data.get(key)
if (value < previous) {
- tileFreshnesses.set(key, value)
+ tileFreshnesses.data.set(key, value)
}
} else {
- tileFreshnesses.set(key, value)
+ tileFreshnesses.data.set(key, value)
}
+ tileFreshnesses.ping()
})
-
continue
}
@@ -178,30 +203,7 @@ export default class FeaturePipeline {
}
}
- console.log("Tilefreshnesses are", tileFreshnesses)
- const oldestAllowedDate = new Date(new Date().getTime() - (60 * 60 * 24 * 30 * 1000));
-
- const neededTilesFromOsm = state.currentBounds.map(bbox => {
- if (bbox === undefined) {
- return
- }
- const range = bbox.containingTileRange(osmSourceZoomLevel)
- const tileIndexes = []
- if (range.total > 100) {
- // Too much tiles!
- return []
- }
- Tiles.MapRange(range, (x, y) => {
- const i = Tiles.tile_index(osmSourceZoomLevel, x, y);
- if (tileFreshnesses.get(i) > oldestAllowedDate) {
- console.debug("Skipping tile", osmSourceZoomLevel, x, y, "as a decently fresh one is available")
- // The cached tiles contain decently fresh data
- return;
- }
- tileIndexes.push(i)
- })
- return tileIndexes
- })
+
const osmFeatureSource = new OsmFeatureSource({
isActive: useOsmApi,
diff --git a/Logic/FeatureSource/Sources/FilteringFeatureSource.ts b/Logic/FeatureSource/Sources/FilteringFeatureSource.ts
index 6b433f88d..0c2c9d92a 100644
--- a/Logic/FeatureSource/Sources/FilteringFeatureSource.ts
+++ b/Logic/FeatureSource/Sources/FilteringFeatureSource.ts
@@ -28,8 +28,9 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti
this.layer = upstream.layer;
const layer = upstream.layer;
-
+
function update() {
+
const features: { feature: any; freshness: Date }[] = upstream.features.data;
const newFeatures = features.filter((f) => {
if (
@@ -60,11 +61,6 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti
}
- if (!layer.isDisplayed) {
- // The layer itself is either disabled or hidden due to zoom constraints
- // We should return true, but it might still match some other layer
- return false;
- }
return true;
});
@@ -75,20 +71,8 @@ export default class FilteringFeatureSource implements FeatureSourceForLayer, Ti
update();
});
- layer.isDisplayed.addCallback(isShown => {
- if (isShown) {
- update();
- } else {
- self.features.setData([])
- }
- });
layer.appliedFilters.addCallback(_ => {
- if (!layer.isDisplayed.data) {
- // Currently not shown.
- // Note that a change in 'isSHown' will trigger an update as well, so we don't have to watch it another time
- return;
- }
update()
})
diff --git a/Logic/MetaTagging.ts b/Logic/MetaTagging.ts
index 2a85e6292..ee4209f4a 100644
--- a/Logic/MetaTagging.ts
+++ b/Logic/MetaTagging.ts
@@ -63,7 +63,7 @@ export default class MetaTagging {
}
somethingChanged = somethingChanged || metatag.applyMetaTagsOnFeature(feature, freshness)
} catch (e) {
- console.error("Could not calculate metatag for ", metatag.keys.join(","), ":", e)
+ console.error("Could not calculate metatag for ", metatag.keys.join(","), ":", e, e.stack)
}
}
diff --git a/Logic/Osm/Changes.ts b/Logic/Osm/Changes.ts
index b4bf3b4ec..570bf553b 100644
--- a/Logic/Osm/Changes.ts
+++ b/Logic/Osm/Changes.ts
@@ -149,14 +149,13 @@ export class Changes {
}
- public applyAction(action: OsmChangeAction) {
- action.Perform(this).then(changes => {
- console.log("Received changes:", changes)
- this.pendingChanges.data.push(...changes);
- this.pendingChanges.ping();
- this.allChanges.data.push(...changes)
- this.allChanges.ping()
- })
+ public async applyAction(action: OsmChangeAction): Promise {
+ const changes = await action.Perform(this)
+ console.log("Received changes:", changes)
+ this.pendingChanges.data.push(...changes);
+ this.pendingChanges.ping();
+ this.allChanges.data.push(...changes)
+ this.allChanges.ping()
}
private CreateChangesetObjects(changes: ChangeDescription[], downloadedOsmObjects: OsmObject[]): {
diff --git a/Logic/Tags/RegexTag.ts b/Logic/Tags/RegexTag.ts
index 20fbbbcbf..fae2fd70b 100644
--- a/Logic/Tags/RegexTag.ts
+++ b/Logic/Tags/RegexTag.ts
@@ -19,6 +19,9 @@ export class RegexTag extends TagsFilter {
if (fromTag === undefined) {
return;
}
+ if(typeof fromTag === "number"){
+ fromTag = "" + fromTag;
+ }
if (typeof possibleRegex === "string") {
return fromTag === possibleRegex;
}
diff --git a/Models/Constants.ts b/Models/Constants.ts
index 91c9e0015..a7f79bf39 100644
--- a/Models/Constants.ts
+++ b/Models/Constants.ts
@@ -2,7 +2,7 @@ import {Utils} from "../Utils";
export default class Constants {
- public static vNumber = "0.10.0-alpha-3";
+ public static vNumber = "0.10.0-alpha-4";
public static ImgurApiKey = '7070e7167f0a25a'
// The user journey states thresholds when a new feature gets unlocked
diff --git a/assets/layers/cluster_style/cluster_style.json b/assets/layers/cluster_style/cluster_style.json
new file mode 100644
index 000000000..ea6760612
--- /dev/null
+++ b/assets/layers/cluster_style/cluster_style.json
@@ -0,0 +1,36 @@
+{
+ "id": "cluster_style",
+ "description": "The style for the clustering in all themes.",
+ "source": {
+ "osmTags": "tileId~*"
+ },
+ "color": {
+ "render": "#3c3",
+ "mappings": [
+ {
+ "if": "count>200",
+ "then": "#f33"
+ },
+ {
+ "if": "count>100",
+ "then": "#c93"
+ },
+ {
+ "if": "count>50",
+ "then": "#cc3"
+ }
+ ]
+ },
+ "width": {
+ "render": "1"
+ },
+ "label": {
+ "render": "
"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json b/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json
index aeea7f806..2b303ea14 100644
--- a/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json
+++ b/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json
@@ -14,7 +14,7 @@
"nl": "Een kaart om toeristisch relevante info op aan te duiden"
},
"description": {
- "nl": "Op deze kaart kan je info zien voor toeristen en zelf aanpasingen maken, zichtbaar voor iedereen"
+ "nl": "Op deze kaart kan je info zien die relevant is voor toerisme, zoals:
Eetgelegenheden
Cafés en bars
(Fiets)oplaadpunten
Fietspompen, fietserverhuur en fietswinkels
Uitkijktorens
...
Zie je fouten op de kaart? Dan kan je zelf makkelijk aanpasingen maken, die zichtbaar zijn voor iedereen. Hiervoor dien je een gratis OpenStreetMap account voor te maken.
Met de steun van Toerisme Vlaanderen"
},
"icon": "./assets/svg/star.svg",
"startZoom": 8,
@@ -39,9 +39,5 @@
"binocular",
"observation_tower"
],
- "overiddeAll": {
- "minZoomVisible": 0
- },
-
"hideFromOverview": true
}
\ No newline at end of file
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index a1e3dee82..e3220df4d 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -1008,7 +1008,7 @@
"title": "Surveillance under Surveillance"
},
"toerisme_vlaanderen": {
- "description": "Op deze kaart kan je info zien voor toeristen en zelf aanpasingen maken, zichtbaar voor iedereen",
+ "description": "Op deze kaart kan je info zien die relevant is voor toerisme, zoals:
Eetgelegenheden
Cafés en bars
(Fiets)oplaadpunten
Fietspompen, fietserverhuur en fietswinkels
Uitkijktorens
...
Zie je fouten op de kaart? Dan kan je zelf makkelijk aanpasingen maken, die zichtbaar zijn voor iedereen. Hiervoor dien je een gratis OpenStreetMap account voor te maken.
Met de steun van Toerisme Vlaanderen",
"shortDescription": "Een kaart om toeristisch relevante info op aan te duiden",
"title": "Toeristisch relevante info"
},
From a4bafe18a74357d1bbed16e39f3885bf23689fe2 Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 29 Sep 2021 16:35:56 +0200
Subject: [PATCH 43/65] Add capital letters to layer names
---
assets/layers/parking/parking.json | 4 ++--
assets/layers/watermill/watermill.json | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/assets/layers/parking/parking.json b/assets/layers/parking/parking.json
index 1646d143e..b071901c6 100644
--- a/assets/layers/parking/parking.json
+++ b/assets/layers/parking/parking.json
@@ -1,7 +1,7 @@
{
"id": "parking",
"name": {
- "nl": "parking"
+ "nl": "Parking"
},
"minzoom": 12,
"source": {
@@ -189,4 +189,4 @@
}
}
]
-}
\ No newline at end of file
+}
diff --git a/assets/layers/watermill/watermill.json b/assets/layers/watermill/watermill.json
index 1908dc8a0..54b5f056c 100644
--- a/assets/layers/watermill/watermill.json
+++ b/assets/layers/watermill/watermill.json
@@ -1,7 +1,7 @@
{
"id": "watermill",
"name": {
- "nl": "watermolens",
+ "nl": "Watermolens",
"en": "Watermill"
},
"minzoom": 12,
@@ -170,4 +170,4 @@
"color": {
"render": "#FFC0CB"
}
-}
\ No newline at end of file
+}
From 09897b47e04e50ab748b88d46df38597d1108cba Mon Sep 17 00:00:00 2001
From: pietervdvn
Date: Wed, 29 Sep 2021 16:55:05 +0200
Subject: [PATCH 44/65] Add mssing assets
---
Logic/Actors/OverpassFeatureSource.ts | 108 ++++++++----------
Logic/FeatureSource/FeaturePipeline.ts | 22 ++--
Logic/Osm/Overpass.ts | 12 +-
Models/Bounds.ts | 6 -
Models/Constants.ts | 10 ++
Models/ThemeConfig/Json/LayoutConfigJson.ts | 4 +-
Models/ThemeConfig/LayoutConfig.ts | 12 +-
State.ts | 6 +-
Utils.ts | 1 +
.../toerisme_vlaanderen/license_info.json | 12 ++
assets/themes/toerisme_vlaanderen/logo.png | Bin 0 -> 11674 bytes
11 files changed, 104 insertions(+), 89 deletions(-)
delete mode 100644 Models/Bounds.ts
create mode 100644 assets/themes/toerisme_vlaanderen/license_info.json
create mode 100644 assets/themes/toerisme_vlaanderen/logo.png
diff --git a/Logic/Actors/OverpassFeatureSource.ts b/Logic/Actors/OverpassFeatureSource.ts
index 248703954..fa5de3eed 100644
--- a/Logic/Actors/OverpassFeatureSource.ts
+++ b/Logic/Actors/OverpassFeatureSource.ts
@@ -2,7 +2,6 @@ import {UIEventSource} from "../UIEventSource";
import Loc from "../../Models/Loc";
import {Or} from "../Tags/Or";
import {Overpass} from "../Osm/Overpass";
-import Bounds from "../../Models/Bounds";
import FeatureSource from "../FeatureSource/FeatureSource";
import {Utils} from "../../Utils";
import {TagsFilter} from "../Tags/TagsFilter";
@@ -36,16 +35,17 @@ export default class OverpassFeatureSource implements FeatureSource {
* If the map location changes, we check for each layer if it is loaded:
* we start checking the bounds at the first zoom level the layer might operate. If in bounds - no reload needed, otherwise we continue walking down
*/
- private readonly _previousBounds: Map = new Map();
+ private readonly _previousBounds: Map = new Map();
private readonly state: {
readonly locationControl: UIEventSource,
readonly layoutToUse: LayoutConfig,
- readonly overpassUrl: UIEventSource;
+ readonly overpassUrl: UIEventSource;
readonly overpassTimeout: UIEventSource;
- readonly currentBounds :UIEventSource
+ readonly currentBounds: UIEventSource
}
private readonly _isActive: UIEventSource;
private _onUpdated?: (bbox: BBox, dataFreshness: Date) => void;
+
/**
* The most important layer should go first, as that one gets first pick for the questions
*/
@@ -53,20 +53,20 @@ export default class OverpassFeatureSource implements FeatureSource {
state: {
readonly locationControl: UIEventSource,
readonly layoutToUse: LayoutConfig,
- readonly overpassUrl: UIEventSource;
+ readonly overpassUrl: UIEventSource;
readonly overpassTimeout: UIEventSource;
readonly overpassMaxZoom: UIEventSource