"
}
}
}
@@ -2423,30 +2426,6 @@
"1": {
"then": "Schuko stekker zonder aardingspin (CEE7/4 type F)"
},
- "2": {
- "then": "Europese stekker met aardingspin (CEE7/4 type E)"
- },
- "3": {
- "then": "Europese stekker met aardingspin (CEE7/4 type E)"
- },
- "4": {
- "then": "Chademo"
- },
- "5": {
- "then": "Chademo"
- },
- "6": {
- "then": "Type 1 met kabel (J1772)"
- },
- "7": {
- "then": "Type 1 met kabel (J1772)"
- },
- "8": {
- "then": "Type 1 zonder kabel (J1772)"
- },
- "9": {
- "then": "Type 1 zonder kabel (J1772)"
- },
"10": {
"then": "Type 1 CCS (ook gekend als Type 1 Combo)"
},
@@ -2477,6 +2456,9 @@
"19": {
"then": "Type 2 met kabel (J1772)"
},
+ "2": {
+ "then": "Europese stekker met aardingspin (CEE7/4 type E)"
+ },
"20": {
"then": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)"
},
@@ -2507,6 +2489,9 @@
"29": {
"then": "Bosch Active Connect met 3 pinnen aan een kabel"
},
+ "3": {
+ "then": "Europese stekker met aardingspin (CEE7/4 type E)"
+ },
"30": {
"then": "Bosch Active Connect met 5 pinnen aan een kabel"
},
@@ -2537,11 +2522,29 @@
"39": {
"then": "AS3112 (Australische 3-pin)"
},
+ "4": {
+ "then": "Chademo"
+ },
"40": {
"then": "NEMA 5-20 (VS 3-pin)"
},
"41": {
"then": "NEMA 5-20 (VS 3-pin)"
+ },
+ "5": {
+ "then": "Chademo"
+ },
+ "6": {
+ "then": "Type 1 met kabel (J1772)"
+ },
+ "7": {
+ "then": "Type 1 met kabel (J1772)"
+ },
+ "8": {
+ "then": "Type 1 zonder kabel (J1772)"
+ },
+ "9": {
+ "then": "Type 1 zonder kabel (J1772)"
}
},
"question": "Welke aansluitingen zijn hier beschikbaar?"
@@ -2726,30 +2729,6 @@
"1": {
"2": "Europese stekker met aardingspin (CEE7/4 type E)"
},
- "2": {
- "2": "Chademo"
- },
- "3": {
- "2": "Type 1 met kabel (J1772)"
- },
- "4": {
- "2": "Type 1 zonder kabel (J1772)"
- },
- "5": {
- "2": "Type 1 CCS (ook gekend als Type 1 Combo)"
- },
- "6": {
- "2": "Tesla Supercharger"
- },
- "7": {
- "2": "Type 2 (mennekes)"
- },
- "8": {
- "2": "Type 2 CCS (mennekes)"
- },
- "9": {
- "2": "Type 2 met kabel (J1772)"
- },
"10": {
"2": "Tesla Supercharger CCS (een type2 CCS met Tesla-logo)"
},
@@ -2780,8 +2759,32 @@
"19": {
"2": "AS3112 (Australische 3-pin)"
},
+ "2": {
+ "2": "Chademo"
+ },
"20": {
"2": "NEMA 5-20 (VS 3-pin)"
+ },
+ "3": {
+ "2": "Type 1 met kabel (J1772)"
+ },
+ "4": {
+ "2": "Type 1 zonder kabel (J1772)"
+ },
+ "5": {
+ "2": "Type 1 CCS (ook gekend als Type 1 Combo)"
+ },
+ "6": {
+ "2": "Tesla Supercharger"
+ },
+ "7": {
+ "2": "Type 2 (mennekes)"
+ },
+ "8": {
+ "2": "Type 2 CCS (mennekes)"
+ },
+ "9": {
+ "2": "Type 2 met kabel (J1772)"
}
}
}
@@ -3545,6 +3548,21 @@
"1": {
"then": "Deze oversteekplaats heeft een zebramarkering"
},
+ "10": {
+ "then": "Deze oversteekplaats heeft een zebramarkering in afwisselende kleuren"
+ },
+ "11": {
+ "then": "Deze oversteekplaats heeft een dubbele zebramarkering"
+ },
+ "12": {
+ "then": "Deze oversteekplaats heeft pictogrammen op de weg"
+ },
+ "13": {
+ "then": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met strepen die ze verbinden, met een onderbreking van elke streep"
+ },
+ "14": {
+ "then": "Deze oversteekplaats heeft dubbele lijnen aan beide kanten van de oversteekplaats"
+ },
"2": {
"then": "Deze oversteekplaats heeft markeringen van een onbekend type"
},
@@ -3568,21 +3586,6 @@
},
"9": {
"then": "Deze oversteekplaats heeft zebramarkeringen met een onderbreking van elke streep"
- },
- "10": {
- "then": "Deze oversteekplaats heeft een zebramarkering in afwisselende kleuren"
- },
- "11": {
- "then": "Deze oversteekplaats heeft een dubbele zebramarkering"
- },
- "12": {
- "then": "Deze oversteekplaats heeft pictogrammen op de weg"
- },
- "13": {
- "then": "Deze oversteekplaats heeft lijnen aan beide kanten van de oversteekplaats, met strepen die ze verbinden, met een onderbreking van elke streep"
- },
- "14": {
- "then": "Deze oversteekplaats heeft dubbele lijnen aan beide kanten van de oversteekplaats"
}
},
"question": "Wat voor markering heeft deze oversteekplaats?",
@@ -3672,6 +3675,15 @@
"1": {
"then": "Dit fietspad is geplaveid"
},
+ "10": {
+ "then": "Dit fietspad is gemaakt van fijn grind"
+ },
+ "11": {
+ "then": "Dit fietspad is gemaakt van kiezelsteentjes"
+ },
+ "12": {
+ "then": "Dit fietspad is gemaakt van aarde"
+ },
"2": {
"then": "Dit fietspad is gemaakt van asfalt"
},
@@ -3695,15 +3707,6 @@
},
"9": {
"then": "Dit fietspad is gemaakt van grind"
- },
- "10": {
- "then": "Dit fietspad is gemaakt van fijn grind"
- },
- "11": {
- "then": "Dit fietspad is gemaakt van kiezelsteentjes"
- },
- "12": {
- "then": "Dit fietspad is gemaakt van aarde"
}
},
"question": "Waaruit is het oppervlak van het fietspad van gemaakt?",
@@ -3752,6 +3755,15 @@
"1": {
"then": "Dit fietspad is geplaveid"
},
+ "10": {
+ "then": "Dit fietspad is gemaakt van fijn grind"
+ },
+ "11": {
+ "then": "Dit fietspad is gemaakt van kiezelsteentjes"
+ },
+ "12": {
+ "then": "Dit fietspad is gemaakt van aarde"
+ },
"2": {
"then": "Dit fietspad is gemaakt van asfalt"
},
@@ -3775,15 +3787,6 @@
},
"9": {
"then": "Dit fietspad is gemaakt van grind"
- },
- "10": {
- "then": "Dit fietspad is gemaakt van fijn grind"
- },
- "11": {
- "then": "Dit fietspad is gemaakt van kiezelsteentjes"
- },
- "12": {
- "then": "Dit fietspad is gemaakt van aarde"
}
},
"question": "Waaruit is het oppervlak van de straat gemaakt?",
@@ -4800,6 +4803,19 @@
}
}
},
+ "10": {
+ "options": {
+ "0": {
+ "question": "Geen voorkeur voor honden"
+ },
+ "1": {
+ "question": "Honden toegelaten"
+ },
+ "2": {
+ "question": "Geen honden toegelaten"
+ }
+ }
+ },
"2": {
"options": {
"0": {
@@ -4856,19 +4872,6 @@
"question": "Gratis toegankelijk"
}
}
- },
- "10": {
- "options": {
- "0": {
- "question": "Geen voorkeur voor honden"
- },
- "1": {
- "question": "Honden toegelaten"
- },
- "2": {
- "question": "Geen honden toegelaten"
- }
- }
}
}
},
@@ -5062,30 +5065,6 @@
"1": {
"then": "Frituur"
},
- "2": {
- "then": "Pastazaak"
- },
- "3": {
- "then": "Kebabzaak"
- },
- "4": {
- "then": "Broodjeszaak"
- },
- "5": {
- "then": "Hamburgerrestaurant"
- },
- "6": {
- "then": "Sushirestaurant"
- },
- "7": {
- "then": "Koffiezaak"
- },
- "8": {
- "then": "Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)"
- },
- "9": {
- "then": "Frans restaurant"
- },
"10": {
"then": "Chinees restaurant"
},
@@ -5112,6 +5091,30 @@
},
"18": {
"then": "Dit is een vis- en zeerestaurant"
+ },
+ "2": {
+ "then": "Pastazaak"
+ },
+ "3": {
+ "then": "Kebabzaak"
+ },
+ "4": {
+ "then": "Broodjeszaak"
+ },
+ "5": {
+ "then": "Hamburgerrestaurant"
+ },
+ "6": {
+ "then": "Sushirestaurant"
+ },
+ "7": {
+ "then": "Koffiezaak"
+ },
+ "8": {
+ "then": "Italiaans restaurant (dat meer dan enkel pasta of pizza verkoopt)"
+ },
+ "9": {
+ "then": "Frans restaurant"
}
},
"question": "Welk soort gerechten worden hier geserveerd?",
@@ -6196,6 +6199,12 @@
"0": {
"then": "Dit is een standbeeld"
},
+ "10": {
+ "then": "Dit is een kruis"
+ },
+ "12": {
+ "then": "Dit is een historische tank, permanent in de publieke ruimte geplaatst als gedenkteken"
+ },
"2": {
"then": "Dit is een zitbank die ook als herdenking dienst doet"
},
@@ -6207,12 +6216,6 @@
},
"8": {
"then": "Dit is een sculptuur"
- },
- "10": {
- "then": "Dit is een kruis"
- },
- "12": {
- "then": "Dit is een historische tank, permanent in de publieke ruimte geplaatst als gedenkteken"
}
}
},
@@ -6340,6 +6343,11 @@
}
},
"title": {
+ "mappings": {
+ "0": {
+ "then": "{name}"
+ }
+ },
"render": "Natuurgebied"
}
},
@@ -6359,6 +6367,27 @@
}
}
},
+ "10": {
+ "options": {
+ "0": {
+ "question": "Laatst bewerkt door bijdrager {search}"
+ }
+ }
+ },
+ "12": {
+ "options": {
+ "0": {
+ "question": "Aangemaakt voor {search}"
+ }
+ }
+ },
+ "13": {
+ "options": {
+ "0": {
+ "question": "Aangemaakt na {search}"
+ }
+ }
+ },
"2": {
"options": {
"0": {
@@ -6399,27 +6428,6 @@
"question": "Niet geopend door bijdrager {search}"
}
}
- },
- "10": {
- "options": {
- "0": {
- "question": "Laatst bewerkt door bijdrager {search}"
- }
- }
- },
- "12": {
- "options": {
- "0": {
- "question": "Aangemaakt voor {search}"
- }
- }
- },
- "13": {
- "options": {
- "0": {
- "question": "Aangemaakt na {search}"
- }
- }
}
},
"name": "OpenStreetMap Notes",
@@ -6697,6 +6705,18 @@
"1": {
"then": "Dit is een normale parkeerplek."
},
+ "10": {
+ "then": "Deze parkeerplek is gereserveerd voor personeel."
+ },
+ "11": {
+ "then": "Deze parkeerplek is gereserveerd voor taxis."
+ },
+ "12": {
+ "then": "Deze parkeerplek is gereserveerd voor voertuigen met een aanhanger."
+ },
+ "13": {
+ "then": "Deze parkeerplek is gereserveerd voor autodelen."
+ },
"2": {
"then": "Dit is een gehandicaptenparkeerplaats."
},
@@ -6720,18 +6740,6 @@
},
"9": {
"then": "Deze parkeerplek is gereserveerd voor ouders met kinderen."
- },
- "10": {
- "then": "Deze parkeerplek is gereserveerd voor personeel."
- },
- "11": {
- "then": "Deze parkeerplek is gereserveerd voor taxis."
- },
- "12": {
- "then": "Deze parkeerplek is gereserveerd voor voertuigen met een aanhanger."
- },
- "13": {
- "then": "Deze parkeerplek is gereserveerd voor autodelen."
}
},
"question": "Wat voor parkeerplek is dit?"
@@ -6871,6 +6879,21 @@
"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": {
@@ -6985,6 +7008,9 @@
"1": {
"then": "De ondergrond is zand"
},
+ "10": {
+ "then": "De ondergrond bestaat uit kleine grindsteentjes (steentjes kleiner dan 2 cm)"
+ },
"2": {
"then": "De ondergrond bestaat uit houtsnippers"
},
@@ -7008,9 +7034,6 @@
},
"9": {
"then": "De ondergrond bestaat uit rubber, zoals rubberen tegels, rubber snippers of een groot rubberen oppervlak"
- },
- "10": {
- "then": "De ondergrond bestaat uit kleine grindsteentjes (steentjes kleiner dan 2 cm)"
}
},
"question": "Wat is de ondergrond van deze speeltuin?",
@@ -7034,6 +7057,12 @@
"0": {
"then": "Dit is een schommel"
},
+ "11": {
+ "then": "Dit is een rekstok"
+ },
+ "14": {
+ "then": "Dit is een klimmuur"
+ },
"3": {
"then": "Dit is een zandbak"
},
@@ -7045,12 +7074,6 @@
},
"6": {
"then": "Dit is een wipwap"
- },
- "11": {
- "then": "Dit is een rekstok"
- },
- "14": {
- "then": "Dit is een klimmuur"
}
},
"question": "Wat voor speeltoestel is dit?"
@@ -7342,6 +7365,21 @@
"1": {
"then": "Munten van 2 cent worden geaccepteerd"
},
+ "10": {
+ "then": "Munten van 20 rappen worden geaccepteerd"
+ },
+ "11": {
+ "then": "Munten van ½ frank worden geaccepteerd"
+ },
+ "12": {
+ "then": "Munten van 1 frank worden geaccepteerd"
+ },
+ "13": {
+ "then": "Munten van 2 frank worden geaccepteerd"
+ },
+ "14": {
+ "then": "Munten van 5 frank worden geaccepteerd"
+ },
"2": {
"then": "Munten van 5 cent worden geaccepteerd"
},
@@ -7365,21 +7403,6 @@
},
"9": {
"then": "Munten van 10 rappen worden geaccepteerd"
- },
- "10": {
- "then": "Munten van 20 rappen worden geaccepteerd"
- },
- "11": {
- "then": "Munten van ½ frank worden geaccepteerd"
- },
- "12": {
- "then": "Munten van 1 frank worden geaccepteerd"
- },
- "13": {
- "then": "Munten van 2 frank worden geaccepteerd"
- },
- "14": {
- "then": "Munten van 5 frank worden geaccepteerd"
}
},
"question": "Met welke munten kan je hier betalen?"
@@ -7392,6 +7415,15 @@
"1": {
"then": "Biljetten van 10 euro worden geaccepteerd"
},
+ "10": {
+ "then": "Biljetten van 100 frank worden geaccepteerd"
+ },
+ "11": {
+ "then": "Biljetten van 200 frank worden geaccepteerd"
+ },
+ "12": {
+ "then": "Biljetten van 1000 frank worden geaccepteerd"
+ },
"2": {
"then": "Biljetten van 20 euro worden geaccepteerd"
},
@@ -7415,15 +7447,6 @@
},
"9": {
"then": "Biljetten van 50 frank worden geaccepteerd"
- },
- "10": {
- "then": "Biljetten van 100 frank worden geaccepteerd"
- },
- "11": {
- "then": "Biljetten van 200 frank worden geaccepteerd"
- },
- "12": {
- "then": "Biljetten van 1000 frank worden geaccepteerd"
}
},
"question": "Met welke bankbiljetten kan je hier betalen?"
@@ -7806,30 +7829,6 @@
"1": {
"question": "Recycling van batterijen"
},
- "2": {
- "question": "Recycling van drankpakken"
- },
- "3": {
- "question": "Recycling van blikken"
- },
- "4": {
- "question": "Recycling van kleding"
- },
- "5": {
- "question": "Recycling van frituurvet"
- },
- "6": {
- "question": "Recycling van motorolie"
- },
- "7": {
- "question": "Recycling van tl-buizen"
- },
- "8": {
- "question": "Recycling van groen afval"
- },
- "9": {
- "question": "Recycling van glazen flessen"
- },
"10": {
"question": "Recycling van glas"
},
@@ -7860,6 +7859,9 @@
"19": {
"question": "Recycling van restafval"
},
+ "2": {
+ "question": "Recycling van drankpakken"
+ },
"20": {
"question": "Recycling van inktpatronen"
},
@@ -7868,6 +7870,27 @@
},
"22": {
"question": "Recycling van plastic verkpakkingen, metalen verkpakkingen en drankpakken (PMD)"
+ },
+ "3": {
+ "question": "Recycling van blikken"
+ },
+ "4": {
+ "question": "Recycling van kleding"
+ },
+ "5": {
+ "question": "Recycling van frituurvet"
+ },
+ "6": {
+ "question": "Recycling van motorolie"
+ },
+ "7": {
+ "question": "Recycling van tl-buizen"
+ },
+ "8": {
+ "question": "Recycling van groen afval"
+ },
+ "9": {
+ "question": "Recycling van glazen flessen"
}
}
},
@@ -7935,30 +7958,6 @@
"1": {
"then": "Drankpakken kunnen hier gerecycled worden"
},
- "2": {
- "then": "Blikken kunnen hier gerecycled worden"
- },
- "3": {
- "then": "Kleren kunnen hier gerecycled worden"
- },
- "4": {
- "then": "Frituurvet kan hier gerecycled worden"
- },
- "5": {
- "then": "Motorolie kan hier gerecycled worden"
- },
- "6": {
- "then": "TL-buizen kunnen hier gerecycled worden"
- },
- "7": {
- "then": "Groen afval kan hier gerecycled worden"
- },
- "8": {
- "then": "Organisch afval kan hier gerecycled worden"
- },
- "9": {
- "then": "Glazen flessen kunnen hier gerecycled worden"
- },
"10": {
"then": "Glas kan hier gerecycled worden"
},
@@ -7989,6 +7988,9 @@
"19": {
"then": "Oud metaal kan hier gerecycled worden"
},
+ "2": {
+ "then": "Blikken kunnen hier gerecycled worden"
+ },
"20": {
"then": "Schoenen kunnen hier gerecycled worden"
},
@@ -8006,6 +8008,27 @@
},
"25": {
"then": "Fietsen (en fietswrakken) kunnen hier gerecycled worden"
+ },
+ "3": {
+ "then": "Kleren kunnen hier gerecycled worden"
+ },
+ "4": {
+ "then": "Frituurvet kan hier gerecycled worden"
+ },
+ "5": {
+ "then": "Motorolie kan hier gerecycled worden"
+ },
+ "6": {
+ "then": "TL-buizen kunnen hier gerecycled worden"
+ },
+ "7": {
+ "then": "Groen afval kan hier gerecycled worden"
+ },
+ "8": {
+ "then": "Organisch afval kan hier gerecycled worden"
+ },
+ "9": {
+ "then": "Glazen flessen kunnen hier gerecycled worden"
}
},
"question": "Wat kan hier gerecycled worden?"
@@ -8428,6 +8451,9 @@
},
"title": {
"mappings": {
+ "0": {
+ "then": "{name}"
+ },
"1": {
"then": "Voetpad"
},
@@ -8937,6 +8963,12 @@
"1": {
"then": "Deze lantaarn gebruikt LEDs"
},
+ "10": {
+ "then": "Deze lantaarn gebruikt hogedruknatriumlampen (oranje met wit)"
+ },
+ "11": {
+ "then": "Deze lantaarn wordt verlicht met gas"
+ },
"2": {
"then": "Deze lantaarn gebruikt gloeilampen"
},
@@ -8960,12 +8992,6 @@
},
"9": {
"then": "Deze lantaarn gebruikt lagedruknatriumlampen (monochroom oranje)"
- },
- "10": {
- "then": "Deze lantaarn gebruikt hogedruknatriumlampen (oranje met wit)"
- },
- "11": {
- "then": "Deze lantaarn wordt verlicht met gas"
}
},
"question": "Wat voor verlichting gebruikt deze lantaarn?"
@@ -10291,30 +10317,6 @@
"1": {
"question": "Verkoop van dranken"
},
- "2": {
- "question": "Verkoop van snoep"
- },
- "3": {
- "question": "Verkoop van eten"
- },
- "4": {
- "question": "Verkoop van sigaretten"
- },
- "5": {
- "question": "Verkoop van condooms"
- },
- "6": {
- "question": "Verkoop van koffie"
- },
- "7": {
- "question": "Verkoop van water"
- },
- "8": {
- "question": "Verkoop van kranten"
- },
- "9": {
- "question": "Verkoop van fietsbinnenbanden"
- },
"10": {
"question": "Verkoop van melk"
},
@@ -10345,6 +10347,9 @@
"19": {
"question": "Verkoop van aardbeien"
},
+ "2": {
+ "question": "Verkoop van snoep"
+ },
"20": {
"question": "Verkoop van bloemen"
},
@@ -10362,6 +10367,27 @@
},
"28": {
"question": "Verkoop van fietssloten"
+ },
+ "3": {
+ "question": "Verkoop van eten"
+ },
+ "4": {
+ "question": "Verkoop van sigaretten"
+ },
+ "5": {
+ "question": "Verkoop van condooms"
+ },
+ "6": {
+ "question": "Verkoop van koffie"
+ },
+ "7": {
+ "question": "Verkoop van water"
+ },
+ "8": {
+ "question": "Verkoop van kranten"
+ },
+ "9": {
+ "question": "Verkoop van fietsbinnenbanden"
}
}
}
@@ -10452,30 +10478,6 @@
"1": {
"then": "Snoep wordt verkocht"
},
- "2": {
- "then": "Eten wordt verkocht"
- },
- "3": {
- "then": "Sigaretten worden verkocht"
- },
- "4": {
- "then": "Condooms worden verkocht"
- },
- "5": {
- "then": "Koffie wordt verkocht"
- },
- "6": {
- "then": "Drinkwater wordt verkocht"
- },
- "7": {
- "then": "Kranten worden verkocht"
- },
- "8": {
- "then": "Binnenbanden voor fietsen worden verkocht"
- },
- "9": {
- "then": "Melk wordt verkocht"
- },
"10": {
"then": "Brood wordt verkocht"
},
@@ -10506,6 +10508,9 @@
"19": {
"then": "Bloemen worden verkocht"
},
+ "2": {
+ "then": "Eten wordt verkocht"
+ },
"20": {
"then": "Parkeerkaarten worden verkocht"
},
@@ -10526,6 +10531,27 @@
},
"27": {
"then": "Fietssloten worden verkocht"
+ },
+ "3": {
+ "then": "Sigaretten worden verkocht"
+ },
+ "4": {
+ "then": "Condooms worden verkocht"
+ },
+ "5": {
+ "then": "Koffie wordt verkocht"
+ },
+ "6": {
+ "then": "Drinkwater wordt verkocht"
+ },
+ "7": {
+ "then": "Kranten worden verkocht"
+ },
+ "8": {
+ "then": "Binnenbanden voor fietsen worden verkocht"
+ },
+ "9": {
+ "then": "Melk wordt verkocht"
}
},
"question": "Wat verkoopt deze verkoopautomaat?",
@@ -10580,13 +10606,25 @@
}
},
"village_green": {
- "description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)"
+ "description": "Een laag die dorpsgroen toont (gemeenschapsgroen, maar niet echt een park)",
+ "name": "Speelweide",
+ "title": {
+ "mappings": {
+ "0": {
+ "then": "{name}"
+ }
+ },
+ "render": "Speelweide"
+ }
},
"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}"
}
@@ -10816,4 +10854,4 @@
"render": "windturbine"
}
}
-}
+}
\ No newline at end of file
diff --git a/langs/layers/pl.json b/langs/layers/pl.json
index 1cf5b10ad..9afbc0220 100644
--- a/langs/layers/pl.json
+++ b/langs/layers/pl.json
@@ -35,6 +35,23 @@
"1": {
"description": "Duży obiekt reklamowy na zewnątrz, zazwyczaj znajduje się w obszarach z dużym ruchem, np. obok ruchliwych dróg na ścianie"
},
+ "11": {
+ "description": "Kawałek wodoodpornej tkaniny z nadrukowanym przesłaniem, trwale przymocowany do ściany",
+ "title": "plandeka"
+ },
+ "12": {
+ "title": "totem"
+ },
+ "13": {
+ "description": "Używany do znaków reklamowych, neonów, logo i znaków wejściowych do instytucji",
+ "title": "znak"
+ },
+ "14": {
+ "title": "rzeźba"
+ },
+ "15": {
+ "title": "mural ścienny"
+ },
"2": {
"title": "wolnostojąca skrzynka plakatowa"
},
@@ -57,23 +74,6 @@
},
"9": {
"title": "ekran zamontowany na ścianie"
- },
- "11": {
- "description": "Kawałek wodoodpornej tkaniny z nadrukowanym przesłaniem, trwale przymocowany do ściany",
- "title": "plandeka"
- },
- "12": {
- "title": "totem"
- },
- "13": {
- "description": "Używany do znaków reklamowych, neonów, logo i znaków wejściowych do instytucji",
- "title": "znak"
- },
- "14": {
- "title": "rzeźba"
- },
- "15": {
- "title": "mural ścienny"
}
},
"tagRenderings": {
@@ -159,6 +159,9 @@
"1": {
"then": "To jest tablica"
},
+ "10": {
+ "then": "To jest mural ścienny"
+ },
"2": {
"then": "To jest kolumna"
},
@@ -182,9 +185,6 @@
},
"9": {
"then": "To jest totem"
- },
- "10": {
- "then": "To jest mural ścienny"
}
},
"question": "Jakiego rodzaju jest to obiekt reklamowy?",
@@ -199,6 +199,9 @@
"1": {
"then": "Tablica"
},
+ "10": {
+ "then": "Mural ścienny"
+ },
"2": {
"then": "Pudełko plakatowe"
},
@@ -222,9 +225,6 @@
},
"9": {
"then": "Totem"
- },
- "10": {
- "then": "Mural ścienny"
}
}
}
@@ -250,11 +250,11 @@
},
"type": {
"mappings": {
- "4": {
- "then": "Wyciąg orczykowy"
- },
"10": {
"then": "Tyrolka. (Atrakcja turystyczna, która pozwala żądnym przygód zjechać z dużą szybkością) "
+ },
+ "4": {
+ "then": "Wyciąg orczykowy"
}
}
}
@@ -384,6 +384,15 @@
"1": {
"then": "Mural"
},
+ "10": {
+ "then": "Azulejo (hiszpańskie płytka dekoracyjna)"
+ },
+ "11": {
+ "then": "Płyta ceramiczna (fliza)"
+ },
+ "12": {
+ "then": "Rzeźbienie w drewnie"
+ },
"2": {
"then": "Obraz"
},
@@ -407,15 +416,6 @@
},
"9": {
"then": "Płaskorzeźba"
- },
- "10": {
- "then": "Azulejo (hiszpańskie płytka dekoracyjna)"
- },
- "11": {
- "then": "Płyta ceramiczna (fliza)"
- },
- "12": {
- "then": "Rzeźbienie w drewnie"
}
},
"question": "Jakiego rodzaju jest to dzieło sztuki?",
@@ -2229,27 +2229,6 @@
},
"room-type": {
"mappings": {
- "2": {
- "then": "To jest sypialnia"
- },
- "3": {
- "then": "To jest kaplica"
- },
- "4": {
- "then": "To jest sala klasowa"
- },
- "5": {
- "then": "Jest to sala klasowa"
- },
- "6": {
- "then": "To jest sala komputerowa"
- },
- "7": {
- "then": "To jest sala konferencyjna"
- },
- "9": {
- "then": "To jest kuchnia"
- },
"10": {
"then": "To jest laboratorium"
},
@@ -2268,6 +2247,9 @@
"18": {
"then": "To jest pomieszczenie do wykonywania kontroli bezpieczeństwa"
},
+ "2": {
+ "then": "To jest sypialnia"
+ },
"20": {
"then": "To jest magazyn"
},
@@ -2279,6 +2261,24 @@
},
"23": {
"then": "To jest poczekalnia"
+ },
+ "3": {
+ "then": "To jest kaplica"
+ },
+ "4": {
+ "then": "To jest sala klasowa"
+ },
+ "5": {
+ "then": "Jest to sala klasowa"
+ },
+ "6": {
+ "then": "To jest sala komputerowa"
+ },
+ "7": {
+ "then": "To jest sala konferencyjna"
+ },
+ "9": {
+ "then": "To jest kuchnia"
}
},
"question": "Jakiego rodzaju jest to pomieszczenie?"
@@ -2930,6 +2930,12 @@
"1": {
"then": "To jest zwykłe miejsce parkingowe."
},
+ "10": {
+ "then": "To jest miejsce parkingowe przeznaczone dla pracowników."
+ },
+ "11": {
+ "then": "To miejsce parkingowe jest przeznaczone dla taksówek."
+ },
"2": {
"then": "To jest miejsce parkingowe dla niepełnosprawnych."
},
@@ -2947,12 +2953,6 @@
},
"9": {
"then": "To miejsce jest przeznaczone dla rodziców z dziećmi."
- },
- "10": {
- "then": "To jest miejsce parkingowe przeznaczone dla pracowników."
- },
- "11": {
- "then": "To miejsce parkingowe jest przeznaczone dla taksówek."
}
}
}
@@ -3057,6 +3057,12 @@
"1": {
"then": "To jest struktura składająca się z wielu połączonych urządzeń"
},
+ "10": {
+ "then": "To jest tyrolka"
+ },
+ "15": {
+ "then": "To jest mapa"
+ },
"2": {
"then": "To jest zjeżdżalnia"
},
@@ -3065,12 +3071,6 @@
},
"8": {
"then": "To jest rondo"
- },
- "10": {
- "then": "To jest tyrolka"
- },
- "15": {
- "then": "To jest mapa"
}
}
}
@@ -3700,4 +3700,4 @@
"render": "turbina wiatrowa"
}
}
-}
+}
\ No newline at end of file
diff --git a/langs/layers/pt.json b/langs/layers/pt.json
index e56e7c15f..258334e12 100644
--- a/langs/layers/pt.json
+++ b/langs/layers/pt.json
@@ -32,6 +32,23 @@
"description": "Uma grande estrutura de publicidade ao ar livre, normalmente encontrada em áreas de alto tráfego, como ao longo de estradas movimentadas",
"title": "um outdoor"
},
+ "11": {
+ "description": "Uma peça de tecido impermeável com uma mensagem impressa, permanentemente ancorada na parede",
+ "title": "uma lona"
+ },
+ "12": {
+ "title": "um totem"
+ },
+ "13": {
+ "description": "Usado para sinais publicitários, sinais de néon, logotipos e sinais de entrada institucionais",
+ "title": "um sinal"
+ },
+ "14": {
+ "title": "uma escultura"
+ },
+ "15": {
+ "title": "uma pintura de parede"
+ },
"2": {
"title": "uma caixa de pôster independente"
},
@@ -54,23 +71,6 @@
},
"9": {
"title": "uma tela montada em uma parede"
- },
- "11": {
- "description": "Uma peça de tecido impermeável com uma mensagem impressa, permanentemente ancorada na parede",
- "title": "uma lona"
- },
- "12": {
- "title": "um totem"
- },
- "13": {
- "description": "Usado para sinais publicitários, sinais de néon, logotipos e sinais de entrada institucionais",
- "title": "um sinal"
- },
- "14": {
- "title": "uma escultura"
- },
- "15": {
- "title": "uma pintura de parede"
}
},
"tagRenderings": {
@@ -165,6 +165,9 @@
"1": {
"then": "Isso é uma placa"
},
+ "10": {
+ "then": "Isto é uma pintura mural"
+ },
"2": {
"then": "Isto é uma coluna"
},
@@ -188,9 +191,6 @@
},
"9": {
"then": "Isto é um totem"
- },
- "10": {
- "then": "Isto é uma pintura mural"
}
},
"question": "Que tipo de recurso de publicitário é este?",
@@ -205,6 +205,9 @@
"1": {
"then": "Quadro"
},
+ "10": {
+ "then": "Pintura mural"
+ },
"2": {
"then": "Caixa de pôster"
},
@@ -228,9 +231,6 @@
},
"9": {
"then": "Totem"
- },
- "10": {
- "then": "Pintura mural"
}
}
}
@@ -323,6 +323,15 @@
"1": {
"then": "Mural"
},
+ "10": {
+ "then": "Azulejo (azulejo decorativo espanhol e português)"
+ },
+ "11": {
+ "then": "Ladrilhos"
+ },
+ "12": {
+ "then": "Entalhe em madeira"
+ },
"2": {
"then": "Pintura"
},
@@ -346,15 +355,6 @@
},
"9": {
"then": "Relevo"
- },
- "10": {
- "then": "Azulejo (azulejo decorativo espanhol e português)"
- },
- "11": {
- "then": "Ladrilhos"
- },
- "12": {
- "then": "Entalhe em madeira"
}
},
"question": "Qual é o tipo desta obra de arte?",
@@ -2005,9 +2005,6 @@
},
"vending": {
"mappings": {
- "8": {
- "then": "Câmaras de ar para bicicletas são vendidas aqui"
- },
"23": {
"then": "Luzes para bicicleta são vendidas aqui"
},
@@ -2022,6 +2019,9 @@
},
"27": {
"then": "Cadeados para bicicleta são vendidos aqui"
+ },
+ "8": {
+ "then": "Câmaras de ar para bicicletas são vendidas aqui"
}
}
}
diff --git a/langs/layers/pt_BR.json b/langs/layers/pt_BR.json
index a42f767a2..329bc33fd 100644
--- a/langs/layers/pt_BR.json
+++ b/langs/layers/pt_BR.json
@@ -32,6 +32,23 @@
"description": "Uma grande estrutura de publicidade outdoor, geralmente encontrada em áreas com alto tráfego, como ao longo de estradas movimentadas",
"title": "um outdoor"
},
+ "11": {
+ "description": "Um pedaço de tecido impermeável com uma mensagem impressa, permanentemente fixado a uma parede",
+ "title": "uma lona"
+ },
+ "12": {
+ "title": "um totem"
+ },
+ "13": {
+ "description": "Usado para placas de publicidade, letreiros de neon, logotipos e placas de entrada institucionais",
+ "title": "uma placa"
+ },
+ "14": {
+ "title": "uma escultura"
+ },
+ "15": {
+ "title": "uma pintura mural"
+ },
"2": {
"title": "uma caixa expositora independente"
},
@@ -54,23 +71,6 @@
},
"9": {
"title": "uma tela montada em uma parede"
- },
- "11": {
- "description": "Um pedaço de tecido impermeável com uma mensagem impressa, permanentemente fixado a uma parede",
- "title": "uma lona"
- },
- "12": {
- "title": "um totem"
- },
- "13": {
- "description": "Usado para placas de publicidade, letreiros de neon, logotipos e placas de entrada institucionais",
- "title": "uma placa"
- },
- "14": {
- "title": "uma escultura"
- },
- "15": {
- "title": "uma pintura mural"
}
},
"tagRenderings": {
@@ -165,6 +165,9 @@
"1": {
"then": "Isso é uma placa"
},
+ "10": {
+ "then": "Isso é uma pintura mural"
+ },
"2": {
"then": "Isto é uma coluna"
},
@@ -188,9 +191,6 @@
},
"9": {
"then": "Isso é um totem"
- },
- "10": {
- "then": "Isso é uma pintura mural"
}
},
"question": "Que tipo de recurso de publicitário é este?",
@@ -205,6 +205,9 @@
"1": {
"then": "Quadro"
},
+ "10": {
+ "then": "Pintura mural"
+ },
"2": {
"then": "Caixa de pôster"
},
@@ -228,9 +231,6 @@
},
"9": {
"then": "Totem"
- },
- "10": {
- "then": "Pintura mural"
}
}
}
@@ -312,6 +312,15 @@
"1": {
"then": "Mural"
},
+ "10": {
+ "then": "Azulejo (Revestimento de azulejos decorativos espanhóis)"
+ },
+ "11": {
+ "then": "Azulejaria"
+ },
+ "12": {
+ "then": "Entalhe"
+ },
"2": {
"then": "Pintura"
},
@@ -335,15 +344,6 @@
},
"9": {
"then": "Relevo"
- },
- "10": {
- "then": "Azulejo (Revestimento de azulejos decorativos espanhóis)"
- },
- "11": {
- "then": "Azulejaria"
- },
- "12": {
- "then": "Entalhe"
}
},
"question": "Qual é o tipo dessa obra de arte?",
@@ -1687,9 +1687,6 @@
},
"vending": {
"mappings": {
- "8": {
- "then": "Câmaras de ar para bicicletas são vendidas aqui"
- },
"23": {
"then": "Luzes para bicicleta são vendidas aqui"
},
@@ -1704,6 +1701,9 @@
},
"27": {
"then": "Cadeados para bicicleta são vendidos aqui"
+ },
+ "8": {
+ "then": "Câmaras de ar para bicicletas são vendidas aqui"
}
}
}
diff --git a/langs/layers/ru.json b/langs/layers/ru.json
index 943a94fc7..6fccd80e5 100644
--- a/langs/layers/ru.json
+++ b/langs/layers/ru.json
@@ -98,6 +98,12 @@
"1": {
"then": "Фреска"
},
+ "10": {
+ "then": "Азуле́жу (испанская роспись глазурованной керамической плитки)"
+ },
+ "11": {
+ "then": "Плитка (мозаика)"
+ },
"2": {
"then": "Живопись"
},
@@ -121,12 +127,6 @@
},
"9": {
"then": "Рельеф"
- },
- "10": {
- "then": "Азуле́жу (испанская роспись глазурованной керамической плитки)"
- },
- "11": {
- "then": "Плитка (мозаика)"
}
},
"question": "К какому типу относится эта работа?",
diff --git a/langs/layers/sl.json b/langs/layers/sl.json
index 56c132845..48f362370 100644
--- a/langs/layers/sl.json
+++ b/langs/layers/sl.json
@@ -152,18 +152,6 @@
"1": {
"then": "To je plošča"
},
- "6": {
- "then": "To je spominski kamen"
- },
- "7": {
- "then": "To je doprsni kip"
- },
- "8": {
- "then": "To je skulptura"
- },
- "9": {
- "then": "To je obelisk"
- },
"10": {
"then": "To je križ"
},
@@ -175,6 +163,18 @@
},
"14": {
"then": "To je nagrobni kamen; oseba je pokopana tu"
+ },
+ "6": {
+ "then": "To je spominski kamen"
+ },
+ "7": {
+ "then": "To je doprsni kip"
+ },
+ "8": {
+ "then": "To je skulptura"
+ },
+ "9": {
+ "then": "To je obelisk"
}
},
"question": "Kakšne vrste spomenik je to?",
diff --git a/langs/layers/uk.json b/langs/layers/uk.json
index 91f202be2..770c39894 100644
--- a/langs/layers/uk.json
+++ b/langs/layers/uk.json
@@ -36,6 +36,26 @@
"description": "Велика зовнішня рекламна конструкція, зазвичай розташована в місцях з високим трафіком, наприклад, уздовж жвавих доріг, встановлена на стіні",
"title": "білборд, прикріплений до стіни"
},
+ "10": {
+ "title": "екран, встановлений на тимчасовому укритті"
+ },
+ "11": {
+ "description": "Шматок водонепроникного текстилю з надрукованим повідомленням, постійно закріплений на стіні",
+ "title": "брезент"
+ },
+ "12": {
+ "title": "тотем"
+ },
+ "13": {
+ "description": "Використовується для рекламних вивісок, неонових вивісок, логотипів та вхідних табличок установ",
+ "title": "знак"
+ },
+ "14": {
+ "title": "скульптура"
+ },
+ "15": {
+ "title": "настінний розпис"
+ },
"2": {
"title": "окремо стояча коробка для плакатів"
},
@@ -61,26 +81,6 @@
},
"9": {
"title": "екран, встановлений на стіні"
- },
- "10": {
- "title": "екран, встановлений на тимчасовому укритті"
- },
- "11": {
- "description": "Шматок водонепроникного текстилю з надрукованим повідомленням, постійно закріплений на стіні",
- "title": "брезент"
- },
- "12": {
- "title": "тотем"
- },
- "13": {
- "description": "Використовується для рекламних вивісок, неонових вивісок, логотипів та вхідних табличок установ",
- "title": "знак"
- },
- "14": {
- "title": "скульптура"
- },
- "15": {
- "title": "настінний розпис"
}
},
"tagRenderings": {
@@ -186,6 +186,12 @@
"1": {
"then": "Це дошка"
},
+ "10": {
+ "then": "Це настінний розпис"
+ },
+ "11": {
+ "then": "Це кахельна плитка - реклама намальована на плитці"
+ },
"2": {
"then": "Це стовпчик"
},
@@ -209,12 +215,6 @@
},
"9": {
"then": "Це тотем"
- },
- "10": {
- "then": "Це настінний розпис"
- },
- "11": {
- "then": "Це кахельна плитка - реклама намальована на плитці"
}
},
"question": "Який це тип рекламного об'єкту?",
@@ -229,11 +229,11 @@
"1": {
"then": "Дошка оголошень"
},
- "2": {
- "then": "Поштова скринька"
- },
"10": {
"then": "Настінний розпис"
+ },
+ "2": {
+ "then": "Поштова скринька"
}
}
}
@@ -262,6 +262,15 @@
"1": {
"then": "Мурал"
},
+ "10": {
+ "then": "Азулехо (іспанська декоративна плитка)"
+ },
+ "11": {
+ "then": "Кахельна плитка"
+ },
+ "12": {
+ "then": "Різьба по дереву"
+ },
"2": {
"then": "Живопис"
},
@@ -285,15 +294,6 @@
},
"9": {
"then": "Рельєф"
- },
- "10": {
- "then": "Азулехо (іспанська декоративна плитка)"
- },
- "11": {
- "then": "Кахельна плитка"
- },
- "12": {
- "then": "Різьба по дереву"
}
}
},
@@ -508,6 +508,9 @@
"1": {
"then": "Стійка з бічними петлями"
},
+ "10": {
+ "then": "Кронштейн з можливістю використання замка через вушко. Підсідельна труба може утримуватися на стійці за допомогою анкера"
+ },
"3": {
"then": "Тримач керма"
},
@@ -528,9 +531,6 @@
},
"9": {
"then": "Шафка - велосипеди зачиняються повністю індивідуально або разом з кількома велосипедами. Шафка замала, щоб у ній могла поміститися людина стоячи."
- },
- "10": {
- "then": "Кронштейн з можливістю використання замка через вушко. Підсідельна труба може утримуватися на стійці за допомогою анкера"
}
},
"question": "Що це за тип велопарковки?",
@@ -1292,6 +1292,9 @@
"1": {
"then": "Поверхня - пісок"
},
+ "10": {
+ "then": "Поверхня - дрібний гравій (менше 2 см на камінь)"
+ },
"2": {
"then": "Поверхня складається з деревної стружки"
},
@@ -1315,9 +1318,6 @@
},
"9": {
"then": "Поверхня зроблена з гуми, наприклад, гумова плитка, гумова мульча або велика гумова площа"
- },
- "10": {
- "then": "Поверхня - дрібний гравій (менше 2 см на камінь)"
}
},
"question": "Яка поверхня цього дитячого майданчика?",
@@ -1588,27 +1588,6 @@
"1": {
"then": "Коробки з-під напоїв"
},
- "2": {
- "then": "Бляшанки"
- },
- "3": {
- "then": "Одяг"
- },
- "4": {
- "then": "Олія для приготування їжі"
- },
- "5": {
- "then": "Моторна олива"
- },
- "6": {
- "then": "Флуоресцентні лампи"
- },
- "7": {
- "then": "Зелені відходи"
- },
- "9": {
- "then": "Скляні пляшки"
- },
"10": {
"then": "Скло"
},
@@ -1639,6 +1618,9 @@
"19": {
"then": "Металобрухт"
},
+ "2": {
+ "then": "Бляшанки"
+ },
"20": {
"then": "Взуття"
},
@@ -1653,6 +1635,24 @@
},
"25": {
"then": "Велосипеди"
+ },
+ "3": {
+ "then": "Одяг"
+ },
+ "4": {
+ "then": "Олія для приготування їжі"
+ },
+ "5": {
+ "then": "Моторна олива"
+ },
+ "6": {
+ "then": "Флуоресцентні лампи"
+ },
+ "7": {
+ "then": "Зелені відходи"
+ },
+ "9": {
+ "then": "Скляні пляшки"
}
},
"question": "Що тут можна переробити?"
@@ -2337,30 +2337,6 @@
"1": {
"then": "Солодощі"
},
- "2": {
- "then": "Продукти харчування"
- },
- "3": {
- "then": "Сигарети"
- },
- "4": {
- "then": "Презервативи"
- },
- "5": {
- "then": "Кава"
- },
- "6": {
- "then": "Питна вода"
- },
- "7": {
- "then": "Газети"
- },
- "8": {
- "then": "Велосипедні внутрішні трубки"
- },
- "9": {
- "then": "Молоко"
- },
"10": {
"then": "Хліб"
},
@@ -2391,6 +2367,9 @@
"19": {
"then": "Квіти"
},
+ "2": {
+ "then": "Продукти харчування"
+ },
"20": {
"then": "Паркувальні талони"
},
@@ -2414,6 +2393,27 @@
},
"27": {
"then": "Велосипедні замки"
+ },
+ "3": {
+ "then": "Сигарети"
+ },
+ "4": {
+ "then": "Презервативи"
+ },
+ "5": {
+ "then": "Кава"
+ },
+ "6": {
+ "then": "Питна вода"
+ },
+ "7": {
+ "then": "Газети"
+ },
+ "8": {
+ "then": "Велосипедні внутрішні трубки"
+ },
+ "9": {
+ "then": "Молоко"
}
},
"question": "Що продає цей автомат?",
diff --git a/langs/layers/zh_Hans.json b/langs/layers/zh_Hans.json
index 26d68a673..bb86f5113 100644
--- a/langs/layers/zh_Hans.json
+++ b/langs/layers/zh_Hans.json
@@ -30,18 +30,6 @@
"0": {
"title": "一块广告牌"
},
- "3": {
- "title": "安装在墙上的海报盒子"
- },
- "7": {
- "title": "一个旗子"
- },
- "8": {
- "title": "一块屏幕"
- },
- "9": {
- "title": "一块挂在墙上的屏幕"
- },
"11": {
"title": "防水布"
},
@@ -56,6 +44,18 @@
},
"15": {
"title": "墙上的画"
+ },
+ "3": {
+ "title": "安装在墙上的海报盒子"
+ },
+ "7": {
+ "title": "一个旗子"
+ },
+ "8": {
+ "title": "一块屏幕"
+ },
+ "9": {
+ "title": "一块挂在墙上的屏幕"
}
},
"tagRenderings": {
@@ -150,6 +150,9 @@
"1": {
"then": "这是一块板"
},
+ "10": {
+ "then": "这是一幅壁画"
+ },
"2": {
"then": "这是一个专栏"
},
@@ -173,9 +176,6 @@
},
"9": {
"then": "这是一个图腾"
- },
- "10": {
- "then": "这是一幅壁画"
}
},
"question": "这是哪种类型的广告功能?",
@@ -190,6 +190,9 @@
"1": {
"then": "木板"
},
+ "10": {
+ "then": "墙上的画"
+ },
"2": {
"then": "海报盒"
},
@@ -210,9 +213,6 @@
},
"9": {
"then": "图腾"
- },
- "10": {
- "then": "墙上的画"
}
}
}
@@ -331,6 +331,9 @@
"1": {
"then": "壁画"
},
+ "10": {
+ "then": "Azulejo(西班牙装饰瓷砖)"
+ },
"2": {
"then": "喷绘"
},
@@ -351,9 +354,6 @@
},
"8": {
"then": "涂鸦/粗糙雕刻"
- },
- "10": {
- "then": "Azulejo(西班牙装饰瓷砖)"
}
}
}
diff --git a/langs/layers/zh_Hant.json b/langs/layers/zh_Hant.json
index e2e701047..513e0c6c0 100644
--- a/langs/layers/zh_Hant.json
+++ b/langs/layers/zh_Hant.json
@@ -56,6 +56,12 @@
"1": {
"then": "壁畫"
},
+ "10": {
+ "then": "Azulejo (西班牙雕塑作品名稱)"
+ },
+ "11": {
+ "then": "瓷磚"
+ },
"2": {
"then": "繪畫"
},
@@ -79,12 +85,6 @@
},
"9": {
"then": "寬慰"
- },
- "10": {
- "then": "Azulejo (西班牙雕塑作品名稱)"
- },
- "11": {
- "then": "瓷磚"
}
},
"question": "這是什麼類型的藝術品?",
diff --git a/langs/nb_NO.json b/langs/nb_NO.json
index c4f0d96e3..92c37ff8d 100644
--- a/langs/nb_NO.json
+++ b/langs/nb_NO.json
@@ -274,7 +274,8 @@
"importInspector": {
"title": "Inspiser og håndter importnotater"
},
- "importLayer": {},
+ "importLayer": {
+ },
"index": {
"intro": "MapComplete er en OpenStreetMap-viser og redigerer, som viser deg info om funksjoner for et gitt tema og tillater oppdatering av det.",
"logIn": "Logg inn for å vise tema du har besøkt tidligere",
@@ -369,7 +370,8 @@
"activateButton": "Bistå oversettelsen av MapComplete",
"missing": "{count} uoversatte strenger"
},
- "userinfo": {},
+ "userinfo": {
+ },
"validation": {
"color": {
"description": "En farge eller heksadesimal kode"
diff --git a/langs/nl.json b/langs/nl.json
index 70ae43235..3b709b671 100644
--- a/langs/nl.json
+++ b/langs/nl.json
@@ -849,4 +849,4 @@
"startsWithQ": "Een wikidata-identificator begint met Q gevolgd door een nummer"
}
}
-}
+}
\ No newline at end of file
diff --git a/langs/pa_PK.json b/langs/pa_PK.json
index 1cdd5d134..be3a26f2d 100644
--- a/langs/pa_PK.json
+++ b/langs/pa_PK.json
@@ -53,7 +53,8 @@
"search": "ستھتیاں وچ کھوجو",
"searching": "کھوجیا جا رہا اے۔ ۔ ۔"
},
- "sharescreen": {},
+ "sharescreen": {
+ },
"weekdays": {
"abbreviations": {
"friday": "جـ",
diff --git a/langs/ro.json b/langs/ro.json
index 9e26dfeeb..7a73a41bf 100644
--- a/langs/ro.json
+++ b/langs/ro.json
@@ -1 +1,2 @@
-{}
\ No newline at end of file
+{
+}
\ No newline at end of file
diff --git a/langs/themes/ca.json b/langs/themes/ca.json
index 4dfa2f314..5be8957e0 100644
--- a/langs/themes/ca.json
+++ b/langs/themes/ca.json
@@ -731,6 +731,33 @@
"onwheels": {
"description": "En aquest mapa, es mostren llocs públics accessibles per a cadira de rodes i es poden afegir fàcilment",
"layers": {
+ "19": {
+ "override": {
+ "=title": {
+ "render": "Estadístiques"
+ }
+ }
+ },
+ "20": {
+ "override": {
+ "+tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Importar"
+ }
+ }
+ },
+ "1": {
+ "render": {
+ "special": {
+ "message": "Afegiu totes les etiquetes suggerides"
+ }
+ }
+ }
+ }
+ }
+ },
"4": {
"override": {
"filter": {
@@ -773,33 +800,6 @@
"override": {
"name": "Places d'aparcament per a minusvàlids"
}
- },
- "19": {
- "override": {
- "=title": {
- "render": "Estadístiques"
- }
- }
- },
- "20": {
- "override": {
- "+tagRenderings": {
- "0": {
- "render": {
- "special": {
- "text": "Importar"
- }
- }
- },
- "1": {
- "render": {
- "special": {
- "message": "Afegiu totes les etiquetes suggerides"
- }
- }
- }
- }
- }
}
},
"title": "Sobre rodes"
@@ -919,10 +919,6 @@
"stations": {
"description": "Veure, editar i afegir detalls a una estació de tren",
"layers": {
- "3": {
- "description": "Capa que mostra les estacions de tren",
- "name": "Estació de tren"
- },
"16": {
"description": "Pantalles que mostren els trens que sortiran de l'estació",
"name": "Taulers de sortides",
@@ -954,6 +950,10 @@
"title": {
"render": "Tauler de sortides"
}
+ },
+ "3": {
+ "description": "Capa que mostra les estacions de tren",
+ "name": "Estació de tren"
}
},
"title": "Estacions de tren"
diff --git a/langs/themes/cs.json b/langs/themes/cs.json
index fd1ca8276..ed09ba84d 100644
--- a/langs/themes/cs.json
+++ b/langs/themes/cs.json
@@ -769,6 +769,13 @@
}
}
},
+ "10": {
+ "options": {
+ "0": {
+ "question": "Vyloučit etymologii tématu"
+ }
+ }
+ },
"2": {
"options": {
"0": {
@@ -824,13 +831,6 @@
"question": "Vyloučit motiv GRB"
}
}
- },
- "10": {
- "options": {
- "0": {
- "question": "Vyloučit etymologii tématu"
- }
- }
}
},
"name": "Changeset centra",
@@ -911,6 +911,33 @@
"onwheels": {
"description": "Na této mapě jsou zobrazena veřejně přístupná místa pro vozíčkáře, a lze je také snadno přidat",
"layers": {
+ "19": {
+ "override": {
+ "=title": {
+ "render": "Statistiky"
+ }
+ }
+ },
+ "20": {
+ "override": {
+ "+tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Dovoz"
+ }
+ }
+ },
+ "1": {
+ "render": {
+ "special": {
+ "message": "Přidat všechny navrhované značky"
+ }
+ }
+ }
+ }
+ }
+ },
"4": {
"override": {
"filter": {
@@ -953,33 +980,6 @@
"override": {
"name": "Parkovací místa pro osoby se zdravotním postižením"
}
- },
- "19": {
- "override": {
- "=title": {
- "render": "Statistiky"
- }
- }
- },
- "20": {
- "override": {
- "+tagRenderings": {
- "0": {
- "render": {
- "special": {
- "text": "Dovoz"
- }
- }
- },
- "1": {
- "render": {
- "special": {
- "message": "Přidat všechny navrhované značky"
- }
- }
- }
- }
- }
}
},
"title": "Na kolečkách"
@@ -1202,10 +1202,6 @@
"stations": {
"description": "Zobrazení, úprava a přidání podrobností o vlakovém nádraží",
"layers": {
- "3": {
- "description": "Vrstva zobrazující vlaková nádraží",
- "name": "Vlaková nádraží"
- },
"16": {
"description": "Zobrazuje vlaky odjíždějící z této stanice",
"name": "Odjezdové tabule",
@@ -1237,6 +1233,10 @@
"title": {
"render": "Odjezdová tabule"
}
+ },
+ "3": {
+ "description": "Vrstva zobrazující vlaková nádraží",
+ "name": "Vlaková nádraží"
}
},
"title": "Vlaková nádraží"
diff --git a/langs/themes/da.json b/langs/themes/da.json
index 8a93f66cc..f780a079f 100644
--- a/langs/themes/da.json
+++ b/langs/themes/da.json
@@ -554,6 +554,33 @@
"onwheels": {
"description": "På dette kort vises steder, der er offentligt tilgængelige for kørestolsbrugere, og de kan nemt tilføjes",
"layers": {
+ "19": {
+ "override": {
+ "=title": {
+ "render": "Statistikker"
+ }
+ }
+ },
+ "20": {
+ "override": {
+ "+tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Importere"
+ }
+ }
+ },
+ "1": {
+ "render": {
+ "special": {
+ "message": "Tilføj alle de foreslåede tags"
+ }
+ }
+ }
+ }
+ }
+ },
"4": {
"override": {
"filter": {
@@ -596,33 +623,6 @@
"override": {
"name": "Handikapparkeringspladser"
}
- },
- "19": {
- "override": {
- "=title": {
- "render": "Statistikker"
- }
- }
- },
- "20": {
- "override": {
- "+tagRenderings": {
- "0": {
- "render": {
- "special": {
- "text": "Importere"
- }
- }
- },
- "1": {
- "render": {
- "special": {
- "message": "Tilføj alle de foreslåede tags"
- }
- }
- }
- }
- }
}
}
},
@@ -734,9 +734,6 @@
},
"stations": {
"layers": {
- "3": {
- "name": "Togstationer"
- },
"16": {
"name": "Afgangstavler",
"presets": {
@@ -752,6 +749,9 @@
"title": {
"render": "Afgangstavle"
}
+ },
+ "3": {
+ "name": "Togstationer"
}
},
"title": "Togstationer"
diff --git a/langs/themes/de.json b/langs/themes/de.json
index dbdfcc150..9d8560b4f 100644
--- a/langs/themes/de.json
+++ b/langs/themes/de.json
@@ -769,6 +769,13 @@
}
}
},
+ "10": {
+ "options": {
+ "0": {
+ "question": "Etymologie-Thema ausschließen"
+ }
+ }
+ },
"2": {
"options": {
"0": {
@@ -824,13 +831,6 @@
"question": "GRB-Thema ausschließen"
}
}
- },
- "10": {
- "options": {
- "0": {
- "question": "Etymologie-Thema ausschließen"
- }
- }
}
},
"name": "Changeset-Zentren",
@@ -911,6 +911,33 @@
"onwheels": {
"description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen",
"layers": {
+ "19": {
+ "override": {
+ "=title": {
+ "render": "Statistik"
+ }
+ }
+ },
+ "20": {
+ "override": {
+ "+tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Import"
+ }
+ }
+ },
+ "1": {
+ "render": {
+ "special": {
+ "message": "Alle vorgeschlagenen Tags hinzufügen"
+ }
+ }
+ }
+ }
+ }
+ },
"4": {
"override": {
"filter": {
@@ -953,33 +980,6 @@
"override": {
"name": "Barrierefreie Parkplätze"
}
- },
- "19": {
- "override": {
- "=title": {
- "render": "Statistik"
- }
- }
- },
- "20": {
- "override": {
- "+tagRenderings": {
- "0": {
- "render": {
- "special": {
- "text": "Import"
- }
- }
- },
- "1": {
- "render": {
- "special": {
- "message": "Alle vorgeschlagenen Tags hinzufügen"
- }
- }
- }
- }
- }
}
},
"title": "Auf Rädern"
@@ -1202,10 +1202,6 @@
"stations": {
"description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen",
"layers": {
- "3": {
- "description": "Ebene mit Bahnhöfen",
- "name": "Bahnhöfe"
- },
"16": {
"description": "Anzeigen der Züge, die von diesem Bahnhof abfahren",
"name": "Abfahrtstafeln",
@@ -1237,6 +1233,10 @@
"title": {
"render": "Abfahrtstafel"
}
+ },
+ "3": {
+ "description": "Ebene mit Bahnhöfen",
+ "name": "Bahnhöfe"
}
},
"title": "Bahnhöfe"
diff --git a/langs/themes/en.json b/langs/themes/en.json
index 4c695df9a..e5f5d1690 100644
--- a/langs/themes/en.json
+++ b/langs/themes/en.json
@@ -778,6 +778,13 @@
}
}
},
+ "10": {
+ "options": {
+ "0": {
+ "question": "Exclude etymology theme"
+ }
+ }
+ },
"2": {
"options": {
"0": {
@@ -833,13 +840,6 @@
"question": "Exclude GRB theme"
}
}
- },
- "10": {
- "options": {
- "0": {
- "question": "Exclude etymology theme"
- }
- }
}
},
"name": "Changeset centers",
@@ -920,6 +920,33 @@
"onwheels": {
"description": "On this map, publicly weelchair accessible places are shown and can be easily added",
"layers": {
+ "19": {
+ "override": {
+ "=title": {
+ "render": "Statistics"
+ }
+ }
+ },
+ "20": {
+ "override": {
+ "+tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Import"
+ }
+ }
+ },
+ "1": {
+ "render": {
+ "special": {
+ "message": "Add all the suggested tags"
+ }
+ }
+ }
+ }
+ }
+ },
"4": {
"override": {
"filter": {
@@ -962,33 +989,6 @@
"override": {
"name": "Disabled parking spaces"
}
- },
- "19": {
- "override": {
- "=title": {
- "render": "Statistics"
- }
- }
- },
- "20": {
- "override": {
- "+tagRenderings": {
- "0": {
- "render": {
- "special": {
- "text": "Import"
- }
- }
- },
- "1": {
- "render": {
- "special": {
- "message": "Add all the suggested tags"
- }
- }
- }
- }
- }
}
},
"title": "OnWheels"
@@ -1211,10 +1211,6 @@
"stations": {
"description": "View, edit and add details to a train station",
"layers": {
- "3": {
- "description": "Layer showing train stations",
- "name": "Train Stations"
- },
"16": {
"description": "Displays showing the trains that will leave from this station",
"name": "Departures boards",
@@ -1246,6 +1242,10 @@
"title": {
"render": "Departures board"
}
+ },
+ "3": {
+ "description": "Layer showing train stations",
+ "name": "Train Stations"
}
},
"title": "Train Stations"
diff --git a/langs/themes/es.json b/langs/themes/es.json
index 1d0c9f80e..5f6a7d6c7 100644
--- a/langs/themes/es.json
+++ b/langs/themes/es.json
@@ -769,6 +769,13 @@
}
}
},
+ "10": {
+ "options": {
+ "0": {
+ "question": "Excluir el tema de etimología"
+ }
+ }
+ },
"2": {
"options": {
"0": {
@@ -824,13 +831,6 @@
"question": "Excluir el tema GRB"
}
}
- },
- "10": {
- "options": {
- "0": {
- "question": "Excluir el tema de etimología"
- }
- }
}
},
"name": "Centros de conjuntos de cambios",
@@ -911,6 +911,33 @@
"onwheels": {
"description": "En este mapa, se muestran y se pueden agregar fácilmente lugares accesibles para sillas de ruedas",
"layers": {
+ "19": {
+ "override": {
+ "=title": {
+ "render": "Estadísticas"
+ }
+ }
+ },
+ "20": {
+ "override": {
+ "+tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Importar"
+ }
+ }
+ },
+ "1": {
+ "render": {
+ "special": {
+ "message": "Agregar todas las etiquetas sugeridas"
+ }
+ }
+ }
+ }
+ }
+ },
"4": {
"override": {
"filter": {
@@ -953,33 +980,6 @@
"override": {
"name": "Plazas de estacionamiento para discapacitados"
}
- },
- "19": {
- "override": {
- "=title": {
- "render": "Estadísticas"
- }
- }
- },
- "20": {
- "override": {
- "+tagRenderings": {
- "0": {
- "render": {
- "special": {
- "text": "Importar"
- }
- }
- },
- "1": {
- "render": {
- "special": {
- "message": "Agregar todas las etiquetas sugeridas"
- }
- }
- }
- }
- }
}
},
"title": "Sobre ruedas"
@@ -1202,10 +1202,6 @@
"stations": {
"description": "Ver, editar y agregar detalles a una estación de tren",
"layers": {
- "3": {
- "description": "Capa que muestra las estaciones de tren",
- "name": "Estaciones de tren"
- },
"16": {
"description": "Pantallas que muestran los trenes que saldrán de esta estación",
"name": "Tableros de salidas",
@@ -1237,6 +1233,10 @@
"title": {
"render": "Tablero de salidas"
}
+ },
+ "3": {
+ "description": "Capa que muestra las estaciones de tren",
+ "name": "Estaciones de tren"
}
},
"title": "Estaciones de tren"
diff --git a/langs/themes/fr.json b/langs/themes/fr.json
index 5aacec588..62482304c 100644
--- a/langs/themes/fr.json
+++ b/langs/themes/fr.json
@@ -790,6 +790,33 @@
"onwheels": {
"description": "Sur cette carte nous pouvons voir et ajouter les différents endroits publiques accessibles aux chaises roulantes",
"layers": {
+ "19": {
+ "override": {
+ "=title": {
+ "render": "Statistiques"
+ }
+ }
+ },
+ "20": {
+ "override": {
+ "+tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Importation"
+ }
+ }
+ },
+ "1": {
+ "render": {
+ "special": {
+ "message": "Ajouter tous les attributs suggérés"
+ }
+ }
+ }
+ }
+ }
+ },
"4": {
"override": {
"filter": {
@@ -832,33 +859,6 @@
"override": {
"name": "Places de stationnement pour personnes handicapées"
}
- },
- "19": {
- "override": {
- "=title": {
- "render": "Statistiques"
- }
- }
- },
- "20": {
- "override": {
- "+tagRenderings": {
- "0": {
- "render": {
- "special": {
- "text": "Importation"
- }
- }
- },
- "1": {
- "render": {
- "special": {
- "message": "Ajouter tous les attributs suggérés"
- }
- }
- }
- }
- }
}
},
"title": "OnWheels"
@@ -1025,10 +1025,6 @@
"stations": {
"description": "Voir, modifier et ajouter des détails à une gare ferroviaire",
"layers": {
- "3": {
- "description": "Couche montrant les gares",
- "name": "Gares ferroviaires"
- },
"16": {
"description": "Panneau affichant les trains au départ depuis cette gare",
"name": "Panneaux des départs",
@@ -1060,6 +1056,10 @@
"title": {
"render": "Tableau des départs"
}
+ },
+ "3": {
+ "description": "Couche montrant les gares",
+ "name": "Gares ferroviaires"
}
},
"title": "Gares ferroviaires"
diff --git a/langs/themes/it.json b/langs/themes/it.json
index 38148117d..016494c80 100644
--- a/langs/themes/it.json
+++ b/langs/themes/it.json
@@ -488,17 +488,17 @@
"onwheels": {
"description": "Su questa mappa sono indicati i luoghi pubblici accessibili con sedia a rotelle e possono essere facilmente aggiunti",
"layers": {
- "8": {
- "override": {
- "name": "Parcheggi per disabili"
- }
- },
"19": {
"override": {
"=title": {
"render": "Statistiche"
}
}
+ },
+ "8": {
+ "override": {
+ "name": "Parcheggi per disabili"
+ }
}
}
},
diff --git a/langs/themes/nb_NO.json b/langs/themes/nb_NO.json
index f11176641..70228236d 100644
--- a/langs/themes/nb_NO.json
+++ b/langs/themes/nb_NO.json
@@ -355,19 +355,6 @@
},
"onwheels": {
"layers": {
- "4": {
- "override": {
- "filter": {
- "0": {
- "options": {
- "1": {
- "question": "Uten breddeinfo"
- }
- }
- }
- }
- }
- },
"19": {
"override": {
"=title": {
@@ -394,6 +381,19 @@
}
}
}
+ },
+ "4": {
+ "override": {
+ "filter": {
+ "0": {
+ "options": {
+ "1": {
+ "question": "Uten breddeinfo"
+ }
+ }
+ }
+ }
+ }
}
},
"title": "På hjul"
@@ -473,10 +473,6 @@
},
"stations": {
"layers": {
- "3": {
- "description": "Lag som viser togstasjoner",
- "name": "Togstasjoner"
- },
"16": {
"tagRenderings": {
"type": {
@@ -487,6 +483,10 @@
}
}
}
+ },
+ "3": {
+ "description": "Lag som viser togstasjoner",
+ "name": "Togstasjoner"
}
},
"title": "Togstasjoner"
diff --git a/langs/themes/nl.json b/langs/themes/nl.json
index 1350e11ce..3f55d0345 100644
--- a/langs/themes/nl.json
+++ b/langs/themes/nl.json
@@ -653,8 +653,37 @@
"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 {fixme}"
+ },
+ "grb-housenumber": {
+ "mappings": {
+ "0": {
+ "then": "Geen huisnummer"
+ }
+ },
+ "question": "Wat is het huisnummer?",
+ "render": "Het huisnummer is {addr:housenumber}"
+ },
+ "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 {addr:street}"
+ },
+ "grb-unit": {
+ "render": "De wooneenheid-aanduiding is {addr:unit} "
}
}
},
@@ -671,8 +700,35 @@
}
}
}
+ },
+ "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.
Importeer eerst de gebouwen. Vernieuw dan de pagina om losse adressen toe te voegen
"
+ }
+ },
+ "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. ",
@@ -773,6 +829,13 @@
}
}
},
+ "10": {
+ "options": {
+ "0": {
+ "question": "Thema etymologie uitsluiten"
+ }
+ }
+ },
"2": {
"options": {
"0": {
@@ -828,13 +891,6 @@
"question": "GRB-thema uitsluiten"
}
}
- },
- "10": {
- "options": {
- "0": {
- "question": "Thema etymologie uitsluiten"
- }
- }
}
},
"name": "Changeset centra",
@@ -915,6 +971,33 @@
"onwheels": {
"description": "Op deze kaart kan je rolstoeltoegankelijke plaatsen vinden en toevoegen",
"layers": {
+ "19": {
+ "override": {
+ "=title": {
+ "render": "Statistieken"
+ }
+ }
+ },
+ "20": {
+ "override": {
+ "+tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Importeren"
+ }
+ }
+ },
+ "1": {
+ "render": {
+ "special": {
+ "message": "Voeg alle gesuggereerde tags toe"
+ }
+ }
+ }
+ }
+ }
+ },
"4": {
"override": {
"filter": {
@@ -957,33 +1040,6 @@
"override": {
"name": "Parkeerplaatsen voor personen met een beperking"
}
- },
- "19": {
- "override": {
- "=title": {
- "render": "Statistieken"
- }
- }
- },
- "20": {
- "override": {
- "+tagRenderings": {
- "0": {
- "render": {
- "special": {
- "text": "Importeren"
- }
- }
- },
- "1": {
- "render": {
- "special": {
- "message": "Voeg alle gesuggereerde tags toe"
- }
- }
- }
- }
- }
}
},
"title": "OnWheels"
@@ -1108,6 +1164,11 @@
},
"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",
@@ -1181,6 +1242,47 @@
"description": "Alles om te skiën",
"title": "Skipistes en kabelbanen"
},
+ "speelplekken": {
+ "description": "
Welkom bij de Groendoener!
De Zuidrand dat is spelen, ravotten, chillen, wandelen,… in het groen. Meer dan 200 grote en kleine speelplekken 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!
Het project groendoener kadert binnen het strategisch project Beleefbare Open Ruimte in de Antwerpse Zuidrand 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. ",
+ "layers": {
+ "6": {
+ "name": "Wandelroutes van provincie Antwerpen",
+ "tagRenderings": {
+ "walk-description": {
+ "render": "
Korte beschrijving:
{description}"
+ },
+ "walk-length": {
+ "render": "Deze wandeling is {_length:km}km 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 {operator:email}"
+ },
+ "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",
@@ -1206,10 +1308,6 @@
"stations": {
"description": "Bekijk, bewerk en voeg details to aan een treinstation",
"layers": {
- "3": {
- "description": "Laag met treinstations",
- "name": "Treinstations"
- },
"16": {
"description": "Schermen die treinen tonen die van dit station vertrekken",
"name": "Vertrektijdenborden",
@@ -1241,6 +1339,10 @@
"title": {
"render": "Vertrektijdenbord"
}
+ },
+ "3": {
+ "description": "Laag met treinstations",
+ "name": "Treinstations"
}
},
"title": "Treinstations"
@@ -1301,6 +1403,10 @@
},
"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",
@@ -1414,9 +1520,13 @@
"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"
}
-}
+}
\ No newline at end of file
diff --git a/langs/themes/pl.json b/langs/themes/pl.json
index 96682a297..e6c60a270 100644
--- a/langs/themes/pl.json
+++ b/langs/themes/pl.json
@@ -710,6 +710,33 @@
"onwheels": {
"description": "Na tej mapie pokazane są miejsca publicznie dostępne dla wózków inwalidzkich, które można łatwo dodać",
"layers": {
+ "19": {
+ "override": {
+ "=title": {
+ "render": "Statystyki"
+ }
+ }
+ },
+ "20": {
+ "override": {
+ "+tagRenderings": {
+ "0": {
+ "render": {
+ "special": {
+ "text": "Import"
+ }
+ }
+ },
+ "1": {
+ "render": {
+ "special": {
+ "message": "Dodaj wszystkie sugerowane znaczniki"
+ }
+ }
+ }
+ }
+ }
+ },
"4": {
"override": {
"filter": {
@@ -752,33 +779,6 @@
"override": {
"name": "Miejsca parkingowe dla niepełnosprawnych"
}
- },
- "19": {
- "override": {
- "=title": {
- "render": "Statystyki"
- }
- }
- },
- "20": {
- "override": {
- "+tagRenderings": {
- "0": {
- "render": {
- "special": {
- "text": "Import"
- }
- }
- },
- "1": {
- "render": {
- "special": {
- "message": "Dodaj wszystkie sugerowane znaczniki"
- }
- }
- }
- }
- }
}
},
"title": "Na kółkach"
@@ -898,10 +898,6 @@
"stations": {
"description": "Przeglądaj, edytuj i dodawaj szczegóły do stacji kolejowej",
"layers": {
- "3": {
- "description": "Warstwa pokazująca stacje kolejowe",
- "name": "Stacje Kolejowe"
- },
"16": {
"description": "Ekrany wyświetlające pokazujące pociągi, które odjadą z tej stacji",
"name": "Tablice odjazdów",
@@ -933,6 +929,10 @@
"title": {
"render": "Tablica odjazdów"
}
+ },
+ "3": {
+ "description": "Warstwa pokazująca stacje kolejowe",
+ "name": "Stacje Kolejowe"
}
},
"title": "Stacje Kolejowe"
diff --git a/langs/themes/zh_Hant.json b/langs/themes/zh_Hant.json
index 4a084cb10..a76a102df 100644
--- a/langs/themes/zh_Hant.json
+++ b/langs/themes/zh_Hant.json
@@ -366,10 +366,6 @@
},
"stations": {
"layers": {
- "3": {
- "description": "顯示火車站的圖層",
- "name": "火車站"
- },
"16": {
"name": "出發板",
"presets": {
@@ -390,6 +386,10 @@
"title": {
"render": "時刻表"
}
+ },
+ "3": {
+ "description": "顯示火車站的圖層",
+ "name": "火車站"
}
},
"title": "火車站"
diff --git a/langs/uk.json b/langs/uk.json
index d6f630728..f6132f5f4 100644
--- a/langs/uk.json
+++ b/langs/uk.json
@@ -532,7 +532,8 @@
}
}
},
- "importLayer": {},
+ "importLayer": {
+ },
"index": {
"about": "Про MapComplete",
"intro": "Тематичні мапи, до створення яких ви можете долучитися",
@@ -591,7 +592,8 @@
"removedKeys": "Наступні ключі будуть видалені:",
"title": "Позначити як невідомий?"
},
- "userinfo": {},
+ "userinfo": {
+ },
"validation": {
"opening_hours": {
"description": "Години роботи"
diff --git a/langs/zh_Hant.json b/langs/zh_Hant.json
index 0aa3a0521..d75cbcc18 100644
--- a/langs/zh_Hant.json
+++ b/langs/zh_Hant.json
@@ -175,6 +175,7 @@
"donate": "財務上支援 MapComplete",
"editId": "開啟開放街圖線上編輯器",
"editJosm": "採用 JOSM 編輯",
+ "emailCreators": "寄 email 給創作者",
"followOnMastodon": "在 Mastodon 追蹤 MapComplete",
"gotoSourceCode": "檢視原始碼",
"iconAttribution": {
@@ -182,6 +183,7 @@
},
"josmNotOpened": "無法連到 JOSM,請確認 JOSM 已經開啟並且啟用遠端控制選項",
"josmOpened": "已經開啟 JOSM",
+ "madeBy": "由{author}製作",
"mapContributionsBy": "目前檢視的資料由 {contributors} 貢獻編輯",
"mapContributionsByAndHidden": "目前顯到的資料是由 {contributors} 和其他 {hiddenCount} 位貢獻者編輯貢獻",
"mapillaryHelp": "線上服務 Mapillary 能夠以開放授權提供收集到的街景照片。貢獻者能夠採用 Mapillary 照片來改進開放街圖",
@@ -189,14 +191,12 @@
"openMapillary": "開啟 Mapillary",
"openOsmcha": "請見 {theme} 的最新編輯",
"openOsmchaLastWeek": "檢視最近 7 天的編輯",
+ "openPanoramax": "在這邊開啟 Panoramax",
"openThemeDocumentation": "開啟專題地圖 {name} 的文件",
"seeOnMapillary": "在 Mapillary 觀看這張影像",
"themeBy": "由 {author} 維護主題",
"title": "版權與署名",
- "translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 {hiddenCount} 更多貢獻者",
- "emailCreators": "寄 email 給創作者",
- "madeBy": "由{author}製作",
- "openPanoramax": "在這邊開啟 Panoramax"
+ "translatedBy": "MapComplete 由 {contributors} 翻譯,而且還有 {hiddenCount} 更多貢獻者"
},
"back": "返回",
"backToIndex": "回到所有主題地圖的總覽頁面",
@@ -822,4 +822,4 @@
"inspector": {
"menu": "檢核貢獻者"
}
-}
+}
\ No newline at end of file
diff --git a/public/css/index-tailwind-output.css b/public/css/index-tailwind-output.css
index 1ced5b6da..3da0d51cf 100644
--- a/public/css/index-tailwind-output.css
+++ b/public/css/index-tailwind-output.css
@@ -1324,20 +1324,20 @@ input[type="range"].range-lg::-moz-range-thumb {
margin: 0px;
}
-.m-8 {
- margin: 2rem;
+.m-1 {
+ margin: 0.25rem;
}
.m-2 {
margin: 0.5rem;
}
-.m-0\.5 {
- margin: 0.125rem;
+.m-8 {
+ margin: 2rem;
}
-.m-1 {
- margin: 0.25rem;
+.m-0\.5 {
+ margin: 0.125rem;
}
.m-11 {
@@ -1698,14 +1698,14 @@ input[type="range"].range-lg::-moz-range-thumb {
height: 6rem;
}
-.h-screen {
- height: 100vh;
-}
-
.h-full {
height: 100%;
}
+.h-screen {
+ height: 100vh;
+}
+
.h-fit {
height: -webkit-fit-content;
height: -moz-fit-content;
@@ -2028,6 +2028,10 @@ input[type="range"].range-lg::-moz-range-thumb {
width: max-content;
}
+.w-48 {
+ width: 12rem;
+}
+
.w-auto {
width: auto;
}
@@ -2121,10 +2125,6 @@ input[type="range"].range-lg::-moz-range-thumb {
width: 0.25rem;
}
-.w-48 {
- width: 12rem;
-}
-
.w-9\/12 {
width: 75%;
}
@@ -2244,14 +2244,14 @@ input[type="range"].range-lg::-moz-range-thumb {
flex: 1 1 0%;
}
-.flex-shrink {
- flex-shrink: 1;
-}
-
.flex-shrink-0 {
flex-shrink: 0;
}
+.flex-shrink {
+ flex-shrink: 1;
+}
+
.shrink-0 {
flex-shrink: 0;
}
@@ -2509,6 +2509,10 @@ input[type="range"].range-lg::-moz-range-thumb {
row-gap: 0.25rem;
}
+.gap-x-2 {
+ column-gap: 0.5rem;
+}
+
.gap-y-2 {
row-gap: 0.5rem;
}
@@ -2517,10 +2521,6 @@ input[type="range"].range-lg::-moz-range-thumb {
row-gap: 1rem;
}
-.gap-x-2 {
- column-gap: 0.5rem;
-}
-
.gap-x-1 {
column-gap: 0.25rem;
}
@@ -3045,11 +3045,6 @@ input[type="range"].range-lg::-moz-range-thumb {
border-color: rgb(107 114 128 / var(--tw-border-opacity));
}
-.border-subtle {
- --tw-border-opacity: 1;
- border-color: rgb(219 234 254 / var(--tw-border-opacity));
-}
-
.border-black {
--tw-border-opacity: 1;
border-color: rgb(0 0 0 / var(--tw-border-opacity));
@@ -3065,6 +3060,11 @@ input[type="range"].range-lg::-moz-range-thumb {
border-color: rgb(209 213 219 / var(--tw-border-opacity));
}
+.border-gray-600 {
+ --tw-border-opacity: 1;
+ border-color: rgb(75 85 99 / var(--tw-border-opacity));
+}
+
.border-gray-800 {
--tw-border-opacity: 1;
border-color: rgb(31 41 55 / var(--tw-border-opacity));
@@ -4045,18 +4045,14 @@ input[type="range"].range-lg::-moz-range-thumb {
padding-bottom: 0.75rem;
}
-.pl-4 {
- padding-left: 1rem;
+.pt-2 {
+ padding-top: 0.5rem;
}
.pr-4 {
padding-right: 1rem;
}
-.pt-2 {
- padding-top: 0.5rem;
-}
-
.pl-1 {
padding-left: 0.25rem;
}
@@ -5067,6 +5063,8 @@ input[type="range"].range-lg::-moz-range-thumb {
@font-face {
font-family: "Source Sans Pro";
+ /*This path might seem incorrect. However, 'index.css' will be compiled and placed in 'public/css', from where this path _is_ correct*/
+
src: url("../assets/fonts/source-sans-pro.regular.ttf") format("woff");
}
diff --git a/scripts/single_build.sh b/scripts/single_build.sh
index 49677134b..ab10c5618 100755
--- a/scripts/single_build.sh
+++ b/scripts/single_build.sh
@@ -1,16 +1,26 @@
+#! /bin/bash
+
+# Creates the build for just a single theme
+export NODE_OPTIONS="--max-old-space-size=12000"
THEME=$1
-npm run generate:layouts
if [ $# -eq 0 ]
then
echo "No arguments given. Expected a themename"
fi
-pwd
-if [ -f "$THEME.html" ]
+npm run prep:layeroverview
+npm run refresh:layeroverview
+npm run generate:layeroverview
+npm run test
+npm run generate:layouts
+
+if [[ -f "$THEME.html" ]]
then
echo "$THEME.html found."
else
- echo "Theme '$THEME' not found. Did you run 'npm run generate:layouts'?"
+ pwd
+ ls
+ echo "Theme '$THEME' not found. Did you run 'npm run generate:layouts'? Is the theme name correct?"
exit 1
fi
@@ -33,14 +43,10 @@ sed -i "s/input,/input: {index:\".\/index.html\", land: \".\/land.html\"}/" vite
sed -i "s/\/\/ LAYOUT.ADD_CONFIG/layout.enableMoreQuests = false/" index_"$THEME".ts
-
-
export NODE_OPTIONS=--max-old-space-size=20000
vite build --sourcemap --config vite_single.config.js || { echo 'Vite build failed' ; exit 1; }
-
-
cp -r assets/layers/ dist/assets/layers/
cp -r assets/themes/ dist/assets/themes/
cp -r assets/svg/ dist/assets/svg/
@@ -69,7 +75,6 @@ pwd
ls .
for f in *
do
- # echo ">>>" $f
case "$f" in
*$THEME* )
echo "Keeping $f"
@@ -92,37 +97,8 @@ fi
npm run clean
echo "BUILD COMPLETED"
-
-if [ $# -eq 2 ]
-then
- echo "DEPLOY TO $2"
-
- if [ -f "$2"/CNAME ]
- then
- CNAME=$(cat "$2"/CNAME)
- echo "Found a CNAME"
- fi
- echo "Assuming github pages, add \".nojekyll\""
- touch $2/.nojekyll
- echo $CNAME > $2/CNAME
- rm -r "$2/assets/*"
- echo " ! Don't forget to add `https://$CNAME/land.html` to the Redirect URIs on https://www.openstreetmap.org/oauth2/applications/"
- cp -r "dist_$THEME/"* "$2"/
-
- if [ -d "$2"/.git ]
- then
- cd $2
- git add *
- git commit -m "Add new version of MapComplete with single-page build of $THEME"
- git push
- cd -
- fi
- rm -r "dist_$THEME"
-else
- echo "BUILD COMPLETED"
- echo "On what domain will you deploy?"
- echo " ! Don't forget to add `https://yourdomain.tld/land.html` to the Redirect URIs on https://www.openstreetmap.org/oauth2/applications/"
- echo "Deploying on github pages?"
- echo " 1. Don't forget to add a CNAME file (containing your domain name verbatim, without protocol)"
- echo " 2 .nojekyll file (which is empty)"
-fi
+echo "On what domain will you deploy?"
+echo " ! Don't forget to add `https://yourdomain.tld/land.html` to the Redirect URIs on https://www.openstreetmap.org/oauth2/applications/"
+echo "Deploying on github pages?"
+echo " 1. Don't forget to add a CNAME file (containing your domain name verbatim, without protocol)"
+echo " 2 .nojekyll file (which is empty)"
diff --git a/scripts/velopark/veloParkToGeojson.ts b/scripts/velopark/veloParkToGeojson.ts
index c5dc7fb9d..9634df49a 100644
--- a/scripts/velopark/veloParkToGeojson.ts
+++ b/scripts/velopark/veloParkToGeojson.ts
@@ -2,17 +2,18 @@ import Script from "../Script"
import fs from "fs"
import LinkedDataLoader from "../../src/Logic/Web/LinkedDataLoader"
import { Utils } from "../../src/Utils"
-import { Feature } from "geojson"
+import { Feature, FeatureCollection, Point } from "geojson"
import { BBox } from "../../src/Logic/BBox"
import { Overpass } from "../../src/Logic/Osm/Overpass"
import { RegexTag } from "../../src/Logic/Tags/RegexTag"
import { ImmutableStore } from "../../src/Logic/UIEventSource"
import Constants from "../../src/Models/Constants"
+import { MaprouletteStatus } from "../../src/Logic/Maproulette"
class VeloParkToGeojson extends Script {
constructor() {
super(
- "Downloads the latest Velopark data and converts it to a geojson, which will be saved at the current directory"
+ "Downloads the latest Velopark data and converts it to a geojson, which will be saved at the current directory",
)
}
@@ -23,13 +24,13 @@ class VeloParkToGeojson extends Script {
JSON.stringify(
extension === ".geojson"
? {
- type: "FeatureCollection",
- features,
- }
+ type: "FeatureCollection",
+ features,
+ }
: features,
null,
- " "
- )
+ " ",
+ ),
)
console.log("Written", file, "(" + features.length, " features)")
}
@@ -44,12 +45,15 @@ class VeloParkToGeojson extends Script {
const linkedData = await LinkedDataLoader.fetchVeloparkEntry(url)
const allVelopark: Feature[] = []
+ if (linkedData.length > 1) {
+ console.log("Detected multiple sections in:", url)
+ }
for (const sectionId in linkedData) {
const sectionInfo = linkedData[sectionId]
if (Object.keys(sectionInfo).length === 0) {
console.warn("No result for", url)
}
- if (!sectionInfo.geometry?.coordinates) {
+ if (!sectionInfo.geometry?.["coordinates"]) {
throw "Invalid properties!"
}
allVelopark.push(sectionInfo)
@@ -62,8 +66,8 @@ class VeloParkToGeojson extends Script {
console.log("Downloading velopark data")
// Download data for NIS-code 1000. 1000 means: all of belgium
const url = "https://www.velopark.be/api/parkings/1000"
- const allVeloparkRaw: { url: string }[] = <{ url: string }[]>await Utils.downloadJson(url)
-
+ const allVeloparkRaw= (await Utils.downloadJson<{ url: string }[]>(url))
+ // Example multi-entry: https://data.velopark.be/data/Stad-Izegem_IZE_015
let failed = 0
console.log("Got", allVeloparkRaw.length, "items")
const allVelopark: Feature[] = []
@@ -82,14 +86,15 @@ class VeloParkToGeojson extends Script {
console.error("Loading ", f.url, " failed due to", e)
failed++
}
- })
+ }),
)
+ console.log("Batch complete:", i)
}
console.log(
"Fetching data done, got ",
allVelopark.length + "/" + allVeloparkRaw.length,
"failed:",
- failed
+ failed,
)
VeloParkToGeojson.exportGeojsonTo("velopark_all", allVelopark)
@@ -135,7 +140,37 @@ class VeloParkToGeojson extends Script {
}
}
+ private static async fetchMapRouletteClosedItems() {
+ const challenges = ["https://maproulette.org/api/v2/challenge/view/43282"]
+ const solvedRefs: Set = new Set();
+ for (const url of challenges) {
+ const data = await Utils.downloadJson>(url)
+ for (const challenge of data.features) {
+ const status = challenge.properties.mr_taskStatus
+ const isClosed = status === "Fixed" || status === "False_positive" || status === "Already fixed" || status === "Too_Hard" || status === "Deleted"
+ if(isClosed){
+ const ref = challenge.properties["ref:velopark"]
+ solvedRefs .add(ref)
+ }
+ }
+ }
+ console.log("Detected", solvedRefs,"as closed on mapRoulette")
+ return solvedRefs
+ }
+
+ /**
+ * Creates an extra version where all bicycle parkings which are already linked are removed.
+ * Fetches the latest OSM-data from overpass
+ * @param allVelopark
+ * @private
+ */
private static async createDiff(allVelopark: Feature[]) {
+ console.log("Creating diff...")
const bboxBelgium = new BBox([
[2.51357303225, 49.5294835476],
[6.15665815596, 51.4750237087],
@@ -146,42 +181,71 @@ class VeloParkToGeojson extends Script {
[],
Constants.defaultOverpassUrls[0],
new ImmutableStore(60 * 5),
- false
+ false,
)
const alreadyLinkedFeatures = (await alreadyLinkedQuery.queryGeoJson(bboxBelgium))[0]
const seenIds = new Set(
- alreadyLinkedFeatures.features.map((f) => f.properties?.["ref:velopark"])
+ alreadyLinkedFeatures.features.map((f) => f.properties?.["ref:velopark"]),
)
this.exportGeojsonTo("osm_with_velopark_link", alreadyLinkedFeatures.features)
console.log("OpenStreetMap contains", seenIds.size, "bicycle parkings with a velopark ref")
const features: Feature[] = allVelopark.filter(
- (f) => !seenIds.has(f.properties["ref:velopark"])
+ (f) => !seenIds.has(f.properties["ref:velopark"]),
)
VeloParkToGeojson.exportGeojsonTo("velopark_nonsynced", features)
+ const synced =await this.fetchMapRouletteClosedItems()
+ const featuresMoreFiltered = features.filter(
+ (f) => !synced.has(f.properties["ref:velopark"])
+ )
+ VeloParkToGeojson.exportGeojsonTo("velopark_nonsynced_nonclosed", featuresMoreFiltered)
+
+
+
+ const featuresMoreFilteredFailed = features.filter(
+ (f) => synced.has(f.properties["ref:velopark"])
+ )
+ VeloParkToGeojson.exportGeojsonTo("velopark_nonsynced_human_import_failed", featuresMoreFilteredFailed)
+
const allProperties = new Set()
- for (const feature of features) {
- Object.keys(feature).forEach((k) => allProperties.add(k))
+ for (const feature of featuresMoreFiltered) {
+ Object.keys(feature.properties).forEach((k) => allProperties.add(k))
}
allProperties.delete("ref:velopark")
- for (const feature of features) {
+ for (const feature of featuresMoreFiltered) {
allProperties.forEach((k) => {
- delete feature[k]
+ if(k === "ref:velopark"){
+ return
+ }
+ delete feature.properties[k]
})
}
- this.exportGeojsonTo("velopark_nonsynced_id_only", features)
+ this.exportGeojsonTo("velopark_nonsynced_nonclosed_id_only", featuresMoreFiltered)
+ }
+
+ public static async findMultiSection(): Promise {
+ const url = "https://www.velopark.be/api/parkings/1000"
+ const raw = await Utils.downloadJson<{"@graph": {}[], url: string}[]>(url)
+ const multiEntries: string[] = []
+ for (const entry of raw) {
+ if(entry["@graph"].length > 1){
+ multiEntries.push(entry.url)
+ }
+ }
+ return multiEntries
}
async main(): Promise {
+ // const multiEntries = new Set(await VeloParkToGeojson.findMultiSection())
const allVelopark =
VeloParkToGeojson.loadFromFile() ?? (await VeloParkToGeojson.downloadData())
console.log("Got", allVelopark.length, " items")
VeloParkToGeojson.exportExtraAmenities(allVelopark)
await VeloParkToGeojson.createDiff(allVelopark)
console.log(
- "Use vite-node scripts/velopark/compare.ts to compare the results and generate a diff file"
+ "Use vite-node scripts/velopark/compare.ts to compare the results and generate a diff file",
)
}
}
diff --git a/src/Logic/Actors/GeoLocationHandler.ts b/src/Logic/Actors/GeoLocationHandler.ts
index 1909daa52..c97a75c8e 100644
--- a/src/Logic/Actors/GeoLocationHandler.ts
+++ b/src/Logic/Actors/GeoLocationHandler.ts
@@ -8,10 +8,11 @@ import { FeatureSource, WritableFeatureSource } from "../FeatureSource/FeatureSo
import { LocalStorageSource } from "../Web/LocalStorageSource"
import { GeoOperations } from "../GeoOperations"
import { OsmTags } from "../../Models/OsmFeature"
-import StaticFeatureSource from "../FeatureSource/Sources/StaticFeatureSource"
+import StaticFeatureSource, { WritableStaticFeatureSource } from "../FeatureSource/Sources/StaticFeatureSource"
import { MapProperties } from "../../Models/MapProperties"
import { Orientation } from "../../Sensors/Orientation"
+"use strict"
/**
* The geolocation-handler takes a map-location and a geolocation state.
* It'll move the map as appropriate given the state of the geolocation-API
@@ -43,13 +44,13 @@ export default class GeoLocationHandler {
public readonly mapHasMoved: UIEventSource = new UIEventSource<
Date | undefined
>(undefined)
- private readonly selectedElement: UIEventSource
+ private readonly selectedElement: UIEventSource
private readonly mapProperties?: MapProperties
private readonly gpsLocationHistoryRetentionTime?: UIEventSource
constructor(
geolocationState: GeoLocationState,
- selectedElement: UIEventSource,
+ selectedElement: UIEventSource,
mapProperties?: MapProperties,
gpsLocationHistoryRetentionTime?: UIEventSource
) {
@@ -59,13 +60,12 @@ export default class GeoLocationHandler {
this.mapProperties = mapProperties
this.gpsLocationHistoryRetentionTime = gpsLocationHistoryRetentionTime
// Did an interaction move the map?
- let self = this
- let initTime = new Date()
- mapLocation.addCallbackD((_) => {
+ const initTime = new Date()
+ mapLocation.addCallbackD(() => {
if (new Date().getTime() - initTime.getTime() < 250) {
return
}
- self.mapHasMoved.setData(new Date())
+ this.mapHasMoved.setData(new Date())
return true // Unsubscribe
})
@@ -76,12 +76,12 @@ export default class GeoLocationHandler {
this.mapHasMoved.setData(new Date())
}
- this.geolocationState.currentGPSLocation.addCallbackAndRunD((_) => {
+ this.geolocationState.currentGPSLocation.addCallbackAndRunD(() => {
const timeSinceLastRequest =
(new Date().getTime() - geolocationState.requestMoment.data?.getTime() ?? 0) / 1000
if (!this.mapHasMoved.data) {
// The map hasn't moved yet; we received our first coordinates, so let's move there!
- self.MoveMapToCurrentLocation()
+ this.MoveMapToCurrentLocation()
}
if (
timeSinceLastRequest < Constants.zoomToLocationTimeout &&
@@ -90,12 +90,12 @@ export default class GeoLocationHandler {
geolocationState.requestMoment.data?.getTime())
) {
// still within request time and the map hasn't moved since requesting to jump to the current location
- self.MoveMapToCurrentLocation()
+ this.MoveMapToCurrentLocation()
}
if (!this.geolocationState.allowMoving.data) {
// Jup, the map is locked to the bound location: move automatically
- self.MoveMapToCurrentLocation(0)
+ this.MoveMapToCurrentLocation(0)
return
}
})
@@ -183,7 +183,7 @@ export default class GeoLocationHandler {
}
private initUserLocationTrail() {
- const features = LocalStorageSource.getParsed("gps_location_history", [])
+ const features = LocalStorageSource.getParsed[]>("gps_location_history", [])
const now = new Date().getTime()
features.data = features.data.filter((ff) => {
if (ff.properties === undefined) {
@@ -230,7 +230,7 @@ export default class GeoLocationHandler {
features.ping()
})
- this.historicalUserLocations = new StaticFeatureSource(features)
+ this.historicalUserLocations = new WritableStaticFeatureSource>(features)
const asLine = features.map((allPoints) => {
if (allPoints === undefined || allPoints.length < 2) {
diff --git a/src/Logic/Actors/InitialMapPositioning.ts b/src/Logic/Actors/InitialMapPositioning.ts
index d61ab3803..04348a544 100644
--- a/src/Logic/Actors/InitialMapPositioning.ts
+++ b/src/Logic/Actors/InitialMapPositioning.ts
@@ -4,10 +4,12 @@ import { LocalStorageSource } from "../Web/LocalStorageSource"
import { QueryParameters } from "../Web/QueryParameters"
import Hash from "../Web/Hash"
import OsmObjectDownloader from "../Osm/OsmObjectDownloader"
-import { OsmObject } from "../Osm/OsmObject"
import Constants from "../../Models/Constants"
import { Utils } from "../../Utils"
import { GeoLocationState } from "../State/GeoLocationState"
+import { OsmConnection } from "../Osm/OsmConnection"
+
+"use strict"
/**
* This actor is responsible to set the map location.
@@ -25,7 +27,7 @@ export default class InitialMapPositioning {
public location: UIEventSource<{ lon: number; lat: number }>
public useTerrain: Store
- constructor(layoutToUse: ThemeConfig, geolocationState: GeoLocationState) {
+ constructor(layoutToUse: ThemeConfig, geolocationState: GeoLocationState, osmConnection: OsmConnection) {
function localStorageSynced(
key: string,
deflt: number,
@@ -47,7 +49,6 @@ export default class InitialMapPositioning {
return src
}
- const initialHash = Hash.hash.data
// -- Location control initialization
this.zoom = localStorageSynced(
@@ -72,6 +73,7 @@ export default class InitialMapPositioning {
})
this.useTerrain = new ImmutableStore(layoutToUse.enableTerrain)
+ const initialHash = Hash.hash.data
if (initialHash?.match(/^(node|way|relation)\/[0-9]+$/)) {
// We pan to the selected element
const [type, id] = initialHash.split("/")
@@ -88,6 +90,17 @@ export default class InitialMapPositioning {
const [lat, lon] = osmObject.centerpoint()
this.location.setData({ lon, lat })
})
+ } else if (layoutToUse.id === "notes" && initialHash?.match(/[0-9]+/)) {
+ console.log("Loading note", initialHash)
+ const noteId = Number(initialHash)
+ if (osmConnection.isLoggedIn.data) {
+ osmConnection.getNote(noteId).then(note => {
+ const [lon, lat] = note.geometry.coordinates
+ console.log("Got note:", note)
+ this.location.set({ lon, lat })
+ }
+ )
+ }
} else if (
Constants.GeoIpServer &&
lat.data === defaultLat &&
diff --git a/src/Logic/FeatureSource/Sources/StaticFeatureSource.ts b/src/Logic/FeatureSource/Sources/StaticFeatureSource.ts
index df1fe8f49..dcfeada40 100644
--- a/src/Logic/FeatureSource/Sources/StaticFeatureSource.ts
+++ b/src/Logic/FeatureSource/Sources/StaticFeatureSource.ts
@@ -1,7 +1,8 @@
-import { FeatureSource } from "../FeatureSource"
-import { ImmutableStore, Store } from "../../UIEventSource"
+import { FeatureSource, WritableFeatureSource } from "../FeatureSource"
+import { ImmutableStore, Store, UIEventSource } from "../../UIEventSource"
import { Feature } from "geojson"
+"use strict"
/**
* A simple, read only feature store.
*/
@@ -30,3 +31,28 @@ export default class StaticFeatureSource implements
return new StaticFeatureSource(geojson)
}
}
+
+export class WritableStaticFeatureSource implements WritableFeatureSource {
+ public readonly features: UIEventSource = undefined
+
+ constructor(features: UIEventSource | T[] | { features: T[] } | { features: Store }) {
+ if (features === undefined) {
+ throw "Static feature source received undefined as source"
+ }
+
+ let feats: T[] | UIEventSource
+
+ if (features["features"]) {
+ feats = features["features"]
+ } else {
+ feats = >features
+ }
+
+ if (Array.isArray(feats)) {
+ this.features = new UIEventSource(feats)
+ } else {
+ this.features = feats
+ }
+
+ }
+}
diff --git a/src/Logic/Maproulette.ts b/src/Logic/Maproulette.ts
index fd561ede7..51f45cd52 100644
--- a/src/Logic/Maproulette.ts
+++ b/src/Logic/Maproulette.ts
@@ -6,6 +6,17 @@ export interface MaprouletteTask {
description: string
instruction: string
}
+export const maprouletteStatus = ["Open",
+ "Fixed",
+ "False_positive",
+ "Skipped",
+ "Deleted",
+ "Already fixed",
+ "Too_Hard",
+ "Disabled",
+] as const
+
+export type MaprouletteStatus = typeof maprouletteStatus[number]
export default class Maproulette {
public static readonly defaultEndpoint = "https://maproulette.org/api/v2"
@@ -19,16 +30,7 @@ export default class Maproulette {
public static readonly STATUS_TOO_HARD = 6
public static readonly STATUS_DISABLED = 9
- public static readonly STATUS_MEANING = {
- 0: "Open",
- 1: "Fixed",
- 2: "False_positive",
- 3: "Skipped",
- 4: "Deleted",
- 5: "Already fixed",
- 6: "Too_Hard",
- 9: "Disabled"
- }
+
public static singleton = new Maproulette()
/*
* The API endpoint to use
@@ -62,12 +64,11 @@ export default class Maproulette {
if (code === "Created") {
return Maproulette.STATUS_OPEN
}
- for (let i = 0; i < 9; i++) {
- if (Maproulette.STATUS_MEANING["" + i] === code) {
- return i
- }
+ const i = maprouletteStatus.findIndex( code)
+ if(i < 0){
+ return undefined
}
- return undefined
+ return i
}
/**
@@ -87,7 +88,7 @@ export default class Maproulette {
tags?: string
requestReview?: boolean
completionResponses?: Record
- }
+ },
): Promise {
console.log("Maproulette: setting", `${this.endpoint}/task/${taskId}/${status}`, options)
options ??= {}
@@ -97,9 +98,9 @@ export default class Maproulette {
method: "PUT",
headers: {
"Content-Type": "application/json",
- apiKey: this.apiKey
+ apiKey: this.apiKey,
},
- body: JSON.stringify(options)
+ body: JSON.stringify(options),
})
if (response.status !== 204) {
console.log(`Failed to close task: ${response.status}`)
diff --git a/src/Logic/Osm/Changes.ts b/src/Logic/Osm/Changes.ts
index 69fd53f85..d33c395f9 100644
--- a/src/Logic/Osm/Changes.ts
+++ b/src/Logic/Osm/Changes.ts
@@ -600,7 +600,7 @@ export class Changes {
" trying again before dropping it from the changes (" +
e +
")"
- this._reportError(msg)
+ // this._reportError(msg) // We don't report this yet, might be a temporary fluke
const osmObj = await downloader.DownloadObjectAsync(id, 0)
return { id, osmObj }
}
diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts
index ff26a3203..ed5c5bdc9 100644
--- a/src/Logic/Osm/OsmConnection.ts
+++ b/src/Logic/Osm/OsmConnection.ts
@@ -5,6 +5,7 @@ import { Utils } from "../../Utils"
import { LocalStorageSource } from "../Web/LocalStorageSource"
import { AuthConfig } from "./AuthConfig"
import Constants from "../../Models/Constants"
+import { Feature, Point } from "geojson"
interface OsmUserInfo {
id: number
@@ -248,7 +249,7 @@ export class OsmConnection {
this.auth.xhr(
{
method: "GET",
- path: "/api/0.6/user/details",
+ path: "/api/0.6/user/details"
},
(err, details: XMLDocument) => {
if (err != null) {
@@ -360,7 +361,7 @@ export class OsmConnection {
method,
headers: header,
content,
- path: `/api/0.6/${path}`,
+ path: `/api/0.6/${path}`
},
function(err, response) {
if (err !== null) {
@@ -442,7 +443,7 @@ export class OsmConnection {
"notes.json",
content,
{
- "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
+ "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
},
true,
)
@@ -453,6 +454,12 @@ export class OsmConnection {
return id
}
+ public async getNote(id: number): Promise> {
+ return JSON.parse(await this.get(
+ "notes/" + id + ".json"
+ ))
+ }
+
public static GpxTrackVisibility = ["private", "public", "trackable", "identifiable"] as const
public async uploadGpxTrack(
@@ -483,7 +490,7 @@ export class OsmConnection {
file: gpx,
description: options.description,
tags: options.labels?.join(",") ?? "",
- visibility: options.visibility,
+ visibility: options.visibility
}
if (!contents.description) {
@@ -493,9 +500,9 @@ export class OsmConnection {
file:
"; filename=\"" +
(options.filename ?? "gpx_track_mapcomplete_" + new Date().toISOString()) +
- "\"\r\nContent-Type: application/gpx+xml",
+ '"\r\nContent-Type: application/gpx+xml',
}
-
+user
const boundary = "987654"
let body = ""
@@ -512,7 +519,7 @@ export class OsmConnection {
const response = await this.post("gpx/create", body, {
"Content-Type": "multipart/form-data; boundary=" + boundary,
- "Content-Length": "" + body.length,
+ "Content-Length": "" + body.length
})
const parsed = JSON.parse(response)
console.log("Uploaded GPX track", parsed)
@@ -533,7 +540,7 @@ export class OsmConnection {
{
method: "POST",
- path: `/api/0.6/notes/${id}/comment?text=${encodeURIComponent(text)}`,
+ path: `/api/0.6/notes/${id}/comment?text=${encodeURIComponent(text)}`
},
function(err) {
if (err !== null) {
@@ -571,7 +578,7 @@ export class OsmConnection {
*/
singlepage: !this._iframeMode,
auto: true,
- apiUrl: this._oauth_config.api_url ?? this._oauth_config.url,
+ apiUrl: this._oauth_config.api_url ?? this._oauth_config.url
})
}
diff --git a/src/Logic/State/UserSettingsMetaTagging.ts b/src/Logic/State/UserSettingsMetaTagging.ts
index 6e568c5c3..33a5ae85b 100644
--- a/src/Logic/State/UserSettingsMetaTagging.ts
+++ b/src/Logic/State/UserSettingsMetaTagging.ts
@@ -1,42 +1,14 @@
import { Utils } from "../../Utils"
/** This code is autogenerated - do not edit. Edit ./assets/layers/usersettings/usersettings.json instead */
export class ThemeMetaTagging {
- public static readonly themeName = "usersettings"
+ public static readonly themeName = "usersettings"
- public metaTaggging_for_usersettings(feat: { properties: Record }) {
- Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_md", () =>
- feat.properties._description
- .match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)
- ?.at(1)
- )
- Utils.AddLazyProperty(
- feat.properties,
- "_d",
- () => feat.properties._description?.replace(/</g, "<")?.replace(/>/g, ">") ?? ""
- )
- Utils.AddLazyProperty(feat.properties, "_mastodon_candidate_a", () =>
- ((feat) => {
- const e = document.createElement("div")
- e.innerHTML = feat.properties._d
- return Array.from(e.getElementsByTagName("a")).filter(
- (a) => a.href.match(/mastodon|en.osm.town/) !== null
- )[0]?.href
- })(feat)
- )
- Utils.AddLazyProperty(feat.properties, "_mastodon_link", () =>
- ((feat) => {
- const e = document.createElement("div")
- e.innerHTML = feat.properties._d
- return Array.from(e.getElementsByTagName("a")).filter(
- (a) => a.getAttribute("rel")?.indexOf("me") >= 0
- )[0]?.href
- })(feat)
- )
- Utils.AddLazyProperty(
- feat.properties,
- "_mastodon_candidate",
- () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a
- )
- feat.properties["__current_backgroun"] = "initial_value"
- }
-}
+ public metaTaggging_for_usersettings(feat: {properties: Record}) {
+ Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_md', () => feat.properties._description.match(/\[[^\]]*\]\((.*(mastodon|en.osm.town).*)\).*/)?.at(1) )
+ Utils.AddLazyProperty(feat.properties, '_d', () => feat.properties._description?.replace(/</g,'<')?.replace(/>/g,'>') ?? '' )
+ Utils.AddLazyProperty(feat.properties, '_mastodon_candidate_a', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.href.match(/mastodon|en.osm.town/) !== null)[0]?.href }) (feat) )
+ Utils.AddLazyProperty(feat.properties, '_mastodon_link', () => (feat => {const e = document.createElement('div');e.innerHTML = feat.properties._d;return Array.from(e.getElementsByTagName("a")).filter(a => a.getAttribute("rel")?.indexOf('me') >= 0)[0]?.href})(feat) )
+ Utils.AddLazyProperty(feat.properties, '_mastodon_candidate', () => feat.properties._mastodon_candidate_md ?? feat.properties._mastodon_candidate_a )
+ feat.properties['__current_backgroun'] = 'initial_value'
+ }
+}
\ No newline at end of file
diff --git a/src/Logic/Web/LinkedDataLoader.ts b/src/Logic/Web/LinkedDataLoader.ts
index 268fd4865..16b3b0ee3 100644
--- a/src/Logic/Web/LinkedDataLoader.ts
+++ b/src/Logic/Web/LinkedDataLoader.ts
@@ -68,7 +68,7 @@ export default class LinkedDataLoader {
coors
.trim()
.split(" ")
- .map((n) => Number(n))
+ .map((n) => Number(n)),
),
],
}
@@ -156,7 +156,7 @@ export default class LinkedDataLoader {
}
const compacted = await jsonld.compact(
openingHoursSpecification,
- LinkedDataLoader.COMPACTING_CONTEXT_OH
+ LinkedDataLoader.COMPACTING_CONTEXT_OH,
)
const spec: object = compacted["@graph"]
if (!spec) {
@@ -190,12 +190,12 @@ export default class LinkedDataLoader {
const compacted = await jsonld.compact(data, LinkedDataLoader.COMPACTING_CONTEXT)
compacted["opening_hours"] = await LinkedDataLoader.ohToOsmFormat(
- compacted["opening_hours"]
+ compacted["opening_hours"],
)
if (compacted["openingHours"]) {
const ohspec: string[] = compacted["openingHours"]
compacted["opening_hours"] = OH.simplify(
- ohspec.map((r) => LinkedDataLoader.ohStringToOsmFormat(r)).join("; ")
+ ohspec.map((r) => LinkedDataLoader.ohStringToOsmFormat(r)).join("; "),
)
delete compacted["openingHours"]
}
@@ -236,7 +236,7 @@ export default class LinkedDataLoader {
static async fetchJsonLd(
url: string,
options?: JsonLdLoaderOptions,
- mode?: "fetch-lod" | "fetch-raw" | "proxy"
+ mode?: "fetch-lod" | "fetch-raw" | "proxy",
): Promise