Compare commits

...

9 commits

Author SHA1 Message Date
a4675a725d
Add public_notice_boards 2024-12-07 17:25:46 +01:00
Joost Schouppe
c65c6b0a87
Translated using Weblate (Dutch)
Currently translated at 76.3% (3081 of 4038 strings)

Translation: MapComplete/layers
Translate-URL: https://translate.mapcomplete.org/projects/mapcomplete/layers/nl/
2024-12-07 17:25:46 +01:00
Pieter Vander Vennet
7a4aa1c4f4
Fix: image upload will now fail less for newly created points 2024-12-07 17:25:45 +01:00
Pieter Vander Vennet
11bc87c9db
Docs: improve error message if something goes wrong in the image upload 2024-12-07 17:25:45 +01:00
Pieter Vander Vennet
5b3ca7e85c
Docs: improve typing and testing of GeoOperations 2024-12-07 17:25:45 +01:00
Pieter Vander Vennet
87b5e49789
Fix: linking images is not possible for notes or non-openstreetmap elements 2024-12-07 17:25:45 +01:00
Pieter Vander Vennet
53f096e429
Chore: remove unused imports 2024-12-07 17:25:45 +01:00
Weblate
71b1d20c09
Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: MapComplete/layers
Translate-URL: https://translate.mapcomplete.org/projects/mapcomplete/layers/
2024-12-07 17:25:44 +01:00
Weblate
2b25091c66
Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: MapComplete/themes
Translate-URL: https://translate.mapcomplete.org/projects/mapcomplete/themes/
2024-12-07 17:25:44 +01:00
29 changed files with 1021 additions and 179 deletions

View file

@ -133,7 +133,8 @@
},
"special": {
"type": "nearby_images",
"mode": "open"
"mode": "open",
"readonly": "yes"
}
}
},

View file

