From a7f2c26a1def08a27f2fa5fe623be6f9eff4cb16 Mon Sep 17 00:00:00 2001 From: Robin van der Linde Date: Sat, 9 Jul 2022 21:41:33 +0000 Subject: [PATCH] Concept for rendering maproulette tasks --- Logic/FeatureSource/Sources/GeoJsonSource.ts | 22 +++ assets/themes/maproulette/maproulette.json | 145 +++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 assets/themes/maproulette/maproulette.json diff --git a/Logic/FeatureSource/Sources/GeoJsonSource.ts b/Logic/FeatureSource/Sources/GeoJsonSource.ts index 1443760cae..1deca987ce 100644 --- a/Logic/FeatureSource/Sources/GeoJsonSource.ts +++ b/Logic/FeatureSource/Sources/GeoJsonSource.ts @@ -82,6 +82,28 @@ export default class GeoJsonSource implements FeatureSourceForLayer, Tiled { Utils.downloadJsonCached(url, 60 * 60) .then(json => { self.state.setData("loaded") + // TODO: move somewhere else, just for testing + // Check for maproulette data + if (url.startsWith("https://maproulette.org/api/v2/")) { + console.log("MapRoulette data detected") + const data = json; + let maprouletteFeatures: any[] = []; + data.forEach(element => { + maprouletteFeatures.push({ + type: "Feature", + geometry: { + type: "Point", + coordinates: [element.point.lng, element.point.lat] + }, + properties: { + // Map all properties to the feature + ...element, + } + }); + }); + json.features = maprouletteFeatures; + } + if (json.features === undefined || json.features === null) { return; } diff --git a/assets/themes/maproulette/maproulette.json b/assets/themes/maproulette/maproulette.json new file mode 100644 index 0000000000..56b0c5ace1 --- /dev/null +++ b/assets/themes/maproulette/maproulette.json @@ -0,0 +1,145 @@ +{ + "id": "maproulette", + "title": { + "en": "MapRoulette Test" + }, + "description": { + "en": "MapRoulette Test" + }, + "version": "1.0.0", + "hideFromOverview": true, + "icon": "./assets/svg/bug.svg", + "maintainer": "", + "startLat": 0, + "startLon": 0, + "startZoom": 4, + "layers": [ + { + "id": "maproulette", + "source": { + "geoJson": "https://maproulette.org/api/v2/tasks/box/{x_min}/{y_min}/{x_max}/{y_max}", + "geoJsonZoomLevel": 16, + "osmTags": "id~*" + }, + "mapRendering": [ + { + "location": [ + "point", + "centroid" + ], + "icon": { + "render": "pin:white", + "mappings": [ + { + "if": "status=0", + "then": "pin:#959DFF" + }, + { + "if": "status=1", + "then": "pin:#65D2DA" + }, + { + "if": "status=2", + "then": "pin:#F7BB59" + }, + { + "if": "status=3", + "then": "pin:#F7BB59" + }, + { + "if": "status=4", + "then": "pin:#737373" + }, + { + "if": "status=5", + "then": "pin:#CCB186" + }, + { + "if": "status=6", + "then": "pin:#FF5E63" + }, + { + "if": "status=9", + "then": "pin:#FF349C" + } + ] + }, + "iconSize": "40,40,center" + } + ], + "tagRenderings": [ + { + "id": "link", + "render": "View this task" + }, + { + "id": "status", + "render": "Current status: {status}", + "mappings": [ + { + "if": "status=0", + "then": { + "en": "Task is created" + } + }, + { + "if": "status=1", + "then": { + "en": "Task is fixed" + } + }, + { + "if": "status=2", + "then": { + "en": "Task is a false positive" + } + }, + { + "if": "status=3", + "then": { + "en": "Task is skipped" + } + }, + { + "if": "status=4", + "then": { + "en": "Task is deleted" + } + }, + { + "if": "status=5", + "then": { + "en": "Task is already fixed" + } + }, + { + "if": "status=6", + "then": { + "en": "Task is marked as too hard" + } + }, + { + "if": "status=9", + "then": { + "en": "Task is disabled" + } + } + ] + }, + "all_tags" + ], + "description": { + "en": "Layer showing all tasks in MapRoulette" + }, + "minzoom": 15, + "name": { + "en": "MapRoulette Tasks" + }, + "title": { + "render": { + "en": "MapRoulette Item: {parentName}" + } + } + } + ] +} \ No newline at end of file