diff --git a/Models/ThemeConfig/LayerConfig.ts b/Models/ThemeConfig/LayerConfig.ts
index 172a614c8d..09ff272d8e 100644
--- a/Models/ThemeConfig/LayerConfig.ts
+++ b/Models/ThemeConfig/LayerConfig.ts
@@ -215,6 +215,7 @@ export default class LayerConfig extends WithContextLoader {
this.minzoomVisible = json.minzoomVisible ?? this.minzoom
this.shownByDefault = json.shownByDefault ?? true
this.forceLoad = json.forceLoad ?? false
+ if (json.presets === null) json.presets = undefined
if (json.presets !== undefined && json.presets?.map === undefined) {
throw "Presets should be a list of items (at " + context + ")"
}
diff --git a/assets/layers/atm/atm.json b/assets/layers/atm/atm.json
new file mode 100644
index 0000000000..67d4491525
--- /dev/null
+++ b/assets/layers/atm/atm.json
@@ -0,0 +1,86 @@
+{
+ "id": "atm",
+ "name": {
+ "en": "ATMs"
+ },
+ "description": {
+ "en": "ATMS to withdraw money"
+ },
+ "title": {
+ "render": {
+ "en": "ATM"
+ },
+ "mappings": [
+ {
+ "if": "brand~*",
+ "then": {
+ "en": "{brand} ATM"
+ }
+ }
+ ]
+ },
+ "source": {
+ "osmTags": "amenity=atm"
+ },
+ "minzoom": 13,
+ "presets": [
+ {
+ "tags": [
+ "amenity=atm"
+ ],
+ "title": {
+ "en": "an ATM"
+ }
+ }
+ ],
+ "tagRenderings": [
+ {
+ "id": "name",
+ "render": {
+ "en": "The name of this ATM is {name}"
+ }
+ },
+ {
+ "id": "brand",
+ "question": {
+ "en": "What brand is this ATM?"
+ },
+ "freeform": {
+ "key": "brand",
+ "type": "string",
+ "placeholder": {
+ "en": "Brand name"
+ }
+ },
+ "render": {
+ "en": "The brand of this ATM is {brand}"
+ }
+ },
+ {
+ "id": "operator",
+ "question": {
+ "en": "What company operates this ATM?"
+ },
+ "freeform": {
+ "key": "operator",
+ "type": "string",
+ "placeholder": {
+ "en": "Operator"
+ }
+ },
+ "render": {
+ "en": "The ATM is operated by {operator}"
+ }
+ },
+ "opening_hours"
+ ],
+ "mapRendering": [
+ {
+ "icon": "circle:white;./assets/layers/atm/atm.svg",
+ "location": [
+ "point",
+ "centroid"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/atm/atm.svg b/assets/layers/atm/atm.svg
new file mode 100644
index 0000000000..dd010da8bf
--- /dev/null
+++ b/assets/layers/atm/atm.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/assets/layers/atm/license_info.json b/assets/layers/atm/license_info.json
new file mode 100644
index 0000000000..91ffee8e6f
--- /dev/null
+++ b/assets/layers/atm/license_info.json
@@ -0,0 +1,13 @@
+[
+ {
+ "path": "atm.svg",
+ "license": "CC0",
+ "authors": [
+ "Michael Glanznig",
+ "Andy Allan"
+ ],
+ "sources": [
+ "https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/amenity/atm.svg"
+ ]
+ }
+]
\ 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 4e18a23106..29be69568e 100644
--- a/assets/layers/bike_parking/bike_parking.json
+++ b/assets/layers/bike_parking/bike_parking.json
@@ -670,7 +670,7 @@
},
"allowMove": {
"enableRelocation": false,
- "enableImproveAccuraccy": true
+ "enableImproveAccuracy": true
},
"mapRendering": [
{
diff --git a/assets/layers/car_rental/car_rental.json b/assets/layers/car_rental/car_rental.json
new file mode 100644
index 0000000000..18da669108
--- /dev/null
+++ b/assets/layers/car_rental/car_rental.json
@@ -0,0 +1,97 @@
+{
+ "id": "car_rental",
+ "name": {
+ "en": "Car Rental",
+ "nl": "Autoverhuur"
+ },
+ "source": {
+ "osmTags": "amenity=car_rental"
+ },
+ "minzoom": 12,
+ "title": {
+ "render": {
+ "en": "Car Rental",
+ "nl": "Autoverhuur"
+ },
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": "{name}"
+ }
+ ]
+ },
+ "description": {
+ "en": "Places where you can rent a car",
+ "nl": "Plaatsen waar je een auto kunt huren"
+ },
+ "tagRenderings": [
+ "images",
+ {
+ "id": "name",
+ "freeform": {
+ "key": "name",
+ "type": "string",
+ "placeholder": {
+ "en": "Name of the car rental",
+ "nl": "Naam van de autoverhuur"
+ }
+ },
+ "question": {
+ "en": "What is the name of this car rental?",
+ "nl": "Wat is de naam van deze autoverhuur?"
+ },
+ "mappings": [
+ {
+ "if": "noname=yes",
+ "then": {
+ "en": "This car rental has no name",
+ "nl": "Deze autoverhuur heeft geen naam"
+ }
+ }
+ ],
+ "render": {
+ "en": "This car rental is called {name}",
+ "nl": "Deze autoverhuur heet {name}"
+ }
+ },
+ "website",
+ "email",
+ "phone",
+ "opening_hours"
+ ],
+ "presets": [
+ {
+ "tags": [
+ "amenity=car_rental"
+ ],
+ "title": {
+ "en": "a car rental",
+ "nl": "een autoverhuur"
+ },
+ "description": {
+ "en": "A place where you can rent a car",
+ "nl": "Een plaats waar je een auto kunt huren"
+ }
+ }
+ ],
+ "mapRendering": [
+ {
+ "icon": "circle:white;./assets/layers/car_rental/car_rental.svg",
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "label": "
{name}
"
+ },
+ {
+ "color": "darkblue",
+ "width": 2
+ }
+ ],
+ "allowMove": {
+ "enableImproveAccuracy": true
+ },
+ "filter": [
+ "open_now"
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/car_rental/car_rental.svg b/assets/layers/car_rental/car_rental.svg
new file mode 100644
index 0000000000..19a148724e
--- /dev/null
+++ b/assets/layers/car_rental/car_rental.svg
@@ -0,0 +1,8 @@
+
+
diff --git a/assets/layers/car_rental/license_info.json b/assets/layers/car_rental/license_info.json
new file mode 100644
index 0000000000..31c8cda5ec
--- /dev/null
+++ b/assets/layers/car_rental/license_info.json
@@ -0,0 +1,12 @@
+[
+ {
+ "path": "car_rental.svg",
+ "license": "CC0",
+ "authors": [
+ "American Institute of Graphic Arts"
+ ],
+ "sources": [
+ "https://thenounproject.com/icon/car-rental-71/"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/railway_platforms/railway_platforms.json b/assets/layers/railway_platforms/railway_platforms.json
new file mode 100644
index 0000000000..e0d6fad204
--- /dev/null
+++ b/assets/layers/railway_platforms/railway_platforms.json
@@ -0,0 +1,69 @@
+{
+ "id": "railway_platforms",
+ "name": {
+ "en": "Railway Platforms"
+ },
+ "description": {
+ "en": "Find every platform in the station, and the train routes that use them."
+ },
+ "title": {
+ "render": {
+ "en": "Platform"
+ },
+ "mappings": [
+ {
+ "if": "ref~*",
+ "then": {
+ "en": "Platform {ref}"
+ }
+ }
+ ]
+ },
+ "source": {
+ "osmTags": {
+ "or": [
+ "railway=platform"
+ ]
+ }
+ },
+ "minzoom": 18,
+ "tagRenderings": [
+ {
+ "id": "ref",
+ "question": {
+ "en": "What is the number for this platform?"
+ },
+ "freeform": {
+ "key": "ref",
+ "type": "string",
+ "placeholder": {
+ "en": "Platform number"
+ }
+ },
+ "render": {
+ "en": "Platform {ref}"
+ }
+ },
+ "level"
+ ],
+ "mapRendering": [
+ {
+ "color": "gray"
+ },
+ {
+ "icon": "./assets/themes/stations/rail-light.svg",
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "label": {
+ "mappings": [
+ {
+ "if": "ref~*",
+ "then": "{ref}
"
+ }
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/stairs/stairs.json b/assets/layers/stairs/stairs.json
index 097f9bd2e4..7f9fbc1fba 100644
--- a/assets/layers/stairs/stairs.json
+++ b/assets/layers/stairs/stairs.json
@@ -32,6 +32,19 @@
},
"tagRenderings": [
"images",
+ {
+ "builtin": "multilevels",
+ "override": {
+ "question": {
+ "en": "Between which levels are these stairs?",
+ "nl": "Tussen welke verdiepingen loopt deze trap?"
+ },
+ "render": {
+ "en": "These stairs are between the levels {level}",
+ "nl": "Deze trap loopt tussen de verdiepingen {level}"
+ }
+ }
+ },
{
"id": "handrail",
"question": {
@@ -195,7 +208,7 @@
{
"color": "gray",
"width": 10,
- "dashArray": "2 2"
+ "dashArray": "6 12"
}
]
}
\ No newline at end of file
diff --git a/assets/layers/ticket_machine/ticket_machine.json b/assets/layers/ticket_machine/ticket_machine.json
new file mode 100644
index 0000000000..673bd06257
--- /dev/null
+++ b/assets/layers/ticket_machine/ticket_machine.json
@@ -0,0 +1,79 @@
+{
+ "id": "ticket_machine",
+ "name": {
+ "en": "Ticket Machines"
+ },
+ "description": {
+ "en": "Find ticket machines for public transport tickets"
+ },
+ "source": {
+ "osmTags": {
+ "and": [
+ "amenity=vending_machine",
+ "vending=public_transport_tickets"
+ ]
+ }
+ },
+ "minzoom": 19,
+ "title": {
+ "render": {
+ "en": "Ticket Machine"
+ }
+ },
+ "tagRenderings": [
+ "images",
+ "level",
+ {
+ "id": "operator",
+ "question": {
+ "en": "Who is the operator of this ticket machine?"
+ },
+ "render": {
+ "en": "This ticket machine is operated by {operator}"
+ },
+ "freeform": {
+ "key": "operator",
+ "type": "string",
+ "placeholder": {
+ "en": "Name of the operator"
+ }
+ },
+ "mappings": [
+ {
+ "if": "operator=Nederlandse Spoorwegen",
+ "then": {
+ "en": "Dutch Railways (NS)",
+ "nl": "Nederlandse Spoorwegen (NS)"
+ },
+ "addExtraTags": [
+ "operator:wikidata=Q23076"
+ ],
+ "hideInAnswer": "_country!=nl"
+ }
+ ]
+ },
+ "payment-options-split",
+ "denominations-coins"
+ ],
+ "presets": [
+ {
+ "tags": [
+ "amenity=vending_machine",
+ "vending=public_transport_tickets"
+ ],
+ "title": {
+ "en": "a ticket machine"
+ }
+ }
+ ],
+ "mapRendering": [
+ {
+ "icon": "square:lightblue;./assets/themes/stations/public_transport_tickets.svg",
+ "iconSize": "20,20,center",
+ "location": [
+ "point",
+ "centroid"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/ticket_validator/ticket_validator.json b/assets/layers/ticket_validator/ticket_validator.json
new file mode 100644
index 0000000000..3c6312db03
--- /dev/null
+++ b/assets/layers/ticket_validator/ticket_validator.json
@@ -0,0 +1,96 @@
+{
+ "id": "ticket_validator",
+ "name": {
+ "en": "Ticket Validators"
+ },
+ "description": {
+ "en": "Find ticket validators to validate public transport tickets"
+ },
+ "source": {
+ "osmTags": "amenity=ticket_validator"
+ },
+ "minzoom": 19,
+ "title": {
+ "render": {
+ "en": "Ticket Validator"
+ }
+ },
+ "tagRenderings": [
+ "images",
+ "level",
+ {
+ "id": "barrier",
+ "condition": "barrier~*",
+ "render": {
+ "en": "This ticket validator is part of a barrier of type {barrier}"
+ },
+ "mappings": [
+ {
+ "if": "barrier=gate",
+ "then": {
+ "en": "This ticket validator is part of a gate"
+ }
+ }
+ ]
+ },
+ {
+ "id": "validator-operator",
+ "question": {
+ "en": "Who is the operator of this ticket validator?"
+ },
+ "render": {
+ "en": "This ticket validator is operated by {operator}"
+ },
+ "freeform": {
+ "key": "operator",
+ "type": "string",
+ "placeholder": {
+ "en": "Name of the operator"
+ }
+ }
+ },
+ {
+ "builtin": "payment-options",
+ "override": {
+ "mappings+": [
+ {
+ "if": "payment:OV-Chipkaart=yes",
+ "ifnot": "payment:OV-Chipkaart=no",
+ "then": {
+ "en": "This ticket validator accepts OV-Chipkaart"
+ },
+ "hideInAnswer": "_country!=nl"
+ },
+ {
+ "if": "payment:ov-chipkaart=yes",
+ "ifnot": "payment:ov-chipkaart=no",
+ "then": {
+ "en": "This ticket validator accepts OV-Chipkaart"
+ },
+ "hideInAnswer": true
+ }
+ ]
+ }
+ }
+ ],
+ "presets": [
+ {
+ "tags": [
+ "amenity=ticket_validator"
+ ],
+ "title": {
+ "en": "a ticket validator"
+ }
+ }
+ ],
+ "mapRendering": [
+ {
+ "icon": "square:green;./assets/themes/stations/public_transport_tickets.svg",
+ "iconSize": "20,20,center",
+ "location": [
+ "point",
+ "centroid"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/tagRenderings/10cent.svg b/assets/tagRenderings/10cent.svg
new file mode 100644
index 0000000000..539395abd0
--- /dev/null
+++ b/assets/tagRenderings/10cent.svg
@@ -0,0 +1,59 @@
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/1cent.svg b/assets/tagRenderings/1cent.svg
new file mode 100644
index 0000000000..cbbe3f0cc9
--- /dev/null
+++ b/assets/tagRenderings/1cent.svg
@@ -0,0 +1,57 @@
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/1euro.svg b/assets/tagRenderings/1euro.svg
new file mode 100644
index 0000000000..565cb8f184
--- /dev/null
+++ b/assets/tagRenderings/1euro.svg
@@ -0,0 +1,46 @@
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/20cent.svg b/assets/tagRenderings/20cent.svg
new file mode 100644
index 0000000000..6b92dfbd57
--- /dev/null
+++ b/assets/tagRenderings/20cent.svg
@@ -0,0 +1,59 @@
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/2cent.svg b/assets/tagRenderings/2cent.svg
new file mode 100644
index 0000000000..f1cea0ccf7
--- /dev/null
+++ b/assets/tagRenderings/2cent.svg
@@ -0,0 +1,55 @@
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/2euro.svg b/assets/tagRenderings/2euro.svg
new file mode 100644
index 0000000000..a9ed9de643
--- /dev/null
+++ b/assets/tagRenderings/2euro.svg
@@ -0,0 +1,46 @@
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/50cent.svg b/assets/tagRenderings/50cent.svg
new file mode 100644
index 0000000000..e31630c2a0
--- /dev/null
+++ b/assets/tagRenderings/50cent.svg
@@ -0,0 +1,59 @@
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/5cent.svg b/assets/tagRenderings/5cent.svg
new file mode 100644
index 0000000000..28894a0294
--- /dev/null
+++ b/assets/tagRenderings/5cent.svg
@@ -0,0 +1,55 @@
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/coins.svg b/assets/tagRenderings/coins.svg
new file mode 100644
index 0000000000..4fe4c15a7f
--- /dev/null
+++ b/assets/tagRenderings/coins.svg
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/license_info.json b/assets/tagRenderings/license_info.json
index 1f92135a1c..01abeaa689 100644
--- a/assets/tagRenderings/license_info.json
+++ b/assets/tagRenderings/license_info.json
@@ -1,4 +1,92 @@
[
+ {
+ "path": "10cent.svg",
+ "license": "CC0",
+ "authors": [
+ "OpenClipart",
+ "frankes"
+ ],
+ "sources": [
+ "https://openclipart.org/detail/311337/worksheet-10-cent-coloured"
+ ]
+ },
+ {
+ "path": "1cent.svg",
+ "license": "CC0",
+ "authors": [
+ "OpenClipart",
+ "frankes"
+ ],
+ "sources": [
+ "https://openclipart.org/detail/311334/worksheet-1-cent-coloured"
+ ]
+ },
+ {
+ "path": "1euro.svg",
+ "license": "CC0",
+ "authors": [
+ "OpenClipart",
+ "frankes"
+ ],
+ "sources": [
+ "https://openclipart.org/detail/311340/worksheet-1-euro-coloured"
+ ]
+ },
+ {
+ "path": "20cent.svg",
+ "license": "CC0",
+ "authors": [
+ "OpenClipart",
+ "frankes"
+ ],
+ "sources": [
+ "https://openclipart.org/detail/311338/worksheet-20-cent-coloured"
+ ]
+ },
+ {
+ "path": "2cent.svg",
+ "license": "CC0",
+ "authors": [
+ "OpenClipart",
+ "frankes"
+ ],
+ "sources": [
+ "https://openclipart.org/detail/311335/worksheet-2-cent-coloured"
+ ]
+ },
+ {
+ "path": "2euro.svg",
+ "license": "CC0",
+ "authors": [
+ "OpenClipart",
+ "frankes"
+ ],
+ "sources": [
+ "https://openclipart.org/detail/311341/worksheet-2-euro-coloured"
+ ]
+ },
+ {
+ "path": "50cent.svg",
+ "license": "CC0",
+ "authors": [
+ "OpenClipart",
+ "frankes"
+ ],
+ "sources": [
+ "https://openclipart.org/detail/311339/worksheet-50-cent-coloured"
+ ]
+ },
+ {
+ "path": "5cent.svg",
+ "license": "CC0",
+ "authors": [
+ "OpenClipart",
+ "frankes"
+ ],
+ "sources": [
+ "https://openclipart.org/detail/311336/worksheet-5-cent-coloured"
+ ]
+ },
{
"path": "audio_induction_loop.svg",
"license": "CC-BY 4.0",
@@ -29,6 +117,16 @@
"https://www.onlinewebfonts.com/icon/464494"
]
},
+ {
+ "path": "coins.svg",
+ "license": "CC-BY 3.0",
+ "authors": [
+ "Online Web Fonts"
+ ],
+ "sources": [
+ "https://www.onlinewebfonts.com/icon/464488"
+ ]
+ },
{
"path": "nfc_card.svg",
"license": "CC0",
@@ -50,6 +148,16 @@
"https://www.aiga.org/content.cfm/symbol-signs"
]
},
+ {
+ "path": "notes.svg",
+ "license": "CC-BY 3.0",
+ "authors": [
+ "Online Web Fonts"
+ ],
+ "sources": [
+ "https://www.onlinewebfonts.com/icon/464507"
+ ]
+ },
{
"path": "payment_card.svg",
"license": "CC0",
diff --git a/assets/tagRenderings/notes.svg b/assets/tagRenderings/notes.svg
new file mode 100644
index 0000000000..79d25a4338
--- /dev/null
+++ b/assets/tagRenderings/notes.svg
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/assets/tagRenderings/questions.json b/assets/tagRenderings/questions.json
index 7addf9700c..0ffb0350a0 100644
--- a/assets/tagRenderings/questions.json
+++ b/assets/tagRenderings/questions.json
@@ -897,6 +897,55 @@
}
]
},
+ "payment-options-split": {
+ "builtin": "payment-options",
+ "override": {
+ "mappings": [
+ {
+ "hideInAnswer": true,
+ "ifnot": "payment:cash="
+ },
+ {
+ "hideInAnswer": true,
+ "ifnot": "payment:cards="
+ }
+ ],
+ "mappings+": [
+ {
+ "if": "payment:coins=yes",
+ "ifnot": "payment:coins=no",
+ "icon": "./assets/tagRenderings/coins.svg",
+ "then": {
+ "en": "Coins are accepted here"
+ }
+ },
+ {
+ "if": "payment:notes=yes",
+ "ifnot": "payment:notes=no",
+ "icon": "./assets/tagRenderings/notes.svg",
+ "then": {
+ "en": "Bank notes are accepted here"
+ }
+ },
+ {
+ "if": "payment:debit_cards=yes",
+ "ifnot": "payment_debit_cards=no",
+ "icon": "./assets/tagRenderings/payment_card.svg",
+ "then": {
+ "en": "Debit cards are accepted here"
+ }
+ },
+ {
+ "if": "payment:credit_cards=yes",
+ "ifnot": "payment:credit_cards=no",
+ "icon": "./assets/tagRenderings/payment_card.svg",
+ "then": {
+ "en": "Credit cards are accepted here"
+ }
+ }
+ ]
+ }
+ },
"payment-options-advanced": {
"builtin": "payment-options",
"override": {
@@ -951,6 +1000,104 @@
]
}
},
+ "denominations-coins": {
+ "condition": {
+ "and": [
+ {
+ "or": [
+ "payment:coins=yes",
+ "payment:cash=yes"
+ ]
+ },
+ {
+ "or": [
+ "_country=at",
+ "_country=be",
+ "_country=cy",
+ "_country=de",
+ "_country=ee",
+ "_country=es",
+ "_country=fi",
+ "_country=fr",
+ "_country=gr",
+ "_country=hr",
+ "_country=ie",
+ "_country=it",
+ "_country=lt",
+ "_country=lu",
+ "_country=lv",
+ "_country=mt",
+ "_country=nl",
+ "_country=pt",
+ "_country=si",
+ "_country=sk"
+ ]
+ }
+ ]
+ },
+ "question": {
+ "en": "Whith what coins can you pay here?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "payment:coins:denominations=0.01 EUR",
+ "icon": "./assets/tagRenderings/1cent.svg",
+ "then": {
+ "en": "1 cent coins are accepted"
+ }
+ },
+ {
+ "if": "payment:coins:denominations=0.02 EUR",
+ "icon": "./assets/tagRenderings/2cent.svg",
+ "then": {
+ "en": "2 cent coins are accepted"
+ }
+ },
+ {
+ "if": "payment:coins:denominations=0.05 EUR",
+ "icon": "./assets/tagRenderings/5cent.svg",
+ "then": {
+ "en": "5 cent coins are accepted"
+ }
+ },
+ {
+ "if": "payment:coins:denominations=0.10 EUR",
+ "icon": "./assets/tagRenderings/10cent.svg",
+ "then": {
+ "en": "10 cent coins are accepted"
+ }
+ },
+ {
+ "if": "payment:coins:denominations=0.20 EUR",
+ "icon": "./assets/tagRenderings/20cent.svg",
+ "then": {
+ "en": "20 cent coins are accepted"
+ }
+ },
+ {
+ "if": "payment:coins:denominations=0.50 EUR",
+ "icon": "./assets/tagRenderings/50cent.svg",
+ "then": {
+ "en": "50 cent coins are accepted"
+ }
+ },
+ {
+ "if": "payment:coins:denominations=1 EUR",
+ "icon": "./assets/tagRenderings/1euro.svg",
+ "then": {
+ "en": "1 euro coins are accepted"
+ }
+ },
+ {
+ "if": "payment:coins:denominations=2 EUR",
+ "icon": "./assets/tagRenderings/2euro.svg",
+ "then": {
+ "en": "2 euro coins are accepted"
+ }
+ }
+ ]
+ },
"last_edit": {
"#": "Gives some metainfo about the last edit and who did edit it - rendering only",
"condition": "_last_edit:contributor~*",
diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json
index d0726a92e2..80c6edbffa 100644
--- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json
+++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json
@@ -350,6 +350,10 @@
"if": "theme=sports",
"then": "./assets/themes/sports/sport.svg"
},
+ {
+ "if": "theme=stations",
+ "then": "./assets/themes/stations/rail-light.svg"
+ },
{
"if": "theme=street_lighting",
"then": "./assets/layers/street_lamps/street_lamp.svg"
diff --git a/assets/themes/stations/bench.svg b/assets/themes/stations/bench.svg
new file mode 100644
index 0000000000..d1d8c8b141
--- /dev/null
+++ b/assets/themes/stations/bench.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/assets/themes/stations/bicycle_parking.svg b/assets/themes/stations/bicycle_parking.svg
new file mode 100644
index 0000000000..ebec627bd5
--- /dev/null
+++ b/assets/themes/stations/bicycle_parking.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/assets/themes/stations/departures_board.svg b/assets/themes/stations/departures_board.svg
new file mode 100644
index 0000000000..b5b8538476
--- /dev/null
+++ b/assets/themes/stations/departures_board.svg
@@ -0,0 +1,12 @@
+
diff --git a/assets/themes/stations/license_info.json b/assets/themes/stations/license_info.json
new file mode 100644
index 0000000000..13b0032bbc
--- /dev/null
+++ b/assets/themes/stations/license_info.json
@@ -0,0 +1,61 @@
+[
+ {
+ "path": "bench.svg",
+ "license": "CC0",
+ "authors": [
+ "Matthijs Melissen"
+ ],
+ "sources": [
+ "https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/amenity/bench.svg"
+ ]
+ },
+ {
+ "path": "bicycle_parking.svg",
+ "license": "CC0",
+ "authors": [
+ "Matthijs Melissen"
+ ],
+ "sources": [
+ "https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/amenity/bicycle_parking.svg"
+ ]
+ },
+ {
+ "path": "departures_board.svg",
+ "license": "CC0",
+ "authors": [
+ "Robin van der Linde"
+ ],
+ "sources": []
+ },
+ {
+ "path": "public_transport_tickets.svg",
+ "license": "CC0",
+ "authors": [
+ "Jérémy Ragusa"
+ ],
+ "sources": [
+ "https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/amenity/public_transport_tickets.svg"
+ ]
+ },
+ {
+ "path": "rail-light.svg",
+ "license": "CC0",
+ "authors": [
+ "Maki"
+ ],
+ "sources": [
+ "https://labs.mapbox.com/maki-icons/"
+ ]
+ },
+ {
+ "path": "rental_bicycle.svg",
+ "license": "CC0",
+ "authors": [
+ "Michael Glanznig",
+ "Andy Allan"
+ ],
+ "sources": [
+ "https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/amenity/rental_bicycle.svg"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/assets/themes/stations/public_transport_tickets.svg b/assets/themes/stations/public_transport_tickets.svg
new file mode 100644
index 0000000000..132830c222
--- /dev/null
+++ b/assets/themes/stations/public_transport_tickets.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/themes/stations/rail-light.svg b/assets/themes/stations/rail-light.svg
new file mode 100644
index 0000000000..1548d99098
--- /dev/null
+++ b/assets/themes/stations/rail-light.svg
@@ -0,0 +1,47 @@
+
+
diff --git a/assets/themes/stations/rental_bicycle.svg b/assets/themes/stations/rental_bicycle.svg
new file mode 100644
index 0000000000..cf4397e1a2
--- /dev/null
+++ b/assets/themes/stations/rental_bicycle.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/assets/themes/stations/stations.json b/assets/themes/stations/stations.json
new file mode 100644
index 0000000000..c51b09d25e
--- /dev/null
+++ b/assets/themes/stations/stations.json
@@ -0,0 +1,307 @@
+{
+ "id": "stations",
+ "title": {
+ "en": "Train Stations"
+ },
+ "description": {
+ "en": "View, edit and add details to a train station"
+ },
+ "icon": "./assets/themes/stations/rail-light.svg",
+ "startLat": 0,
+ "startLon": 0,
+ "startZoom": 0,
+ "hideFromOverview": true,
+ "defaultBackgroundId": "CartoDB.Positron",
+ "layers": [
+ {
+ "builtin": "indoors",
+ "override": {
+ "minzoom": 19,
+ "passAllFeatures": true,
+ "mapRendering": [
+ {},
+ {},
+ {
+ "label": {
+ "render": null,
+ "mappings": null
+ },
+ "iconSize": "0,0,bottom"
+ }
+ ]
+ }
+ },
+ {
+ "builtin": "stairs",
+ "override": {
+ "minzoom": 19
+ }
+ },
+ {
+ "builtin": "pedestrian_path",
+ "override": {
+ "title": null,
+ "name": null,
+ "mapRendering": null
+ }
+ },
+ {
+ "id": "train_station",
+ "minzoom": 12,
+ "minzoomVisible": 17,
+ "source": {
+ "osmTags": {
+ "or": [
+ "railway=station",
+ "railway=halt"
+ ]
+ }
+ },
+ "name": {
+ "en": "Train Stations"
+ },
+ "description": {
+ "en": "Layer showing train stations"
+ },
+ "mapRendering": [
+ {
+ "icon": "./assets/themes/stations/rail-light.svg",
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "label": {
+ "mappings": [
+ {
+ "if": "name~*",
+ "then": "{name}
"
+ }
+ ]
+ }
+ },
+ {
+ "color": "green"
+ }
+ ]
+ },
+ {
+ "builtin": [
+ "shops"
+ ],
+ "override": {
+ "isShown": {
+ "or": [
+ "indoor=room",
+ "indoor=area"
+ ]
+ },
+ "presets": null,
+ "minzoom": 19
+ }
+ },
+ {
+ "builtin": "bike_parking",
+ "override": {
+ "isShown": {
+ "or": [
+ "indoor=room",
+ "indoor=area"
+ ]
+ },
+ "presets": null,
+ "minzoom": 19,
+ "mapRendering": [
+ {
+ "icon": "circle:white;./assets/themes/stations/bicycle_parking.svg"
+ }
+ ]
+ }
+ },
+ {
+ "builtin": "bicycle_rental",
+ "override": {
+ "isShown": {
+ "or": [
+ "indoor=room",
+ "indoor=area"
+ ]
+ },
+ "presets": null,
+ "minzoom": 19,
+ "mapRendering": [
+ {
+ "icon": "circle:white;./assets/themes/stations/rental_bicycle.svg"
+ }
+ ]
+ }
+ },
+ {
+ "builtin": "car_rental",
+ "override": {
+ "isShown": {
+ "or": [
+ "indoor=room",
+ "indoor=area"
+ ]
+ },
+ "presets": null,
+ "minzoom": 19
+ }
+ },
+ {
+ "builtin": [
+ "food",
+ "cafe_pub"
+ ],
+ "override": {
+ "isShown": {
+ "or": [
+ "indoor=room",
+ "indoor=area"
+ ]
+ },
+ "presets": null,
+ "minzoom": 19,
+ "mapRendering+": [
+ {
+ "color": {
+ "render": "#00f"
+ },
+ "width": {
+ "render": "8"
+ }
+ }
+ ]
+ }
+ },
+ {
+ "builtin": "toilet",
+ "override": {
+ "isShown": {
+ "or": [
+ "indoor=room",
+ "indoor=area"
+ ]
+ },
+ "presets": null,
+ "minzoom": 19,
+ "mapRendering+": [
+ {
+ "color": {
+ "render": "yellow"
+ },
+ "width": {
+ "render": "8"
+ }
+ }
+ ]
+ }
+ },
+ "railway_platforms",
+ "ticket_machine",
+ "ticket_validator",
+ {
+ "builtin": [
+ "entrance",
+ "elevator",
+ "waste_basket",
+ "atm"
+ ],
+ "override": {
+ "minzoom": 19
+ }
+ },
+ {
+ "builtin": "bench",
+ "override": {
+ "minzoom": 19,
+ "mapRendering": [
+ {
+ "icon": "./assets/themes/stations/bench.svg"
+ }
+ ]
+ }
+ },
+ {
+ "id": "departures_board",
+ "name": {
+ "en": "Departures boards"
+ },
+ "description": {
+ "en": "Displays showing the trains that will leave from this station"
+ },
+ "title": {
+ "render": {
+ "en": "Departures board"
+ }
+ },
+ "minzoom": 19,
+ "source": {
+ "osmTags": {
+ "and": [
+ "departures_board~*",
+ "departures_board!=no",
+ "public_transport="
+ ]
+ }
+ },
+ "tagRenderings": [
+ {
+ "id": "type",
+ "question": {
+ "en": "What kind of departures board is this?"
+ },
+ "mappings": [
+ {
+ "if": "departures_board=yes",
+ "then": {
+ "en": "This is a departures board of an unknown type"
+ }
+ },
+ {
+ "if": "departures_board=realtime",
+ "then": {
+ "en": "This is an electronic board, showing the next departures in realtime"
+ }
+ },
+ {
+ "if": "departures_board=timetable",
+ "then": {
+ "en": "This is a paper timetable"
+ }
+ },
+ {
+ "if": "departures_board=delay",
+ "then": {
+ "en": "There is a sign showing the frequency of the trains"
+ }
+ }
+ ]
+ },
+ "level"
+ ],
+ "presets": [
+ {
+ "tags": [
+ "departures_board=yes"
+ ],
+ "title": {
+ "en": "a departures board"
+ },
+ "description": {
+ "en": "Add a board showing departures, either electronic or paper"
+ }
+ }
+ ],
+ "mapRendering": [
+ {
+ "icon": "./assets/themes/stations/departures_board.svg",
+ "location": [
+ "point",
+ "centroid"
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/langs/layers/en.json b/langs/layers/en.json
index 48fb33f8cf..ed420095ce 100644
--- a/langs/layers/en.json
+++ b/langs/layers/en.json
@@ -153,6 +153,42 @@
"render": "Artwork"
}
},
+ "atm": {
+ "description": "ATMS to withdraw money",
+ "name": "ATMs",
+ "presets": {
+ "0": {
+ "title": "an ATM"
+ }
+ },
+ "tagRenderings": {
+ "brand": {
+ "freeform": {
+ "placeholder": "Brand name"
+ },
+ "question": "What brand is this ATM?",
+ "render": "The brand of this ATM is {brand}"
+ },
+ "name": {
+ "render": "The name of this ATM is {name}"
+ },
+ "operator": {
+ "freeform": {
+ "placeholder": "Operator"
+ },
+ "question": "What company operates this ATM?",
+ "render": "The ATM is operated by {operator}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "{brand} ATM"
+ }
+ },
+ "render": "ATM"
+ }
+ },
"barrier": {
"description": "Obstacles while cycling, such as bollards and cycle barriers",
"name": "Barriers",
@@ -1297,6 +1333,33 @@
"render": "Pub"
}
},
+ "car_rental": {
+ "description": "Places where you can rent a car",
+ "name": "Car Rental",
+ "presets": {
+ "0": {
+ "description": "A place where you can rent a car",
+ "title": "a car rental"
+ }
+ },
+ "tagRenderings": {
+ "name": {
+ "freeform": {
+ "placeholder": "Name of the car rental"
+ },
+ "mappings": {
+ "0": {
+ "then": "This car rental has no name"
+ }
+ },
+ "question": "What is the name of this car rental?",
+ "render": "This car rental is called {name}"
+ }
+ },
+ "title": {
+ "render": "Car Rental"
+ }
+ },
"charging_station": {
"description": "A charging station",
"filter": {
@@ -6055,6 +6118,27 @@
"render": "Bookcase"
}
},
+ "railway_platforms": {
+ "description": "Find every platform in the station, and the train routes that use them.",
+ "name": "Railway Platforms",
+ "tagRenderings": {
+ "ref": {
+ "freeform": {
+ "placeholder": "Platform number"
+ },
+ "question": "What is the number for this platform?",
+ "render": "Platform {ref}"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Platform {ref}"
+ }
+ },
+ "render": "Platform"
+ }
+ },
"rainbow_crossings": {
"description": "A layer showing pedestrian crossings with rainbow paintings",
"name": "Crossings with rainbow paintings",
@@ -6816,6 +6900,12 @@
},
"question": "Does this stair have a handrail?"
},
+ "multilevels": {
+ "override": {
+ "question": "Between which levels are these stairs?",
+ "render": "These stairs are between the levels {level}"
+ }
+ },
"ramp": {
"mappings": {
"0": {
@@ -7185,6 +7275,68 @@
}
}
},
+ "ticket_machine": {
+ "description": "Find ticket machines for public transport tickets",
+ "name": "Ticket Machines",
+ "presets": {
+ "0": {
+ "title": "a ticket machine"
+ }
+ },
+ "tagRenderings": {
+ "operator": {
+ "freeform": {
+ "placeholder": "Name of the operator"
+ },
+ "question": "Who is the operator of this ticket machine?",
+ "render": "This ticket machine is operated by {operator}"
+ }
+ },
+ "title": {
+ "render": "Ticket Machine"
+ }
+ },
+ "ticket_validator": {
+ "description": "Find ticket validators to validate public transport tickets",
+ "name": "Ticket Validators",
+ "presets": {
+ "0": {
+ "title": "a ticket validator"
+ }
+ },
+ "tagRenderings": {
+ "barrier": {
+ "mappings": {
+ "0": {
+ "then": "This ticket validator is part of a gate"
+ }
+ },
+ "render": "This ticket validator is part of a barrier of type {barrier}"
+ },
+ "payment-options": {
+ "override": {
+ "mappings+": {
+ "0": {
+ "then": "This ticket validator accepts OV-Chipkaart"
+ },
+ "1": {
+ "then": "This ticket validator accepts OV-Chipkaart"
+ }
+ }
+ }
+ },
+ "validator-operator": {
+ "freeform": {
+ "placeholder": "Name of the operator"
+ },
+ "question": "Who is the operator of this ticket validator?",
+ "render": "This ticket validator is operated by {operator}"
+ }
+ },
+ "title": {
+ "render": "Ticket Validator"
+ }
+ },
"toilet": {
"description": "A layer showing (public) toilets",
"filter": {
diff --git a/langs/layers/nl.json b/langs/layers/nl.json
index 8f201d482a..76dc8524d4 100644
--- a/langs/layers/nl.json
+++ b/langs/layers/nl.json
@@ -1306,6 +1306,33 @@
"render": "Café"
}
},
+ "car_rental": {
+ "description": "Plaatsen waar je een auto kunt huren",
+ "name": "Autoverhuur",
+ "presets": {
+ "0": {
+ "description": "Een plaats waar je een auto kunt huren",
+ "title": "een autoverhuur"
+ }
+ },
+ "tagRenderings": {
+ "name": {
+ "freeform": {
+ "placeholder": "Naam van de autoverhuur"
+ },
+ "mappings": {
+ "0": {
+ "then": "Deze autoverhuur heeft geen naam"
+ }
+ },
+ "question": "Wat is de naam van deze autoverhuur?",
+ "render": "Deze autoverhuur heet {name}"
+ }
+ },
+ "title": {
+ "render": "Autoverhuur"
+ }
+ },
"charging_station": {
"description": "Oplaadpunten",
"filter": {
@@ -6462,6 +6489,12 @@
},
"question": "Heeft deze trap een leuning?"
},
+ "multilevels": {
+ "override": {
+ "question": "Tussen welke verdiepingen loopt deze trap?",
+ "render": "Deze trap loopt tussen de verdiepingen {level}"
+ }
+ },
"ramp": {
"mappings": {
"0": {
diff --git a/langs/themes/en.json b/langs/themes/en.json
index 42c3148849..a0ead4a3d7 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -1088,6 +1088,48 @@
"shortDescription": "Map showing sport facilities.",
"title": "Sports"
},
+ "stations": {
+ "description": "View, edit and add details to a train station",
+ "layers": {
+ "3": {
+ "description": "Layer showing train stations",
+ "name": "Train Stations"
+ },
+ "15": {
+ "description": "Displays showing the trains that will leave from this station",
+ "name": "Departures boards",
+ "presets": {
+ "0": {
+ "description": "Add a board showing departures, either electronic or paper",
+ "title": "a departures board"
+ }
+ },
+ "tagRenderings": {
+ "type": {
+ "mappings": {
+ "0": {
+ "then": "This is a departures board of an unknown type"
+ },
+ "1": {
+ "then": "This is an electronic board, showing the next departures in realtime"
+ },
+ "2": {
+ "then": "This is a paper timetable"
+ },
+ "3": {
+ "then": "There is a sign showing the frequency of the trains"
+ }
+ },
+ "question": "What kind of departures board is this?"
+ }
+ },
+ "title": {
+ "render": "Departures board"
+ }
+ }
+ },
+ "title": "Train Stations"
+ },
"street_lighting": {
"description": "On this map you can find everything about street lighting",
"layers": {