@ -0,0 +1,276 @@
{
"id": "public_notice_boards",
"name": {
"en": "Public notice boards",
"nl": "Afficheborden voor vrij aanplakken"
},
"description": {
"en": "Boards for posters for neighbourhood advertising, local events, opinions, etc.",
"nl": "Borden voor affiches voor buurtadvertenties, lokale evenementen, opinies, ..."
},
"source": {
"osmTags": {
"and": [
"advertising=board",
"access=yes"
]
}
},
"minzoom": 12,
"title": {
"render": {
"*": "Public notice board"
}
},
"pointRendering": [
{
"location": [
"point",
"centroid"
],
"anchor": {
"render": "bottom"
},
"marker": [
{
"icon": {
"render": "./assets/themes/public_notice_boards/Board_free.svg"
}
}
],
"iconSize": {
"render": "40,40"
}
}
],
"lineRendering": [
{
"width": "8",
"color": "#00f"
}
],
"presets": [
{
"tags": [
"advertising=board",
"access=yes"
],
"title": {
"en": "a public notice board",
"nl": "een affichebord voor vrij aanplakken"
},
"description": {
"en": "Small billboard for neighbourhood advertising, generally intended for pedestrians",
"nl": "Een klein uithangbord voor buurtadvertenties, meestal gericht op voetgangers"
},
"exampleImages": [
"./assets/themes/advertising/local_Board.jpg"
]
}
],
"tagRenderings": [
"images",
{
"id": "public_notice_boards-operator",
"render": {
"ca": "L'operador és {operator}",
"es": "Operado por {operator}",
"en": "Operated by {operator}",
"de": "Betrieben von {operator}",
"cs": "Provozuje {operator}",
"fr": "Exploité par {operator}",
"nl": "Uitgebaat door {operator}",
"pt": "Operado por {operator}",
"pt_BR": "Operado por {operator}",
"he": "מופעל על ידי {operator}",
"pl": "Obsługiwane przez {operator}",
"zh_Hans": "由{operator}运营",
"uk": "Управляється {operator}"
},
"question": {
"ca": "Qui opera aquest element?",
"es": "¿Quién opera este elemento?",
"en": "Who operates this feature?",
"de": "Wer betreibt dieses Objekt?",
"cs": "Kdo tento objekt provozuje?",
"fr": "Qui exploite ce dispositif ?",
"nl": "Wie baat dit object uit?",
"pt": "Quem opera esse elemento?",
"he": "מי מפעיל את התכונה הזו?",
"pl": "Kto obsługuje ten obiekt?",
"pt_BR": "Quem opera este recurso?",
"zh_Hans": "谁操作此物件?",
"uk": "Хто керує цим об'єктом?"
},
"freeform": {
"addExtraTags": [],
"key": "operator"
}
},
{
"id": "public_notice_boards-message_type",
"question": {
"en": "What kind of message can be posted here?",
"nl": "Wat voor boodschap mag hier aangeplakt worden?"
},
"mappings": [
{
"if": "message=showbiz",
"ifnot": "message=",
"then": {
"ca": "Informació sobre teatres, concerts, …",
"es": "Información relacionada con teatro, conciertos,…",
"en": "Information related to theatre, concerts, …",
"de": "Informationen über Theater, Konzerte, …",
"cs": "Informace týkající se divadla, koncertů, …",
"fr": "Informations liées au théâtre, à des concerts, …",
"nl": "Informatie over cultuurevenementen zoals theaters, optredens, …",
"pt": "Informações relacionadas com teatro, concertos, ...",
"he": "מידע הקשור לתיאטרון, קונצרטים,…",
"eu": "Antzerkiari, kontzertuei eta abarri buruzko informazioa",
"pl": "Informacje dotyczące teatru, koncertów, …",
"pt_BR": "Informações relacionadas a teatro, concertos, …",
"zh_Hans": "与戏剧、音乐会等相关的信息……",
"uk": "Інформація, пов'язана з театром, концертами, …"
}
},
{
"if": "message=non_profit",
"ifnot": "message=",
"then": {
"ca": "Missatge d'organitzacions sense ànim de lucre",
"es": "Mensaje de organizaciones sin fines de lucro",
"en": "Message from non-profit organizations",
"de": "Nachricht von gemeinnützigen Organisationen",
"cs": "Zpráva od neziskových organizací",
"fr": "Message d'organisations sans but lucratif",
"nl": "Boodschap van NGO-organisaties",
"pt": "Mensagem de organizações sem fins lucrativos",
"pl": "Wiadomość od organizacji non-profit",
"pt_BR": "Mensagens de organizações sem fins lucrativos",
"zh_Hans": "来自非营利组织的消息",
"uk": "Повідомлення від неприбуткових організацій"
}
},
{
"if": "message=opinion",
"ifnot": "message=",
"then": {
"ca": "Per a expressar la teua opinió",
"es": "Para expresar tu opinión",
"en": "To express your opinion",
"de": "Um Ihre Meinung zu äußern",
"cs": "Pro vyjádření vašeho názoru",
"fr": "Expression d'opinion",
"pt": "Para expressar sua opinião",
"pl": "Żeby wyrazić swoją opinię",
"pt_BR": "Para expressar sua opinião",
"zh_Hans": "表达您的意见",
"uk": "Щоб висловити свою думку",
"nl": "Om je mening te geven"
}
},
{
"if": "message=religion",
"ifnot": "message=",
"then": {
"ca": "Missatge religiós",
"es": "Mensaje religioso",
"en": "Religious message",
"de": "Religiöse Botschaft",
"cs": "Náboženská zpráva",
"fr": "Message religieux",
"nl": "Religieuze boodschap",
"pt": "Mensagem religiosa",
"pt_BR": "Mensagem religiosa",
"he": "מסר דתי",
"pl": "Przekaz religijny",
"zh_Hans": "宗教讯息",
"uk": "Релігійне послання"
}
}
],
"multiAnswer": true
},
{
"id": "public_notice_boards-network",
"render": {
"en": "Part of network \"{network}\"",
"nl": "Onderdeel van netwerk \"{network}\""
},
"question": {
"en": "Is this board part of a network of related boards? E.g. \"Public Notices <city name>\"",
"nl": "Is dit bord deel van een netwerk van gerelateerde borden? Bv. \"Vrij aanplakken <naam van stad>\""
},
"freeform": {
"key": "network"
}
},
{
"id": "public_notice_boards-ref",
"question": {
"ca": "Quin és el número de refèrencia?",
"es": "¿Cuál es el número de referencia?",
"en": "Wich is the reference number?",
"de": "Wie lautet die Referenznummer?",
"cs": "Jaké je referenční číslo?",
"fr": "Quel est le numéro de référence ?",
"nl": "Wat is het referentienummer?",
"pt": "Qual é o número de referência?",
"pl": "Jaki jest numer referencyjny?",
"pt_BR": "Qual é o número de referência?",
"zh_Hans": "编号是多少?",
"uk": "Який номер посилання?"
},
"freeform": {
"key": "ref",
"addExtraTags": [
"noref="
]
},
"render": {
"ca": "El número de referència és {ref}",
"es": "El número de referencia es {ref}",
"en": "Reference number is {ref}",
"de": "Die Referenznummer lautet {ref}",
"cs": "Referenční číslo je {ref}",
"fr": "Le numéro de référence est {ref}",
"nl": "Het referentienummer is {ref}",
"pt": "O número de referência é {ref}",
"pt_BR": "O número de referência é {ref}",
"pl": "Numer referencyjny to {ref}",
"zh_Hans": "编号是{ref}",
"uk": "Номер посилання: {ref}"
},
"mappings": [
{
"if": "noref=yes",
"then": {
"en": "This feature has no reference number",
"nl": "Dit object heeft geen referentienummer"
}
}
]
},
{
"id": "public_notice_boards-direction",
"render": {
"en": "Faces {direction}",
"nl": "Wijst richting {direction}"
},
"question": {
"en": "Which direction does the board face? (Which direction are you looking if you stand with your back to the board?)",
"nl": "Welke richting wijst het bord uit? (In welke richting kijk je als je met je rug tegen het bord staat?)"
},
"freeform": {
"key": "direction",
"type": "direction"
}
}
],
"deletion": true,
"allowMove": {
"enableImproveAccuracy": true,
"enableRelocation": false
}
}

View file

