diff --git a/assets/layers/recycling/batteries.svg b/assets/layers/recycling/batteries.svg
new file mode 100644
index 000000000..2ba547473
--- /dev/null
+++ b/assets/layers/recycling/batteries.svg
@@ -0,0 +1,15 @@
+
+
diff --git a/assets/layers/recycling/beverage_cartons.svg b/assets/layers/recycling/beverage_cartons.svg
new file mode 100644
index 000000000..05909ef8f
--- /dev/null
+++ b/assets/layers/recycling/beverage_cartons.svg
@@ -0,0 +1,20 @@
+
+
diff --git a/assets/layers/recycling/cans.svg b/assets/layers/recycling/cans.svg
new file mode 100644
index 000000000..2aaff3f9a
--- /dev/null
+++ b/assets/layers/recycling/cans.svg
@@ -0,0 +1,41 @@
+
+
diff --git a/assets/layers/recycling/clothes.svg b/assets/layers/recycling/clothes.svg
new file mode 100644
index 000000000..f99861248
--- /dev/null
+++ b/assets/layers/recycling/clothes.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/assets/layers/recycling/cooking_oil.svg b/assets/layers/recycling/cooking_oil.svg
new file mode 100644
index 000000000..7a742beab
--- /dev/null
+++ b/assets/layers/recycling/cooking_oil.svg
@@ -0,0 +1,32 @@
+
+
diff --git a/assets/layers/recycling/engine_oil.svg b/assets/layers/recycling/engine_oil.svg
new file mode 100644
index 000000000..f92afd355
--- /dev/null
+++ b/assets/layers/recycling/engine_oil.svg
@@ -0,0 +1,19 @@
+
+
diff --git a/assets/layers/recycling/garden_waste.svg b/assets/layers/recycling/garden_waste.svg
new file mode 100644
index 000000000..8788c1147
--- /dev/null
+++ b/assets/layers/recycling/garden_waste.svg
@@ -0,0 +1,22 @@
+
+
diff --git a/assets/layers/recycling/glass.svg b/assets/layers/recycling/glass.svg
new file mode 100644
index 000000000..46488037e
--- /dev/null
+++ b/assets/layers/recycling/glass.svg
@@ -0,0 +1,25 @@
+
+
diff --git a/assets/layers/recycling/glass_bottles.svg b/assets/layers/recycling/glass_bottles.svg
new file mode 100644
index 000000000..7d234e991
--- /dev/null
+++ b/assets/layers/recycling/glass_bottles.svg
@@ -0,0 +1,18 @@
+
+
diff --git a/assets/layers/recycling/license_info.json b/assets/layers/recycling/license_info.json
new file mode 100644
index 000000000..ec788ff43
--- /dev/null
+++ b/assets/layers/recycling/license_info.json
@@ -0,0 +1,186 @@
+[
+ {
+ "path": "batteries.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/batteries.svg"
+ ]
+ },
+ {
+ "path": "beverage_cartons.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/beverage_cartons.svg"
+ ]
+ },
+ {
+ "path": "cans.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/cans.svg"
+ ]
+ },
+ {
+ "path": "clothes.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Adrien Pavie",
+ "modified from EmojiOne 2: U+1F456, U+1F45"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/clothes.svg"
+ ]
+ },
+ {
+ "path": "cooking_oil.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/cooking_oil.svg"
+ ]
+ },
+ {
+ "path": "engine_oil.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/engine_oil.svg"
+ ]
+ },
+ {
+ "path": "garden_waste.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick",
+ "modified from Twemoji: U+1F33F"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/garden_waste.svg"
+ ]
+ },
+ {
+ "path": "glass.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/glass.svg"
+ ]
+ },
+ {
+ "path": "glass_bottles.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/glass_bottles.svg"
+ ]
+ },
+ {
+ "path": "newspaper.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick",
+ "modified from EmojiOne 2: U+1F4F0"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/newspaper.svg"
+ ]
+ },
+ {
+ "path": "paper.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/paper.svg"
+ ]
+ },
+ {
+ "path": "plastic.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/plastic.svg"
+ ]
+ },
+ {
+ "path": "plastic_bottles.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/plastic_bottles.svg"
+ ]
+ },
+ {
+ "path": "plastic_packaging.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/plastic_packaging.svg"
+ ]
+ },
+ {
+ "path": "recycling-14.svg",
+ "license": "CC0",
+ "authors": [
+ "Michael Glanznig"
+ ],
+ "sources": [
+ "https://github.com/gmgeo/osmic/blob/master/amenity/recycling-14.svg"
+ ]
+ },
+ {
+ "path": "scrap_metal.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/scrap_metal.svg"
+ ]
+ },
+ {
+ "path": "shoes.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "Tobias Zwick",
+ "modified from EmojiOne 2: U+1F45F"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/shoes.svg"
+ ]
+ },
+ {
+ "path": "small_electrical_appliances.svg",
+ "license": "CC-BY-SA",
+ "authors": [
+ "EmojiOne 2: U+1F50C"
+ ],
+ "sources": [
+ "https://github.com/streetcomplete/StreetComplete/blob/master/res/graphics/recycling%20icons/small_electrical_appliances.svg"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/recycling/newspaper.svg b/assets/layers/recycling/newspaper.svg
new file mode 100644
index 000000000..19ffa9d54
--- /dev/null
+++ b/assets/layers/recycling/newspaper.svg
@@ -0,0 +1,13 @@
+
+
diff --git a/assets/layers/recycling/paper.svg b/assets/layers/recycling/paper.svg
new file mode 100644
index 000000000..76cb42217
--- /dev/null
+++ b/assets/layers/recycling/paper.svg
@@ -0,0 +1,33 @@
+
+
diff --git a/assets/layers/recycling/plastic.svg b/assets/layers/recycling/plastic.svg
new file mode 100644
index 000000000..755c2e865
--- /dev/null
+++ b/assets/layers/recycling/plastic.svg
@@ -0,0 +1,78 @@
+
+
diff --git a/assets/layers/recycling/plastic_bottles.svg b/assets/layers/recycling/plastic_bottles.svg
new file mode 100644
index 000000000..669312972
--- /dev/null
+++ b/assets/layers/recycling/plastic_bottles.svg
@@ -0,0 +1,21 @@
+
+
diff --git a/assets/layers/recycling/plastic_packaging.svg b/assets/layers/recycling/plastic_packaging.svg
new file mode 100644
index 000000000..7ae9d650f
--- /dev/null
+++ b/assets/layers/recycling/plastic_packaging.svg
@@ -0,0 +1,55 @@
+
+
diff --git a/assets/layers/recycling/recycling-14.svg b/assets/layers/recycling/recycling-14.svg
new file mode 100644
index 000000000..6244f4124
--- /dev/null
+++ b/assets/layers/recycling/recycling-14.svg
@@ -0,0 +1,40 @@
+
+
+
+
diff --git a/assets/layers/recycling/recycling.json b/assets/layers/recycling/recycling.json
new file mode 100644
index 000000000..270620fd6
--- /dev/null
+++ b/assets/layers/recycling/recycling.json
@@ -0,0 +1,954 @@
+{
+ "id": "recycling",
+ "name": {
+ "en": "Recycling",
+ "nl": "Recycling"
+ },
+ "description": {
+ "en": "A layer with recycling containers and centres",
+ "nl": "Een laag met recyclagingcontainers en -centrums"
+ },
+ "source": {
+ "osmTags": "amenity=recycling"
+ },
+ "calculatedTags": [
+ "_waste_amount=Object.values(Object.keys(feat.properties).filter((key) => key.startsWith('recycling:')).reduce((cur, key) => { return Object.assign(cur, { [key]: feat.properties[key] })}, {})).reduce((n, x) => n + (x == \"yes\"), 0);"
+ ],
+ "minzoom": 12,
+ "title": {
+ "render": {
+ "en": "Recycling facility",
+ "nl": "Recyclingfaciliteit"
+ },
+ "mappings": [
+ {
+ "if": "recycling_type=centre",
+ "then": {
+ "en": "Recycling centre",
+ "nl": "Recyclingcentrum"
+ }
+ },
+ {
+ "if": "recycling_type=container",
+ "then": {
+ "en": "Recycling container",
+ "nl": "Recyclingcontainer"
+ }
+ }
+ ]
+ },
+ "mapRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "icon": {
+ "render": "circle:white;./assets/layers/recycling/recycling-14.svg",
+ "mappings": [
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:batteries=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/batteries.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:beverage_cartons=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/beverage_cartons.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:cans=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/cans.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:clothes=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/clothes.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:cooking_oil=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/cooking_oil.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:engine_oil=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/engine_oil.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:glass=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/glass.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:glass_bottles=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/glass_bottles.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ {
+ "or": [
+ "recycling:green_waste=yes",
+ "recycling:organic=yes"
+ ]
+ }
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/garden_waste.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:newspaper=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/newspaper.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:paper=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/paper.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:plastic_bottles=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/plastic_bottles.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:plastic_packaging=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/plastic_packaging.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:plastic=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/plastic.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:scrap_metal=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/scrap_metal.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:shoes=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/shoes.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ {
+ "or": [
+ "recycling:small_appliances=yes",
+ "recycling:small_electric_appliances=yes"
+ ]
+ }
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/small_electrical_appliances.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount=1",
+ "recycling:waste=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/waste_disposal/waste_disposal.svg"
+ }
+ ]
+ },
+ "iconBadges": [
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:batteries=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/batteries.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:beverage_cartons=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/beverage_cartons.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:cans=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/cans.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:clothes=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/clothes.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:cooking_oil=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/cooking_oil.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:engine_oil=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/engine_oil.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:glass=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/glass.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:glass_bottles=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/glass_bottles.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ {
+ "or": [
+ "recycling:green_waste=yes",
+ "recycling:organic=yes"
+ ]
+ }
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/garden_waste.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:newspaper=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/newspaper.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:paper=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/paper.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:plastic_bottles=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/plastic_bottles.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:plastic_packaging=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/plastic_packaging.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:plastic=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/plastic.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:scrap_metal=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/scrap_metal.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:shoes=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/shoes.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ {
+ "or": [
+ "recycling:small_appliances=yes",
+ "recycling:small_electrical_appliances=yes"
+ ]
+ }
+ ]
+ },
+ "then": "circle:white;./assets/layers/recycling/small_electrical_appliances.svg"
+ },
+ {
+ "if": {
+ "and": [
+ "_waste_amount>1",
+ "recycling:waste=yes"
+ ]
+ },
+ "then": "circle:white;./assets/layers/waste_disposal/waste_disposal.svg"
+ }
+ ]
+ }
+ ],
+ "presets": [
+ {
+ "title": {
+ "en": "recycling container",
+ "nl": "recycling container"
+ },
+ "tags": [
+ "amenity=recycling",
+ "recycling_type=container"
+ ]
+ },
+ {
+ "title": {
+ "en": "recycling centre",
+ "nl": "recycling centre"
+ },
+ "tags": [
+ "amenity=recycling",
+ "recycling_type=centre"
+ ]
+ }
+ ],
+ "tagRenderings": [
+ {
+ "id": "recycling-type",
+ "question": {
+ "en": "What type of recycling is this?",
+ "nl": "Wat voor soort recycling is dit?"
+ },
+ "mappings": [
+ {
+ "if": "recycling_type=container",
+ "then": {
+ "en": "This is a recycling container",
+ "nl": "Dit is een recyclingcontainer"
+ }
+ },
+ {
+ "if": "recycling_type=centre",
+ "then": {
+ "en": "This is a recycling centre",
+ "nl": "Dit is een recyclingcentrum"
+ }
+ },
+ {
+ "if": "amenity=waste_disposal",
+ "then": {
+ "en": "Waste disposal container for residual waste",
+ "nl": "Afvalcontainer voor restafval"
+ },
+ "addExtraTags": [
+ "recycling:batteries=",
+ "recycling:beverage_cartons=",
+ "recycling:cans=",
+ "recycling:clothes=",
+ "recycling:cooking_oil=",
+ "recycling:engine_oil=",
+ "recycling:green_waste=",
+ "recycling:organic=",
+ "recycling:glass_bottles=",
+ "recycling:glass=",
+ "recycling:newspaper=",
+ "recycling:paper=",
+ "recycling:plastic_bottles=",
+ "recycling:plastic_packaging=",
+ "recycling:plastic=",
+ "recycling:scrap_metal=",
+ "recycling:shoes=",
+ "recycling:small_appliances=",
+ "recycling:small_electrical_appliances=",
+ "recycling:waste="
+ ]
+ }
+ ]
+ },
+ {
+ "id": "container-location",
+ "question": {
+ "en": "Where is this container located?",
+ "nl": "Waar bevindt deze container zich?"
+ },
+ "condition": "recycling_type=container",
+ "mappings": [
+ {
+ "if": "location=underground",
+ "then": {
+ "en": "This is an underground container",
+ "nl": "Dit is een ondergrondse container"
+ }
+ },
+ {
+ "if": "location=indoor",
+ "then": {
+ "en": "This container is located indoors",
+ "nl": "Deze container bevindt zich binnen"
+ }
+ },
+ {
+ "if": "location=",
+ "then": {
+ "en": "This container is located outdoors",
+ "nl": "Deze container is buiten"
+ }
+ }
+ ]
+ },
+ {
+ "id": "recycling-accepts",
+ "question": {
+ "en": "What can be recycled here?",
+ "nl": "Wat kan hier gerecycled worden?"
+ },
+ "multiAnswer": true,
+ "mappings": [
+ {
+ "if": "recycling:batteries=yes",
+ "ifnot": "recycling:batteries=",
+ "then": {
+ "en": "Batteries can be recycled here",
+ "nl": "Batterijen kunnen hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/batteries.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:beverage_cartons=yes",
+ "ifnot": "recycling:beverage_cartons=",
+ "then": {
+ "en": "Beverage cartons can be recycled here",
+ "nl": "Drankpakken kunnen hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/beverage_cartons.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:cans=yes",
+ "ifnot": "recycling:cans=",
+ "then": {
+ "en": "Cans can be recycled here",
+ "nl": "Blikken kunnen hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/cans.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:clothes=yes",
+ "ifnot": "recycling:clothes=",
+ "then": {
+ "en": "Clothes can be recycled here",
+ "nl": "Kleren kunnen hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/clothes.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:cooking_oil=yes",
+ "ifnot": "recycling:cooking_oil=",
+ "then": {
+ "en": "Cooking oil can be recycled here",
+ "nl": "Frituurvet kan hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/cooking_oil.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:engine_oil=yes",
+ "ifnot": "recycling:engine_oil=",
+ "then": {
+ "en": "Engine oil can be recycled here",
+ "nl": "Motorolie kan hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/engine_oil.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:green_waste=yes",
+ "ifnot": "recycling:green_waste=",
+ "then": {
+ "en": "Green waste can be recycled here",
+ "nl": "Groen afval kan hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/garden_waste.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:organic=yes",
+ "ifnot": "recycling:organic=",
+ "then": {
+ "en": "Organic waste can be recycled here",
+ "nl": "Organisch afval kan hier gerecycled worden"
+ },
+ "hideInAnswer": true,
+ "icon": {
+ "path": "./assets/layers/recycling/garden_waste.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:glass_bottles=yes",
+ "ifnot": "recycling:glass_bottles=",
+ "then": {
+ "en": "Glass bottles can be recycled here",
+ "nl": "Glazen flessen kunnen hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/glass_bottles.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:glass=yes",
+ "ifnot": "recycling:glass=",
+ "then": {
+ "en": "Glass can be recycled here",
+ "nl": "Glas kan hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/glass.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:newspaper=yes",
+ "ifnot": "recycling:newspaper=",
+ "then": {
+ "en": "Newspapers can be recycled here",
+ "nl": "Kranten kunnen hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/newspaper.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:paper=yes",
+ "ifnot": "recycling:paper=",
+ "then": {
+ "en": "Paper can be recycled here",
+ "nl": "Papier kan hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/paper.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:plastic_bottles=yes",
+ "ifnot": "recycling:plastic_bottles=",
+ "then": {
+ "en": "Plastic bottles can be recycled here",
+ "nl": "Plastic flessen kunnen hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/plastic_bottles.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:plastic_packaging=yes",
+ "ifnot": "recycling:plastic_packaging=",
+ "then": {
+ "en": "Plastic packaging can be recycled here",
+ "nl": "Plastic verpakking kan hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/plastic_packaging.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:plastic=yes",
+ "ifnot": "recycling:plastic=",
+ "then": {
+ "en": "Plastic can be recycled here",
+ "nl": "Plastic kan hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/plastic.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:scrap_metal=yes",
+ "ifnot": "recycling:scrap_metal=",
+ "then": {
+ "en": "Scrap metal can be recycled here",
+ "nl": "Oud metaal kan hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/scrap_metal.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:shoes=yes",
+ "ifnot": "recycling:shoes=",
+ "then": {
+ "en": "Shoes can be recycled here",
+ "nl": "Schoenen kunnen hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/shoes.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:small_appliances=yes",
+ "ifnot": "recycling:small_appliances=",
+ "then": {
+ "en": "Small electrical appliances can be recycled here",
+ "nl": "Kleine elektrische apparaten kunnen hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/recycling/small_electrical_appliances.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:small_electrical_appliances=yes",
+ "ifnot": "recycling:small_electrical_appliances=",
+ "then": {
+ "en": "Small electrical appliances can be recycled here",
+ "nl": "Kleine elektrische apparaten kunnen hier gerecycled worden"
+ },
+ "hideInAnswer": true,
+ "icon": {
+ "path": "./assets/layers/recycling/small_electrical_appliances.svg",
+ "class": "medium"
+ }
+ },
+ {
+ "if": "recycling:waste=yes",
+ "ifnot": "recycling:waste=",
+ "then": {
+ "en": "Residual waste can be recycled here",
+ "nl": "Restafval kan hier gerecycled worden"
+ },
+ "icon": {
+ "path": "./assets/layers/waste_disposal/waste_disposal.svg",
+ "class": "medium"
+ },
+ "hideInAnswer": "recycling_type=container"
+ }
+ ]
+ },
+ {
+ "id": "operator",
+ "render": {
+ "en": "This recycling facility is operated by {operator}",
+ "nl": "Deze recyclingfaciliteit wordt beheerd door {operator}"
+ },
+ "question": {
+ "en": "What company operates this recycling facility?",
+ "nl": "Wat is de beheerder van deze recyclingfaciliteit?"
+ },
+ "freeform": {
+ "key": "operator",
+ "type": "string"
+ }
+ },
+ {
+ "id": "opening_hours",
+ "render": "{opening_hours_table()}",
+ "question": {
+ "en": "What are the opening hours of this recycling facility?",
+ "nl": "Wat zijn de openingstijden van deze recyclingfaciliteit?"
+ },
+ "freeform": {
+ "key": "opening_hours",
+ "type": "opening_hours"
+ },
+ "mappings": [
+ {
+ "if": "opening_hours=24/7",
+ "then": {
+ "en": "24/7",
+ "nl": "24/7"
+ }
+ }
+ ]
+ }
+ ],
+ "filter": [
+ {
+ "id": "isOpen",
+ "options": [
+ {
+ "question": {
+ "en": "Currently open",
+ "nl": "Op dit moment open"
+ },
+ "osmTags": "_isOpen=yes"
+ }
+ ]
+ },
+ {
+ "id": "recyclingType",
+ "options": [
+ {
+ "question": {
+ "en": "All recycling types",
+ "nl": "Alle recyclingtypes"
+ }
+ },
+ {
+ "question": {
+ "en": "Recycling of batteries",
+ "nl": "Recycling van batterijen"
+ },
+ "osmTags": "recycling:batteries=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of beverage cartons",
+ "nl": "Recycling van drankpakken"
+ },
+ "osmTags": "recycling:beverage_cartons=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of cans",
+ "nl": "Recycling van blikken"
+ },
+ "osmTags": "recycling:cans=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of clothes",
+ "nl": "Recycling van kleding"
+ },
+ "osmTags": "recycling:clothes=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of cooking oil",
+ "nl": "Recycling van frituurvet"
+ },
+ "osmTags": "recycling:cooking_oil=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of engine oil",
+ "nl": "Recycling van motorolie"
+ },
+ "osmTags": "recycling:engine_oil=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of green waste",
+ "nl": "Recycling van groen afval"
+ },
+ "osmTags": {
+ "or": [
+ "recycling:green_waste=yes",
+ "recycling:organic=yes"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "Recycling of glass bottles",
+ "nl": "Recycling van glazen flessen"
+ },
+ "osmTags": "recycling:glass_bottles=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of glass",
+ "nl": "Recycling van glas"
+ },
+ "osmTags": "recycling:glass=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of newspapers",
+ "nl": "Recycling van kranten"
+ },
+ "osmTags": "recycling:newspaper=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of paper",
+ "nl": "Recycling van papier"
+ },
+ "osmTags": "recycling:paper=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of plastic bottles",
+ "nl": "Recycling van plastic flessen"
+ },
+ "osmTags": "recycling:plastic_bottles=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of plastic packaging",
+ "nl": "Recycling van plastic verpakking"
+ },
+ "osmTags": "recycling:plastic_packaging=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of plastic",
+ "nl": "Recycling van plastic"
+ },
+ "osmTags": "recycling:plastic=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of scrap metal",
+ "nl": "Recycling van oud metaal"
+ },
+ "osmTags": "recycling:scrap_metal=yes"
+ },
+ {
+ "question": {
+ "en": "Recycling of small electrical appliances",
+ "nl": "Recycling van kleine elektrische apparaten"
+ },
+ "osmTags": {
+ "or": [
+ "recycling:small_appliances=yes",
+ "recycling:small_electrical_appliances=yes"
+ ]
+ }
+ },
+ {
+ "question": {
+ "en": "Recycling of residual waste",
+ "nl": "Recycling van restafval"
+ },
+ "osmTags": "recycling:waste=yes"
+ }
+ ]
+ }
+ ],
+ "deletion": {"neededChangesets": 1},
+ "allowMove": {
+ "enableRelocation": false,
+ "enableImproveAccuracy": true
+ }
+}
\ No newline at end of file
diff --git a/assets/layers/recycling/scrap_metal.svg b/assets/layers/recycling/scrap_metal.svg
new file mode 100644
index 000000000..9ff4dfeeb
--- /dev/null
+++ b/assets/layers/recycling/scrap_metal.svg
@@ -0,0 +1,19 @@
+
+
diff --git a/assets/layers/recycling/shoes.svg b/assets/layers/recycling/shoes.svg
new file mode 100644
index 000000000..0a5bd834e
--- /dev/null
+++ b/assets/layers/recycling/shoes.svg
@@ -0,0 +1,24 @@
+
+
diff --git a/assets/layers/recycling/small_electrical_appliances.svg b/assets/layers/recycling/small_electrical_appliances.svg
new file mode 100644
index 000000000..b5529c91f
--- /dev/null
+++ b/assets/layers/recycling/small_electrical_appliances.svg
@@ -0,0 +1,44 @@
+
+
diff --git a/assets/layers/waste_basket/waste_basket.json b/assets/layers/waste_basket/waste_basket.json
index 49a365d2b..cf59c3f29 100644
--- a/assets/layers/waste_basket/waste_basket.json
+++ b/assets/layers/waste_basket/waste_basket.json
@@ -86,6 +86,14 @@
"nl": "Een vuilnisbak voor injectienaalden en andere scherpe voorwerpen",
"de": "Ein Abfalleimer für Nadeln und andere scharfe Gegenstände"
}
+ },
+ {
+ "if": "waste=plastic",
+ "then": {
+ "en": "A waste basket for plastic",
+ "nl": "Een vuilnisbak voor plastic",
+ "de": "Ein Abfalleimer für Plastik"
+ }
}
]
},
@@ -137,7 +145,7 @@
"nl": "Deze vuilnisbaak heeft waarschijnlijk geen verdeler voor hondenpoepzakjes",
"de": "Dieser Abfalleimer hat keinen Spender für (Hunde-)Kotbeutel"
},
- "hideInAnwer": true
+ "hideInAnswer": true
}
]
}
@@ -159,6 +167,81 @@
}
}
],
+ "filter": [
+ {
+ "id": "waste-type",
+ "options": [
+ {
+ "question": {
+ "en": "All types",
+ "nl": "Alle soorten",
+ "de": "Alle Typen"
+ }
+ },
+ {
+ "question": {
+ "en": "Waste basket for cigarettes",
+ "nl": "Vuilnisbak voor sigarettenpeuken",
+ "de": "Mülleimer für Zigaretten"
+ },
+ "osmTags": "waste~.*cigarettes.*"
+ },
+ {
+ "question": {
+ "en": "Waste basket for drugs",
+ "nl": "Vuilnisbak voor (vervallen) medicatie en drugs",
+ "de": "Mülleimer für Drogen"
+ },
+ "osmTags": "waste~.*drugs.*"
+ },
+ {
+ "question": {
+ "en": "Waste basket for dog excrement",
+ "nl": "Vuilnisbak voor hondenuitwerpselen",
+ "de": "Mülleimer für Hundekot"
+ },
+ "osmTags": "waste~.*dog_excrement.*"
+ },
+ {
+ "question": {
+ "en": "Waste basket for trash",
+ "nl": "Vuilnisbak voor zwerfvuil",
+ "de": "Mülleimer für allgemeinen Müll"
+ },
+ "osmTags": "waste~.*trash.*"
+ },
+ {
+ "question": {
+ "en": "Waste basket for sharps",
+ "nl": "Vuilnisbak voor injectienaalden en andere scherpe voorwerpen",
+ "de": "Mülleimer für Nadeln und andere scharfe Gegenstände"
+ },
+ "osmTags": "waste~.*sharps.*"
+ },
+ {
+ "question": {
+ "en": "Waste basket for plastic",
+ "nl": "Vuilnisbak voor plastic",
+ "de": "Mülleimer für Plastik"
+ },
+ "osmTags": "waste~.*plastic.*"
+ }
+ ]
+ },
+ {
+ "id": "waste-vending",
+ "options": [
+ {
+ "question": {
+ "en": "Waste basket with dispenser for (dog) excrement bags",
+ "nl": "Vuilnisbak met verdeler voor hondenpoepzakjes",
+ "de": "Abfalleimer mit Spender für (Hunde-)Kotbeutel"
+ },
+ "osmTags": "vending=dog_excrement_bag"
+ }
+ ]
+ }
+ ],
"deletion": {
"softDeletionTags": {
"and": [
diff --git a/assets/layers/waste_disposal/license_info.json b/assets/layers/waste_disposal/license_info.json
new file mode 100644
index 000000000..aeeec767e
--- /dev/null
+++ b/assets/layers/waste_disposal/license_info.json
@@ -0,0 +1,12 @@
+[
+ {
+ "path": "waste_disposal.svg",
+ "license": "CC0",
+ "authors": [
+ "kocio-pl"
+ ],
+ "sources": [
+ "https://github.com/gravitystorm/openstreetmap-carto/blob/master/symbols/amenity/waste_disposal.svg"
+ ]
+ }
+]
\ No newline at end of file
diff --git a/assets/layers/waste_disposal/waste_disposal.json b/assets/layers/waste_disposal/waste_disposal.json
new file mode 100644
index 000000000..a589d75d1
--- /dev/null
+++ b/assets/layers/waste_disposal/waste_disposal.json
@@ -0,0 +1,119 @@
+{
+ "id": "waste_disposal",
+ "name": {
+ "en": "Waste Disposal Bins"
+ },
+ "description": {
+ "en": "Waste Disposal Bin, medium to large bin for disposal of (household) waste"
+ },
+ "source": {
+ "osmTags": "amenity=waste_disposal"
+ },
+ "minzoom": 18,
+ "minzoomVisible": 18,
+ "title": {
+ "render": {
+ "en": "Waste Disposal"
+ }
+ },
+ "mapRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "icon": "circle:white;./assets/layers/waste_disposal/waste_disposal.svg"
+ }
+ ],
+ "presets": [
+ {
+ "title": {
+ "en": "Waste Disposal Bin"
+ },
+ "tags": [
+ "amenity=waste_disposal"
+ ],
+ "description": {
+ "en": "Medium to large bin for disposal of (household) waste"
+ }
+ }
+ ],
+ "tagRenderings": [
+ {
+ "id": "access",
+ "render": {
+ "en": "Access: {access}"
+ },
+ "question": {
+ "en": "Who can use this waste disposal bin?"
+ },
+ "freeform": {
+ "key": "access",
+ "type": "string"
+ },
+ "mappings": [
+ {
+ "if": "access=yes",
+ "then": {
+ "en": "This bin can be used by anyone"
+ }
+ },
+ {
+ "if": "access=no",
+ "then": {
+ "en": "This bin is private"
+ }
+ },
+ {
+ "if": "access=residents",
+ "then": {
+ "en": "This bin is only for residents"
+ }
+ }
+ ]
+ },
+ {
+ "id": "disposal-location",
+ "question": {
+ "en": "Where is this container located?",
+ "nl": "Waar bevindt deze container zich?"
+ },
+ "mappings": [
+ {
+ "if": "location=underground",
+ "then": {
+ "en": "This is an underground container",
+ "nl": "Dit is een ondergrondse container"
+ }
+ },
+ {
+ "if": "location=indoor",
+ "then": {
+ "en": "This container is located indoors",
+ "nl": "Deze container bevindt zich binnen"
+ }
+ },
+ {
+ "if": "location=",
+ "then": {
+ "en": "This container is located outdoors",
+ "nl": "Deze container is buiten"
+ }
+ }
+ ]
+ }
+ ],
+ "filter": [
+ {
+ "id": "public-access",
+ "options": [
+ {
+ "question": {
+ "en": "Only public access"
+ },
+ "osmTags": "access=yes"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/assets/layers/waste_disposal/waste_disposal.svg b/assets/layers/waste_disposal/waste_disposal.svg
new file mode 100644
index 000000000..db755349c
--- /dev/null
+++ b/assets/layers/waste_disposal/waste_disposal.svg
@@ -0,0 +1,31 @@
+
+
diff --git a/assets/themes/mapcomplete-changes/mapcomplete-changes.json b/assets/themes/mapcomplete-changes/mapcomplete-changes.json
index d0108bdbf..8653e1842 100644
--- a/assets/themes/mapcomplete-changes/mapcomplete-changes.json
+++ b/assets/themes/mapcomplete-changes/mapcomplete-changes.json
@@ -299,6 +299,14 @@
"if": "theme=uk_addresses",
"then": "./assets/themes/uk_addresses/housenumber_unknown.svg"
},
+ {
+ "if": "theme=waste",
+ "then": "./assets/layers/recycling/recycling-14.svg"
+ },
+ {
+ "if": "theme=waste_assen",
+ "then": "./assets/layers/recycling/recycling-14.svg"
+ },
{
"if": "theme=waste_basket",
"then": "./assets/themes/waste_basket/waste_basket.svg"
diff --git a/assets/themes/street_lighting/street_lighting_assen.json b/assets/themes/street_lighting/street_lighting_assen.json
index 7de783931..646a82550 100644
--- a/assets/themes/street_lighting/street_lighting_assen.json
+++ b/assets/themes/street_lighting/street_lighting_assen.json
@@ -26,7 +26,7 @@
},
"calculatedTags": [
"_closest_osm_street_lamp=feat.closest('street_lamps')?.properties?.id",
- "_closest_osm_street_lamp_distance=feat.distanceTo(feat.properties._closest_osm_street_lamp) * 1000",
+ "_closest_osm_street_lamp_distance=feat.distanceTo(feat.properties._closest_osm_street_lamp)",
"_has_closeby_feature=Number(feat.properties._closest_osm_street_lamp_distance) < 5 ? 'yes' : 'no'"
],
"title": "Straatlantaarn in dataset",
diff --git a/assets/themes/waste/waste.json b/assets/themes/waste/waste.json
new file mode 100644
index 000000000..1998b893a
--- /dev/null
+++ b/assets/themes/waste/waste.json
@@ -0,0 +1,32 @@
+{
+ "id": "waste",
+ "maintainer": "",
+ "version": "2022-01-19",
+ "language": [
+ "en",
+ "nl"
+ ],
+ "title": {
+ "en": "Waste",
+ "nl": "Afval"
+ },
+ "description": {
+ "en": "Map showing waste baskets and recycling facilities.",
+ "nl": "Kaart met afvalbakken en recyclingfaciliteiten."
+ },
+ "icon": "./assets/layers/recycling/recycling-14.svg",
+ "startZoom": 19,
+ "startLat": 53.24865,
+ "startLon": 6.60075,
+ "layers": [
+ {
+ "builtin": "waste_basket",
+ "override": {
+ "minzoom": 18,
+ "minzoomVisible": 18
+ }
+ },
+ "recycling",
+ "waste_disposal"
+ ]
+}
\ No newline at end of file
diff --git a/assets/themes/waste/waste_assen.json b/assets/themes/waste/waste_assen.json
new file mode 100644
index 000000000..810c64a31
--- /dev/null
+++ b/assets/themes/waste/waste_assen.json
@@ -0,0 +1,109 @@
+{
+ "id": "waste_assen",
+ "maintainer": "Robin van der Linde",
+ "version": "2022-01-09",
+ "language": [
+ "en",
+ "nl"
+ ],
+ "title": {
+ "nl": "Afval - Assen"
+ },
+ "description": {
+ "nl": "Kaart met afvalbakken en recyclingfaciliteiten + een dataset voor Assen."
+ },
+ "icon": "./assets/layers/recycling/recycling-14.svg",
+ "startZoom": 19,
+ "startLat": 53.24865,
+ "startLon": 6.60075,
+ "layers": [
+ {
+ "builtin": "waste_basket",
+ "override": {
+ "minzoom": 12
+ }
+ },
+ {
+ "id": "waste_basket_assen",
+ "name": "Dataset Afvalbakken Assen",
+ "source": {
+ "osmTags": "OBJECTID~*",
+ "geoJson": "https://opendata.arcgis.com/datasets/5b6953ac5a9d4616a7dc75ab0beeac2f_0.geojson",
+ "isOsmCache": false
+ },
+ "calculatedTags": [
+ "_closest_osm_waste_basket=feat.closest('waste_basket')?.properties?.id",
+ "_closest_osm_waste_basket_distance=feat.distanceTo(feat.properties._closest_osm_waste_basket)",
+ "_has_closeby_feature=Number(feat.properties._closest_osm_waste_basket_distance) < 10 ? 'yes' : 'no'"
+ ],
+ "title": "Afvalbak in dataset",
+ "mapRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "icon": {
+ "render": "circle:red",
+ "mappings": [
+ {
+ "if": "_has_closeby_feature=yes",
+ "then": "circle:#008000aa"
+ }
+ ]
+ },
+ "iconSize": "20,20,center"
+ }
+ ],
+ "tagRenderings": [
+ "all_tags"
+ ]
+ },
+ "recycling",
+ {
+ "id": "recycling_assen",
+ "name": "Dataset Recyclingcontainers Assen",
+ "source": {
+ "osmTags": "OBJECTID~*",
+ "geoJson": "https://opendata.arcgis.com/datasets/edb893998e27461b8ed82aad9854d27d_0.geojson",
+ "isOsmCache": false
+ },
+ "calculatedTags": [
+ "_closest_osm_recycling=feat.closest('recycling')?.properties?.id",
+ "_closest_osm_waste_disposal=feat.closest('waste_disposal')?.properties?.id",
+ "_closest_osm_recycling_distance=feat.distanceTo(feat.properties._closest_osm_recycling)",
+ "_closest_osm_waste_disposal_distance=feat.distanceTo(feat.properties._closest_osm_waste_disposal)",
+ "_has_closeby_recycling=Number(feat.properties._closest_osm_recycling_distance) < 10 ? 'yes' : 'no'",
+ "_has_closeby_waste_disposal=Number(feat.properties._closest_osm_waste_disposal_distance) < 10 ? 'yes' : 'no'"
+ ],
+ "title": "Recyclingcontainer in dataset",
+ "mapRendering": [
+ {
+ "location": [
+ "point",
+ "centroid"
+ ],
+ "icon": {
+ "render": "circle:red",
+ "mappings": [
+ {
+ "if": "_has_closeby_recycling=yes",
+ "then": "circle:#008000aa"
+ },
+ {
+ "if": "_has_closeby_waste_disposal=yes",
+ "then": "circle:#008000aa"
+ }
+ ]
+ },
+ "iconSize": "20,20,center"
+ }
+ ],
+ "tagRenderings": [
+ "all_tags"
+ ]
+ },
+ "waste_disposal"
+ ],
+ "hideFromOverview": true
+}
\ No newline at end of file
diff --git a/langs/layers/de.json b/langs/layers/de.json
index e3182578f..3c845d54d 100644
--- a/langs/layers/de.json
+++ b/langs/layers/de.json
@@ -3175,6 +3175,40 @@
},
"waste_basket": {
"description": "Dies ist ein öffentlicher Abfalleimer, in den Sie Ihren Müll entsorgen können.",
+ "filter": {
+ "0": {
+ "options": {
+ "0": {
+ "question": "Alle Typen"
+ },
+ "1": {
+ "question": "Mülleimer für Zigaretten"
+ },
+ "2": {
+ "question": "Mülleimer für Drogen"
+ },
+ "3": {
+ "question": "Mülleimer für Hundekot"
+ },
+ "4": {
+ "question": "Mülleimer für allgemeinen Müll"
+ },
+ "5": {
+ "question": "Mülleimer für Nadeln und andere scharfe Gegenstände"
+ },
+ "6": {
+ "question": "Mülleimer für Plastik"
+ }
+ }
+ },
+ "1": {
+ "options": {
+ "0": {
+ "question": "Abfalleimer mit Spender für (Hunde-)Kotbeutel"
+ }
+ }
+ }
+ },
"mapRendering": {
"0": {
"iconSize": {
@@ -3226,6 +3260,9 @@
},
"5": {
"then": "Ein Abfalleimer für Nadeln und andere scharfe Gegenstände"
+ },
+ "6": {
+ "then": "Ein Abfalleimer für Plastik"
}
},
"question": "Um was für einen Abfalleimer handelt es sich?"
diff --git a/langs/layers/en.json b/langs/layers/en.json
index e7b8d1d14..1cbc07a8f 100644
--- a/langs/layers/en.json
+++ b/langs/layers/en.json
@@ -4124,6 +4124,203 @@
"render": "Bookcase"
}
},
+ "recycling": {
+ "description": "A layer with recycling containers and centres",
+ "filter": {
+ "0": {
+ "options": {
+ "0": {
+ "question": "Currently open"
+ }
+ }
+ },
+ "1": {
+ "options": {
+ "0": {
+ "question": "All recycling types"
+ },
+ "1": {
+ "question": "Recycling of batteries"
+ },
+ "2": {
+ "question": "Recycling of beverage cartons"
+ },
+ "3": {
+ "question": "Recycling of cans"
+ },
+ "4": {
+ "question": "Recycling of clothes"
+ },
+ "5": {
+ "question": "Recycling of cooking oil"
+ },
+ "6": {
+ "question": "Recycling of engine oil"
+ },
+ "7": {
+ "question": "Recycling of green waste"
+ },
+ "8": {
+ "question": "Recycling of glass bottles"
+ },
+ "9": {
+ "question": "Recycling of glass"
+ },
+ "10": {
+ "question": "Recycling of newspapers"
+ },
+ "11": {
+ "question": "Recycling of paper"
+ },
+ "12": {
+ "question": "Recycling of plastic bottles"
+ },
+ "13": {
+ "question": "Recycling of plastic packaging"
+ },
+ "14": {
+ "question": "Recycling of plastic"
+ },
+ "15": {
+ "question": "Recycling of scrap metal"
+ },
+ "16": {
+ "question": "Recycling of small electrical appliances"
+ },
+ "17": {
+ "question": "Recycling of residual waste"
+ }
+ }
+ }
+ },
+ "name": "Recycling",
+ "presets": {
+ "0": {
+ "title": "recycling container"
+ },
+ "1": {
+ "title": "recycling centre"
+ }
+ },
+ "tagRenderings": {
+ "container-location": {
+ "mappings": {
+ "0": {
+ "then": "This is an underground container"
+ },
+ "1": {
+ "then": "This container is located indoors"
+ },
+ "2": {
+ "then": "This container is located outdoors"
+ }
+ },
+ "question": "Where is this container located?"
+ },
+ "opening_hours": {
+ "mappings": {
+ "0": {
+ "then": "24/7"
+ }
+ },
+ "question": "What are the opening hours of this recycling facility?"
+ },
+ "operator": {
+ "question": "What company operates this recycling facility?",
+ "render": "This recycling facility is operated by {operator}"
+ },
+ "recycling-accepts": {
+ "mappings": {
+ "0": {
+ "then": "Batteries can be recycled here"
+ },
+ "1": {
+ "then": "Beverage cartons can be recycled here"
+ },
+ "2": {
+ "then": "Cans can be recycled here"
+ },
+ "3": {
+ "then": "Clothes can be recycled here"
+ },
+ "4": {
+ "then": "Cooking oil can be recycled here"
+ },
+ "5": {
+ "then": "Engine oil can be recycled here"
+ },
+ "6": {
+ "then": "Green waste can be recycled here"
+ },
+ "7": {
+ "then": "Organic waste can be recycled here"
+ },
+ "8": {
+ "then": "Glass bottles can be recycled here"
+ },
+ "9": {
+ "then": "Glass can be recycled here"
+ },
+ "10": {
+ "then": "Newspapers can be recycled here"
+ },
+ "11": {
+ "then": "Paper can be recycled here"
+ },
+ "12": {
+ "then": "Plastic bottles can be recycled here"
+ },
+ "13": {
+ "then": "Plastic packaging can be recycled here"
+ },
+ "14": {
+ "then": "Plastic can be recycled here"
+ },
+ "15": {
+ "then": "Scrap metal can be recycled here"
+ },
+ "16": {
+ "then": "Shoes can be recycled here"
+ },
+ "17": {
+ "then": "Small electrical appliances can be recycled here"
+ },
+ "18": {
+ "then": "Small electrical appliances can be recycled here"
+ },
+ "19": {
+ "then": "Residual waste can be recycled here"
+ }
+ },
+ "question": "What can be recycled here?"
+ },
+ "recycling-type": {
+ "mappings": {
+ "0": {
+ "then": "This is a recycling container"
+ },
+ "1": {
+ "then": "This is a recycling centre"
+ },
+ "2": {
+ "then": "Waste disposal container for residual waste"
+ }
+ },
+ "question": "What type of recycling is this?"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Recycling centre"
+ },
+ "1": {
+ "then": "Recycling container"
+ }
+ },
+ "render": "Recycling facility"
+ }
+ },
"shops": {
"description": "A shop",
"name": "Shop",
@@ -4961,6 +5158,40 @@
},
"waste_basket": {
"description": "This is a public waste basket, thrash can, where you can throw away your thrash.",
+ "filter": {
+ "0": {
+ "options": {
+ "0": {
+ "question": "All types"
+ },
+ "1": {
+ "question": "Waste basket for cigarettes"
+ },
+ "2": {
+ "question": "Waste basket for drugs"
+ },
+ "3": {
+ "question": "Waste basket for dog excrement"
+ },
+ "4": {
+ "question": "Waste basket for trash"
+ },
+ "5": {
+ "question": "Waste basket for sharps"
+ },
+ "6": {
+ "question": "Waste basket for plastic"
+ }
+ }
+ },
+ "1": {
+ "options": {
+ "0": {
+ "question": "Waste basket with dispenser for (dog) excrement bags"
+ }
+ }
+ }
+ },
"mapRendering": {
"0": {
"iconSize": {
@@ -5012,6 +5243,9 @@
},
"5": {
"then": "A waste basket for needles and other sharp objects"
+ },
+ "6": {
+ "then": "A waste basket for plastic"
}
},
"question": "What kind of waste basket is this?"
@@ -5021,6 +5255,59 @@
"render": "Waste Basket"
}
},
+ "waste_disposal": {
+ "description": "Waste Disposal Bin, medium to large bin for disposal of (household) waste",
+ "filter": {
+ "0": {
+ "options": {
+ "0": {
+ "question": "Only public access"
+ }
+ }
+ }
+ },
+ "name": "Waste Disposal Bins",
+ "presets": {
+ "0": {
+ "description": "Medium to large bin for disposal of (household) waste",
+ "title": "Waste Disposal Bin"
+ }
+ },
+ "tagRenderings": {
+ "access": {
+ "mappings": {
+ "0": {
+ "then": "This bin can be used by anyone"
+ },
+ "1": {
+ "then": "This bin is private"
+ },
+ "2": {
+ "then": "This bin is only for residents"
+ }
+ },
+ "question": "Who can use this waste disposal bin?",
+ "render": "Access: {access}"
+ },
+ "disposal-location": {
+ "mappings": {
+ "0": {
+ "then": "This is an underground container"
+ },
+ "1": {
+ "then": "This container is located indoors"
+ },
+ "2": {
+ "then": "This container is located outdoors"
+ }
+ },
+ "question": "Where is this container located?"
+ }
+ },
+ "title": {
+ "render": "Waste Disposal"
+ }
+ },
"watermill": {
"name": "Watermill"
}
diff --git a/langs/layers/nl.json b/langs/layers/nl.json
index 65ef4358d..ff6f4367e 100644
--- a/langs/layers/nl.json
+++ b/langs/layers/nl.json
@@ -3916,6 +3916,203 @@
"render": "Boekenruilkast"
}
},
+ "recycling": {
+ "description": "Een laag met recyclagingcontainers en -centrums",
+ "filter": {
+ "0": {
+ "options": {
+ "0": {
+ "question": "Op dit moment open"
+ }
+ }
+ },
+ "1": {
+ "options": {
+ "0": {
+ "question": "Alle recyclingtypes"
+ },
+ "1": {
+ "question": "Recycling van batterijen"
+ },
+ "2": {
+ "question": "Recycling van drankpakken"
+ },
+ "3": {
+ "question": "Recycling van blikken"
+ },
+ "4": {
+ "question": "Recycling van kleding"
+ },
+ "5": {
+ "question": "Recycling van frituurvet"
+ },
+ "6": {
+ "question": "Recycling van motorolie"
+ },
+ "7": {
+ "question": "Recycling van groen afval"
+ },
+ "8": {
+ "question": "Recycling van glazen flessen"
+ },
+ "9": {
+ "question": "Recycling van glas"
+ },
+ "10": {
+ "question": "Recycling van kranten"
+ },
+ "11": {
+ "question": "Recycling van papier"
+ },
+ "12": {
+ "question": "Recycling van plastic flessen"
+ },
+ "13": {
+ "question": "Recycling van plastic verpakking"
+ },
+ "14": {
+ "question": "Recycling van plastic"
+ },
+ "15": {
+ "question": "Recycling van oud metaal"
+ },
+ "16": {
+ "question": "Recycling van kleine elektrische apparaten"
+ },
+ "17": {
+ "question": "Recycling van restafval"
+ }
+ }
+ }
+ },
+ "name": "Recycling",
+ "presets": {
+ "0": {
+ "title": "recycling container"
+ },
+ "1": {
+ "title": "recycling centre"
+ }
+ },
+ "tagRenderings": {
+ "container-location": {
+ "mappings": {
+ "0": {
+ "then": "Dit is een ondergrondse container"
+ },
+ "1": {
+ "then": "Deze container bevindt zich binnen"
+ },
+ "2": {
+ "then": "Deze container is buiten"
+ }
+ },
+ "question": "Waar bevindt deze container zich?"
+ },
+ "opening_hours": {
+ "mappings": {
+ "0": {
+ "then": "24/7"
+ }
+ },
+ "question": "Wat zijn de openingstijden van deze recyclingfaciliteit?"
+ },
+ "operator": {
+ "question": "Wat is de beheerder van deze recyclingfaciliteit?",
+ "render": "Deze recyclingfaciliteit wordt beheerd door {operator}"
+ },
+ "recycling-accepts": {
+ "mappings": {
+ "0": {
+ "then": "Batterijen kunnen hier gerecycled worden"
+ },
+ "1": {
+ "then": "Drankpakken kunnen hier gerecycled worden"
+ },
+ "2": {
+ "then": "Blikken kunnen hier gerecycled worden"
+ },
+ "3": {
+ "then": "Kleren kunnen hier gerecycled worden"
+ },
+ "4": {
+ "then": "Frituurvet kan hier gerecycled worden"
+ },
+ "5": {
+ "then": "Motorolie kan hier gerecycled worden"
+ },
+ "6": {
+ "then": "Groen afval kan hier gerecycled worden"
+ },
+ "7": {
+ "then": "Organisch afval kan hier gerecycled worden"
+ },
+ "8": {
+ "then": "Glazen flessen kunnen hier gerecycled worden"
+ },
+ "9": {
+ "then": "Glas kan hier gerecycled worden"
+ },
+ "10": {
+ "then": "Kranten kunnen hier gerecycled worden"
+ },
+ "11": {
+ "then": "Papier kan hier gerecycled worden"
+ },
+ "12": {
+ "then": "Plastic flessen kunnen hier gerecycled worden"
+ },
+ "13": {
+ "then": "Plastic verpakking kan hier gerecycled worden"
+ },
+ "14": {
+ "then": "Plastic kan hier gerecycled worden"
+ },
+ "15": {
+ "then": "Oud metaal kan hier gerecycled worden"
+ },
+ "16": {
+ "then": "Schoenen kunnen hier gerecycled worden"
+ },
+ "17": {
+ "then": "Kleine elektrische apparaten kunnen hier gerecycled worden"
+ },
+ "18": {
+ "then": "Kleine elektrische apparaten kunnen hier gerecycled worden"
+ },
+ "19": {
+ "then": "Restafval kan hier gerecycled worden"
+ }
+ },
+ "question": "Wat kan hier gerecycled worden?"
+ },
+ "recycling-type": {
+ "mappings": {
+ "0": {
+ "then": "Dit is een recyclingcontainer"
+ },
+ "1": {
+ "then": "Dit is een recyclingcentrum"
+ },
+ "2": {
+ "then": "Afvalcontainer voor restafval"
+ }
+ },
+ "question": "Wat voor soort recycling is dit?"
+ }
+ },
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "Recyclingcentrum"
+ },
+ "1": {
+ "then": "Recyclingcontainer"
+ }
+ },
+ "render": "Recyclingfaciliteit"
+ }
+ },
"shops": {
"description": "Een winkel",
"name": "Winkel",
@@ -4817,6 +5014,40 @@
},
"waste_basket": {
"description": "Dit is een publieke vuilnisbak waar je je afval kan weggooien.",
+ "filter": {
+ "0": {
+ "options": {
+ "0": {
+ "question": "Alle soorten"
+ },
+ "1": {
+ "question": "Vuilnisbak voor sigarettenpeuken"
+ },
+ "2": {
+ "question": "Vuilnisbak voor (vervallen) medicatie en drugs"
+ },
+ "3": {
+ "question": "Vuilnisbak voor hondenuitwerpselen"
+ },
+ "4": {
+ "question": "Vuilnisbak voor zwerfvuil"
+ },
+ "5": {
+ "question": "Vuilnisbak voor injectienaalden en andere scherpe voorwerpen"
+ },
+ "6": {
+ "question": "Vuilnisbak voor plastic"
+ }
+ }
+ },
+ "1": {
+ "options": {
+ "0": {
+ "question": "Vuilnisbak met verdeler voor hondenpoepzakjes"
+ }
+ }
+ }
+ },
"mapRendering": {
"0": {
"iconSize": {
@@ -4868,6 +5099,9 @@
},
"5": {
"then": "Een vuilnisbak voor injectienaalden en andere scherpe voorwerpen"
+ },
+ "6": {
+ "then": "Een vuilnisbak voor plastic"
}
},
"question": "Wat voor soort vuilnisbak is dit?"
@@ -4877,6 +5111,24 @@
"render": "Vuilnisbak"
}
},
+ "waste_disposal": {
+ "tagRenderings": {
+ "disposal-location": {
+ "mappings": {
+ "0": {
+ "then": "Dit is een ondergrondse container"
+ },
+ "1": {
+ "then": "Deze container bevindt zich binnen"
+ },
+ "2": {
+ "then": "Deze container is buiten"
+ }
+ },
+ "question": "Waar bevindt deze container zich?"
+ }
+ }
+ },
"watermill": {
"description": "Watermolens",
"name": "Watermolens",
diff --git a/langs/themes/en.json b/langs/themes/en.json
index ccdc4f080..fb0db2db4 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -1286,6 +1286,10 @@
"shortDescription": "Map all the trees",
"title": "Trees"
},
+ "waste": {
+ "description": "Map showing waste baskets and recycling facilities.",
+ "title": "Waste"
+ },
"waste_basket": {
"description": "On this map, you'll find waste baskets near you. If a waste basket is missing on this map, you can add it yourself",
"shortDescription": "A map with waste baskets",
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index 660702e1a..3b591ad64 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -1050,6 +1050,14 @@
"shortDescription": "Breng bomen in kaart",
"title": "Bomen"
},
+ "waste": {
+ "description": "Kaart met afvalbakken en recyclingfaciliteiten.",
+ "title": "Afval"
+ },
+ "waste_assen": {
+ "description": "Kaart met afvalbakken en recyclingfaciliteiten + een dataset voor Assen.",
+ "title": "Afval - Assen"
+ },
"waste_basket": {
"description": "Op deze kaart vind je vuilnisbakken waar je afval in kan smijten. Ontbreekt er een vuilnisbak? Dan kan je die zelf toevoegen",
"shortDescription": "Een kaart met vuilnisbakken",
diff --git a/scripts/fixImagesInTagRenderings.ts b/scripts/fixImagesInTagRenderings.ts
index 704896521..5440238fb 100644
--- a/scripts/fixImagesInTagRenderings.ts
+++ b/scripts/fixImagesInTagRenderings.ts
@@ -56,7 +56,6 @@ function main() {
const path = args[0]
const iconClass = args[1] ?? "small"
const targetFile = args[2] ?? path + ".autoconverted.json"
- console.log("Fixing images in " + path)
const parsed = JSON.parse(readFileSync(path, "UTF8"))
const converted = new ConvertImagesToIcon(iconClass).convertStrict(parsed, "While running the fixImagesInTagRenderings-script")
writeFileSync(targetFile, JSON.stringify(converted, null, " "))