Merge branch 'develop' of github.com:pietervdvn/MapComplete into develop

This commit is contained in:
Pieter Vander Vennet 2024-10-30 15:16:58 +01:00
commit 84c46b35be
49 changed files with 1089 additions and 88 deletions

View file

@ -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
}
}
}

View file

@ -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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: StenSoft
SPDX-License-Identifier: CC0 1.0

View file

@ -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
}
}
}

View file

@ -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",

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Popball
SPDX-License-Identifier: CC0 1.0

View file

@ -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"
]
}
]
}

View file

@ -0,0 +1,10 @@
[
{
"path": "waiting_aid.svg",
"license": "CC0-1.0",
"authors": [
"Robin van der Linde"
],
"sources": []
}
]

View file

@ -0,0 +1,21 @@
<svg width="314" height="374" viewBox="0 0 314 374" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_1_2)">
<path d="M157 0C70.2969 0 0.0117188 70.1211 0.0117188 156.621C0.0117188 231.017 52.0255 293.253 121.742 309.223L147.246 364.684C152.957 377.105 170.652 377.105 176.367 364.684L203.199 306.334C267.352 286.654 313.988 227.075 313.988 156.621C313.988 70.1211 243.703 0 157 0Z" fill="#538EE8"/>
<line x1="48.5355" y1="202.464" x2="90.9619" y2="244.891" stroke="white" stroke-width="10"/>
<line x1="90.9619" y1="167.536" x2="48.5355" y2="209.962" stroke="white" stroke-width="10"/>
<line x1="200.536" y1="216.464" x2="242.962" y2="258.891" stroke="white" stroke-width="10"/>
<line x1="242.962" y1="181.536" x2="200.536" y2="223.962" stroke="white" stroke-width="10"/>
<path d="M59 197L213 210" stroke="white" stroke-width="10"/>
<path d="M84 74L246 85" stroke="white" stroke-width="10"/>
<path d="M89 172V72" stroke="white" stroke-width="10"/>
<path d="M241 185V85" stroke="white" stroke-width="10"/>
<path d="M66 190L220 203" stroke="white" stroke-width="10"/>
<path d="M73 184L227 197" stroke="white" stroke-width="10"/>
<path d="M81 177L235 190" stroke="white" stroke-width="10"/>
</g>
<defs>
<clipPath id="clip0_1_2">
<rect width="314" height="374" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Robin van der Linde
SPDX-License-Identifier: CC0-1.0

View file

@ -69,4 +69,4 @@
"images"
],
"allowMove": false
}
}

View file

@ -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
}
}

View file

@ -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"
]
}

View file

@ -0,0 +1,10 @@
[
{
"path": "tactile_model.svg",
"license": "CC0-1.0",
"authors": [
"Robin van der Linde"
],
"sources": []
}
]

View file

@ -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"
]
}

View file

@ -0,0 +1,26 @@
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="250" cy="250" r="250" fill="#555555"/>
<ellipse cx="250" cy="288" rx="200" ry="150" fill="#977A59"/>
<rect x="201.286" y="259.14" width="97.4286" height="92.8598" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="226" y="167" width="48" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="249" y="92" width="2" height="28" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="243" y="103" width="14" height="2" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M202.165 257.818L250 209.423L297.835 257.818H202.165Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M225.654 166.818L250 119.197L274.346 166.818H225.654Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="96" y="301" width="58" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M96.7832 299.5L125 264.591L153.217 299.5H96.7832Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="161" y="291" width="58" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M161.783 289.5L190 254.591L218.217 289.5H161.783Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="131" y="326" width="58" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M131.783 324.5L160 289.591L188.217 324.5H131.783Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="178" y="341" width="58" height="68" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M178.783 339.5L207 304.591L235.217 339.5H178.783Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="-1" y="1" width="58" height="68" transform="matrix(-1 0 0 1 409 300)" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M409.217 299.5L381 264.591L352.783 299.5H409.217Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="-1" y="1" width="58" height="68" transform="matrix(-1 0 0 1 344 290)" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M344.217 289.5L316 254.591L287.783 289.5H344.217Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="-1" y="1" width="58" height="68" transform="matrix(-1 0 0 1 374 325)" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M374.217 324.5L346 289.591L317.783 324.5H374.217Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<rect x="-1" y="1" width="58" height="68" transform="matrix(-1 0 0 1 327 340)" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
<path d="M327.217 339.5L299 304.591L270.783 339.5H327.217Z" fill="#896A46" stroke="#6F410D" stroke-width="2"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Robin van der Linde
SPDX-License-Identifier: CC0

View file

@ -117,6 +117,8 @@
"minzoom": 17
}
},
"stairs"
"stairs",
"tactile_map",
"tactile_model"
]
}
}

View file

@ -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
}
}

View file

@ -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
}
}
],

View file

@ -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": {

View file

@ -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"
}
}
}
}

View file

@ -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"
}
}
}
}

View file

@ -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"
}
},

View file

@ -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"
}
}
}
}

View file

@ -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"
}
},

View file

@ -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"
}
},

View file

@ -479,7 +479,7 @@
"tagRenderings": {
"support": {
"mappings": {
"2": {
"3": {
"then": "Цей годинник є частиною білборду"
}
}
@ -1338,4 +1338,4 @@
"render": "Утилізація відходів"
}
}
}
}

91
scripts/moveImage.ts Normal file
View file

@ -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))