@ -473,6 +473,10 @@
"if": "theme=postboxes",
"then": "./assets/layers/postboxes/postbox.svg"
},
{
"if": "theme=public_notice_boards",
"then": "./assets/themes/public_notice_boards/Board_free.svg"
},
{
"if": "theme=rainbow_crossings",
"then": "./assets/themes/rainbow_crossings/logo.svg"

View file

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="1000"
height="1000"
viewBox="0 0 937.50001 937.50001"
id="svg2"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs4" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
transform="matrix(1.3495594,0,0,1.3495594,-32.38564,-67.228127)">
<rect
style="fill:#7c7c7c;fill-opacity:1;stroke:#2c6823;stroke-width:101.48;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect7422-8-4"
width="478.92584"
height="229.2673"
x="130.75348"
y="202.67671" />
<rect
style="fill:#fffe73;fill-opacity:1;stroke:#ff0000;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect4221-7-5"
width="566.664"
height="314.814"
x="86.892349"
y="162.05467" />
<rect
style="fill:#7c7c7c;fill-opacity:1;stroke:#2c6823;stroke-width:14.1347;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect7422-8"
width="8.5147648"
height="250.17702"
x="211.88652"
y="487.24167" />
<rect
style="fill:#2c6823;fill-opacity:1;stroke:#2c6823;stroke-width:14.1347;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect7422-8-0"
width="8.5147657"
height="250.177"
x="531.74725"
y="486.88589" />
<rect
style="fill:#7c7c7c;fill-opacity:1;stroke:#2c6823;stroke-width:38.4146;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect7422-8-4-2"
width="571.94531"
height="27.509706"
x="85.360123"
y="115.14492" />
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;line-height:0%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
x="270.02792"
y="201.84302"
id="text5160"
transform="scale(1.3817739,0.72370741)"><tspan
id="tspan5162"
x="270.02792"
y="201.84302"
style="font-size:60.8106px;line-height:1.25;font-family:sans-serif;text-align:center;text-anchor:middle">Affichage libre</tspan></text>
<rect
style="fill:#cc8a8a;fill-opacity:1;stroke:#7e7e7e;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect7352"
width="181.15384"
height="206.07597"
x="111.26551"
y="188.47469" />
<rect
style="fill:#909098;fill-opacity:1;stroke:#7e7e7e;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect7352-5-4"
width="250.69118"
height="229.86662"
x="374.40759"
y="200.36998" />
<rect
style="fill:#c0afaf;fill-opacity:1;stroke:#7e7e7e;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect7352-5"
width="347.67044"
height="83.072723"
x="209.70787"
y="275.82953" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

View file

@ -0,0 +1,2 @@
SPDX-FileCopyrightText: Barnes38
SPDX-License-Identifier: CC-BY-SA-3.0

View file

@ -0,0 +1,12 @@
[
{
"path": "Board_free.svg",
"license": "CC-BY-SA-3.0",
"authors": [
"Barnes38"
],
"sources": [
"https://wiki.openstreetmap.org/wiki/File:Board_free.svg"
]
}
]

View file

@ -0,0 +1,118 @@
{
"id": "public_notice_boards",
"title": {
"en": "Public notice boards",
"nl": "Afficheborden voor vrij aanplakken"
},
"description": {
"en": "Boards for posters for neighbourhood advertising, local events, opinions, etc.",
"nl": "Borden voor affiches voor buurtadvertenties, lokale evenementen, opinies, ..."
},
"shortDescription": {
"en": "Boards for posters for neighbourhood advertising, local events, opinions, etc.",
"nl": "Borden voor affiches voor buurtadvertenties, lokale evenementen, opinies, ..."
},
"icon": "./assets/themes/public_notice_boards/Board_free.svg",
"credits": [
"M!dgard"
],
"#": "The layer public_notice_boards is added twice as suggested in Docs/Making_Your_Own_Theme.md",
"layers": [
{
"builtin": "public_notice_boards",
"override": {
"#": "Disable adding new points in this copy of the layer",
"=presets": []
}
},
{
"builtin": "public_notice_boards",
"override": {
"id": "advertising_boards",
"name": {
"en": "Private advertising boards and public notice boards",
"nl": "Privéreclameborden en afficheborden voor vrij aanplakken"
},
"description": {
"en": "This layer shows both private advertising boards and public notice boards. Some points in the map data are marked as advertising board but have not yet been classified whether they are private or public boards, so creating new points is only allowed when the map shows all of them.",
"nl": "Deze laag toont zowel privé-reclameborden als borden voor vrij aanplakken. Sommige punten in de kaartgegevens zijn gemarkeerd als reclamebord, maar zijn nog niet geclassificeerd als privé- of openbare borden. Daarom is het maken van nieuwe punten enkel toegestaan als ze allemaal getoond worden."
},
"minzoom": 18,
"source": {
"=osmTags": {
"and": [
"advertising=board"
]
}
},
"+tagRenderings": [
{
"id": "advertising_board-access",
"question": {
"en": "Who is allowed to update the advertisements?",
"nl": "Wie mag advertenties plaatsen op dit bord?"
},
"mappings": [
{
"if": "access=yes",
"then": {
"en": "This is a public notice board",
"nl": "Dit is een affichebord voor vrij aanplakken"
}
},
{
"if": "access=no",
"then": {
"en": "On this board only its owners can advertise",
"nl": "Op dit bord mogen enkel de eigenaars adverteren"
}
},
{
"if": "access=private",
"then": {
"en": "On this board only its owners can advertise",
"nl": "Op dit bord mogen enkel de eigenaars adverteren"
},
"hideInAnswer": true
}
]
}
],
"=pointRendering": [
{
"location": [
"point",
"centroid"
],
"anchor": "bottom",
"marker": [
{
"icon": {
"mappings": [
{
"if": "_referencing_ways=[\"way/-1\"]",
"then": "brick_wall_square"
}
]
}
},
{
"icon": {
"render": "./assets/themes/advertising/board.svg",
"mappings": [
{
"if": "access=yes",
"then": "./assets/themes/public_notice_boards/Board_free.svg"
}
]
}
}
]
}
]
}
}
],
"widenFactor": 0.1,
"maintainer": "M!dgard"
}

View file

@ -6273,6 +6273,34 @@
"render": "Bústia per llibres"
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Informació sobre teatres, concerts, …"
},
"1": {
"then": "Missatge d'organitzacions sense ànim de lucre"
},
"2": {
"then": "Per a expressar la teua opinió"
},
"3": {
"then": "Missatge religiós"
}
}
},
"public_notice_boards-operator": {
"question": "Qui opera aquest element?",
"render": "L'operador és {operator}"
},
"public_notice_boards-ref": {
"question": "Quin és el número de refèrencia?",
"render": "El número de referència és {ref}"
}
}
},
"questions": {
"tagRenderings": {
"check_date": {

View file

@ -6971,6 +6971,34 @@
"render": "Knihobudka"
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Informace týkající se divadla, koncertů, …"
},
"1": {
"then": "Zpráva od neziskových organizací"
},
"2": {
"then": "Pro vyjádření vašeho názoru"
},
"3": {
"then": "Náboženská zpráva"
}
}
},
"public_notice_boards-operator": {
"question": "Kdo tento objekt provozuje?",
"render": "Provozuje {operator}"
},
"public_notice_boards-ref": {
"question": "Jaké je referenční číslo?",
"render": "Referenční číslo je {ref}"
}
}
},
"questions": {
"tagRenderings": {
"check_date": {

View file

@ -8348,6 +8348,34 @@
"render": "Bücherschrank"
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Informationen über Theater, Konzerte, …"
},
"1": {
"then": "Nachricht von gemeinnützigen Organisationen"
},
"2": {
"then": "Um Ihre Meinung zu äußern"
},
"3": {
"then": "Religiöse Botschaft"
}
}
},
"public_notice_boards-operator": {
"question": "Wer betreibt dieses Objekt?",
"render": "Betrieben von {operator}"
},
"public_notice_boards-ref": {
"question": "Wie lautet die Referenznummer?",
"render": "Die Referenznummer lautet {ref}"
}
}
},
"questions": {
"tagRenderings": {
"brand": {

View file

@ -8382,6 +8382,56 @@
"render": "Bookcase"
}
},
"public_notice_boards": {
"description": "Boards for posters for neighbourhood advertising, local events, opinions, etc.",
"name": "Public notice boards",
"presets": {
"0": {
"description": "Small billboard for neighbourhood advertising, generally intended for pedestrians",
"title": "a public notice board"
}
},
"tagRenderings": {
"public_notice_boards-direction": {
"question": "Which direction does the board face? (Which direction are you looking if you stand with your back to the board?)",
"render": "Faces {direction}"
},
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Information related to theatre, concerts, …"
},
"1": {
"then": "Message from non-profit organizations"
},
"2": {
"then": "To express your opinion"
},
"3": {
"then": "Religious message"
}
},
"question": "What kind of message can be posted here?"
},
"public_notice_boards-network": {
"question": "Is this board part of a network of related boards? E.g. \"Public Notices &lt;city name&gt;\"",
"render": "Part of network \"{network}\""
},
"public_notice_boards-operator": {
"question": "Who operates this feature?",
"render": "Operated by {operator}"
},
"public_notice_boards-ref": {
"mappings": {
"0": {
"then": "This feature has no reference number"
}
},
"question": "Wich is the reference number?",
"render": "Reference number is {ref}"
}
}
},
"questions": {
"tagRenderings": {
"brand": {

View file

@ -8348,6 +8348,34 @@
"render": "Librero"
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Información relacionada con teatro, conciertos,…"
},
"1": {
"then": "Mensaje de organizaciones sin fines de lucro"
},
"2": {
"then": "Para expresar tu opinión"
},
"3": {
"then": "Mensaje religioso"
}
}
},
"public_notice_boards-operator": {
"question": "¿Quién opera este elemento?",
"render": "Operado por {operator}"
},
"public_notice_boards-ref": {
"question": "¿Cuál es el número de referencia?",
"render": "El número de referencia es {ref}"
}
}
},
"questions": {
"tagRenderings": {
"brand": {

View file

@ -350,6 +350,17 @@
}
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Antzerkiari, kontzertuei eta abarri buruzko informazioa"
}
}
}
}
},
"unit": {
"units": {
"3": {

View file

@ -5053,6 +5053,34 @@
"render": "Microbibliothèque"
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Informations liées au théâtre, à des concerts, …"
},
"1": {
"then": "Message d'organisations sans but lucratif"
},
"2": {
"then": "Expression d'opinion"
},
"3": {
"then": "Message religieux"
}
}
},
"public_notice_boards-operator": {
"question": "Qui exploite ce dispositif ?",
"render": "Exploité par {operator}"
},
"public_notice_boards-ref": {
"question": "Quel est le numéro de référence ?",
"render": "Le numéro de référence est {ref}"
}
}
},
"questions": {
"tagRenderings": {
"denominations-coins": {

View file

@ -483,5 +483,23 @@
}
}
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "מידע הקשור לתיאטרון, קונצרטים,…"
},
"3": {
"then": "מסר דתי"
}
}
},
"public_notice_boards-operator": {
"question": "מי מפעיל את התכונה הזו?",
"render": "מופעל על ידי {operator}"
}
}
}
}

