diff --git a/assets/layers/bike_cleaning/bike_cleaning.json b/assets/layers/bike_cleaning/bike_cleaning.json index fedd79d62..fe85d1ecc 100644 --- a/assets/layers/bike_cleaning/bike_cleaning.json +++ b/assets/layers/bike_cleaning/bike_cleaning.json @@ -34,8 +34,7 @@ "or": [ "service:bicycle:cleaning=yes", "service:bicycle:cleaning=diy", - "amenity=bicycle_wash", - "amenity=bike_wash" + "amenity=bicycle_wash" ] } }, @@ -83,7 +82,6 @@ "if": { "and": [ "service:bicycle:cleaning~*", - "amenity!=bike_wash", "amenity!=bicycle_wash" ] }, @@ -106,7 +104,6 @@ ] } ], - "lineRendering": [], "presets": [ { "title": { @@ -158,7 +155,6 @@ }, "condition": { "and": [ - "amenity!=bike_wash", "amenity!=bicycle_wash", "service:bicycle:cleaning!=no", "service:bicycle:cleaning!=" @@ -169,7 +165,7 @@ "addExtraTags": [ "service:bicycle:cleaning:fee=yes" ], - "inline": true + "inline": false }, "mappings": [ { @@ -241,7 +237,6 @@ }, "condition": { "or": [ - "amenity=bike_wash", "amenity=bicycle_wash" ] }, @@ -285,6 +280,54 @@ } ], "id": "bike_cleaning-charge" + }, + { + "question": { + "en": "Is this bicycle cleaning service automated?", + "nl": "Is dit fietsschoonmaakpunt geautomatiseerd?" + }, + "id": "automated", + "mappings": [ + { + "if": "automated=no", + "then": { + "en": "This is a manual bike washing station", + "nl": "Dit is een handmatig fietsschoonmaakpunt" + } + }, + { + "if": "automated=yes", + "then": { + "en": "This is an automated bike wash", + "nl": "Dit is een automatisch fietsschoonmaakpunt" + } + } + ], + "condition": "amenity=bicycle_wash" + }, + { + "question": { + "nl": "Is dit fietsschoonmaakpunt zelfbediening?", + "en": "Is this cleaning service self-service?" + }, + "id": "self_service", + "mappings": [ + { + "if": "self_service=yes", + "then": { + "nl": "Dit fietsschoonmaakpunt is zelfbediening", + "en": "This cleaning service is self-service" + } + }, + { + "if": "self_service=no", + "then": { + "nl": "Dit fietsschoonmaakpunt wordt bediend door aanwezig personeel", + "en": "This cleaning service is operated by an employee" + } + } + ], + "condition": "amenity=bicycle_wash" } ], "deletion": { @@ -300,4 +343,4 @@ "enableRelocation": false, "enableImproveAccuracy": true } -} +} \ No newline at end of file diff --git a/assets/layers/clock/clock.json b/assets/layers/clock/clock.json index 5c159a579..20a91e0e6 100644 --- a/assets/layers/clock/clock.json +++ b/assets/layers/clock/clock.json @@ -97,8 +97,8 @@ "support=wall_mounted" ], "title": { - "en": "a wall-mounted clock", - "nl": "een klok aan een muur", + "en": "a wall-mounted clock, mounted using a support perpendicular to the wall", + "nl": "een klok aan een muur, bevestigd met een steun loodrecht op de muur", "de": "eine an der Wand montierte Uhr", "ca": "un rellotge muntat en un paret", "fr": "une horloge fixée au mur", @@ -117,6 +117,23 @@ "snapToLayer": [ "walls_and_buildings" ] + }, + { + "tags": [ + "amenity=clock", + "support=wall" + ], + "title": { + "en": "a wall-mounted clock, mounted directly on a wall", + "nl": "een klok aan een muur, rechtstreeks bevestigd aan een muur" + }, + "description": { + "en": "A publicly visible clock mounted directly on a wall", + "nl": "Een publiekelijk zichtbare klok rechtstreeks bevestigd aan een muur" + }, + "snapToLayer": [ + "walls_and_buildings" + ] } ], "tagRenderings": [ @@ -148,8 +165,8 @@ { "if": "support=wall_mounted", "then": { - "en": "This clock is mounted on a wall", - "nl": "Deze klok is bevestigd aan een muur", + "en": "This clock is mounted on a wall, usually through a support perpendicular to the wall", + "nl": "Deze klok is bevestigd aan een muur, meestal met een steun loodrecht op de muur", "de": "Diese Uhr ist an einer Wand montiert", "ca": "Aquest rellotge està muntat en una paret", "fr": "Cette horloge est fixée sur un mur", @@ -157,6 +174,13 @@ "cs": "Tyto hodiny jsou namontovány na stěně" } }, + { + "if": "support=wall", + "then": { + "en": "This clock is mounted directly on a wall", + "nl": "Deze klok is rechtstreeks aan een muur bevestigd" + } + }, { "if": "support=billboard", "then": { @@ -245,6 +269,30 @@ } ] }, + { + "builtin": "indoor", + "override": { + "question": { + "en": "Is this clock indoors?", + "nl": "Is deze klok binnen?" + }, + "mappings": [ + { + "then": { + "en": "This clock is indoors", + "nl": "Deze klok is binnen" + } + }, + { + "if": "indoor=no", + "then": { + "en": "This clock is outdoors", + "nl": "Deze klok is buiten" + } + } + ] + } + }, { "id": "visibility", "question": { @@ -293,7 +341,8 @@ "cs": "Tyto hodiny jsou viditelné ze vzdálenosti větší než 20 metrů (např. kostelní nebo nádražní hodiny)" } } - ] + ], + "condition": "indoor!=yes" }, { "id": "date", @@ -572,4 +621,4 @@ ], "deletion": true, "allowMove": true -} +} \ No newline at end of file diff --git a/assets/layers/crossings/crossing_unmarked.png b/assets/layers/crossings/crossing_unmarked.png new file mode 100644 index 000000000..629009d32 Binary files /dev/null and b/assets/layers/crossings/crossing_unmarked.png differ diff --git a/assets/layers/crossings/crossing_unmarked.png.license b/assets/layers/crossings/crossing_unmarked.png.license new file mode 100644 index 000000000..8bbbce063 --- /dev/null +++ b/assets/layers/crossings/crossing_unmarked.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: StenSoft +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/crossings.json b/assets/layers/crossings/crossings.json index 2cd743b98..57d7f554d 100644 --- a/assets/layers/crossings/crossings.json +++ b/assets/layers/crossings/crossings.json @@ -91,7 +91,8 @@ ], "location": [ "point" - ] + ], + "anchor": "center" } ], "lineRendering": [ @@ -222,49 +223,181 @@ "fr": "Passage piéton sans marquages", "ca": "Creuament sense senyalitzar", "cs": "Přechod bez označení přechodu" - } + }, + "hideInAnswer": true } ] }, { - "id": "crossing-is-zebra", + "id": "markings", "question": { - "en": "Is this is a zebra crossing?", - "nl": "Is dit een zebrapad?", - "de": "Ist das ein Zebrastreifen?", - "es": "¿Esto es un paso de cebra?", - "fr": "Est-ce un passage piéton ?", - "ca": "Açò és un pas de vianants?", - "pl": "Czy to jest przejście dla pieszych typu \"zebra\"?", - "cs": "Jedná se o zebra přechod?" + "en": "What kind of markings does this crossing have?", + "nl": "Wat voor markering heeft deze oversteekplaats?" }, - "condition": "crossing=uncontrolled", "mappings": [ { - "if": "crossing_ref=zebra", + "if": "crossing:markings=no", "then": { - "en": "This is a zebra crossing", - "nl": "Dit is een zebrapad", - "de": "Dies ist ein Zebrastreifen", - "es": "Esto es un paso de cebra", - "fr": "C'est un passage piéton", - "ca": "Açò és un pas de vianants", - "cs": "Toto je zebra přechod" + "en": "This crossing has no markings", + "nl": "Deze oversteekplaats heeft geen markeringen" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/crossing_unmarked.png" } }, { - "if": "crossing_ref=", + "if": "crossing:markings=zebra", "then": { - "en": "This is not a zebra crossing", - "nl": "Dit is geen zebrapad", - "de": "Dies ist kein Zebrastreifen", - "es": "Esto no es un paso de cebra", - "fr": "Ce n'est pas un passage piéton", - "ca": "Açò no és un pas de vianants", - "cs": "Tohle není zebra přechod" + "en": "This crossing has zebra markings", + "nl": "Deze oversteekplaats heeft een zebramarkering" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_zebra.png" + } + }, + { + "hideInAnswer": true, + "then": { + "en": "This crossing has markings of an unknown type", + "nl": "Deze oversteekplaats heeft markeringen van een onbekend type" + }, + "if": "crossing:markings=yes" + }, + { + "if": "crossing:markings=lines", + "then": { + "en": "This crossings has lines on either side of the crossing", + "nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_lines.png" + } + }, + { + "if": "crossing:markings=ladder", + "then": { + "en": "This crossing has lines on either side of the crossing, along with bars connecting them", + "nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met strepen die ze verbinden" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_ladder.png" + } + }, + { + "if": "crossing:markings=dashes", + "then": { + "en": "This crossing has dashed lines on either sides of the crossing", + "nl": "Deze oversteekplaats heeft onderbroken lijnen aan beide kanten van de oversteekplaats" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_dashes.png" + } + }, + { + "if": "crossing:markings=dots", + "then": { + "en": "This crossing has dotted lines on either sides of the crossing", + "nl": "Deze oversteekplaats heeft stippellijnen aan beide kanten van de oversteekplaats" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_dots.png" + } + }, + { + "if": "crossing:markings=surface", + "then": { + "en": "This crossing is marked by using a different coloured surface", + "nl": "Deze oversteekplaats is gemarkeerd door een anders gekleurd wegdek" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_surface.png" + } + }, + { + "if": "crossing:markings=ladder:skewed", + "then": { + "en": "This crossing has lines on either side of the crossing, along with angled bars connecting them", + "nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met schuine strepen die ze verbinden" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_ladder_skewed.png" + } + }, + { + "if": "crossing:markings=zebra:paired", + "then": { + "en": "This crossing has zebra markings with an interruption in every bar", + "nl": "Deze oversteekplaats heeft zebramarkeringen met een onderbreking van elke streep" + } + }, + { + "if": "crossing:markings=zebra:bicolour", + "then": { + "en": "This crossing has zebra markings in alternating colours", + "nl": "Deze oversteekplaats heeft een zebramarkering in afwisselende kleuren" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_zebra_bicolour.png" + } + }, + { + "if": "crossing:markings=zebra:double", + "then": { + "en": "This crossing has double zebra markings", + "nl": "Deze oversteekplaats heeft een dubbele zebramarkering" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_zebra_double.png" + } + }, + { + "if": "crossing:markings=pictograms", + "then": { + "en": "This crossing has pictograms on the road", + "nl": "Deze oversteekplaats heeft pictogrammen op de weg" + } + }, + { + "if": "crossing:markings=ladder:paired", + "then": { + "en": "This crossing has lines on either side of the crossing, along with bars connecting them, with an interruption in every bar", + "nl": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met strepen die ze verbinden, met een onderbreking van elke streep" + } + }, + { + "if": "crossing:markings=lines:paired", + "then": { + "en": "This crossing has double lines on either side of the crossing", + "nl": "Deze oversteekplaats heeft dubbele lijnen aan beide kanten van de oversteekplaats" + }, + "icon": { + "class": "large", + "path": "./assets/layers/crossings/markings_lines_paired.png" } } - ] + ], + "render": { + "en": "This crossing has {crossing:markings} markings", + "nl": "Deze oversteekplaats heeft {crossing:markings} markeringen" + }, + "freeform": { + "key": "crossing:markings", + "type": "string", + "addExtraTags": [ + "fixme=Free-form value used in MapComplete for crossing:markings" + ] + }, + "multiAnswer": true }, { "id": "crossing-bicycle-allowed", @@ -732,4 +865,4 @@ "enableImproveAccuracy": true, "enableRelocation": false } -} +} \ No newline at end of file diff --git a/assets/layers/crossings/license_info.json b/assets/layers/crossings/license_info.json index 22105ed13..cfed79075 100644 --- a/assets/layers/crossings/license_info.json +++ b/assets/layers/crossings/license_info.json @@ -39,6 +39,116 @@ "https://wiki.openstreetmap.org/wiki/File:Vibrating_button_illustration.jpg" ] }, + { + "path": "crossing_unmarked.png", + "license": "CC0 1.0", + "authors": [ + "StenSoft" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Crossing_without_markings.png" + ] + }, + { + "path": "markings_dashes.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Markings_dashes.png" + ] + }, + { + "path": "markings_dots.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Markings_dots.png" + ] + }, + { + "path": "markings_ladder.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Markings_ladder.png" + ] + }, + { + "path": "markings_ladder_skewed.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Markings_adder_skewed.png" + ] + }, + { + "path": "markings_lines.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Markings_lines.png" + ] + }, + { + "path": "markings_lines_paired.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Markings_lines_paired.png" + ] + }, + { + "path": "markings_surface.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Surface_crossing_markings.png" + ] + }, + { + "path": "markings_zebra.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Markings_zebra.png" + ] + }, + { + "path": "markings_zebra_bicolour.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Markings_zebra_bicolour.png" + ] + }, + { + "path": "markings_zebra_double.png", + "license": "CC0 1.0", + "authors": [ + "Popball" + ], + "sources": [ + "https://wiki.openstreetmap.org/wiki/File:Crossing_markings_zebra_double.png" + ] + }, { "path": "pedestrian_crossing.svg", "license": "CC-BY-SA-4.0", diff --git a/assets/layers/crossings/markings_dashes.png b/assets/layers/crossings/markings_dashes.png new file mode 100644 index 000000000..e562679c1 Binary files /dev/null and b/assets/layers/crossings/markings_dashes.png differ diff --git a/assets/layers/crossings/markings_dashes.png.license b/assets/layers/crossings/markings_dashes.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_dashes.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/markings_dots.png b/assets/layers/crossings/markings_dots.png new file mode 100644 index 000000000..afd399b52 Binary files /dev/null and b/assets/layers/crossings/markings_dots.png differ diff --git a/assets/layers/crossings/markings_dots.png.license b/assets/layers/crossings/markings_dots.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_dots.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/markings_ladder.png b/assets/layers/crossings/markings_ladder.png new file mode 100644 index 000000000..0cee129af Binary files /dev/null and b/assets/layers/crossings/markings_ladder.png differ diff --git a/assets/layers/crossings/markings_ladder.png.license b/assets/layers/crossings/markings_ladder.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_ladder.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/markings_ladder_skewed.png b/assets/layers/crossings/markings_ladder_skewed.png new file mode 100644 index 000000000..a9d717d42 Binary files /dev/null and b/assets/layers/crossings/markings_ladder_skewed.png differ diff --git a/assets/layers/crossings/markings_ladder_skewed.png.license b/assets/layers/crossings/markings_ladder_skewed.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_ladder_skewed.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/markings_lines.png b/assets/layers/crossings/markings_lines.png new file mode 100644 index 000000000..cbd7a9ec6 Binary files /dev/null and b/assets/layers/crossings/markings_lines.png differ diff --git a/assets/layers/crossings/markings_lines.png.license b/assets/layers/crossings/markings_lines.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_lines.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/markings_lines_paired.png b/assets/layers/crossings/markings_lines_paired.png new file mode 100644 index 000000000..f33af47db Binary files /dev/null and b/assets/layers/crossings/markings_lines_paired.png differ diff --git a/assets/layers/crossings/markings_lines_paired.png.license b/assets/layers/crossings/markings_lines_paired.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_lines_paired.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/markings_surface.png b/assets/layers/crossings/markings_surface.png new file mode 100644 index 000000000..f0048c67c Binary files /dev/null and b/assets/layers/crossings/markings_surface.png differ diff --git a/assets/layers/crossings/markings_surface.png.license b/assets/layers/crossings/markings_surface.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_surface.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/markings_zebra.png b/assets/layers/crossings/markings_zebra.png new file mode 100644 index 000000000..6588af96f Binary files /dev/null and b/assets/layers/crossings/markings_zebra.png differ diff --git a/assets/layers/crossings/markings_zebra.png.license b/assets/layers/crossings/markings_zebra.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_zebra.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/markings_zebra_bicolour.png b/assets/layers/crossings/markings_zebra_bicolour.png new file mode 100644 index 000000000..2e77a1996 Binary files /dev/null and b/assets/layers/crossings/markings_zebra_bicolour.png differ diff --git a/assets/layers/crossings/markings_zebra_bicolour.png.license b/assets/layers/crossings/markings_zebra_bicolour.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_zebra_bicolour.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/crossings/markings_zebra_double.png b/assets/layers/crossings/markings_zebra_double.png new file mode 100644 index 000000000..6ab4c3a0b Binary files /dev/null and b/assets/layers/crossings/markings_zebra_double.png differ diff --git a/assets/layers/crossings/markings_zebra_double.png.license b/assets/layers/crossings/markings_zebra_double.png.license new file mode 100644 index 000000000..09b78e137 --- /dev/null +++ b/assets/layers/crossings/markings_zebra_double.png.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Popball +SPDX-License-Identifier: CC0 1.0 \ No newline at end of file diff --git a/assets/layers/cyclist_waiting_aid/cyclist_waiting_aid.json b/assets/layers/cyclist_waiting_aid/cyclist_waiting_aid.json new file mode 100644 index 000000000..eb6ab3ea3 --- /dev/null +++ b/assets/layers/cyclist_waiting_aid/cyclist_waiting_aid.json @@ -0,0 +1,148 @@ +{ + "credits": "Robin van der Linde", + "pointRendering": [ + { + "location": [ + "point", + "centroid" + ], + "marker": [ + { + "icon": "pin", + "color": "#538EE8" + }, + { + "icon": "./assets/layers/cyclist_waiting_aid/waiting_aid.svg" + } + ], + "anchor": "bottom" + } + ], + "tagRenderings": [ + "images", + { + "question": { + "en": "What kind of components does this waiting aid have?" + }, + "id": "type", + "multiAnswer": true, + "mappings": [ + { + "if": "footrest=yes", + "then": { + "en": "There is a board or peg to rest your foot on here" + }, + "ifnot": "footrest=" + }, + { + "if": "handrest=yes", + "then": { + "en": "There is a rail or a handle to hold on to here" + }, + "ifnot": "handrest=" + } + ] + }, + { + "question": { + "en": "On what side of the road is this located?" + }, + "id": "side", + "mappings": [ + { + "if": "side=left", + "then": { + "en": "This waiting aid is located on the left side" + } + }, + { + "if": "side=right", + "then": { + "en": "This waiting aid is located on the right side" + } + }, + { + "if": "side=both", + "then": { + "en": "There are waiting aids on both sides of the road" + } + } + ] + }, + { + "condition": "direction~*", + "id": "direction", + "mappings": [ + { + "if": "direction=forward", + "then": { + "en": "This waiting aid can be used when going forward on this way" + } + }, + { + "if": "direction=backward", + "then": { + "en": "This waiting aid can be used when going backward on this way" + } + } + ], + "render": { + "en": "This waiting aid can be used when going in {direction} direction" + } + } + ], + "lineRendering": [ + { + "width": 1, + "color": "blue" + } + ], + "credits:uid": 5093765, + "id": "cyclist_waiting_aid", + "description": { + "en": "Various pieces of infrastructure that aid cyclists while they wait at a traffic light." + }, + "source": { + "osmTags": "highway=cyclist_waiting_aid" + }, + "name": { + "en": "Cyclist Waiting Aids" + }, + "title": { + "render": { + "en": "Cyclist Waiting Aid" + } + }, + "deletion": { + "softDeletionTags": { + "and": [ + "highway=", + "side=", + "footrest=", + "handrest=", + "material=", + "height=", + "support=", + "count=", + "capacity=" + ] + } + }, + "allowMove": false, + "presets": [ + { + "title": { + "en": "a cyclist waiting aid" + }, + "tags": [ + "highway=cyclist_waiting_aid" + ], + "description": { + "en": "A footrest, handrail or other aid, to improve comfort while waiting at traffic lights" + }, + "snapToLayer": [ + "cycleways_and_roads" + ] + } + ] +} \ No newline at end of file diff --git a/assets/layers/cyclist_waiting_aid/license_info.json b/assets/layers/cyclist_waiting_aid/license_info.json new file mode 100644 index 000000000..45b87f4de --- /dev/null +++ b/assets/layers/cyclist_waiting_aid/license_info.json @@ -0,0 +1,10 @@ +[ + { + "path": "waiting_aid.svg", + "license": "CC0-1.0", + "authors": [ + "Robin van der Linde" + ], + "sources": [] + } +] \ No newline at end of file diff --git a/assets/layers/cyclist_waiting_aid/waiting_aid.svg b/assets/layers/cyclist_waiting_aid/waiting_aid.svg new file mode 100644 index 000000000..f154e0c64 --- /dev/null +++ b/assets/layers/cyclist_waiting_aid/waiting_aid.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/layers/cyclist_waiting_aid/waiting_aid.svg.license b/assets/layers/cyclist_waiting_aid/waiting_aid.svg.license new file mode 100644 index 000000000..75299f884 --- /dev/null +++ b/assets/layers/cyclist_waiting_aid/waiting_aid.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Robin van der Linde +SPDX-License-Identifier: CC0-1.0 \ No newline at end of file diff --git a/assets/layers/item_with_image/item_with_image.json b/assets/layers/item_with_image/item_with_image.json index c752b6ec7..193a9eadd 100644 --- a/assets/layers/item_with_image/item_with_image.json +++ b/assets/layers/item_with_image/item_with_image.json @@ -69,4 +69,4 @@ "images" ], "allowMove": false -} +} \ No newline at end of file diff --git a/assets/layers/questions/questions.json b/assets/layers/questions/questions.json index 5c3f92532..63029e2a5 100644 --- a/assets/layers/questions/questions.json +++ b/assets/layers/questions/questions.json @@ -2972,7 +2972,30 @@ } } ] + }, + { + "id": "indoor", + "question": { + "en": "Is this object located indoors?", + "nl": "Bevindt dit object zich binnen?" + }, + "mappings": [ + { + "if": "indoor=yes", + "then": { + "en": "This object is located indoors", + "nl": "Dit object bevindt zich binnen" + } + }, + { + "if": "indoor=no", + "then": { + "en": "This object is located outdoors", + "nl": "Dit object bevindt zich buiten" + } + } + ] } ], "allowMove": false -} +} \ No newline at end of file diff --git a/assets/layers/tactile_map/tactile_map.json b/assets/layers/tactile_map/tactile_map.json new file mode 100644 index 000000000..f8fb216ac --- /dev/null +++ b/assets/layers/tactile_map/tactile_map.json @@ -0,0 +1,146 @@ +{ + "id": "tactile_map", + "name": { + "en": "Tactile Maps" + }, + "description": { + "en": "Layer showing tactile maps, which can be used by visually impaired people to navigate the city." + }, + "source": { + "osmTags": "information=tactile_map" + }, + "title": { + "en": "Tactile Map" + }, + "presets": [ + { + "tags": [ + "tourism=information", + "information=tactile_map" + ], + "title": { + "en": "a tactile map" + }, + "description": { + "en": "A tactile map that can be read using touch. Unlike a tactile model, this is relatively flat and does not feature three-dimensional buildings and such." + } + } + ], + "deletion": true, + "allowMove": true, + "minzoom": 10, + "pointRendering": [ + { + "marker": [ + { + "icon": "circle", + "color": "white" + }, + { + "icon": "./assets/themes/maps/logo.svg" + } + ], + "location": [ + "point", + "centroid" + ] + } + ], + "tagRenderings": [ + "images", + { + "id": "description", + "question": { + "en": "What does this tactile map show?" + }, + "freeform": { + "key": "blind:description:en", + "placeholder": { + "en": "e.g. Tactile map of the city center" + } + }, + "render": { + "en": "Description: {blind:description:en}." + } + }, + { + "id": "braille", + "question": { + "en": "Is there braille text on this tactile map?" + }, + "mappings": [ + { + "if": "braille=yes", + "then": { + "en": "This tactile map has braille text." + } + }, + { + "if": "braille=no", + "then": { + "en": "This tactile map does not have braille text." + } + } + ] + }, + { + "id": "braille_languages", + "condition": "braille=yes", + "render": { + "special": { + "type": "language_chooser", + "key": "tactile_writing:braille", + "question": { + "en": "In which languages is the braille text on this tactile map?" + }, + "render_list_item": { + "en": "This map has braille text in {language}" + }, + "render_single_language": { + "en": "This map has braille text in {language}" + } + } + } + }, + { + "id": "embossed_letters", + "question": { + "en": "Are there embossed letters on this tactile map?" + }, + "mappings": [ + { + "if": "embossed_letters=yes", + "then": { + "en": "This tactile map has embossed letters." + } + }, + { + "if": "embossed_letters=no", + "then": { + "en": "This tactile map does not have embossed letters." + } + } + ] + }, + { + "id": "embossed_letters_languages", + "condition": "embossed_letters=yes", + "render": { + "special": { + "type": "language_chooser", + "key": "tactile_writing:embossed", + "question": { + "en": "In which languages are the embossed letters on this tactile map?" + }, + "render_list_item": { + "en": "This map has embossed letters in {language}" + }, + "render_single_language": { + "en": "This map has embossed letters in {language}" + } + } + } + }, + "website" + ] +} \ No newline at end of file diff --git a/assets/layers/tactile_model/license_info.json b/assets/layers/tactile_model/license_info.json new file mode 100644 index 000000000..8bf12a33c --- /dev/null +++ b/assets/layers/tactile_model/license_info.json @@ -0,0 +1,10 @@ +[ + { + "path": "tactile_model.svg", + "license": "CC0-1.0", + "authors": [ + "Robin van der Linde" + ], + "sources": [] + } +] \ No newline at end of file diff --git a/assets/layers/tactile_model/tactile_model.json b/assets/layers/tactile_model/tactile_model.json new file mode 100644 index 000000000..98d98ead3 --- /dev/null +++ b/assets/layers/tactile_model/tactile_model.json @@ -0,0 +1,157 @@ +{ + "id": "tactile_model", + "name": { + "en": "Tactile Models" + }, + "description": { + "en": "Layer showing tactile models, three-dimensional models of the surrounding area." + }, + "source": { + "osmTags": "information=tactile_model" + }, + "title": { + "en": "Tactile Model" + }, + "presets": [ + { + "tags": [ + "tourism=information", + "information=tactile_model" + ], + "title": { + "en": "a tactile model" + }, + "description": { + "en": "A tactile model is a three-dimensional model of an area, allowing people to explore/see an area by touch." + } + } + ], + "deletion": true, + "allowMove": true, + "minzoom": 10, + "pointRendering": [ + { + "marker": [ + { + "icon": "./assets/layers/tactile_model/tactile_model.svg" + } + ], + "location": [ + "point", + "centroid" + ] + } + ], + "tagRenderings": [ + "images", + { + "id": "description", + "question": { + "en": "What does this tactile model show?" + }, + "freeform": { + "key": "blind:description:en", + "placeholder": { + "en": "e.g. Tactile model of the city center" + } + }, + "render": { + "en": "Description: {blind:description:en}." + } + }, + { + "id": "braille", + "question": { + "en": "Is there a braille description?" + }, + "mappings": [ + { + "if": "braille=yes", + "then": { + "en": "There is a braille description." + } + }, + { + "if": "braille=no", + "then": { + "en": "There is no braille description." + } + } + ] + }, + { + "id": "braille_languages", + "condition": "braille=yes", + "render": { + "special": { + "type": "language_chooser", + "key": "tactile_writing:braille", + "question": { + "en": "In which languages is there a braille description?" + }, + "render_list_item": { + "en": "This model has a braille description in {language()}" + }, + "render_single_language": { + "en": "This model has a braille description in {language}" + } + } + } + }, + { + "id": "embossed_letters", + "question": { + "en": "Are there embossed letters describing the model?" + }, + "mappings": [ + { + "if": "embossed_letters=yes", + "then": { + "en": "There are embossed letters describing the model." + } + }, + { + "if": "embossed_letters=no", + "then": { + "en": "There are no embossed letters describing the model." + } + } + ] + }, + { + "id": "embossed_letters_languages", + "condition": "embossed_letters=yes", + "render": { + "special": { + "type": "language_chooser", + "key": "tactile_writing:embossed_letters", + "question": { + "en": "In which languages are there embossed letters?" + }, + "render_list_item": { + "en": "This model has embossed letters in {language()}" + }, + "render_single_language": { + "en": "This model has embossed letters in {language}" + } + } + } + }, + { + "id": "scale", + "question": { + "en": "What scale is the model?" + }, + "freeform": { + "key": "scale", + "placeholder": { + "en": "e.g. 1:1000" + } + }, + "render": { + "en": "The scale of this model is {scale}." + } + }, + "website" + ] +} \ No newline at end of file diff --git a/assets/layers/tactile_model/tactile_model.svg b/assets/layers/tactile_model/tactile_model.svg new file mode 100644 index 000000000..e565a43ec --- /dev/null +++ b/assets/layers/tactile_model/tactile_model.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/layers/tactile_model/tactile_model.svg.license b/assets/layers/tactile_model/tactile_model.svg.license new file mode 100644 index 000000000..2c50b6981 --- /dev/null +++ b/assets/layers/tactile_model/tactile_model.svg.license @@ -0,0 +1,2 @@ +SPDX-FileCopyrightText: Robin van der Linde +SPDX-License-Identifier: CC0 \ No newline at end of file diff --git a/assets/themes/blind_osm/blind_osm.json b/assets/themes/blind_osm/blind_osm.json index ab98fa5da..b45f9a4fc 100644 --- a/assets/themes/blind_osm/blind_osm.json +++ b/assets/themes/blind_osm/blind_osm.json @@ -117,6 +117,8 @@ "minzoom": 17 } }, - "stairs" + "stairs", + "tactile_map", + "tactile_model" ] -} +} \ No newline at end of file diff --git a/assets/themes/cycle_infra/cycle_infra.json b/assets/themes/cycle_infra/cycle_infra.json index 638efa2ab..4e50ccfec 100644 --- a/assets/themes/cycle_infra/cycle_infra.json +++ b/assets/themes/cycle_infra/cycle_infra.json @@ -56,13 +56,18 @@ "startLon": 3.75, "hideFromOverview": false, "layers": [ - "cycleways_and_roads", - "barrier", - "crossings", - "bicycle_counter" + { + "builtin": [ + "cycleways_and_roads", + "barrier", + "crossings", + "bicycle_counter", + "cyclist_waiting_aid" + ], + "override": { + "minzoom": 16 + } + } ], - "overrideAll": { - "minzoom": 16 - }, "enableDownload": true -} +} \ No newline at end of file diff --git a/assets/themes/rainbow_crossings/rainbow_crossings.json b/assets/themes/rainbow_crossings/rainbow_crossings.json index 5c5795e4e..c3ac9effa 100644 --- a/assets/themes/rainbow_crossings/rainbow_crossings.json +++ b/assets/themes/rainbow_crossings/rainbow_crossings.json @@ -47,12 +47,18 @@ } } }, - "rainbow_crossings", + { + "builtin": "rainbow_crossings", + "override": { + "isCounted": false + } + }, { "builtin": "cycleways_and_roads", "override": { "minzoom": 18, - "name": null + "name": null, + "isCounted": false } } ], diff --git a/langs/layers/ca.json b/langs/layers/ca.json index e6a5d6c34..dd5b6f42e 100644 --- a/langs/layers/ca.json +++ b/langs/layers/ca.json @@ -2398,10 +2398,10 @@ "1": { "then": "Aquest rellotge està muntat en una paret" }, - "2": { + "3": { "then": "Aquest rellotge està muntat en una tanca publicitària" }, - "3": { + "4": { "then": "Aquest rellotge està al sòl" } }, @@ -2512,17 +2512,6 @@ }, "question": "Aquest creuament té una illa al mig?" }, - "crossing-is-zebra": { - "mappings": { - "0": { - "then": "Açò és un pas de vianants" - }, - "1": { - "then": "Açò no és un pas de vianants" - } - }, - "question": "Açò és un pas de vianants?" - }, "crossing-minimap": { "mappings": { "0": { diff --git a/langs/layers/cs.json b/langs/layers/cs.json index 2d7870173..bfe44f4dc 100644 --- a/langs/layers/cs.json +++ b/langs/layers/cs.json @@ -2752,10 +2752,10 @@ "1": { "then": "Tyto hodiny jsou namontovány na stěně" }, - "2": { + "3": { "then": "Tyto hodiny jsou součástí billboardu" }, - "3": { + "4": { "then": "Tyto hodiny jsou na zemi" } }, @@ -10198,4 +10198,4 @@ "render": "větrná turbína" } } -} +} \ No newline at end of file diff --git a/langs/layers/de.json b/langs/layers/de.json index eb37d7a5f..fbad2cede 100644 --- a/langs/layers/de.json +++ b/langs/layers/de.json @@ -3296,10 +3296,10 @@ "1": { "then": "Diese Uhr ist an einer Wand montiert" }, - "2": { + "3": { "then": "Diese Uhr ist Teil einer Werbetafel" }, - "3": { + "4": { "then": "Diese Uhr befindet sich auf dem Boden" } }, @@ -12502,4 +12502,4 @@ "render": "Windrad" } } -} +} \ No newline at end of file diff --git a/langs/layers/en.json b/langs/layers/en.json index 40a36590c..17e217655 100644 --- a/langs/layers/en.json +++ b/langs/layers/en.json @@ -3294,12 +3294,15 @@ "then": "This clock is mounted on a pole" }, "1": { - "then": "This clock is mounted on a wall" + "then": "This clock is mounted on a wall, usually through a support perpendicular to the wall" }, "2": { - "then": "This clock is part of a billboard" + "then": "This clock is mounted directly on a wall" }, "3": { + "then": "This clock is part of a billboard" + }, + "4": { "then": "This clock is on the ground" } }, diff --git a/langs/layers/fr.json b/langs/layers/fr.json index 9884fee7b..11acf1a16 100644 --- a/langs/layers/fr.json +++ b/langs/layers/fr.json @@ -2272,10 +2272,10 @@ "1": { "then": "Cette horloge est fixée sur un mur" }, - "2": { + "3": { "then": "Cette horloge fait partie d'un panneau publicitaire" }, - "3": { + "4": { "then": "Cette horloge est posée au sol" } }, @@ -7567,4 +7567,4 @@ "render": "éolienne" } } -} +} \ No newline at end of file diff --git a/langs/layers/nl.json b/langs/layers/nl.json index a385b3b2e..50f911246 100644 --- a/langs/layers/nl.json +++ b/langs/layers/nl.json @@ -2748,12 +2748,15 @@ "then": "Deze klok is bevestigd aan een paal" }, "1": { - "then": "Deze klok is bevestigd aan een muur" + "then": "Deze klok is bevestigd aan een muur, meestal met een steun loodrecht op de muur" }, "2": { - "then": "Deze klok is onderdeel van een reclamebord" + "then": "Deze klok is rechtstreeks aan een muur bevestigd" }, "3": { + "then": "Deze klok is onderdeel van een reclamebord" + }, + "4": { "then": "Deze klok staat op de grond" } }, diff --git a/langs/layers/pl.json b/langs/layers/pl.json index e7ae159ec..218dd4664 100644 --- a/langs/layers/pl.json +++ b/langs/layers/pl.json @@ -1356,10 +1356,10 @@ "1": { "then": "Ten zegar jest zamontowany na ścianie" }, - "2": { + "3": { "then": "Ten zegar jest częścią bilbordu" }, - "3": { + "4": { "then": "Ten zegar jest na ziemi" } }, diff --git a/langs/layers/uk.json b/langs/layers/uk.json index 3a3482d49..7e1437b5c 100644 --- a/langs/layers/uk.json +++ b/langs/layers/uk.json @@ -479,7 +479,7 @@ "tagRenderings": { "support": { "mappings": { - "2": { + "3": { "then": "Цей годинник є частиною білборду" } } @@ -1338,4 +1338,4 @@ "render": "Утилізація відходів" } } -} +} \ No newline at end of file diff --git a/scripts/moveImage.ts b/scripts/moveImage.ts new file mode 100644 index 000000000..989883eee --- /dev/null +++ b/scripts/moveImage.ts @@ -0,0 +1,91 @@ +import { existsSync, renameSync, readFileSync, writeFileSync } from "fs" +import SmallLicense from "../src/Models/smallLicense" + +/** + * Script to move/rename image files + * Useful after downloading images from wikimedia commons + * Apart from moving the image files, this will also update the license file + * + * This will NOT update any images in the theme + */ + +function main(args: string[]) { + // Check if the correct number of arguments are passed + if (args.length != 2) { + console.log("Usage: moveImage.ts oldPath newPath") + console.log("You passed in the arguments: " + args.join(",")) + console.log("Example: npx vite-node scripts/moveImage.ts images/old.jpg images/new.jpg") + return + } + const [oldPath, newPath] = args + + // Check if the oldPath exists + if (!existsSync(oldPath)) { + console.log("The oldPath does not exist: " + oldPath) + return + } + + // Move file + renameSync(oldPath, newPath) + + // If it exists also move the .license file + const oldLicensePath = oldPath + ".license" + if (existsSync(oldLicensePath)) { + const newLicensePath = newPath + ".license" + renameSync(oldLicensePath, newLicensePath) + } + + console.log("Moved file from " + oldPath + " to " + newPath) + + // Open license_info.json in the same directory as the old file + const licensePath = oldPath.replace(/\/[^/]+$/, "/license_info.json") + if (!existsSync(licensePath)) { + console.log( + "The license file does not exist: " + + licensePath + + ". Skipping writing to license file." + ) + return + } + + // Read license file + const licenseFile = readFileSync(licensePath, "utf8") + const licenseInfo = JSON.parse(licenseFile) as SmallLicense[] + + // Find correct license item + const licenseItem = licenseInfo.find((item) => item.path === oldPath.replace(/.*\//, "")) + + // Filter out license item + const newLicenseInfo = licenseInfo.filter((item) => item.path !== oldPath.replace(/.*\//, "")) + const newLicenseFile = JSON.stringify(newLicenseInfo, null, 2) + + // Write new license file + writeFileSync(licensePath, newLicenseFile) + + // Look for a license_info.json file in the new path + const newLicensePath = newPath.replace(/\/[^/]+$/, "/license_info.json") + if (!existsSync(newLicensePath) && licenseItem) { + console.log("License file doesn't exist yet, creating new one: " + newLicensePath) + + // Create new license item + const newLicenseItem = licenseItem + newLicenseItem.path = newPath.replace(/.*\//, "") + + // Create file + writeFileSync(newLicensePath, JSON.stringify([newLicenseItem], null, 2)) + } else if (licenseItem) { + console.log("Appending to existing license file: " + newLicensePath) + + // Create new license item + const newLicenseItem = licenseItem + newLicenseItem.path = newPath.replace(/.*\//, "") + + // Append to existing file + const newLicenseFile = readFileSync(newLicensePath, "utf8") + const newLicenseInfo = JSON.parse(newLicenseFile) as SmallLicense[] + newLicenseInfo.push(newLicenseItem) + writeFileSync(newLicensePath, JSON.stringify(newLicenseInfo, null, 2)) + } +} + +main(process.argv.slice(2))