diff --git a/assets/layers/bike_parking/bike_parking.json b/assets/layers/bike_parking/bike_parking.json
index c507138acf..ee3c766195 100644
--- a/assets/layers/bike_parking/bike_parking.json
+++ b/assets/layers/bike_parking/bike_parking.json
@@ -677,6 +677,20 @@
]
}
},
+ {
+ "id": "operator",
+ "question": {
+ "en": "Who maintains this bicycle parking?",
+ "nl": "Wie beheert deze fietsenstalling?"
+ },
+ "render": {
+ "en": "This bicycle parking is maintained by {operator}",
+ "nl": "Deze fietsenstalling wordt beheerd door {operator}"
+ },
+ "freeform": {
+ "key": "operator"
+ }
+ },
{
"id": "operator_phone",
"question": {
diff --git a/assets/themes/atm/atm.json b/assets/themes/atm/atm.json
index 2a625cd041..7d848ac6f6 100644
--- a/assets/themes/atm/atm.json
+++ b/assets/themes/atm/atm.json
@@ -57,7 +57,7 @@
"minzoom": 18,
"name": null,
"filter": {
- "sameAs": "bank_with_atm"
+ "sameAs": "banks_with_atm"
},
"doCount": false
}
diff --git a/assets/themes/cyclofix/cyclofix.json b/assets/themes/cyclofix/cyclofix.json
index e1361596fd..279ee784f1 100644
--- a/assets/themes/cyclofix/cyclofix.json
+++ b/assets/themes/cyclofix/cyclofix.json
@@ -151,7 +151,7 @@
"override": {
"name": null,
"filter": {
- "sameAs": "charging_station_ebike"
+ "sameAs": "charging_station_ebikes"
},
"minzoom": 18
}
diff --git a/assets/themes/openlovemap/openlovemap.json b/assets/themes/openlovemap/openlovemap.json
index b065d55f84..5591b0afcf 100644
--- a/assets/themes/openlovemap/openlovemap.json
+++ b/assets/themes/openlovemap/openlovemap.json
@@ -53,7 +53,7 @@
"=name": null,
"doCount": false,
"=filter": {
- "sameAs": "erotic-shop"
+ "sameAs": "erotic_shop"
}
}
},
diff --git a/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json b/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json
index 52d99d2cbd..1af74e222e 100644
--- a/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json
+++ b/assets/themes/toerisme_vlaanderen/toerisme_vlaanderen.json
@@ -83,7 +83,7 @@
"override": {
"name": null,
"filter": {
- "sameAs": "charging_station_ebike"
+ "sameAs": "charging_station_ebikes"
},
"minzoom": 18,
"=presets": []
diff --git a/assets/themes/velopark/velopark.json b/assets/themes/velopark/velopark.json
index 231db229ba..5ea69929d1 100644
--- a/assets/themes/velopark/velopark.json
+++ b/assets/themes/velopark/velopark.json
@@ -9,8 +9,8 @@
"en"
],
"description": {
- "en": "
Velopark.be is a website collecting data about bicycle parkings in a semi-crowdsourced way. However, only 'authorized' instances are allowed to make changes there, in practice the operator of the bicycle parking such as SNCB, de Lijn or the municipality. They have now decided to synchronize their dataset with OpenStreetMap, and this MapComplete-instance is set up to help link and import their data into OpenStreetMap.
How to use: - A velopark-icon on the map (yellow with bicycle silhouette) represents a bicycle known by Velopark but not yet known by OpenStreetMap
- Blue pins are bicycle parkings known by OpenStreetMap
- Light blue pins are bicycle parkings known by OpenStreetMap with a reference to Velopark.be (ref-velopark=*)
- Click a velopark item, you can either link it with a nearby OSM-bicycle parking or create a new bicycle parking. Note that the geometry of Velopark is often incorrect and can be a few up till 100 meters away from the actual bicycle parking. Use aerial imagery, linked images and streetview to determine the correct location
- Once linked, you can compare the Velopark- and OSM-attributes and apply correct attributes
- If Velopark has an image, you can also link the image
That's it! Thanks for helping to import this!",
- "nl": "Velopark.be is een website die data verzamelt over fietsenstallingen in een semi-crowdsource manier. Hierbij kunnen enkel geautorizeerde gebruikers data bijdragen, in de praktijk de uitbaters van de fietsenstallingen zoals de bevoegde gemeentebesturen, de NMBS of de Lijn. Velopark.be heeft nu beslist om hun data met OpenStreetMap te synchronizeren. Deze website is de tool om van Velopark.be naar OpenStreetMap te gaan en hun data te importeren.
Hoe te gebruiken? - Een velopark-logo op de kaart (geel met een fietssilhouette) duidt een fietsenstalling aan die gekend is in Velopark maar nog niet gekend (of gelinkt) is aan een fietsenstalling in OpenStreetMap
- Een blauwe pin duidt een fietsenstalling aan die gekend is in OpenStreetMap
- Een licht-blauwe pin duidt een fietsenstalling aan uit OpenStreetMap die een link heeft naar Velopark.be (ref-velopark=*)
- Als je op een velopark-item klikt op, kan je deze linken met een fietsenstalling in de buurt (<25m) of een nieuwe fietstalling aan OpenStreetMap toevoegen. Let op: de geometrie van Velopark is zelden correct en wijkt makkelijk 10 meter of meer af van de echte locatie - in uitzonderlijke gevallen zelfs tot meer dan 100 meter. Gebruik de meest recente luchtfoto's, de gelinkte foto's en mapillary om de correcte locatie te bepalen
- Eens gelinkt, kan je de Velopark- en OSM-attributen vergelijken en de correcte attributen toepassen in OpenStreetMap
- Indien velopark een foto heeft, kan je die ook nog linken
Dat is het! Bedankt om mee te helpen!"
+ "en": "Velopark.be is a website collecting data about bicycle parkings in a semi-crowdsourced way. However, only 'authorized' instances are allowed to make changes there, in practice the operator of the bicycle parking such as SNCB, de Lijn or the municipality. They have now decided to synchronize their dataset with OpenStreetMap, and this MapComplete-instance is set up to help link and import their data into OpenStreetMap.
How to use: - A velopark-icon on the map (yellow with bicycle silhouette) represents a bicycle known by Velopark but not yet known by OpenStreetMap
- Blue pins are bicycle parkings known by OpenStreetMap
ref-velopark=*)- Click a velopark item, you can either link it with a nearby OSM-bicycle parking or create a new bicycle parking. Note that the geometry of Velopark is often incorrect and can be a few up till 100 meters away from the actual bicycle parking. Use aerial imagery, linked images and streetview to determine the correct location
- Once linked, you can compare the Velopark- and OSM-attributes and apply correct attributes
- If Velopark has an image, you can also link the image
That's it! Thanks for helping to import this!",
+ "nl": "Velopark.be is een website die data verzamelt over fietsenstallingen in een semi-crowdsource manier. Hierbij kunnen enkel geautorizeerde gebruikers data bijdragen, in de praktijk de uitbaters van de fietsenstallingen zoals de bevoegde gemeentebesturen, de NMBS of de Lijn. Velopark.be heeft nu beslist om hun data met OpenStreetMap te synchronizeren. Deze website is de tool om van Velopark.be naar OpenStreetMap te gaan en hun data te importeren.
Hoe te gebruiken? - Een velopark-logo op de kaart (geel met een fietssilhouette) duidt een fietsenstalling aan die gekend is in Velopark maar nog niet gekend (of gelinkt) is aan een fietsenstalling in OpenStreetMap
- Een groene pin duidt een fietsenstalling aan die gekend is in OpenStreetMap
- Een licht-blauwe pin duidt een fietsenstalling aan uit OpenStreetMap die een link heeft naar Velopark.be (ref-velopark=*)
- Als je op een velopark-item klikt op, kan je deze linken met een fietsenstalling in de buurt (<25m) of een nieuwe fietstalling aan OpenStreetMap toevoegen. Let op: de geometrie van Velopark is zelden correct en wijkt makkelijk 10 meter of meer af van de echte locatie - in uitzonderlijke gevallen zelfs tot meer dan 100 meter. Gebruik de meest recente luchtfoto's, de gelinkte foto's en mapillary om de correcte locatie te bepalen
- Eens gelinkt, kan je de Velopark- en OSM-attributen vergelijken en de correcte attributen toepassen in OpenStreetMap
- Indien velopark een foto heeft, kan je die ook nog linken
Dat is het! Bedankt om mee te helpen!"
},
"shortDescription": {
"en": "A tool to import data from velopark.be into OpenStreetMap",
diff --git a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts
index cc2c43a413..04d9e9232b 100644
--- a/src/Models/ThemeConfig/Conversion/PrepareTheme.ts
+++ b/src/Models/ThemeConfig/Conversion/PrepareTheme.ts
@@ -600,6 +600,23 @@ class PostvalidateTheme extends DesugaringStep {
}
}
+ for (const layer of json.layers) {
+ if(typeof layer === "string"){
+ continue
+ }
+ const config = layer;
+ const sameAs = config.filter?.["sameAs"]
+ if(!sameAs){
+ continue
+ }
+
+ const matchingLayer = json.layers.find(l => l["id"] === sameAs)
+ if(!matchingLayer){
+ const closeLayers = Utils.sortedByLevenshteinDistance(sameAs, json.layers, l => l["id"]).map(l => l["id"])
+ context.enters("layers", config.id, "filter","sameAs").err("The layer "+config.id+" follows the filter state of layer "+sameAs+", but no layer with this name was found.\n\tDid you perhaps mean one of: "+closeLayers.slice(0, 3).join(", "))
+ }
+ }
+
return json
}
}