View file

@ -1774,9 +1774,6 @@
},
"title": {
"mappings": {
"0": {
"then": "{name}"
},
"1": {
"then": "Vogelkijkhut {name}"
},
@ -2966,7 +2963,7 @@
"then": "Deze klok heeft vier klokken"
}
},
"question": "Hoeveel klokken heeft deze klok?",
"question": "Hoeveel zijden heeft deze klok?",
"render": "Deze klok heeft {faces} klokken"
},
"hygrometer": {
@ -5865,11 +5862,6 @@
}
},
"title": {
"mappings": {
"0": {
"then": "{name}"
}
},
"render": "Natuurgebied"
}
},
@ -6401,21 +6393,6 @@
"render": "Picknicktafel"
}
},
"play_forest": {
"description": "Een speelbos is een vrij toegankelijke zone in een bos",
"name": "Speelbossen",
"title": {
"mappings": {
"0": {
"then": "{name}"
},
"1": {
"then": "Speelbos {name}"
}
},
"render": "Speelbos"
}
},
"playground": {
"deletion": {
"nonDeleteMappings": {
@ -6865,6 +6842,56 @@
"render": "Boekenruilkast"
}
},
"public_notice_boards": {
"description": "Borden voor affiches voor buurtadvertenties, lokale evenementen, opinies, ...",
"name": "Afficheborden voor vrij aanplakken",
"presets": {
"0": {
"description": "Een klein uithangbord voor buurtadvertenties, meestal gericht op voetgangers",
"title": "een affichebord voor vrij aanplakken"
}
},
"tagRenderings": {
"public_notice_boards-direction": {
"question": "Welke richting wijst het bord uit? (In welke richting kijk je als je met je rug tegen het bord staat?)",
"render": "Wijst richting {direction}"
},
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Informatie over cultuurevenementen zoals theaters, optredens, …"
},
"1": {
"then": "Boodschap van NGO-organisaties"
},
"2": {
"then": "Om je mening te geven"
},
"3": {
"then": "Religieuze boodschap"
}
},
"question": "Wat voor boodschap mag hier aangeplakt worden?"
},
"public_notice_boards-network": {
"question": "Is dit bord deel van een netwerk van gerelateerde borden? Bv. \"Vrij aanplakken &lt;naam van stad&gt;\"",
"render": "Onderdeel van netwerk \"{network}\""
},
"public_notice_boards-operator": {
"question": "Wie baat dit object uit?",
"render": "Uitgebaat door {operator}"
},
"public_notice_boards-ref": {
"mappings": {
"0": {
"then": "Dit object heeft geen referentienummer"
}
},
"question": "Wat is het referentienummer?",
"render": "Het referentienummer is {ref}"
}
}
},
"questions": {
"tagRenderings": {
"check_date": {
@ -7970,9 +7997,6 @@
},
"title": {
"mappings": {
"0": {
"then": "{name}"
},
"1": {
"then": "Voetpad"
},
@ -9992,25 +10016,13 @@
}
},
"village_green": {
"description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)",
"name": "Speelweide",
"title": {
"mappings": {
"0": {
"then": "{name}"
}
},
"render": "Speelweide"
}
"description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)"
},
"visitor_information_centre": {
"description": "Een bezoekerscentrum biedt informatie over een specifieke attractie of bezienswaardigheid waar het is gevestigd.",
"name": "Bezoekerscentrum",
"title": {
"mappings": {
"0": {
"then": "{name:nl}"
},
"1": {
"then": "{name}"
}
@ -10240,4 +10252,4 @@
"render": "windturbine"
}
}
}
}

View file

@ -3094,6 +3094,34 @@
}
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Informacje dotyczące teatru, koncertów, …"
},
"1": {
"then": "Wiadomość od organizacji non-profit"
},
"2": {
"then": "Żeby wyrazić swoją opinię"
},
"3": {
"then": "Przekaz religijny"
}
}
},
"public_notice_boards-operator": {
"question": "Kto obsługuje ten obiekt?",
"render": "Obsługiwane przez {operator}"
},
"public_notice_boards-ref": {
"question": "Jaki jest numer referencyjny?",
"render": "Numer referencyjny to {ref}"
}
}
},
"questions": {
"tagRenderings": {
"check_date": {

View file

@ -1511,6 +1511,34 @@
}
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Informações relacionadas com teatro, concertos, ..."
},
"1": {
"then": "Mensagem de organizações sem fins lucrativos"
},
"2": {
"then": "Para expressar sua opinião"
},
"3": {
"then": "Mensagem religiosa"
}
}
},
"public_notice_boards-operator": {
"question": "Quem opera esse elemento?",
"render": "Operado por {operator}"
},
"public_notice_boards-ref": {
"question": "Qual é o número de referência?",
"render": "O número de referência é {ref}"
}
}
},
"questions": {
"tagRenderings": {
"description": {

View file

@ -1505,6 +1505,34 @@
"render": "Bicicleta fantasma"
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Informações relacionadas a teatro, concertos, …"
},
"1": {
"then": "Mensagens de organizações sem fins lucrativos"
},
"2": {
"then": "Para expressar sua opinião"
},
"3": {
"then": "Mensagem religiosa"
}
}
},
"public_notice_boards-operator": {
"question": "Quem opera este recurso?",
"render": "Operado por {operator}"
},
"public_notice_boards-ref": {
"question": "Qual é o número de referência?",
"render": "O número de referência é {ref}"
}
}
},
"questions": {
"tagRenderings": {
"description": {

View file

@ -1366,6 +1366,34 @@
}
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "Інформація, пов'язана з театром, концертами, …"
},
"1": {
"then": "Повідомлення від неприбуткових організацій"
},
"2": {
"then": "Щоб висловити свою думку"
},
"3": {
"then": "Релігійне послання"
}
}
},
"public_notice_boards-operator": {
"question": "Хто керує цим об'єктом?",
"render": "Управляється {operator}"
},
"public_notice_boards-ref": {
"question": "Який номер посилання?",
"render": "Номер посилання: {ref}"
}
}
},
"questions": {
"tagRenderings": {
"brand": {

View file

@ -601,6 +601,34 @@
}
}
},
"public_notice_boards": {
"tagRenderings": {
"public_notice_boards-message_type": {
"mappings": {
"0": {
"then": "与戏剧、音乐会等相关的信息……"
},
"1": {
"then": "来自非营利组织的消息"
},
"2": {
"then": "表达您的意见"
},
"3": {
"then": "宗教讯息"
}
}
},
"public_notice_boards-operator": {
"question": "谁操作此物件?",
"render": "由{operator}运营"
},
"public_notice_boards-ref": {
"question": "编号是多少?",
"render": "编号是{ref}"
}
}
},
"questions": {
"tagRenderings": {
"dog-access": {

View file

@ -1164,6 +1164,35 @@
"shortDescription": "A map showing postboxes and post offices",
"title": "Postbox and Post Office Map"
},
"public_notice_boards": {
"description": "Boards for posters for neighbourhood advertising, local events, opinions, etc.",
"layers": {
"1": {
"override": {
"+tagRenderings": {
"0": {
"mappings": {
"0": {
"then": "This is a public notice board"
},
"1": {
"then": "On this board only its owners can advertise"
},
"2": {
"then": "On this board only its owners can advertise"
}
},
"question": "Who is allowed to update the advertisements?"
}
},
"description": "This layer shows both private advertising boards and public notice boards. Some points in the map data are marked as advertising board but have not yet been classified whether they are private or public boards, so creating new points is only allowed when the map shows all of them.",
"name": "Private advertising boards and public notice boards"
}
}
},
"shortDescription": "Boards for posters for neighbourhood advertising, local events, opinions, etc.",
"title": "Public notice boards"
},
"rainbow_crossings": {
"description": "On this map, rainbow-painted pedestrian crossings are shown and can be easily added",
"title": "Rainbow pedestrian crossings"
@ -1415,4 +1444,4 @@
"shortDescription": "A map with waste baskets",
"title": "Waste Baskets"
}
}
}

