diff --git a/.versionrc.json b/.versionrc.json
index 00287e8f9..56c4e8220 100644
--- a/.versionrc.json
+++ b/.versionrc.json
@@ -20,6 +20,6 @@
{"type": "perf", "hidden": true},
{"type": "test", "hidden": true}
],
- "commitUrlFormat": "https://github.com/pietervdvn/mapcomplete/commits{{hash}}",
+ "commitUrlFormat": "https://github.com/pietervdvn/mapcomplete/commits/{{hash}}",
"compareUrlFormat": "https://github.com/pietervdvn/mapcomplete/compare/{{previousTag}}...{{currentTag}}"
}
diff --git a/langs/layers/nl.json b/langs/layers/nl.json
index eeb48492c..74bf33124 100644
--- a/langs/layers/nl.json
+++ b/langs/layers/nl.json
@@ -2036,6 +2036,9 @@
},
"title": {
"mappings": {
+ "0": {
+ "then": "{name}"
+ },
"1": {
"then": "Vogelkijkhut {name}"
},
@@ -6340,6 +6343,11 @@
}
},
"title": {
+ "mappings": {
+ "0": {
+ "then": "{name}"
+ }
+ },
"render": "Natuurgebied"
}
},
@@ -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": {
@@ -8428,6 +8451,9 @@
},
"title": {
"mappings": {
+ "0": {
+ "then": "{name}"
+ },
"1": {
"then": "Voetpad"
},
@@ -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/themes/nl.json b/langs/themes/nl.json
index 47a5f8968..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. ",
@@ -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",
@@ -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/package-lock.json b/package-lock.json
index f59b32b1f..f28f32577 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8020,9 +8020,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001687",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz",
- "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==",
+ "version": "1.0.30001689",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz",
+ "integrity": "sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==",
"dev": true,
"funding": [
{
@@ -26969,9 +26969,9 @@
}
},
"caniuse-lite": {
- "version": "1.0.30001687",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001687.tgz",
- "integrity": "sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==",
+ "version": "1.0.30001689",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz",
+ "integrity": "sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==",
"dev": true
},
"canonicalize": {
diff --git a/scripts/velopark/veloParkToGeojson.ts b/scripts/velopark/veloParkToGeojson.ts
index 9634df49a..1887b5fa4 100644
--- a/scripts/velopark/veloParkToGeojson.ts
+++ b/scripts/velopark/veloParkToGeojson.ts
@@ -13,7 +13,7 @@ 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"
)
}
@@ -24,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)")
}
@@ -66,7 +66,7 @@ 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= (await Utils.downloadJson<{ url: string }[]>(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")
@@ -86,7 +86,7 @@ class VeloParkToGeojson extends Script {
console.error("Loading ", f.url, " failed due to", e)
failed++
}
- }),
+ })
)
console.log("Batch complete:", i)
}
@@ -94,7 +94,7 @@ class VeloParkToGeojson extends Script {
"Fetching data done, got ",
allVelopark.length + "/" + allVeloparkRaw.length,
"failed:",
- failed,
+ failed
)
VeloParkToGeojson.exportGeojsonTo("velopark_all", allVelopark)
@@ -142,24 +142,34 @@ class VeloParkToGeojson extends Script {
private static async fetchMapRouletteClosedItems() {
const challenges = ["https://maproulette.org/api/v2/challenge/view/43282"]
- const solvedRefs: Set = new Set();
+ const solvedRefs: Set = new Set()
for (const url of challenges) {
- const data = await Utils.downloadJson>(url)
+ const data = await Utils.downloadJson<
+ FeatureCollection<
+ Point,
+ {
+ mr_taskId: string
+ "ref:velopark": string
+ mr_taskStatus: MaprouletteStatus
+ mr_responses: string | undefined
+ }
+ >
+ >(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 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)
+ solvedRefs.add(ref)
}
}
}
- console.log("Detected", solvedRefs,"as closed on mapRoulette")
+ console.log("Detected", solvedRefs, "as closed on mapRoulette")
return solvedRefs
}
@@ -181,32 +191,33 @@ 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 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"])
+ const featuresMoreFilteredFailed = features.filter((f) =>
+ synced.has(f.properties["ref:velopark"])
+ )
+ VeloParkToGeojson.exportGeojsonTo(
+ "velopark_nonsynced_human_import_failed",
+ featuresMoreFilteredFailed
)
- VeloParkToGeojson.exportGeojsonTo("velopark_nonsynced_human_import_failed", featuresMoreFilteredFailed)
const allProperties = new Set()
for (const feature of featuresMoreFiltered) {
@@ -215,7 +226,7 @@ class VeloParkToGeojson extends Script {
allProperties.delete("ref:velopark")
for (const feature of featuresMoreFiltered) {
allProperties.forEach((k) => {
- if(k === "ref:velopark"){
+ if (k === "ref:velopark") {
return
}
delete feature.properties[k]
@@ -227,10 +238,10 @@ class VeloParkToGeojson extends Script {
public static async findMultiSection(): Promise {
const url = "https://www.velopark.be/api/parkings/1000"
- const raw = await Utils.downloadJson<{"@graph": {}[], url: string}[]>(url)
+ const raw = await Utils.downloadJson<{ "@graph": {}[]; url: string }[]>(url)
const multiEntries: string[] = []
for (const entry of raw) {
- if(entry["@graph"].length > 1){
+ if (entry["@graph"].length > 1) {
multiEntries.push(entry.url)
}
}
@@ -245,7 +256,7 @@ class VeloParkToGeojson extends Script {
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/Maproulette.ts b/src/Logic/Maproulette.ts
index c1188d973..4db0a5b01 100644
--- a/src/Logic/Maproulette.ts
+++ b/src/Logic/Maproulette.ts
@@ -64,7 +64,7 @@ export default class Maproulette {
if (code === "Created") {
return Maproulette.STATUS_OPEN
}
- const i = maprouletteStatus.findIndex(code)
+ const i = maprouletteStatus.indexOf(code)
if (i < 0) {
return undefined
}
diff --git a/test/Models/ThemeConfig/Conversion/PrepareLayer.spec.ts b/test/Models/ThemeConfig/Conversion/PrepareLayer.spec.ts
index 1b4a95ee2..26f168f87 100644
--- a/test/Models/ThemeConfig/Conversion/PrepareLayer.spec.ts
+++ b/test/Models/ThemeConfig/Conversion/PrepareLayer.spec.ts
@@ -128,7 +128,7 @@ describe("RewriteSpecial", function () {
expect(r).toEqual({
id: "uk_addresses_import_button",
render: {
- "*": "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,)}",
+ "*": "{import_button(address,urpn_count=$urpn_count;ref:GB:uprn=$ref:GB:uprn$,Add this address,./assets/themes/uk_addresses/housenumber_add.svg,,,,,)}",
},
})
})