View file

@ -653,37 +653,8 @@
"building type": {
"question": "Wat voor soort gebouw is dit?"
},
"grb-fixme": {
"mappings": {
"0": {
"then": "Geen fixme"
}
},
"question": "Wat zegt de fixme?",
"render": "De fixme is <b>{fixme}</b>"
},
"grb-housenumber": {
"mappings": {
"0": {
"then": "Geen huisnummer"
}
},
"question": "Wat is het huisnummer?",
"render": "Het huisnummer is <b>{addr:housenumber}</b>"
},
"grb-min-level": {
"question": "Hoeveel verdiepingen ontbreken?",
"render": "Dit gebouw begint maar op de {building:min_level} verdieping"
},
"grb-reference": {
"render": "Werd geïmporteerd vanuit GRB, het referentienummer is {source:geometry:ref}"
},
"grb-street": {
"question": "Wat is de straat?",
"render": "De straat is <b>{addr:street}</b>"
},
"grb-unit": {
"render": "De wooneenheid-aanduiding is <b>{addr:unit}</b> "
}
}
},
@ -700,35 +671,8 @@
}
}
}
},
"5": {
"override": {
"tagRenderings+": {
"0": {
"mappings": {
"0": {
"then": "Geen omliggend OSM-gebouw gevonden"
}
}
},
"3": {
"mappings": {
"0": {
"then": "Geen omliggend OSM-gebouw gevonden. Een omliggend gebouw is nodig om dit punt als adres punt toe te voegen. <div class=subtle>Importeer eerst de gebouwen. Vernieuw dan de pagina om losse adressen toe te voegen</div>"
}
},
"render": {
"special": {
"text": "Voeg dit adres als een nieuw adrespunt toe"
}
}
}
}
}
}
},
"shortDescription": "Grb import helper tool",
"title": "GRB import helper"
}
},
"guideposts": {
"description": "Wegwijzers (ook wel handwijzer genoemd) zijn vaak te vinden langs officiële wandel-, fiets-, ski- of paardrijroutes om de richtingen naar verschillende bestemmingen aan te geven. Vaak zijn ze vernoemd naar een regio of plaats en geven ze de hoogte aan.\n\nDe positie van een wegwijzer kan door een wandelaar/fietser/renner/skiër worden gebruikt als bevestiging van de huidige positie, vooral als ze een gedrukte kaart zonder GPS-ontvanger gebruiken. ",
@ -1160,11 +1104,6 @@
},
"title": "Dierenartsen, hondenloopzones en andere huisdiervriendelijke plaatsen"
},
"play_forests": {
"description": "Een speelbos is een zone in een bos die vrij toegankelijk is voor spelende kinderen. Deze wordt in bossen van het Agentschap Natuur en bos altijd aangeduid met het overeenkomstige bord.",
"shortDescription": "Deze kaart toont speelbossen",
"title": "Speelbossen"
},
"playgrounds": {
"description": "Op deze kaart vind je speeltuinen en kan je zelf meer informatie en foto's toevoegen",
"shortDescription": "Een kaart met speeltuinen",
@ -1225,6 +1164,35 @@
"shortDescription": "Een kaart die brievenbussen en postkantoren toont",
"title": "Brievenbussen en postkantoren"
},
"public_notice_boards": {
"description": "Borden voor affiches voor buurtadvertenties, lokale evenementen, opinies, ...",
"layers": {
"1": {
"override": {
"+tagRenderings": {
"0": {
"mappings": {
"0": {
"then": "Dit is een affichebord voor vrij aanplakken"
},
"1": {
"then": "Op dit bord mogen enkel de eigenaars adverteren"
},
"2": {
"then": "Op dit bord mogen enkel de eigenaars adverteren"
}
},
"question": "Wie mag advertenties plaatsen op dit bord?"
}
},
"description": "Deze laag toont zowel privé-reclameborden als borden voor vrij aanplakken. Sommige punten in de kaartgegevens zijn gemarkeerd als reclamebord, maar zijn nog niet geclassificeerd als privé- of openbare borden. Daarom is het maken van nieuwe punten enkel toegestaan als ze allemaal getoond worden.",
"name": "Privéreclameborden en afficheborden voor vrij aanplakken"
}
}
},
"shortDescription": "Borden voor affiches voor buurtadvertenties, lokale evenementen, opinies, ...",
"title": "Afficheborden voor vrij aanplakken"
},
"rainbow_crossings": {
"description": "Op deze kaart vind je regenboogzebrapaden en kan je er toevoegen",
"title": "Regenboogzebrapaden"
@ -1238,47 +1206,6 @@
"description": "Alles om te skiën",
"title": "Skipistes en kabelbanen"
},
"speelplekken": {
"description": "<h3>Welkom bij de Groendoener!</h3>De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan <b>200 grote en kleine speelplekken</b> liggen er in parken, in bossen en op pleintjes te wachten om ontdekt te worden. De verschillende speelplekken werden getest én goedgekeurd door kinder- en jongerenreporters uit de Zuidrand. Met leuke challenges dagen de reporters jou uit om ook op ontdekking te gaan. Klik op een speelplek op de kaart, bekijk het filmpje en ga op verkenning!<br/><br/>Het project groendoener kadert binnen het strategisch project <a href='https://www.provincieantwerpen.be/aanbod/dlm/samenwerkingsverbanden/zuidrand/projecten/strategisch-project-beleefbare-open-ruimte.html' target='_blank'>Beleefbare Open Ruimte in de Antwerpse Zuidrand</a> en is een samenwerking tussen het departement Leefmilieu van provincie Antwerpen, Sportpret vzw, een OpenStreetMap-België Consultent en Createlli vzw. Het project kwam tot stand met steun van Departement Omgeving van de Vlaamse Overheid.<br/><img class='w-full md:w-1/2' src='./assets/themes/speelplekken/provincie_antwerpen.jpg'/><img class='w-full md:w-1/2' src='./assets/themes/speelplekken/Departement_Omgeving_Vlaanderen.png'/>",
"layers": {
"6": {
"name": "Wandelroutes van provincie Antwerpen",
"tagRenderings": {
"walk-description": {
"render": "<h3>Korte beschrijving:</h3>{description}"
},
"walk-length": {
"render": "Deze wandeling is <b>{_length:km}km</b> lang"
},
"walk-operator": {
"question": "Wie beheert deze wandeling en plaatst dus de signalisatiebordjes?"
},
"walk-operator-email": {
"question": "Naar wie kan men emailen bij problemen rond signalisatie?",
"render": "Bij problemen met signalisatie kan men emailen naar <a href='mailto:{operator:email}'>{operator:email}</a>"
},
"walk-type": {
"mappings": {
"0": {
"then": "Dit is een internationale wandelroute"
},
"1": {
"then": "Dit is een nationale wandelroute"
},
"2": {
"then": "Dit is een regionale wandelroute"
},
"3": {
"then": "Dit is een lokale wandelroute"
}
}
}
}
}
},
"shortDescription": "Speelplekken in de Antwerpse Zuidrand",
"title": "Welkom bij de groendoener!"
},
"sport_pitches": {
"description": "Een sportveld is een ingerichte plaats met infrastructuur om een sport te beoefenen",
"shortDescription": "Deze kaart toont sportvelden",
@ -1399,10 +1326,6 @@
},
"title": "Straatverlichting"
},
"street_lighting_assen": {
"description": "Op deze kaart vind je alles over straatlantaarns + een dataset van Assen",
"title": "Straatverlichting - Assen"
},
"surveillance": {
"description": "Op deze open kaart kan je bewakingscamera's vinden.",
"shortDescription": "Bewakingscameras en dergelijke",
@ -1516,13 +1439,9 @@
"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 afvalbakken bij jou in de buurt. Als er een afvalbak ontbreekt op deze kaart, kun je deze zelf toevoegen",
"shortDescription": "Een kaart met vuilnisbakken",
"title": "Vuilnisbakken"
}
}
}

View file

@ -76,10 +76,18 @@ export class GeoOperations {
}
/**
* Returns [lon,lat] coordinates
* Returns [lon,lat] coordinates.
* @param feature
*
* GeoOperations.centerpointCoordinates(undefined) // => undefined
*/
static centerpointCoordinates(feature: undefined | null): undefined ;
static centerpointCoordinates(feature: AllGeoJSON | GeoJSON | undefined): [number, number] | undefined;
static centerpointCoordinates(feature: NonNullable< AllGeoJSON> | NonNullable<GeoJSON>): NonNullable<[number, number]>;
static centerpointCoordinates(feature: AllGeoJSON | GeoJSON): [number, number] {
if(feature === undefined || feature === null){
return undefined
}
return <[number, number]>turf.center(<any>feature).geometry.coordinates
}

View file

@ -170,6 +170,9 @@ export class ImageUploadManager {
}
if (location === undefined || location?.some((l) => l === undefined)) {
feature ??= this._indexedFeatures.featuresById.data.get(featureId)
if(feature === undefined){
throw "ImageUploadManager: no feature given and no feature found in the indexedFeature. Cannot upload this image"
}
location = GeoOperations.centerpointCoordinates(feature)
}
try {

View file

@ -2,7 +2,7 @@ import ChangeTagAction from "./ChangeTagAction"
import { Tag } from "../../Tags/Tag"
import OsmChangeAction from "./OsmChangeAction"
import { ChangeDescription } from "./ChangeDescription"
import { Store, UIEventSource } from "../../UIEventSource"
import { UIEventSource } from "../../UIEventSource"
export default class LinkImageAction extends OsmChangeAction {
private readonly _proposedKey: "image" | "mapillary" | "wiki_commons" | string

View file

@ -59,12 +59,12 @@
type: "Feature",
geometry: {
type: "Point",
coordinates: [p4c.coordinates.lng, p4c.coordinates.lat],
coordinates: [p4c.coordinates.lng, p4c.coordinates.lat]
},
properties: {
id: p4c.pictureUrl,
rotation: p4c.direction,
},
rotation: p4c.direction
}
}
)
)
@ -76,14 +76,14 @@
type: "Feature",
geometry: {
type: "Point",
coordinates: [s.coordinates.lng, s.coordinates.lat],
coordinates: [s.coordinates.lng, s.coordinates.lat]
},
properties: {
id: s.pictureUrl,
selected: "yes",
rotation: s.direction,
},
},
rotation: s.direction
}
}
]
})
@ -108,7 +108,7 @@
rotation: state.mapProperties.rotation,
pitch: state.mapProperties.pitch,
zoom: new UIEventSource<number>(16),
location: new UIEventSource({ lon, lat }),
location: new UIEventSource({ lon, lat })
})
const geocodedImageLayer = new LayerConfig(<LayerConfigJson>geocoded_image)
@ -118,7 +118,7 @@
zoomToFeatures: true,
onClick: (feature) => {
highlighted.set(feature.properties.id)
},
}
})
ShowDataLayer.showMultipleLayers(map, new StaticFeatureSource([feature]), state.theme.layers)
@ -141,8 +141,14 @@
layer: geocodedImageLayer,
onClick: (feature) => {
highlighted.set(feature.properties.id)
},
}
})
onDestroy(tags.addCallbackAndRunD(tags => {
if (tags.id.startsWith("node/") || tags.id.startsWith("way/") || tags.id.startsWith("relation/")) {
return
}
linkable = false
}))
</script>
<div class="flex flex-col">

View file

@ -1,18 +1,13 @@
import { Store, UIEventSource } from "../Logic/UIEventSource"
import BaseUIElement from "./BaseUIElement"
import ThemeConfig from "../Models/ThemeConfig/ThemeConfig"
import {
FeatureSource,
IndexedFeatureSource,
WritableFeatureSource,
} from "../Logic/FeatureSource/FeatureSource"
import { FeatureSource, IndexedFeatureSource, WritableFeatureSource } from "../Logic/FeatureSource/FeatureSource"
import { OsmConnection } from "../Logic/Osm/OsmConnection"
import { Changes } from "../Logic/Osm/Changes"
import { ExportableMap, MapProperties } from "../Models/MapProperties"
import LayerState from "../Logic/State/LayerState"
import { Feature, Geometry, Point, Polygon } from "geojson"
import FullNodeDatabaseSource from "../Logic/FeatureSource/TiledFeatureSource/FullNodeDatabaseSource"
import { MangroveIdentity } from "../Logic/Web/MangroveReviews"
import { GeoIndexedStoreForLayer } from "../Logic/FeatureSource/Actors/GeoIndexedStore"
import LayerConfig from "../Models/ThemeConfig/LayerConfig"
import FeatureSwitchState from "../Logic/State/FeatureSwitchState"
@ -22,14 +17,12 @@ import { ImageUploadManager } from "../Logic/ImageProviders/ImageUploadManager"
import FavouritesFeatureSource from "../Logic/FeatureSource/Sources/FavouritesFeatureSource"
import { ProvidedImage } from "../Logic/ImageProviders/ImageProvider"
import GeoLocationHandler from "../Logic/Actors/GeoLocationHandler"
import { SummaryTileSourceRewriter } from "../Logic/FeatureSource/TiledFeatureSource/SummaryTileSource"
import ThemeSource from "../Logic/FeatureSource/Sources/ThemeSource"
import { Map as MlMap } from "maplibre-gl"
import ShowDataLayer from "./Map/ShowDataLayer"
import { CombinedFetcher } from "../Logic/Web/NearbyImagesSearch"
import SearchState from "../Logic/State/SearchState"
import UserRelatedState, { OptionallySyncedHistory } from "../Logic/State/UserRelatedState"
import GeocodeResult from "./Search/GeocodeResult.svelte"
import UserRelatedState from "../Logic/State/UserRelatedState"
import FeaturePropertiesStore from "../Logic/FeatureSource/Actors/FeaturePropertiesStore"
/**

View file

@ -112,7 +112,7 @@ class NearbyImageVis implements SpecialVisualization {
{
name: "readonly",
required: false,
doc: "If 'readonly', will not show the 'link'-button",
doc: "If 'readonly' or 'yes', will not show the 'link'-button",
},
]
docs =
@ -128,7 +128,7 @@ class NearbyImageVis implements SpecialVisualization {
layer: LayerConfig
): SvelteUIElement {
const isOpen = args[0] === "open"
const readonly = args[1] === "readonly"
const readonly = args[1] === "readonly" || args[1] === "yes"
const [lon, lat] = GeoOperations.centerpointCoordinates(feature)
return new SvelteUIElement(isOpen ? NearbyImages : NearbyImagesCollapsed, {
tags,
@ -744,13 +744,14 @@ export default class SpecialVisualizations {
required: false,
},
],
constr: (state, tags, args) => {
constr: (state, tags, args, feature) => {
const targetKey = args[0] === "" ? undefined : args[0]
const noBlur = args[3]?.toLowerCase()?.trim()
return new SvelteUIElement(UploadImage, {
state,
tags,
targetKey,
feature,
labelText: args[1],
image: args[2],
noBlur: noBlur === "true" || noBlur === "yes",