From 4f12a73e27a5706e719c8be476347ff9bc702a6d Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Tue, 9 Jun 2020 17:20:16 +0200 Subject: [PATCH 01/69] form.js adapted to read multiple features --- .../manager_dashboard/js/forms.js | 45 ++++++++++++------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/manager_dashboard/manager_dashboard/js/forms.js b/manager_dashboard/manager_dashboard/js/forms.js index 8812205fc..2975d1dd5 100644 --- a/manager_dashboard/manager_dashboard/js/forms.js +++ b/manager_dashboard/manager_dashboard/js/forms.js @@ -141,35 +141,48 @@ function openFile(event) { try { var text = reader.result; var geojsonData = JSON.parse(text) - + console.log(geojsonData); // check number of features numberOfFeatures = geojsonData['features'].length + console.log('number of features: ' + numberOfFeatures) - if (numberOfFeatures > 1) { + + if (numberOfFeatures > 10) { throw 'too many features: ' + numberOfFeatures } info_output.innerHTML += 'Number of Features: ' + numberOfFeatures + '
'; info_output.style.display = 'block' + + + sumArea = 0 // check input geometry type - feature = geojsonData['features'][0] - type = turf.getType(feature) - console.log('geometry type: ' + type) - if (type !== 'Polygon' & type !== 'MultiPolygon') { - throw 'wrong geometry type: ' + type - } - info_output.innerHTML += 'Feature Type: ' + type + '
'; - info_output.style.display = 'block' + for (var i =0; i < geojsonData.features.length; i++) { + feature = geojsonData.features[i] + type = turf.getType(feature) + console.log('geometry type: ' + type) - // check project size, based on zoom level + if (type !== 'Polygon' & type !== 'MultiPolygon') { + throw 'GeoJson contains one or more wrong geometry type(s): ' + type + } + + info_output.innerHTML += 'Feature Type: ' + type + '
'; + info_output.style.display = 'block' + + sumArea += turf.area(feature)/1000000 // area in square kilometers + + } + + // check project size, based on zoom level var zoomLevel = parseInt(document.getElementById('zoomLevel').value); - area = turf.area(feature)/1000000 // area in square kilometers maxArea = (23 - zoomLevel) * (23 - zoomLevel) * 200 - console.log('project size: ' + area + ' sqkm') - if (area > maxArea) { - throw 'project is to large: ' + area + ' sqkm; ' + 'max allowed size for this zoom level: ' + maxArea + ' sqkm' + console.log('project size: ' + sumArea + ' sqkm') + + if (sumArea > maxArea) { + throw 'project is to large: ' + sumArea + ' sqkm; ' + 'max allowed size for this zoom level: ' + maxArea + ' sqkm' } - info_output.innerHTML += 'Project Size: ' + area + ' sqkm
'; + + info_output.innerHTML += 'Project Size: ' + sumArea + ' sqkm
'; info_output.style.display = 'block' // add feature to map From 475985d7c9d59a808cdb53b823446d8261a944d0 Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Tue, 9 Jun 2020 17:34:57 +0200 Subject: [PATCH 02/69] improved formatting --- manager_dashboard/manager_dashboard/js/forms.js | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/manager_dashboard/manager_dashboard/js/forms.js b/manager_dashboard/manager_dashboard/js/forms.js index 2975d1dd5..b320cc0f7 100644 --- a/manager_dashboard/manager_dashboard/js/forms.js +++ b/manager_dashboard/manager_dashboard/js/forms.js @@ -146,15 +146,12 @@ function openFile(event) { numberOfFeatures = geojsonData['features'].length console.log('number of features: ' + numberOfFeatures) - if (numberOfFeatures > 10) { throw 'too many features: ' + numberOfFeatures } info_output.innerHTML += 'Number of Features: ' + numberOfFeatures + '
'; info_output.style.display = 'block' - - sumArea = 0 // check input geometry type for (var i =0; i < geojsonData.features.length; i++) { @@ -168,18 +165,16 @@ function openFile(event) { info_output.innerHTML += 'Feature Type: ' + type + '
'; info_output.style.display = 'block' - sumArea += turf.area(feature)/1000000 // area in square kilometers - } - // check project size, based on zoom level + // check project size, based on zoom level var zoomLevel = parseInt(document.getElementById('zoomLevel').value); maxArea = (23 - zoomLevel) * (23 - zoomLevel) * 200 console.log('project size: ' + sumArea + ' sqkm') if (sumArea > maxArea) { - throw 'project is to large: ' + sumArea + ' sqkm; ' + 'max allowed size for this zoom level: ' + maxArea + ' sqkm' + throw 'project is to large: ' + sumArea + ' sqkm; ' + 'max allowed size for this zoom level: ' + maxArea + ' sqkm' } info_output.innerHTML += 'Project Size: ' + sumArea + ' sqkm
'; From ff933f96c5c30501e4fb672fe0be9506e200e7fe Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Wed, 10 Jun 2020 18:43:46 +0200 Subject: [PATCH 03/69] projectDraf created for testing multiple geometries --- .../fixtures/completeness/projectDraft.json | 20 +++++++++++++++++++ .../unittests/test_validate_geometries.py | 0 2 files changed, 20 insertions(+) create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft.json create mode 100644 mapswipe_workers/tests/unittests/test_validate_geometries.py diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft.json b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft.json new file mode 100644 index 000000000..f17d15a4f --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft.json @@ -0,0 +1,20 @@ +{ + "projectDraftId": "validate_geom", + "createdBy": "test", + "geometry": {"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[34.975833892822266,-15.899098066386088],[35.089302062988274,-15.899098066386088],[35.089302062988274,-15.820002241903946],[34.975833892822266,-15.820002241903946],[34.975833892822266,-15.899098066386088]]]},"properties":{}}]}, + "image": "", + "lookFor": "buildings", + "name": "test - Malawi (1)\ntest", + "projectDetails": "test", + "verificationNumber": 1, + "groupSize": 120, + "tileServer": { + "name": "bing", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "tileServerB": { + "name": "bing", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "projectType": 4 +} diff --git a/mapswipe_workers/tests/unittests/test_validate_geometries.py b/mapswipe_workers/tests/unittests/test_validate_geometries.py new file mode 100644 index 000000000..e69de29bb From e38bfcbb0c84bc37709669192d7a826e47b88442 Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Wed, 10 Jun 2020 18:47:36 +0200 Subject: [PATCH 04/69] created test function for multiple polygons --- .../unittests/test_validate_geometries.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/mapswipe_workers/tests/unittests/test_validate_geometries.py b/mapswipe_workers/tests/unittests/test_validate_geometries.py index e69de29bb..5c96e3bd3 100644 --- a/mapswipe_workers/tests/unittests/test_validate_geometries.py +++ b/mapswipe_workers/tests/unittests/test_validate_geometries.py @@ -0,0 +1,19 @@ +import os +import json +import unittest +from mapswipe_workers.definitions import ProjectType + + +class TestUserStats(unittest.TestCase): + def setUp(self): + test_dir = os.path.dirname(os.path.abspath(__file__)) + with open( + os.path.join(test_dir, "fixtures/completeness/projectDraft.json") + ) as json_file: + project_draft = json.load(json_file) + self.project_type = project_draft["projectType"] + self.project = ProjectType(self.project_type).constructor(project_draft) + + +if __name__ == "__main__": + unittest.main() From 2241b432d22a25582c6d560025cdb28e1034a0e1 Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Tue, 16 Jun 2020 14:43:44 +0200 Subject: [PATCH 05/69] test single and multiple geometry for project creation --- .../tile_map_service_grid/project.py | 53 ++++++++-------- .../completeness/multiplePolygons.geojson | 10 ++++ .../fixtures/completeness/projectDraft.json | 11 +++- .../completeness/projectDraft_single.json | 27 +++++++++ .../completeness/single_polygon.geojson | 9 +++ .../unittests/test_validate_geometries.py | 60 +++++++++++++++++-- 6 files changed, 139 insertions(+), 31 deletions(-) create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/multiplePolygons.geojson create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_single.json create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/single_polygon.geojson diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py index 56278d550..187b6bdc7 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py @@ -58,15 +58,17 @@ def validate_geometries(self): raise CustomError(f"Empty file. ") # check if more than 1 geometry is provided - elif layer.GetFeatureCount() > 1: + elif layer.GetFeatureCount() > 10: logger.warning( f"{self.projectId}" f" - validate geometry - " - f"Input file contains more than one geometry. " - f"Make sure to provide exact one input geometry." + f"Input file contains more than 10 geometries. " + f"Make sure to provide less than 10 geometries." ) - raise CustomError(f"Input file contains more than one geometry. ") + raise CustomError(f"Input file contains more than 10 geometries. ") + project_area = 0 + wkt_geometries = [] # check if the input geometry is a valid polygon for feature in layer: feat_geom = feature.GetGeometryRef() @@ -93,6 +95,7 @@ def validate_geometries(self): # get geometry as wkt wkt_geometry = feat_geom.ExportToWkt() + wkt_geometries.append(wkt_geometry) # check size of project make sure its smaller than 5,000 sqkm # for doing this we transform the geometry @@ -105,29 +108,27 @@ def validate_geometries(self): transform = osr.CoordinateTransformation(source, target) feat_geom.Transform(transform) - project_area = feat_geom.GetArea() / 1000000 - - # calculate max area based on zoom level - # for zoom level 18 this will be 5000 square kilometers - # max zoom level is 22 - if self.zoomLevel > 22: - raise CustomError( - f"zoom level is to large (max: 22): {self.zoomLevel}." - ) + project_area = +feat_geom.GetArea() / 1000000 - max_area = (23 - int(self.zoomLevel)) * (23 - int(self.zoomLevel)) * 200 + # calculate max area based on zoom level + # for zoom level 18 this will be 5000 square kilometers + # max zoom level is 22 + if self.zoomLevel > 22: + raise CustomError(f"zoom level is to large (max: 22): {self.zoomLevel}.") - if project_area > max_area: - logger.warning( - f"{self.projectId}" - f" - validate geometry - " - f"Project is to large: {project_area} sqkm. " - f"Please split your projects into smaller sub-projects and resubmit" - ) - raise CustomError( - f"Project is to large: {project_area} sqkm. " - f"Max area for zoom level {self.zoomLevel} = {max_area} sqkm" - ) + max_area = (23 - int(self.zoomLevel)) * (23 - int(self.zoomLevel)) * 200 + + if project_area > max_area: + logger.warning( + f"{self.projectId}" + f" - validate geometry - " + f"Project is to large: {project_area} sqkm. " + f"Please split your projects into smaller sub-projects and resubmit" + ) + raise CustomError( + f"Project is to large: {project_area} sqkm. " + f"Max area for zoom level {self.zoomLevel} = {max_area} sqkm" + ) del datasource del layer @@ -138,7 +139,7 @@ def validate_geometries(self): f"{self.projectId}" f" - validate geometry - " f"input geometry is correct." ) - return wkt_geometry + return wkt_geometries def create_groups(self): """ diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/multiplePolygons.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/multiplePolygons.geojson new file mode 100644 index 000000000..a1f2c4cd7 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/multiplePolygons.geojson @@ -0,0 +1,10 @@ +{ + "type": "FeatureCollection", + "name": "test_multiFeatures", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": [ + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.154977920780345, 48.779969269089108 ], [ 9.145166381262182, 48.783511025029817 ], [ 9.152503706467067, 48.792504837393238 ], [ 9.177501802804644, 48.793066897143774 ], [ 9.190982004925244, 48.781599632232819 ], [ 9.176222036780535, 48.77637103888955 ], [ 9.154977920780345, 48.779969269089108 ] ] ] ] } }, + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.206256137543244, 48.780612033121642 ], [ 9.240100799698709, 48.804945048262312 ], [ 9.319017439820824, 48.78189865536104 ], [ 9.322271734258852, 48.751547031018632 ], [ 9.243843238302437, 48.74371483701092 ], [ 9.191937242015934, 48.748435757629871 ], [ 9.206256137543244, 48.780612033121642 ] ] ] ] } }, + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.192328564198355, 48.808958037900581 ], [ 9.141283880138115, 48.821987494789504 ], [ 9.175122490919623, 48.855961443383009 ], [ 9.272336804944468, 48.851810307944596 ], [ 9.247387998690305, 48.82444194088955 ], [ 9.192328564198355, 48.808958037900581 ] ] ] ] } } + ] + } \ No newline at end of file diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft.json b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft.json index f17d15a4f..c017914cd 100644 --- a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft.json +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft.json @@ -1,7 +1,16 @@ { "projectDraftId": "validate_geom", "createdBy": "test", - "geometry": {"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Polygon","coordinates":[[[34.975833892822266,-15.899098066386088],[35.089302062988274,-15.899098066386088],[35.089302062988274,-15.820002241903946],[34.975833892822266,-15.820002241903946],[34.975833892822266,-15.899098066386088]]]},"properties":{}}]}, + "geometry": { + "type": "FeatureCollection", + "name": "test_multiFeatures", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": [ + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.154977920780345, 48.779969269089108 ], [ 9.145166381262182, 48.783511025029817 ], [ 9.152503706467067, 48.792504837393238 ], [ 9.177501802804644, 48.793066897143774 ], [ 9.190982004925244, 48.781599632232819 ], [ 9.176222036780535, 48.77637103888955 ], [ 9.154977920780345, 48.779969269089108 ] ] ] ] } }, + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.206256137543244, 48.780612033121642 ], [ 9.240100799698709, 48.804945048262312 ], [ 9.319017439820824, 48.78189865536104 ], [ 9.322271734258852, 48.751547031018632 ], [ 9.243843238302437, 48.74371483701092 ], [ 9.191937242015934, 48.748435757629871 ], [ 9.206256137543244, 48.780612033121642 ] ] ] ] } }, + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.192328564198355, 48.808958037900581 ], [ 9.141283880138115, 48.821987494789504 ], [ 9.175122490919623, 48.855961443383009 ], [ 9.272336804944468, 48.851810307944596 ], [ 9.247387998690305, 48.82444194088955 ], [ 9.192328564198355, 48.808958037900581 ] ] ] ] } } + ] + }, "image": "", "lookFor": "buildings", "name": "test - Malawi (1)\ntest", diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_single.json b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_single.json new file mode 100644 index 000000000..bdea7b7b6 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_single.json @@ -0,0 +1,27 @@ +{ + "projectDraftId": "validate_geom", + "createdBy": "test", + "geometry": { + "type": "FeatureCollection", + "name": "test_multiFeatures", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": [ + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.154977920780345, 48.779969269089108 ], [ 9.145166381262182, 48.783511025029817 ], [ 9.152503706467067, 48.792504837393238 ], [ 9.177501802804644, 48.793066897143774 ], [ 9.190982004925244, 48.781599632232819 ], [ 9.176222036780535, 48.77637103888955 ], [ 9.154977920780345, 48.779969269089108 ] ] ] ] } } + ] + }, + "image": "", + "lookFor": "buildings", + "name": "test - Malawi (1)\ntest", + "projectDetails": "test", + "verificationNumber": 1, + "groupSize": 120, + "tileServer": { + "name": "bing", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "tileServerB": { + "name": "bing", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "projectType": 4 +} diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/single_polygon.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/single_polygon.geojson new file mode 100644 index 000000000..3f2d99a0c --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/single_polygon.geojson @@ -0,0 +1,9 @@ +{ + "type": "FeatureCollection", + "name": "test_multiFeatures", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": [ + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.154977920780345, 48.779969269089108 ], [ 9.145166381262182, 48.783511025029817 ], [ 9.152503706467067, 48.792504837393238 ], [ 9.177501802804644, 48.793066897143774 ], [ 9.190982004925244, 48.781599632232819 ], [ 9.176222036780535, 48.77637103888955 ], [ 9.154977920780345, 48.779969269089108 ] ] ] ] } } + ] + } + diff --git a/mapswipe_workers/tests/unittests/test_validate_geometries.py b/mapswipe_workers/tests/unittests/test_validate_geometries.py index 5c96e3bd3..4101d46e4 100644 --- a/mapswipe_workers/tests/unittests/test_validate_geometries.py +++ b/mapswipe_workers/tests/unittests/test_validate_geometries.py @@ -1,19 +1,71 @@ import os import json import unittest +from osgeo import ogr from mapswipe_workers.definitions import ProjectType -class TestUserStats(unittest.TestCase): - def setUp(self): - test_dir = os.path.dirname(os.path.abspath(__file__)) +class TestGeometryValidation(unittest.TestCase): + def test_multiple_geom_validation(self): + # pre steps for outputting result of function + self.test_dir = os.path.dirname(os.path.abspath(__file__)) with open( - os.path.join(test_dir, "fixtures/completeness/projectDraft.json") + os.path.join(self.test_dir, "fixtures/completeness/projectDraft.json") ) as json_file: project_draft = json.load(json_file) self.project_type = project_draft["projectType"] self.project = ProjectType(self.project_type).constructor(project_draft) + # prepare data that is expected + path = os.path.join( + self.test_dir, "fixtures/completeness/multiplePolygons.geojson" + ) + driver = ogr.GetDriverByName("GeoJSON") + data_source = driver.Open(path, 0) + + self.wkt_geometries_expected = [] + # Get the data layer + layer = data_source.GetLayer() + for feature in layer: + feat_geom = feature.GetGeometryRef() + self.wkt_geometries_expected.append(feat_geom.ExportToWkt()) + + # results coming from the function + self.wkt = self.project.validate_geometries() + # Test that sequence first contains the same elements as second + self.assertCountEqual(self.wkt, self.wkt_geometries_expected) + + def test_single_geom_validation(self): + # pre steps for outputting result of function + self.test_dir = os.path.dirname(os.path.abspath(__file__)) + with open( + os.path.join( + self.test_dir, "fixtures/completeness/projectDraft_single.json" + ) + ) as json_file: + project_draft = json.load(json_file) + self.project_type = project_draft["projectType"] + self.project = ProjectType(self.project_type).constructor(project_draft) + + # prepare data that is expected + path = os.path.join( + self.test_dir, "fixtures/completeness/single_polygon.geojson" + ) + driver = ogr.GetDriverByName("GeoJSON") + datasource = driver.Open(path, 0) + + self.wkt_geometries_expected = [] + # Get the data layer + layer = datasource.GetLayer() + for feature in layer: + feat_geom = feature.GetGeometryRef() + self.wkt_geometries_expected.append(feat_geom.ExportToWkt()) + + # results coming from the function + self.wkt = self.project.validate_geometries() + # Test that sequence first contains the same elements as second + self.assertCountEqual(self.wkt, self.wkt_geometries_expected) + if __name__ == "__main__": unittest.main() From 6a3bd2972e1d5fe9f5471b796985be9eab8005aa Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Wed, 1 Jul 2020 10:55:50 +0200 Subject: [PATCH 06/69] test functions for overlapping geoms --- .../utils/tile_grouping_functions.py | 146 ++++++++++-------- .../tests/test_grouping_functions.py | 2 +- .../completeness/closed_poly_groups.geojson | 123 +++++++++++++++ .../completeness/closed_polygons.geojson | 9 ++ .../completeness/distant_polygons.geojson | 9 ++ .../horizontal_slices_expected.geojson | 13 ++ .../tests/unittests/test_groups_overlap.py | 48 ++++++ .../tests/unittests/test_multiple_geoms.py | 45 ++++++ .../unittests/test_validate_geometries.py | 65 ++++---- 9 files changed, 363 insertions(+), 97 deletions(-) create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/closed_poly_groups.geojson create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/closed_polygons.geojson create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/distant_polygons.geojson create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/horizontal_slices_expected.geojson create mode 100644 mapswipe_workers/tests/unittests/test_groups_overlap.py create mode 100644 mapswipe_workers/tests/unittests/test_multiple_geoms.py diff --git a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py index 18075abeb..0badc5dc5 100644 --- a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py +++ b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py @@ -85,69 +85,71 @@ def get_horizontal_slice(extent, geomcol, zoom): ymin = extent[2] ymax = extent[3] - # we only use the first geometry - polygon_to_slice = geomcol.GetGeometryRef(0) - # logging.info('polygon to slice: %s' % polygon_to_slice) - - # get upper left left tile coordinates - pixel = t.lat_long_zoom_to_pixel_coords(ymax, xmin, zoom) - tile = t.pixel_coords_to_tile_address(pixel.x, pixel.y) - TileX_left = tile.x - TileY_top = tile.y - - # get lower right tile coordinates - pixel = t.lat_long_zoom_to_pixel_coords(ymin, xmax, zoom) - tile = t.pixel_coords_to_tile_address(pixel.x, pixel.y) - - TileX_right = tile.x - TileY_bottom = tile.y - - TileHeight = abs(TileY_top - TileY_bottom) - TileY = TileY_top - - # get rows - rows = int(math.ceil(TileHeight / 3)) - - ############################################################ - - for i in range(0, rows + 1): - # Calculate lat, lon of upper left corner of tile - PixelX = TileX_left * 256 - PixelY = TileY * 256 - lon_left, lat_top = t.pixel_coords_zoom_to_lat_lon(PixelX, PixelY, zoom) - - PixelX = TileX_right * 256 - PixelY = (TileY + 3) * 256 - lon_right, lat_bottom = t.pixel_coords_zoom_to_lat_lon(PixelX, PixelY, zoom) - - # Create Geometry - ring = ogr.Geometry(ogr.wkbLinearRing) - ring.AddPoint(lon_left, lat_top) - ring.AddPoint(lon_right, lat_top) - ring.AddPoint(lon_right, lat_bottom) - ring.AddPoint(lon_left, lat_bottom) - ring.AddPoint(lon_left, lat_top) - poly = ogr.Geometry(ogr.wkbPolygon) - poly.AddGeometry(ring) - - sliced_poly = poly.Intersection(polygon_to_slice) - - if sliced_poly: - if sliced_poly.GetGeometryName() == "POLYGON": - slice_infos["tile_y_top"].append(TileY) - slice_infos["tile_y_bottom"].append(TileY + 3) - slice_infos["slice_collection"].AddGeometry(sliced_poly) - elif sliced_poly.GetGeometryName() == "MULTIPOLYGON": - for geom_part in sliced_poly: + for i in range(0, geomcol.GetGeometryCount()): + polygon_to_slice = geomcol.GetGeometryRef(i) + # logging.info('polygon to slice: %s' % polygon_to_slice)''' + + # polygon_to_slice = geomcol.GetGeometryRef(0) + + # get upper left left tile coordinates + pixel = t.lat_long_zoom_to_pixel_coords(ymax, xmin, zoom) + tile = t.pixel_coords_to_tile_address(pixel.x, pixel.y) + TileX_left = tile.x + TileY_top = tile.y + + # get lower right tile coordinates + pixel = t.lat_long_zoom_to_pixel_coords(ymin, xmax, zoom) + tile = t.pixel_coords_to_tile_address(pixel.x, pixel.y) + + TileX_right = tile.x + TileY_bottom = tile.y + TileHeight = abs(TileY_top - TileY_bottom) + + TileY = TileY_top + + # get rows + rows = int(math.ceil(TileHeight / 3)) + + ############################################################ + + for i in range(0, rows + 1): + # Calculate lat, lon of upper left corner of tile + PixelX = TileX_left * 256 + PixelY = TileY * 256 + lon_left, lat_top = t.pixel_coords_zoom_to_lat_lon(PixelX, PixelY, zoom) + + PixelX = TileX_right * 256 + PixelY = (TileY + 3) * 256 + lon_right, lat_bottom = t.pixel_coords_zoom_to_lat_lon(PixelX, PixelY, zoom) + + # Create Geometry + ring = ogr.Geometry(ogr.wkbLinearRing) + ring.AddPoint(lon_left, lat_top) + ring.AddPoint(lon_right, lat_top) + ring.AddPoint(lon_right, lat_bottom) + ring.AddPoint(lon_left, lat_bottom) + ring.AddPoint(lon_left, lat_top) + poly = ogr.Geometry(ogr.wkbPolygon) + poly.AddGeometry(ring) + + sliced_poly = poly.Intersection(polygon_to_slice) + + if sliced_poly: + if sliced_poly.GetGeometryName() == "POLYGON": slice_infos["tile_y_top"].append(TileY) slice_infos["tile_y_bottom"].append(TileY + 3) - slice_infos["slice_collection"].AddGeometry(geom_part) + slice_infos["slice_collection"].AddGeometry(sliced_poly) + elif sliced_poly.GetGeometryName() == "MULTIPOLYGON": + for geom_part in sliced_poly: + slice_infos["tile_y_top"].append(TileY) + slice_infos["tile_y_bottom"].append(TileY + 3) + slice_infos["slice_collection"].AddGeometry(geom_part) + else: + pass else: pass - else: - pass - TileY = TileY + 3 + TileY = TileY + 3 return slice_infos @@ -308,7 +310,7 @@ def extent_to_slices(infile, zoom, groupSize): return raw_groups_dict -def save_slices_as_geojson(raw_group_infos, outfile): +def save_vertical_slices_as_geojson(raw_group_infos, outfile): """ The function to create a geojson file from the groups dictionary. @@ -327,13 +329,13 @@ def save_slices_as_geojson(raw_group_infos, outfile): True if successful, False otherwise. """ - # Create the output Driver + # Create the output Driver and the output GeoJSON outDriver = ogr.GetDriverByName("GeoJSON") # Create the output GeoJSON outDataSource = outDriver.CreateDataSource(outfile) outLayer = outDataSource.CreateLayer(outfile, geom_type=ogr.wkbPolygon) - outLayer.CreateField(ogr.FieldDefn("group_id", ogr.OFTInteger)) + outLayer.CreateField(ogr.FieldDefn("group_id", ogr.OFTString)) outLayer.CreateField(ogr.FieldDefn("xmin", ogr.OFTInteger)) outLayer.CreateField(ogr.FieldDefn("xmax", ogr.OFTInteger)) outLayer.CreateField(ogr.FieldDefn("ymin", ogr.OFTInteger)) @@ -356,3 +358,25 @@ def save_slices_as_geojson(raw_group_infos, outfile): logger.info("created all %s." % outfile) return True + + +def save_horizontal_slices_as_geojson(slices_info, outfile): + + # Create the output Driver and out GeoJson + outDriver = ogr.GetDriverByName("GeoJSON") + # Create the output GeoJSON + outDataSource = outDriver.CreateDataSource(outfile) + outLayer = outDataSource.CreateLayer(outfile, geom_type=ogr.wkbPolygon) + slices_geom = slices_info["slice_collection"] + + for group in slices_geom: + featureDefn = outLayer.GetLayerDefn() + outFeature = ogr.Feature(featureDefn) + outFeature.SetGeometry(group) + outLayer.CreateFeature(outFeature) + outFeature = None + + outDataSource = None + logger.info("created all %s." % outfile) + + return True diff --git a/mapswipe_workers/tests/test_grouping_functions.py b/mapswipe_workers/tests/test_grouping_functions.py index ce5ab2a33..bb5a8b743 100644 --- a/mapswipe_workers/tests/test_grouping_functions.py +++ b/mapswipe_workers/tests/test_grouping_functions.py @@ -50,7 +50,7 @@ def groups_overlap(groups): Rect2 = Rect(p1, p2) if overlap(Rect1, Rect2): - print("overlap!") + print("overlap!", group_id_B) try: group_overlap[group_id].append(group_id_B) except KeyError: diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/closed_poly_groups.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/closed_poly_groups.geojson new file mode 100644 index 000000000..7084f28c7 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/closed_poly_groups.geojson @@ -0,0 +1,123 @@ +{ +"type": "FeatureCollection", +"name": "fixtures\/completeness\/closed_poly_groups.geojson", +"features": [ +{ "type": "Feature", "properties": { "group_id": "g101", "xmin": 140582, "xmax": 140617, "ymin": 122359, "ymax": 122361 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.05999755859375, 11.879446091788807, 0.0 ], [ 13.10943603515625, 11.879446091788807, 0.0 ], [ 13.10943603515625, 11.875414424662921, 0.0 ], [ 13.05999755859375, 11.875414424662921, 0.0 ], [ 13.05999755859375, 11.879446091788807, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g102", "xmin": 140551, "xmax": 140627, "ymin": 122362, "ymax": 122364 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.017425537109375, 11.875414424662921, 0.0 ], [ 13.1231689453125, 11.875414424662921, 0.0 ], [ 13.1231689453125, 11.871382697880065, 0.0 ], [ 13.017425537109375, 11.871382697880065, 0.0 ], [ 13.017425537109375, 11.875414424662921, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g103", "xmin": 140538, "xmax": 140637, "ymin": 122365, "ymax": 122367 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.99957275390625, 11.871382697880065, 0.0 ], [ 13.13690185546875, 11.871382697880065, 0.0 ], [ 13.13690185546875, 11.867350911459312, 0.0 ], [ 12.99957275390625, 11.867350911459312, 0.0 ], [ 12.99957275390625, 11.871382697880065, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g104", "xmin": 140535, "xmax": 140590, "ymin": 122368, "ymax": 122370 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.995452880859375, 11.867350911459312, 0.0 ], [ 13.072357177734375, 11.867350911459312, 0.0 ], [ 13.072357177734375, 11.863319065419716, 0.0 ], [ 12.995452880859375, 11.863319065419716, 0.0 ], [ 12.995452880859375, 11.867350911459312, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g105", "xmin": 140591, "xmax": 140647, "ymin": 122368, "ymax": 122370 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.072357177734375, 11.867350911459312, 0.0 ], [ 13.150634765625, 11.867350911459312, 0.0 ], [ 13.150634765625, 11.863319065419716, 0.0 ], [ 13.072357177734375, 11.863319065419716, 0.0 ], [ 13.072357177734375, 11.867350911459312, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g106", "xmin": 140531, "xmax": 140589, "ymin": 122371, "ymax": 122373 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.989959716796875, 11.863319065419716, 0.0 ], [ 13.07098388671875, 11.863319065419716, 0.0 ], [ 13.07098388671875, 11.859287159780393, 0.0 ], [ 12.989959716796875, 11.859287159780393, 0.0 ], [ 12.989959716796875, 11.863319065419716, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g107", "xmin": 140590, "xmax": 140648, "ymin": 122371, "ymax": 122373 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.07098388671875, 11.863319065419716, 0.0 ], [ 13.152008056640625, 11.863319065419716, 0.0 ], [ 13.152008056640625, 11.859287159780393, 0.0 ], [ 13.07098388671875, 11.859287159780393, 0.0 ], [ 13.07098388671875, 11.863319065419716, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g108", "xmin": 140528, "xmax": 140588, "ymin": 122374, "ymax": 122376 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.98583984375, 11.859287159780393, 0.0 ], [ 13.069610595703125, 11.859287159780393, 0.0 ], [ 13.069610595703125, 11.855255194560428, 0.0 ], [ 12.98583984375, 11.855255194560428, 0.0 ], [ 12.98583984375, 11.859287159780393, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g109", "xmin": 140589, "xmax": 140650, "ymin": 122374, "ymax": 122376 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.069610595703125, 11.859287159780393, 0.0 ], [ 13.154754638671875, 11.859287159780393, 0.0 ], [ 13.154754638671875, 11.855255194560428, 0.0 ], [ 13.069610595703125, 11.855255194560428, 0.0 ], [ 13.069610595703125, 11.859287159780393, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g110", "xmin": 140525, "xmax": 140588, "ymin": 122377, "ymax": 122379 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.981719970703125, 11.855255194560428, 0.0 ], [ 13.069610595703125, 11.855255194560428, 0.0 ], [ 13.069610595703125, 11.851223169778891, 0.0 ], [ 12.981719970703125, 11.851223169778891, 0.0 ], [ 12.981719970703125, 11.855255194560428, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g111", "xmin": 140589, "xmax": 140652, "ymin": 122377, "ymax": 122379 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.069610595703125, 11.855255194560428, 0.0 ], [ 13.157501220703125, 11.855255194560428, 0.0 ], [ 13.157501220703125, 11.851223169778891, 0.0 ], [ 13.069610595703125, 11.851223169778891, 0.0 ], [ 13.069610595703125, 11.855255194560428, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g112", "xmin": 140521, "xmax": 140587, "ymin": 122380, "ymax": 122382 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.976226806640625, 11.851223169778891, 0.0 ], [ 13.0682373046875, 11.851223169778891, 0.0 ], [ 13.0682373046875, 11.847191085454867, 0.0 ], [ 12.976226806640625, 11.847191085454867, 0.0 ], [ 12.976226806640625, 11.851223169778891, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g113", "xmin": 140588, "xmax": 140654, "ymin": 122380, "ymax": 122382 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.0682373046875, 11.851223169778891, 0.0 ], [ 13.160247802734375, 11.851223169778891, 0.0 ], [ 13.160247802734375, 11.847191085454867, 0.0 ], [ 13.0682373046875, 11.847191085454867, 0.0 ], [ 13.0682373046875, 11.851223169778891, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g114", "xmin": 140518, "xmax": 140586, "ymin": 122383, "ymax": 122385 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.97210693359375, 11.847191085454867, 0.0 ], [ 13.066864013671875, 11.847191085454867, 0.0 ], [ 13.066864013671875, 11.843158941607442, 0.0 ], [ 12.97210693359375, 11.843158941607442, 0.0 ], [ 12.97210693359375, 11.847191085454867, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g115", "xmin": 140587, "xmax": 140656, "ymin": 122383, "ymax": 122385 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.066864013671875, 11.847191085454867, 0.0 ], [ 13.162994384765625, 11.847191085454867, 0.0 ], [ 13.162994384765625, 11.843158941607442, 0.0 ], [ 13.066864013671875, 11.843158941607442, 0.0 ], [ 13.066864013671875, 11.847191085454867, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g116", "xmin": 140515, "xmax": 140586, "ymin": 122386, "ymax": 122388 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.967987060546875, 11.843158941607442, 0.0 ], [ 13.066864013671875, 11.843158941607442, 0.0 ], [ 13.066864013671875, 11.839126738255743, 0.0 ], [ 12.967987060546875, 11.839126738255743, 0.0 ], [ 12.967987060546875, 11.843158941607442, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g117", "xmin": 140587, "xmax": 140658, "ymin": 122386, "ymax": 122388 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.066864013671875, 11.843158941607442, 0.0 ], [ 13.165740966796875, 11.843158941607442, 0.0 ], [ 13.165740966796875, 11.839126738255743, 0.0 ], [ 13.066864013671875, 11.839126738255743, 0.0 ], [ 13.066864013671875, 11.843158941607442, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g118", "xmin": 140511, "xmax": 140585, "ymin": 122389, "ymax": 122391 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.962493896484375, 11.839126738255743, 0.0 ], [ 13.06549072265625, 11.839126738255743, 0.0 ], [ 13.06549072265625, 11.835094475418842, 0.0 ], [ 12.962493896484375, 11.835094475418842, 0.0 ], [ 12.962493896484375, 11.839126738255743, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g119", "xmin": 140586, "xmax": 140660, "ymin": 122389, "ymax": 122391 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.06549072265625, 11.839126738255743, 0.0 ], [ 13.168487548828125, 11.839126738255743, 0.0 ], [ 13.168487548828125, 11.835094475418842, 0.0 ], [ 13.06549072265625, 11.835094475418842, 0.0 ], [ 13.06549072265625, 11.839126738255743, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g120", "xmin": 140508, "xmax": 140584, "ymin": 122392, "ymax": 122394 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.9583740234375, 11.835094475418842, 0.0 ], [ 13.064117431640625, 11.835094475418842, 0.0 ], [ 13.064117431640625, 11.831062153115809, 0.0 ], [ 12.9583740234375, 11.831062153115809, 0.0 ], [ 12.9583740234375, 11.835094475418842, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g121", "xmin": 140585, "xmax": 140662, "ymin": 122392, "ymax": 122394 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.064117431640625, 11.835094475418842, 0.0 ], [ 13.171234130859375, 11.835094475418842, 0.0 ], [ 13.171234130859375, 11.831062153115809, 0.0 ], [ 13.064117431640625, 11.831062153115809, 0.0 ], [ 13.064117431640625, 11.835094475418842, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g122", "xmin": 140505, "xmax": 140584, "ymin": 122395, "ymax": 122397 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.954254150390625, 11.831062153115809, 0.0 ], [ 13.064117431640625, 11.831062153115809, 0.0 ], [ 13.064117431640625, 11.827029771365758, 0.0 ], [ 12.954254150390625, 11.827029771365758, 0.0 ], [ 12.954254150390625, 11.831062153115809, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g123", "xmin": 140585, "xmax": 140664, "ymin": 122395, "ymax": 122397 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.064117431640625, 11.831062153115809, 0.0 ], [ 13.173980712890625, 11.831062153115809, 0.0 ], [ 13.173980712890625, 11.827029771365758, 0.0 ], [ 13.064117431640625, 11.827029771365758, 0.0 ], [ 13.064117431640625, 11.831062153115809, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g124", "xmin": 140501, "xmax": 140582, "ymin": 122398, "ymax": 122400 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.948760986328125, 11.827029771365758, 0.0 ], [ 13.061370849609375, 11.827029771365758, 0.0 ], [ 13.061370849609375, 11.822997330187803, 0.0 ], [ 12.948760986328125, 11.822997330187803, 0.0 ], [ 12.948760986328125, 11.827029771365758, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g125", "xmin": 140583, "xmax": 140665, "ymin": 122398, "ymax": 122400 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.061370849609375, 11.827029771365758, 0.0 ], [ 13.17535400390625, 11.827029771365758, 0.0 ], [ 13.17535400390625, 11.822997330187803, 0.0 ], [ 13.061370849609375, 11.822997330187803, 0.0 ], [ 13.061370849609375, 11.827029771365758, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g126", "xmin": 140498, "xmax": 140582, "ymin": 122401, "ymax": 122403 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.94464111328125, 11.822997330187803, 0.0 ], [ 13.061370849609375, 11.822997330187803, 0.0 ], [ 13.061370849609375, 11.818964829601015, 0.0 ], [ 12.94464111328125, 11.818964829601015, 0.0 ], [ 12.94464111328125, 11.822997330187803, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g127", "xmin": 140583, "xmax": 140667, "ymin": 122401, "ymax": 122403 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.061370849609375, 11.822997330187803, 0.0 ], [ 13.1781005859375, 11.822997330187803, 0.0 ], [ 13.1781005859375, 11.818964829601015, 0.0 ], [ 13.061370849609375, 11.818964829601015, 0.0 ], [ 13.061370849609375, 11.822997330187803, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g128", "xmin": 140495, "xmax": 140581, "ymin": 122404, "ymax": 122406 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.940521240234375, 11.818964829601015, 0.0 ], [ 13.05999755859375, 11.818964829601015, 0.0 ], [ 13.05999755859375, 11.814932269624506, 0.0 ], [ 12.940521240234375, 11.814932269624506, 0.0 ], [ 12.940521240234375, 11.818964829601015, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g129", "xmin": 140582, "xmax": 140669, "ymin": 122404, "ymax": 122406 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.05999755859375, 11.818964829601015, 0.0 ], [ 13.18084716796875, 11.818964829601015, 0.0 ], [ 13.18084716796875, 11.814932269624506, 0.0 ], [ 13.05999755859375, 11.814932269624506, 0.0 ], [ 13.05999755859375, 11.818964829601015, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g130", "xmin": 140491, "xmax": 140580, "ymin": 122407, "ymax": 122409 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.935028076171875, 11.814932269624506, 0.0 ], [ 13.058624267578125, 11.814932269624506, 0.0 ], [ 13.058624267578125, 11.810899650277392, 0.0 ], [ 12.935028076171875, 11.810899650277392, 0.0 ], [ 12.935028076171875, 11.814932269624506, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g131", "xmin": 140581, "xmax": 140671, "ymin": 122407, "ymax": 122409 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.058624267578125, 11.814932269624506, 0.0 ], [ 13.18359375, 11.814932269624506, 0.0 ], [ 13.18359375, 11.810899650277392, 0.0 ], [ 13.058624267578125, 11.810899650277392, 0.0 ], [ 13.058624267578125, 11.814932269624506, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g132", "xmin": 140488, "xmax": 140580, "ymin": 122410, "ymax": 122412 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.930908203125, 11.810899650277392, 0.0 ], [ 13.058624267578125, 11.810899650277392, 0.0 ], [ 13.058624267578125, 11.806866971578728, 0.0 ], [ 12.930908203125, 11.806866971578728, 0.0 ], [ 12.930908203125, 11.810899650277392, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g133", "xmin": 140581, "xmax": 140673, "ymin": 122410, "ymax": 122412 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.058624267578125, 11.810899650277392, 0.0 ], [ 13.18634033203125, 11.810899650277392, 0.0 ], [ 13.18634033203125, 11.806866971578728, 0.0 ], [ 13.058624267578125, 11.806866971578728, 0.0 ], [ 13.058624267578125, 11.810899650277392, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g134", "xmin": 140485, "xmax": 140579, "ymin": 122413, "ymax": 122415 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.926788330078125, 11.806866971578728, 0.0 ], [ 13.0572509765625, 11.806866971578728, 0.0 ], [ 13.0572509765625, 11.802834233547671, 0.0 ], [ 12.926788330078125, 11.802834233547671, 0.0 ], [ 12.926788330078125, 11.806866971578728, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g135", "xmin": 140580, "xmax": 140675, "ymin": 122413, "ymax": 122415 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.0572509765625, 11.806866971578728, 0.0 ], [ 13.1890869140625, 11.806866971578728, 0.0 ], [ 13.1890869140625, 11.802834233547671, 0.0 ], [ 13.0572509765625, 11.802834233547671, 0.0 ], [ 13.0572509765625, 11.806866971578728, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g136", "xmin": 140481, "xmax": 140578, "ymin": 122416, "ymax": 122418 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.921295166015625, 11.802834233547671, 0.0 ], [ 13.055877685546875, 11.802834233547671, 0.0 ], [ 13.055877685546875, 11.798801436203306, 0.0 ], [ 12.921295166015625, 11.798801436203306, 0.0 ], [ 12.921295166015625, 11.802834233547671, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g137", "xmin": 140579, "xmax": 140677, "ymin": 122416, "ymax": 122418 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.055877685546875, 11.802834233547671, 0.0 ], [ 13.19183349609375, 11.802834233547671, 0.0 ], [ 13.19183349609375, 11.798801436203306, 0.0 ], [ 13.055877685546875, 11.798801436203306, 0.0 ], [ 13.055877685546875, 11.802834233547671, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g138", "xmin": 140478, "xmax": 140544, "ymin": 122419, "ymax": 122421 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.91717529296875, 11.798801436203306, 0.0 ], [ 13.009185791015625, 11.798801436203306, 0.0 ], [ 13.009185791015625, 11.794768579564732, 0.0 ], [ 12.91717529296875, 11.794768579564732, 0.0 ], [ 12.91717529296875, 11.798801436203306, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g139", "xmin": 140545, "xmax": 140611, "ymin": 122419, "ymax": 122421 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.009185791015625, 11.798801436203306, 0.0 ], [ 13.1011962890625, 11.798801436203306, 0.0 ], [ 13.1011962890625, 11.794768579564732, 0.0 ], [ 13.009185791015625, 11.794768579564732, 0.0 ], [ 13.009185791015625, 11.798801436203306, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g140", "xmin": 140612, "xmax": 140679, "ymin": 122419, "ymax": 122421 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.1011962890625, 11.798801436203306, 0.0 ], [ 13.194580078125, 11.798801436203306, 0.0 ], [ 13.194580078125, 11.794768579564732, 0.0 ], [ 13.1011962890625, 11.794768579564732, 0.0 ], [ 13.1011962890625, 11.798801436203306, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g141", "xmin": 140475, "xmax": 140543, "ymin": 122422, "ymax": 122424 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.913055419921875, 11.794768579564732, 0.0 ], [ 13.0078125, 11.794768579564732, 0.0 ], [ 13.0078125, 11.790735663651063, 0.0 ], [ 12.913055419921875, 11.790735663651063, 0.0 ], [ 12.913055419921875, 11.794768579564732, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g142", "xmin": 140544, "xmax": 140612, "ymin": 122422, "ymax": 122424 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.0078125, 11.794768579564732, 0.0 ], [ 13.102569580078125, 11.794768579564732, 0.0 ], [ 13.102569580078125, 11.790735663651063, 0.0 ], [ 13.0078125, 11.790735663651063, 0.0 ], [ 13.0078125, 11.794768579564732, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g143", "xmin": 140613, "xmax": 140680, "ymin": 122422, "ymax": 122424 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.102569580078125, 11.794768579564732, 0.0 ], [ 13.195953369140625, 11.794768579564732, 0.0 ], [ 13.195953369140625, 11.790735663651063, 0.0 ], [ 13.102569580078125, 11.790735663651063, 0.0 ], [ 13.102569580078125, 11.794768579564732, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g144", "xmin": 140471, "xmax": 140540, "ymin": 122425, "ymax": 122427 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.907562255859375, 11.790735663651063, 0.0 ], [ 13.003692626953125, 11.790735663651063, 0.0 ], [ 13.003692626953125, 11.786702688481427, 0.0 ], [ 12.907562255859375, 11.786702688481427, 0.0 ], [ 12.907562255859375, 11.790735663651063, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g145", "xmin": 140541, "xmax": 140610, "ymin": 122425, "ymax": 122427 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.003692626953125, 11.790735663651063, 0.0 ], [ 13.099822998046875, 11.790735663651063, 0.0 ], [ 13.099822998046875, 11.786702688481427, 0.0 ], [ 13.003692626953125, 11.786702688481427, 0.0 ], [ 13.003692626953125, 11.790735663651063, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g146", "xmin": 140611, "xmax": 140681, "ymin": 122425, "ymax": 122427 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.099822998046875, 11.790735663651063, 0.0 ], [ 13.19732666015625, 11.790735663651063, 0.0 ], [ 13.19732666015625, 11.786702688481427, 0.0 ], [ 13.099822998046875, 11.786702688481427, 0.0 ], [ 13.099822998046875, 11.790735663651063, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g147", "xmin": 140468, "xmax": 140535, "ymin": 122428, "ymax": 122430 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.9034423828125, 11.786702688481427, 0.0 ], [ 12.996826171875, 11.786702688481427, 0.0 ], [ 12.996826171875, 11.782669654074908, 0.0 ], [ 12.9034423828125, 11.782669654074908, 0.0 ], [ 12.9034423828125, 11.786702688481427, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g148", "xmin": 140536, "xmax": 140603, "ymin": 122428, "ymax": 122430 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.996826171875, 11.786702688481427, 0.0 ], [ 13.0902099609375, 11.786702688481427, 0.0 ], [ 13.0902099609375, 11.782669654074908, 0.0 ], [ 12.996826171875, 11.782669654074908, 0.0 ], [ 12.996826171875, 11.786702688481427, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g149", "xmin": 140604, "xmax": 140671, "ymin": 122428, "ymax": 122430 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.0902099609375, 11.786702688481427, 0.0 ], [ 13.18359375, 11.786702688481427, 0.0 ], [ 13.18359375, 11.782669654074908, 0.0 ], [ 13.0902099609375, 11.782669654074908, 0.0 ], [ 13.0902099609375, 11.786702688481427, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g150", "xmin": 140467, "xmax": 140564, "ymin": 122431, "ymax": 122433 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.902069091796875, 11.782669654074908, 0.0 ], [ 13.036651611328125, 11.782669654074908, 0.0 ], [ 13.036651611328125, 11.778636560450607, 0.0 ], [ 12.902069091796875, 11.778636560450607, 0.0 ], [ 12.902069091796875, 11.782669654074908, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g151", "xmin": 140565, "xmax": 140662, "ymin": 122431, "ymax": 122433 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.036651611328125, 11.782669654074908, 0.0 ], [ 13.171234130859375, 11.782669654074908, 0.0 ], [ 13.171234130859375, 11.778636560450607, 0.0 ], [ 13.036651611328125, 11.778636560450607, 0.0 ], [ 13.036651611328125, 11.782669654074908, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g152", "xmin": 140473, "xmax": 140562, "ymin": 122434, "ymax": 122436 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.910308837890625, 11.778636560450607, 0.0 ], [ 13.033905029296875, 11.778636560450607, 0.0 ], [ 13.033905029296875, 11.77460340762768, 0.0 ], [ 12.910308837890625, 11.77460340762768, 0.0 ], [ 12.910308837890625, 11.778636560450607, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g153", "xmin": 140563, "xmax": 140653, "ymin": 122434, "ymax": 122436 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.033905029296875, 11.778636560450607, 0.0 ], [ 13.15887451171875, 11.778636560450607, 0.0 ], [ 13.15887451171875, 11.77460340762768, 0.0 ], [ 13.033905029296875, 11.77460340762768, 0.0 ], [ 13.033905029296875, 11.778636560450607, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g154", "xmin": 140485, "xmax": 140564, "ymin": 122437, "ymax": 122439 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.926788330078125, 11.77460340762768, 0.0 ], [ 13.036651611328125, 11.77460340762768, 0.0 ], [ 13.036651611328125, 11.770570195625226, 0.0 ], [ 12.926788330078125, 11.770570195625226, 0.0 ], [ 12.926788330078125, 11.77460340762768, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g155", "xmin": 140565, "xmax": 140644, "ymin": 122437, "ymax": 122439 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.036651611328125, 11.77460340762768, 0.0 ], [ 13.146514892578125, 11.77460340762768, 0.0 ], [ 13.146514892578125, 11.770570195625226, 0.0 ], [ 13.036651611328125, 11.770570195625226, 0.0 ], [ 13.036651611328125, 11.77460340762768, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g156", "xmin": 140497, "xmax": 140565, "ymin": 122440, "ymax": 122442 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.943267822265625, 11.770570195625226, 0.0 ], [ 13.03802490234375, 11.770570195625226, 0.0 ], [ 13.03802490234375, 11.766536924462358, 0.0 ], [ 12.943267822265625, 11.766536924462358, 0.0 ], [ 12.943267822265625, 11.770570195625226, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g157", "xmin": 140566, "xmax": 140635, "ymin": 122440, "ymax": 122442 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.03802490234375, 11.770570195625226, 0.0 ], [ 13.1341552734375, 11.770570195625226, 0.0 ], [ 13.1341552734375, 11.766536924462358, 0.0 ], [ 13.03802490234375, 11.766536924462358, 0.0 ], [ 13.03802490234375, 11.770570195625226, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g158", "xmin": 140508, "xmax": 140566, "ymin": 122443, "ymax": 122445 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.9583740234375, 11.766536924462358, 0.0 ], [ 13.039398193359375, 11.766536924462358, 0.0 ], [ 13.039398193359375, 11.76250359415819, 0.0 ], [ 12.9583740234375, 11.76250359415819, 0.0 ], [ 12.9583740234375, 11.766536924462358, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g159", "xmin": 140567, "xmax": 140625, "ymin": 122443, "ymax": 122445 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.039398193359375, 11.766536924462358, 0.0 ], [ 13.12042236328125, 11.766536924462358, 0.0 ], [ 13.12042236328125, 11.76250359415819, 0.0 ], [ 13.039398193359375, 11.76250359415819, 0.0 ], [ 13.039398193359375, 11.766536924462358, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g160", "xmin": 140520, "xmax": 140616, "ymin": 122446, "ymax": 122448 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.974853515625, 11.76250359415819, 0.0 ], [ 13.108062744140625, 11.76250359415819, 0.0 ], [ 13.108062744140625, 11.75847020473185, 0.0 ], [ 12.974853515625, 11.75847020473185, 0.0 ], [ 12.974853515625, 11.76250359415819, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g161", "xmin": 140532, "xmax": 140607, "ymin": 122449, "ymax": 122451 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 12.9913330078125, 11.75847020473185, 0.0 ], [ 13.095703125, 11.75847020473185, 0.0 ], [ 13.095703125, 11.754436756202466, 0.0 ], [ 12.9913330078125, 11.754436756202466, 0.0 ], [ 12.9913330078125, 11.75847020473185, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g162", "xmin": 140544, "xmax": 140598, "ymin": 122452, "ymax": 122454 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.0078125, 11.754436756202466, 0.0 ], [ 13.083343505859375, 11.754436756202466, 0.0 ], [ 13.083343505859375, 11.750403248589137, 0.0 ], [ 13.0078125, 11.750403248589137, 0.0 ], [ 13.0078125, 11.754436756202466, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g163", "xmin": 140556, "xmax": 140588, "ymin": 122455, "ymax": 122457 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.0242919921875, 11.750403248589137, 0.0 ], [ 13.069610595703125, 11.750403248589137, 0.0 ], [ 13.069610595703125, 11.74636968191102, 0.0 ], [ 13.0242919921875, 11.74636968191102, 0.0 ], [ 13.0242919921875, 11.750403248589137, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g164", "xmin": 140568, "xmax": 140579, "ymin": 122458, "ymax": 122460 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.040771484375, 11.74636968191102, 0.0 ], [ 13.0572509765625, 11.74636968191102, 0.0 ], [ 13.0572509765625, 11.742336056187199, 0.0 ], [ 13.040771484375, 11.742336056187199, 0.0 ], [ 13.040771484375, 11.74636968191102, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g165", "xmin": 140652, "xmax": 140666, "ymin": 122368, "ymax": 122370 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.1561279296875, 11.867350911459312, 0.0 ], [ 13.176727294921875, 11.867350911459312, 0.0 ], [ 13.176727294921875, 11.863319065419716, 0.0 ], [ 13.1561279296875, 11.863319065419716, 0.0 ], [ 13.1561279296875, 11.867350911459312, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g166", "xmin": 140652, "xmax": 140687, "ymin": 122371, "ymax": 122373 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.1561279296875, 11.863319065419716, 0.0 ], [ 13.20556640625, 11.863319065419716, 0.0 ], [ 13.20556640625, 11.859287159780393, 0.0 ], [ 13.1561279296875, 11.859287159780393, 0.0 ], [ 13.1561279296875, 11.863319065419716, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g167", "xmin": 140654, "xmax": 140708, "ymin": 122374, "ymax": 122376 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.15887451171875, 11.859287159780393, 0.0 ], [ 13.234405517578125, 11.859287159780393, 0.0 ], [ 13.234405517578125, 11.855255194560428, 0.0 ], [ 13.15887451171875, 11.855255194560428, 0.0 ], [ 13.15887451171875, 11.859287159780393, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g168", "xmin": 140655, "xmax": 140728, "ymin": 122377, "ymax": 122379 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.160247802734375, 11.855255194560428, 0.0 ], [ 13.261871337890625, 11.855255194560428, 0.0 ], [ 13.261871337890625, 11.851223169778891, 0.0 ], [ 13.160247802734375, 11.851223169778891, 0.0 ], [ 13.160247802734375, 11.855255194560428, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g169", "xmin": 140656, "xmax": 140749, "ymin": 122380, "ymax": 122382 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.16162109375, 11.851223169778891, 0.0 ], [ 13.29071044921875, 11.851223169778891, 0.0 ], [ 13.29071044921875, 11.847191085454867, 0.0 ], [ 13.16162109375, 11.847191085454867, 0.0 ], [ 13.16162109375, 11.851223169778891, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g170", "xmin": 140657, "xmax": 140712, "ymin": 122383, "ymax": 122385 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.162994384765625, 11.847191085454867, 0.0 ], [ 13.239898681640625, 11.847191085454867, 0.0 ], [ 13.239898681640625, 11.843158941607442, 0.0 ], [ 13.162994384765625, 11.843158941607442, 0.0 ], [ 13.162994384765625, 11.847191085454867, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g171", "xmin": 140713, "xmax": 140769, "ymin": 122383, "ymax": 122385 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.239898681640625, 11.847191085454867, 0.0 ], [ 13.31817626953125, 11.847191085454867, 0.0 ], [ 13.31817626953125, 11.843158941607442, 0.0 ], [ 13.239898681640625, 11.843158941607442, 0.0 ], [ 13.239898681640625, 11.847191085454867, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g172", "xmin": 140659, "xmax": 140724, "ymin": 122386, "ymax": 122388 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.165740966796875, 11.843158941607442, 0.0 ], [ 13.256378173828125, 11.843158941607442, 0.0 ], [ 13.256378173828125, 11.839126738255743, 0.0 ], [ 13.165740966796875, 11.839126738255743, 0.0 ], [ 13.165740966796875, 11.843158941607442, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g173", "xmin": 140725, "xmax": 140790, "ymin": 122386, "ymax": 122388 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.256378173828125, 11.843158941607442, 0.0 ], [ 13.347015380859375, 11.843158941607442, 0.0 ], [ 13.347015380859375, 11.839126738255743, 0.0 ], [ 13.256378173828125, 11.839126738255743, 0.0 ], [ 13.256378173828125, 11.843158941607442, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g174", "xmin": 140660, "xmax": 140727, "ymin": 122389, "ymax": 122391 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.1671142578125, 11.839126738255743, 0.0 ], [ 13.260498046875, 11.839126738255743, 0.0 ], [ 13.260498046875, 11.835094475418842, 0.0 ], [ 13.1671142578125, 11.835094475418842, 0.0 ], [ 13.1671142578125, 11.839126738255743, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g175", "xmin": 140728, "xmax": 140796, "ymin": 122389, "ymax": 122391 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.260498046875, 11.839126738255743, 0.0 ], [ 13.355255126953125, 11.839126738255743, 0.0 ], [ 13.355255126953125, 11.835094475418842, 0.0 ], [ 13.260498046875, 11.835094475418842, 0.0 ], [ 13.260498046875, 11.839126738255743, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g176", "xmin": 140661, "xmax": 140728, "ymin": 122392, "ymax": 122394 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.168487548828125, 11.835094475418842, 0.0 ], [ 13.261871337890625, 11.835094475418842, 0.0 ], [ 13.261871337890625, 11.831062153115809, 0.0 ], [ 13.168487548828125, 11.831062153115809, 0.0 ], [ 13.168487548828125, 11.835094475418842, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g177", "xmin": 140729, "xmax": 140796, "ymin": 122392, "ymax": 122394 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.261871337890625, 11.835094475418842, 0.0 ], [ 13.355255126953125, 11.835094475418842, 0.0 ], [ 13.355255126953125, 11.831062153115809, 0.0 ], [ 13.261871337890625, 11.831062153115809, 0.0 ], [ 13.261871337890625, 11.835094475418842, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g178", "xmin": 140662, "xmax": 140728, "ymin": 122395, "ymax": 122397 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.16986083984375, 11.831062153115809, 0.0 ], [ 13.261871337890625, 11.831062153115809, 0.0 ], [ 13.261871337890625, 11.827029771365758, 0.0 ], [ 13.16986083984375, 11.827029771365758, 0.0 ], [ 13.16986083984375, 11.831062153115809, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g179", "xmin": 140729, "xmax": 140796, "ymin": 122395, "ymax": 122397 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.261871337890625, 11.831062153115809, 0.0 ], [ 13.355255126953125, 11.831062153115809, 0.0 ], [ 13.355255126953125, 11.827029771365758, 0.0 ], [ 13.261871337890625, 11.827029771365758, 0.0 ], [ 13.261871337890625, 11.831062153115809, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g180", "xmin": 140664, "xmax": 140729, "ymin": 122398, "ymax": 122400 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.172607421875, 11.827029771365758, 0.0 ], [ 13.26324462890625, 11.827029771365758, 0.0 ], [ 13.26324462890625, 11.822997330187803, 0.0 ], [ 13.172607421875, 11.822997330187803, 0.0 ], [ 13.172607421875, 11.827029771365758, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g181", "xmin": 140730, "xmax": 140796, "ymin": 122398, "ymax": 122400 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.26324462890625, 11.827029771365758, 0.0 ], [ 13.355255126953125, 11.827029771365758, 0.0 ], [ 13.355255126953125, 11.822997330187803, 0.0 ], [ 13.26324462890625, 11.822997330187803, 0.0 ], [ 13.26324462890625, 11.827029771365758, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g182", "xmin": 140665, "xmax": 140730, "ymin": 122401, "ymax": 122403 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.173980712890625, 11.822997330187803, 0.0 ], [ 13.264617919921875, 11.822997330187803, 0.0 ], [ 13.264617919921875, 11.818964829601015, 0.0 ], [ 13.173980712890625, 11.818964829601015, 0.0 ], [ 13.173980712890625, 11.822997330187803, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g183", "xmin": 140731, "xmax": 140796, "ymin": 122401, "ymax": 122403 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.264617919921875, 11.822997330187803, 0.0 ], [ 13.355255126953125, 11.822997330187803, 0.0 ], [ 13.355255126953125, 11.818964829601015, 0.0 ], [ 13.264617919921875, 11.818964829601015, 0.0 ], [ 13.264617919921875, 11.822997330187803, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g184", "xmin": 140666, "xmax": 140731, "ymin": 122404, "ymax": 122406 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.17535400390625, 11.818964829601015, 0.0 ], [ 13.2659912109375, 11.818964829601015, 0.0 ], [ 13.2659912109375, 11.814932269624506, 0.0 ], [ 13.17535400390625, 11.814932269624506, 0.0 ], [ 13.17535400390625, 11.818964829601015, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g185", "xmin": 140732, "xmax": 140797, "ymin": 122404, "ymax": 122406 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.2659912109375, 11.818964829601015, 0.0 ], [ 13.35662841796875, 11.818964829601015, 0.0 ], [ 13.35662841796875, 11.814932269624506, 0.0 ], [ 13.2659912109375, 11.814932269624506, 0.0 ], [ 13.2659912109375, 11.818964829601015, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g186", "xmin": 140667, "xmax": 140731, "ymin": 122407, "ymax": 122409 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.176727294921875, 11.814932269624506, 0.0 ], [ 13.2659912109375, 11.814932269624506, 0.0 ], [ 13.2659912109375, 11.810899650277392, 0.0 ], [ 13.176727294921875, 11.810899650277392, 0.0 ], [ 13.176727294921875, 11.814932269624506, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g187", "xmin": 140732, "xmax": 140797, "ymin": 122407, "ymax": 122409 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.2659912109375, 11.814932269624506, 0.0 ], [ 13.35662841796875, 11.814932269624506, 0.0 ], [ 13.35662841796875, 11.810899650277392, 0.0 ], [ 13.2659912109375, 11.810899650277392, 0.0 ], [ 13.2659912109375, 11.814932269624506, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g188", "xmin": 140668, "xmax": 140732, "ymin": 122410, "ymax": 122412 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.1781005859375, 11.810899650277392, 0.0 ], [ 13.267364501953125, 11.810899650277392, 0.0 ], [ 13.267364501953125, 11.806866971578728, 0.0 ], [ 13.1781005859375, 11.806866971578728, 0.0 ], [ 13.1781005859375, 11.810899650277392, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g189", "xmin": 140733, "xmax": 140797, "ymin": 122410, "ymax": 122412 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.267364501953125, 11.810899650277392, 0.0 ], [ 13.35662841796875, 11.810899650277392, 0.0 ], [ 13.35662841796875, 11.806866971578728, 0.0 ], [ 13.267364501953125, 11.806866971578728, 0.0 ], [ 13.267364501953125, 11.810899650277392, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g190", "xmin": 140670, "xmax": 140733, "ymin": 122413, "ymax": 122415 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.18084716796875, 11.806866971578728, 0.0 ], [ 13.26873779296875, 11.806866971578728, 0.0 ], [ 13.26873779296875, 11.802834233547671, 0.0 ], [ 13.18084716796875, 11.802834233547671, 0.0 ], [ 13.18084716796875, 11.806866971578728, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g191", "xmin": 140734, "xmax": 140797, "ymin": 122413, "ymax": 122415 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.26873779296875, 11.806866971578728, 0.0 ], [ 13.35662841796875, 11.806866971578728, 0.0 ], [ 13.35662841796875, 11.802834233547671, 0.0 ], [ 13.26873779296875, 11.802834233547671, 0.0 ], [ 13.26873779296875, 11.806866971578728, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g192", "xmin": 140671, "xmax": 140733, "ymin": 122416, "ymax": 122418 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.182220458984375, 11.802834233547671, 0.0 ], [ 13.26873779296875, 11.802834233547671, 0.0 ], [ 13.26873779296875, 11.798801436203306, 0.0 ], [ 13.182220458984375, 11.798801436203306, 0.0 ], [ 13.182220458984375, 11.802834233547671, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g193", "xmin": 140734, "xmax": 140797, "ymin": 122416, "ymax": 122418 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.26873779296875, 11.802834233547671, 0.0 ], [ 13.35662841796875, 11.802834233547671, 0.0 ], [ 13.35662841796875, 11.798801436203306, 0.0 ], [ 13.26873779296875, 11.798801436203306, 0.0 ], [ 13.26873779296875, 11.802834233547671, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g194", "xmin": 140672, "xmax": 140734, "ymin": 122419, "ymax": 122421 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.18359375, 11.798801436203306, 0.0 ], [ 13.270111083984375, 11.798801436203306, 0.0 ], [ 13.270111083984375, 11.794768579564732, 0.0 ], [ 13.18359375, 11.794768579564732, 0.0 ], [ 13.18359375, 11.798801436203306, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g195", "xmin": 140735, "xmax": 140797, "ymin": 122419, "ymax": 122421 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.270111083984375, 11.798801436203306, 0.0 ], [ 13.35662841796875, 11.798801436203306, 0.0 ], [ 13.35662841796875, 11.794768579564732, 0.0 ], [ 13.270111083984375, 11.794768579564732, 0.0 ], [ 13.270111083984375, 11.798801436203306, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g196", "xmin": 140672, "xmax": 140734, "ymin": 122422, "ymax": 122424 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.18359375, 11.794768579564732, 0.0 ], [ 13.270111083984375, 11.794768579564732, 0.0 ], [ 13.270111083984375, 11.790735663651063, 0.0 ], [ 13.18359375, 11.790735663651063, 0.0 ], [ 13.18359375, 11.794768579564732, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g197", "xmin": 140735, "xmax": 140797, "ymin": 122422, "ymax": 122424 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.270111083984375, 11.794768579564732, 0.0 ], [ 13.35662841796875, 11.794768579564732, 0.0 ], [ 13.35662841796875, 11.790735663651063, 0.0 ], [ 13.270111083984375, 11.790735663651063, 0.0 ], [ 13.270111083984375, 11.794768579564732, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g198", "xmin": 140671, "xmax": 140734, "ymin": 122425, "ymax": 122427 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.182220458984375, 11.790735663651063, 0.0 ], [ 13.270111083984375, 11.790735663651063, 0.0 ], [ 13.270111083984375, 11.786702688481427, 0.0 ], [ 13.182220458984375, 11.786702688481427, 0.0 ], [ 13.182220458984375, 11.790735663651063, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g199", "xmin": 140735, "xmax": 140798, "ymin": 122425, "ymax": 122427 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.270111083984375, 11.790735663651063, 0.0 ], [ 13.358001708984375, 11.790735663651063, 0.0 ], [ 13.358001708984375, 11.786702688481427, 0.0 ], [ 13.270111083984375, 11.786702688481427, 0.0 ], [ 13.270111083984375, 11.790735663651063, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g200", "xmin": 140669, "xmax": 140733, "ymin": 122428, "ymax": 122430 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.179473876953125, 11.786702688481427, 0.0 ], [ 13.26873779296875, 11.786702688481427, 0.0 ], [ 13.26873779296875, 11.782669654074908, 0.0 ], [ 13.179473876953125, 11.782669654074908, 0.0 ], [ 13.179473876953125, 11.786702688481427, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g201", "xmin": 140734, "xmax": 140798, "ymin": 122428, "ymax": 122430 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.26873779296875, 11.786702688481427, 0.0 ], [ 13.358001708984375, 11.786702688481427, 0.0 ], [ 13.358001708984375, 11.782669654074908, 0.0 ], [ 13.26873779296875, 11.782669654074908, 0.0 ], [ 13.26873779296875, 11.786702688481427, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g202", "xmin": 140668, "xmax": 140732, "ymin": 122431, "ymax": 122433 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.1781005859375, 11.782669654074908, 0.0 ], [ 13.267364501953125, 11.782669654074908, 0.0 ], [ 13.267364501953125, 11.778636560450607, 0.0 ], [ 13.1781005859375, 11.778636560450607, 0.0 ], [ 13.1781005859375, 11.782669654074908, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g203", "xmin": 140733, "xmax": 140798, "ymin": 122431, "ymax": 122433 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.267364501953125, 11.782669654074908, 0.0 ], [ 13.358001708984375, 11.782669654074908, 0.0 ], [ 13.358001708984375, 11.778636560450607, 0.0 ], [ 13.267364501953125, 11.778636560450607, 0.0 ], [ 13.267364501953125, 11.782669654074908, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g204", "xmin": 140667, "xmax": 140732, "ymin": 122434, "ymax": 122436 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.176727294921875, 11.778636560450607, 0.0 ], [ 13.267364501953125, 11.778636560450607, 0.0 ], [ 13.267364501953125, 11.77460340762768, 0.0 ], [ 13.176727294921875, 11.77460340762768, 0.0 ], [ 13.176727294921875, 11.778636560450607, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g205", "xmin": 140733, "xmax": 140798, "ymin": 122434, "ymax": 122436 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.267364501953125, 11.778636560450607, 0.0 ], [ 13.358001708984375, 11.778636560450607, 0.0 ], [ 13.358001708984375, 11.77460340762768, 0.0 ], [ 13.267364501953125, 11.77460340762768, 0.0 ], [ 13.267364501953125, 11.778636560450607, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g206", "xmin": 140665, "xmax": 140731, "ymin": 122437, "ymax": 122439 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.173980712890625, 11.77460340762768, 0.0 ], [ 13.2659912109375, 11.77460340762768, 0.0 ], [ 13.2659912109375, 11.770570195625226, 0.0 ], [ 13.173980712890625, 11.770570195625226, 0.0 ], [ 13.173980712890625, 11.77460340762768, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g207", "xmin": 140732, "xmax": 140798, "ymin": 122437, "ymax": 122439 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.2659912109375, 11.77460340762768, 0.0 ], [ 13.358001708984375, 11.77460340762768, 0.0 ], [ 13.358001708984375, 11.770570195625226, 0.0 ], [ 13.2659912109375, 11.770570195625226, 0.0 ], [ 13.2659912109375, 11.77460340762768, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g208", "xmin": 140664, "xmax": 140730, "ymin": 122440, "ymax": 122442 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.172607421875, 11.770570195625226, 0.0 ], [ 13.264617919921875, 11.770570195625226, 0.0 ], [ 13.264617919921875, 11.766536924462358, 0.0 ], [ 13.172607421875, 11.766536924462358, 0.0 ], [ 13.172607421875, 11.770570195625226, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g209", "xmin": 140731, "xmax": 140798, "ymin": 122440, "ymax": 122442 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.264617919921875, 11.770570195625226, 0.0 ], [ 13.358001708984375, 11.770570195625226, 0.0 ], [ 13.358001708984375, 11.766536924462358, 0.0 ], [ 13.264617919921875, 11.766536924462358, 0.0 ], [ 13.264617919921875, 11.770570195625226, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g210", "xmin": 140662, "xmax": 140729, "ymin": 122443, "ymax": 122445 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.16986083984375, 11.766536924462358, 0.0 ], [ 13.26324462890625, 11.766536924462358, 0.0 ], [ 13.26324462890625, 11.76250359415819, 0.0 ], [ 13.16986083984375, 11.76250359415819, 0.0 ], [ 13.16986083984375, 11.766536924462358, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g211", "xmin": 140730, "xmax": 140798, "ymin": 122443, "ymax": 122445 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.26324462890625, 11.766536924462358, 0.0 ], [ 13.358001708984375, 11.766536924462358, 0.0 ], [ 13.358001708984375, 11.76250359415819, 0.0 ], [ 13.26324462890625, 11.76250359415819, 0.0 ], [ 13.26324462890625, 11.766536924462358, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g212", "xmin": 140661, "xmax": 140727, "ymin": 122446, "ymax": 122448 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.168487548828125, 11.76250359415819, 0.0 ], [ 13.260498046875, 11.76250359415819, 0.0 ], [ 13.260498046875, 11.75847020473185, 0.0 ], [ 13.168487548828125, 11.75847020473185, 0.0 ], [ 13.168487548828125, 11.76250359415819, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g213", "xmin": 140728, "xmax": 140795, "ymin": 122446, "ymax": 122448 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.260498046875, 11.76250359415819, 0.0 ], [ 13.3538818359375, 11.76250359415819, 0.0 ], [ 13.3538818359375, 11.75847020473185, 0.0 ], [ 13.260498046875, 11.75847020473185, 0.0 ], [ 13.260498046875, 11.76250359415819, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g214", "xmin": 140660, "xmax": 140721, "ymin": 122449, "ymax": 122451 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.1671142578125, 11.75847020473185, 0.0 ], [ 13.25225830078125, 11.75847020473185, 0.0 ], [ 13.25225830078125, 11.754436756202466, 0.0 ], [ 13.1671142578125, 11.754436756202466, 0.0 ], [ 13.1671142578125, 11.75847020473185, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g215", "xmin": 140722, "xmax": 140783, "ymin": 122449, "ymax": 122451 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.25225830078125, 11.75847020473185, 0.0 ], [ 13.33740234375, 11.75847020473185, 0.0 ], [ 13.33740234375, 11.754436756202466, 0.0 ], [ 13.25225830078125, 11.754436756202466, 0.0 ], [ 13.25225830078125, 11.75847020473185, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g216", "xmin": 140662, "xmax": 140715, "ymin": 122452, "ymax": 122454 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.16986083984375, 11.754436756202466, 0.0 ], [ 13.2440185546875, 11.754436756202466, 0.0 ], [ 13.2440185546875, 11.750403248589137, 0.0 ], [ 13.16986083984375, 11.750403248589137, 0.0 ], [ 13.16986083984375, 11.754436756202466, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g217", "xmin": 140716, "xmax": 140770, "ymin": 122452, "ymax": 122454 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.2440185546875, 11.754436756202466, 0.0 ], [ 13.319549560546875, 11.754436756202466, 0.0 ], [ 13.319549560546875, 11.750403248589137, 0.0 ], [ 13.2440185546875, 11.750403248589137, 0.0 ], [ 13.2440185546875, 11.754436756202466, 0.0 ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/closed_polygons.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/closed_polygons.geojson new file mode 100644 index 000000000..baf38996e --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/closed_polygons.geojson @@ -0,0 +1,9 @@ +{ +"type": "FeatureCollection", +"name": "closed_polygons", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.003076718322333, 11.869916022241306 ], [ 13.097087731675623, 11.878798759411533 ], [ 13.149254802448171, 11.863389980500067 ], [ 13.195986940462742, 11.790660683530046 ], [ 13.049902530295142, 11.744137951246383 ], [ 12.902151181837251, 11.780810593632856 ], [ 13.003076718322333, 11.869916022241306 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.167182061165102, 11.754562318637124 ], [ 13.186295333875961, 11.794604661309036 ], [ 13.156227606994483, 11.866236893098717 ], [ 13.354290041440114, 11.837945455154422 ], [ 13.357960583963067, 11.763485878260219 ], [ 13.301329356466068, 11.750376797821099 ], [ 13.167182061165102, 11.754562318637124 ] ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/distant_polygons.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/distant_polygons.geojson new file mode 100644 index 000000000..719789741 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/distant_polygons.geojson @@ -0,0 +1,9 @@ +{ +"type": "FeatureCollection", +"name": "distant_polygons", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.003076718322333, 11.869916022241306 ], [ 13.097087731675623, 11.878798759411533 ], [ 13.149254802448171, 11.863389980500067 ], [ 13.195986940462742, 11.790660683530046 ], [ 13.049902530295142, 11.744137951246383 ], [ 12.902151181837251, 11.780810593632856 ], [ 13.003076718322333, 11.869916022241306 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.267245747324356, 11.765058967912914 ], [ 13.354290041440114, 11.837945455154422 ], [ 13.357960583963067, 11.763485878260219 ], [ 13.301329356466068, 11.750376797821099 ], [ 13.267245747324356, 11.765058967912914 ] ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/horizontal_slices_expected.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/horizontal_slices_expected.geojson new file mode 100644 index 000000000..f4cc2e3e3 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/horizontal_slices_expected.geojson @@ -0,0 +1,13 @@ +{ +"type": "FeatureCollection", +"name": "fixtures\/completeness\/horizontal_slices_expected.geojson", +"features": [ +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 9.180424368658189, 48.790580744743203, 0.0 ], [ 9.150933994655526, 48.790580744743203, 0.0 ], [ 9.152503706467067, 48.792504837393238, 0.0 ], [ 9.177501802804644, 48.793066897143774, 0.0 ], [ 9.180424368658189, 48.790580744743203, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 9.150933994655526, 48.790580744743203, 0.0 ], [ 9.180424368658189, 48.790580744743203, 0.0 ], [ 9.183615130539128, 48.787866444806959, 0.0 ], [ 9.148719616532983, 48.787866444806959, 0.0 ], [ 9.150933994655526, 48.790580744743203, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 9.148719616532983, 48.787866444806959, 0.0 ], [ 9.183615130539128, 48.787866444806959, 0.0 ], [ 9.186806065021415, 48.785151998043141, 0.0 ], [ 9.146505118625679, 48.785151998043141, 0.0 ], [ 9.148719616532983, 48.787866444806959, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 9.146505118625679, 48.785151998043141, 0.0 ], [ 9.186806065021415, 48.785151998043141, 0.0 ], [ 9.189997172107237, 48.782437404449887, 0.0 ], [ 9.148140575679822, 48.782437404449887, 0.0 ], [ 9.145166381262182, 48.783511025029817, 0.0 ], [ 9.146505118625679, 48.785151998043141, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 9.148140575679822, 48.782437404449887, 0.0 ], [ 9.189997172107237, 48.782437404449887, 0.0 ], [ 9.1900634765625, 48.782381000937058, 0.0 ], [ 9.1900634765625, 48.781274251362348, 0.0 ], [ 9.185683449629021, 48.779722664025357, 0.0 ], [ 9.156433888378306, 48.779722664025357, 0.0 ], [ 9.154977920780345, 48.779969269089108, 0.0 ], [ 9.148140575679822, 48.782437404449887, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 9.156433888378306, 48.779722664025357, 0.0 ], [ 9.185683449629021, 48.779722664025357, 0.0 ], [ 9.178019505082419, 48.777007776767697, 0.0 ], [ 9.172462707167128, 48.777007776767697, 0.0 ], [ 9.156433888378306, 48.779722664025357, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 9.172462707167128, 48.777007776767697, 0.0 ], [ 9.178019505082419, 48.777007776767697, 0.0 ], [ 9.176222036780535, 48.77637103888955, 0.0 ], [ 9.172462707167128, 48.777007776767697, 0.0 ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py new file mode 100644 index 000000000..e8641da02 --- /dev/null +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -0,0 +1,48 @@ +import os +import unittest +from mapswipe_workers.utils import tile_grouping_functions as t + + +class TestGroupsOverlap(unittest.TestCase): + def setUp(self): + self.test_dir = os.path.dirname(os.path.abspath(__file__)) + self.project_extent_file = os.path.join( + self.test_dir, "fixtures/completeness/closed_polygons.geojson" + ) + + def test_adjust_groups_overlap(self): + groups = t.extent_to_slices(self.project_extent_file, 18, 100) + group_ids = list(groups.keys()) + + while len(group_ids) > 0: + for group_id in group_ids: + x_max = groups[group_id]["xMax"] + x_min = groups[group_id]["xMin"] + + y_max = groups[group_id]["yMax"] + y_min = groups[group_id]["yMin"] + + group_ids.remove(group_id) + + for group_id_b in group_ids: + y_minB = groups[group_id_b]["yMin"] + y_maxB = groups[group_id_b]["yMax"] + x_maxB = groups[group_id_b]["xMax"] + x_minB = groups[group_id_b]["xMin"] + + # content from range_overlap + if ( + (int(x_min) <= int(x_maxB)) + and (int(x_minB) <= int(x_max)) + and (int(y_min) <= int(y_maxB)) + and (int(y_minB) <= int(y_max)) + ): + print("x_min " + x_min + " x_maxB " + x_maxB) + x_min = int(x_maxB) - 1 + x_max = int(x_minB) - 1 + y_min = int(y_maxB) - 1 + y_max = int(y_minB) - 1 + + +if __name__ == "__main__": + unittest.main() diff --git a/mapswipe_workers/tests/unittests/test_multiple_geoms.py b/mapswipe_workers/tests/unittests/test_multiple_geoms.py new file mode 100644 index 000000000..26abc4c14 --- /dev/null +++ b/mapswipe_workers/tests/unittests/test_multiple_geoms.py @@ -0,0 +1,45 @@ +import os +import unittest +from mapswipe_workers.utils import tile_grouping_functions as t +from osgeo import ogr + + +class TestMultipleGeoms(unittest.TestCase): + def setUp(self): + self.test_dir = os.path.dirname(os.path.abspath(__file__)) + self.project_extent_file = os.path.join( + self.test_dir, "fixtures/completeness/single_polygon.geojson" + ) + + def test_get_horizontal_slice(self): + extent, geomcol = t.get_geometry_from_file(self.project_extent_file) + + horizontal_slices_expected = os.path.join( + self.test_dir, "fixtures/completeness/horizontal_slices_expected.geojson" + ) + # read geojson file with expected geometry + driver = ogr.GetDriverByName("GeoJSON") + datasource = driver.Open(horizontal_slices_expected, 0) + layer = datasource.GetLayer() + wkt_before = [] + + # transform geometries into wkt geometries + for feature in layer: + feat_geom = feature.GetGeometryRef() + wkt_geometry = feat_geom.ExportToWkt() + wkt_before.append(wkt_geometry) + + # check if geometries are the same as before (before modification) + slices_info = t.get_horizontal_slice(extent, geomcol, 18) + geomcol = slices_info["slice_collection"] + + wkt_after = [] + for feature in geomcol: + wkt_geometry = feature.ExportToWkt() + wkt_after.append(wkt_geometry) + + self.assertCountEqual(wkt_before, wkt_after) + + +if __name__ == "__main__": + unittest.main() diff --git a/mapswipe_workers/tests/unittests/test_validate_geometries.py b/mapswipe_workers/tests/unittests/test_validate_geometries.py index 4101d46e4..b289d679f 100644 --- a/mapswipe_workers/tests/unittests/test_validate_geometries.py +++ b/mapswipe_workers/tests/unittests/test_validate_geometries.py @@ -5,67 +5,62 @@ from mapswipe_workers.definitions import ProjectType +def create_project(path): + # pre steps for outputting result of function + test_dir = os.path.dirname(os.path.abspath(__file__)) + with open(os.path.join(test_dir, path)) as json_file: + project_draft = json.load(json_file) + project_type = project_draft["projectType"] + project = ProjectType(project_type).constructor(project_draft) + + return project + + class TestGeometryValidation(unittest.TestCase): def test_multiple_geom_validation(self): - # pre steps for outputting result of function - self.test_dir = os.path.dirname(os.path.abspath(__file__)) - with open( - os.path.join(self.test_dir, "fixtures/completeness/projectDraft.json") - ) as json_file: - project_draft = json.load(json_file) - self.project_type = project_draft["projectType"] - self.project = ProjectType(self.project_type).constructor(project_draft) - + path = "fixtures/completeness/projectDraft.json" + test_dir = os.path.dirname(os.path.abspath(__file__)) + project = create_project(path) # prepare data that is expected - path = os.path.join( - self.test_dir, "fixtures/completeness/multiplePolygons.geojson" - ) + path = os.path.join(test_dir, "fixtures/completeness/multiplePolygons.geojson") driver = ogr.GetDriverByName("GeoJSON") data_source = driver.Open(path, 0) - self.wkt_geometries_expected = [] + wkt_geometries_expected = [] # Get the data layer layer = data_source.GetLayer() for feature in layer: feat_geom = feature.GetGeometryRef() - self.wkt_geometries_expected.append(feat_geom.ExportToWkt()) + wkt_geometries_expected.append(feat_geom.ExportToWkt()) - # results coming from the function - self.wkt = self.project.validate_geometries() + # results coming from the validate geometries function + wkt = project.validate_geometries() # Test that sequence first contains the same elements as second - self.assertCountEqual(self.wkt, self.wkt_geometries_expected) + self.assertCountEqual(wkt, wkt_geometries_expected) def test_single_geom_validation(self): - # pre steps for outputting result of function - self.test_dir = os.path.dirname(os.path.abspath(__file__)) - with open( - os.path.join( - self.test_dir, "fixtures/completeness/projectDraft_single.json" - ) - ) as json_file: - project_draft = json.load(json_file) - self.project_type = project_draft["projectType"] - self.project = ProjectType(self.project_type).constructor(project_draft) + path = "fixtures/completeness/projectDraft_single.json" + test_dir = os.path.dirname(os.path.abspath(__file__)) + project = create_project(path) # prepare data that is expected - path = os.path.join( - self.test_dir, "fixtures/completeness/single_polygon.geojson" - ) + path = os.path.join(test_dir, "fixtures/completeness/single_polygon.geojson") driver = ogr.GetDriverByName("GeoJSON") datasource = driver.Open(path, 0) - self.wkt_geometries_expected = [] + wkt_geometries_expected = [] # Get the data layer layer = datasource.GetLayer() for feature in layer: feat_geom = feature.GetGeometryRef() - self.wkt_geometries_expected.append(feat_geom.ExportToWkt()) + wkt_geometries_expected.append(feat_geom.ExportToWkt()) - # results coming from the function - self.wkt = self.project.validate_geometries() + # results coming from the validate_geometries function + wkt = project.validate_geometries() # Test that sequence first contains the same elements as second - self.assertCountEqual(self.wkt, self.wkt_geometries_expected) + self.assertCountEqual(wkt, wkt_geometries_expected) if __name__ == "__main__": + unittest.main() From 293c8de2bc2c054858500f9c1b7de6dcdb065750 Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Thu, 2 Jul 2020 12:25:00 +0200 Subject: [PATCH 07/69] groups overlap --- .../utils/tile_grouping_functions.py | 1 + .../completeness/check_Groups.geojson | 20 ++++ .../tests/unittests/test_groups_overlap.py | 103 +++++++++++++----- 3 files changed, 96 insertions(+), 28 deletions(-) create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/check_Groups.geojson diff --git a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py index 0badc5dc5..811f53e97 100644 --- a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py +++ b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py @@ -273,6 +273,7 @@ def get_vertical_slice(slice_infos, zoom, width_threshold=40): } ##################### + # TODO what does the line below exactly do? TileX = TileX + step_size logger.info("created vertical_slice") diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/check_Groups.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/check_Groups.geojson new file mode 100644 index 000000000..686a1ae03 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/check_Groups.geojson @@ -0,0 +1,20 @@ +{ +"type": "FeatureCollection", +"name": "fixtures\/completeness\/check_Groups.geojson", +"features": [ +{ "type": "Feature", "properties": { "group_id": "g217", "xmin": 140716, "xmax": 140770, "ymin": 122452, "ymax": 122454 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.2440185546875, 11.754436756202466, 0.0 ], [ 13.319549560546875, 11.754436756202466, 0.0 ], [ 13.319549560546875, 11.750403248589137, 0.0 ], [ 13.2440185546875, 11.750403248589137, 0.0 ], [ 13.2440185546875, 11.754436756202466, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g119", "xmin": 140586, "xmax": 140660, "ymin": 122389, "ymax": 122392 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.06549072265625, 11.835094475418842, 0.0 ], [ 13.1671142578125, 11.835094475418842, 0.0 ], [ 13.1671142578125, 11.839126738255743, 0.0 ], [ 13.06549072265625, 11.839126738255743, 0.0 ], [ 13.06549072265625, 11.835094475418842, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g121", "xmin": 140585, "xmax": 140661, "ymin": 122392, "ymax": 122395 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.064117431640625, 11.831062153115809, 0.0 ], [ 13.168487548828125, 11.831062153115809, 0.0 ], [ 13.168487548828125, 11.835094475418842, 0.0 ], [ 13.064117431640625, 11.835094475418842, 0.0 ], [ 13.064117431640625, 11.831062153115809, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g123", "xmin": 140585, "xmax": 140662, "ymin": 122395, "ymax": 122398 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.064117431640625, 11.827029771365758, 0.0 ], [ 13.16986083984375, 11.827029771365758, 0.0 ], [ 13.16986083984375, 11.831062153115809, 0.0 ], [ 13.064117431640625, 11.831062153115809, 0.0 ], [ 13.064117431640625, 11.827029771365758, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g125", "xmin": 140583, "xmax": 140664, "ymin": 122398, "ymax": 122401 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.061370849609375, 11.822997330187803, 0.0 ], [ 13.172607421875, 11.822997330187803, 0.0 ], [ 13.172607421875, 11.827029771365758, 0.0 ], [ 13.061370849609375, 11.827029771365758, 0.0 ], [ 13.061370849609375, 11.822997330187803, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g127", "xmin": 140583, "xmax": 140665, "ymin": 122401, "ymax": 122404 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.061370849609375, 11.818964829601015, 0.0 ], [ 13.173980712890625, 11.818964829601015, 0.0 ], [ 13.173980712890625, 11.822997330187803, 0.0 ], [ 13.061370849609375, 11.822997330187803, 0.0 ], [ 13.061370849609375, 11.818964829601015, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g129", "xmin": 140582, "xmax": 140666, "ymin": 122404, "ymax": 122407 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.05999755859375, 11.814932269624506, 0.0 ], [ 13.17535400390625, 11.814932269624506, 0.0 ], [ 13.17535400390625, 11.818964829601015, 0.0 ], [ 13.05999755859375, 11.818964829601015, 0.0 ], [ 13.05999755859375, 11.814932269624506, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g131", "xmin": 140581, "xmax": 140667, "ymin": 122407, "ymax": 122410 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.058624267578125, 11.810899650277392, 0.0 ], [ 13.176727294921875, 11.810899650277392, 0.0 ], [ 13.176727294921875, 11.814932269624506, 0.0 ], [ 13.058624267578125, 11.814932269624506, 0.0 ], [ 13.058624267578125, 11.810899650277392, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g133", "xmin": 140581, "xmax": 140668, "ymin": 122410, "ymax": 122413 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.058624267578125, 11.806866971578728, 0.0 ], [ 13.1781005859375, 11.806866971578728, 0.0 ], [ 13.1781005859375, 11.810899650277392, 0.0 ], [ 13.058624267578125, 11.810899650277392, 0.0 ], [ 13.058624267578125, 11.806866971578728, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g135", "xmin": 140580, "xmax": 140670, "ymin": 122413, "ymax": 122416 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.0572509765625, 11.802834233547671, 0.0 ], [ 13.18084716796875, 11.802834233547671, 0.0 ], [ 13.18084716796875, 11.806866971578728, 0.0 ], [ 13.0572509765625, 11.806866971578728, 0.0 ], [ 13.0572509765625, 11.802834233547671, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g137", "xmin": 140579, "xmax": 140671, "ymin": 122416, "ymax": 122419 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.055877685546875, 11.798801436203306, 0.0 ], [ 13.182220458984375, 11.798801436203306, 0.0 ], [ 13.182220458984375, 11.802834233547671, 0.0 ], [ 13.055877685546875, 11.802834233547671, 0.0 ], [ 13.055877685546875, 11.798801436203306, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g143", "xmin": 140613, "xmax": 140672, "ymin": 122422, "ymax": 122425 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.102569580078125, 11.790735663651063, 0.0 ], [ 13.18359375, 11.790735663651063, 0.0 ], [ 13.18359375, 11.794768579564732, 0.0 ], [ 13.102569580078125, 11.794768579564732, 0.0 ], [ 13.102569580078125, 11.790735663651063, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g149", "xmin": 140604, "xmax": 140669, "ymin": 122428, "ymax": 122431 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.0902099609375, 11.782669654074908, 0.0 ], [ 13.179473876953125, 11.782669654074908, 0.0 ], [ 13.179473876953125, 11.786702688481427, 0.0 ], [ 13.0902099609375, 11.786702688481427, 0.0 ], [ 13.0902099609375, 11.782669654074908, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "group_id": "g216", "xmin": 140662, "xmax": 140715, "ymin": 122452, "ymax": 122454 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.16986083984375, 11.754436756202466, 0.0 ], [ 13.2440185546875, 11.754436756202466, 0.0 ], [ 13.2440185546875, 11.750403248589137, 0.0 ], [ 13.16986083984375, 11.750403248589137, 0.0 ], [ 13.16986083984375, 11.754436756202466, 0.0 ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index e8641da02..11783fd55 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -1,6 +1,8 @@ import os import unittest from mapswipe_workers.utils import tile_grouping_functions as t +from mapswipe_workers.utils import tile_functions as s +from osgeo import ogr class TestGroupsOverlap(unittest.TestCase): @@ -13,35 +15,80 @@ def setUp(self): def test_adjust_groups_overlap(self): groups = t.extent_to_slices(self.project_extent_file, 18, 100) group_ids = list(groups.keys()) + raw_groups = {} - while len(group_ids) > 0: - for group_id in group_ids: - x_max = groups[group_id]["xMax"] - x_min = groups[group_id]["xMin"] - - y_max = groups[group_id]["yMax"] - y_min = groups[group_id]["yMin"] - - group_ids.remove(group_id) - - for group_id_b in group_ids: - y_minB = groups[group_id_b]["yMin"] - y_maxB = groups[group_id_b]["yMax"] - x_maxB = groups[group_id_b]["xMax"] - x_minB = groups[group_id_b]["xMin"] - - # content from range_overlap - if ( - (int(x_min) <= int(x_maxB)) - and (int(x_minB) <= int(x_max)) - and (int(y_min) <= int(y_maxB)) - and (int(y_minB) <= int(y_max)) - ): - print("x_min " + x_min + " x_maxB " + x_maxB) - x_min = int(x_maxB) - 1 - x_max = int(x_minB) - 1 - y_min = int(y_maxB) - 1 - y_max = int(y_minB) - 1 + for group_id in group_ids: + x_max = groups[group_id]["xMax"] + x_min = groups[group_id]["xMin"] + + y_max = groups[group_id]["yMax"] + y_min = groups[group_id]["yMin"] + + group_ids.remove(group_id) + overlap_count = 0 + for group_id_b in group_ids: + y_minB = groups[group_id_b]["yMin"] + y_maxB = groups[group_id_b]["yMax"] + x_maxB = groups[group_id_b]["xMax"] + x_minB = groups[group_id_b]["xMin"] + + # content from range_overlap + if ( + (int(x_min) <= int(x_maxB)) + and (int(x_minB) <= int(x_max)) + and (int(y_min) <= int(y_maxB)) + and (int(y_minB) <= int(y_max)) + ): + overlap_count += 1 + new_x_max = int(x_minB) + 1 + + # Calculate lat, lon of upper left corner of tile + PixelX = int(x_min) * 256 + PixelY = (int(y_max) + 1) * 256 + lon_left, lat_top = s.pixel_coords_zoom_to_lat_lon( + PixelX, PixelY, 18 + ) + # logging.info('lon_left: %s, lat_top: %s' % (lon_left, lat_top)) + + # Calculate lat, lon of bottom right corner of tile + PixelX = (int(new_x_max) - 1) * 256 + PixelY = (int(y_min)) * 256 + lon_right, lat_bottom = s.pixel_coords_zoom_to_lat_lon( + PixelX, PixelY, 18 + ) + + # Create Geometry + ring = ogr.Geometry(ogr.wkbLinearRing) + ring.AddPoint(lon_left, lat_top) + ring.AddPoint(lon_right, lat_top) + ring.AddPoint(lon_right, lat_bottom) + ring.AddPoint(lon_left, lat_bottom) + ring.AddPoint(lon_left, lat_top) + poly = ogr.Geometry(ogr.wkbPolygon) + poly.AddGeometry(ring) + + # add info to groups_dict + + raw_groups[group_id] = { + "xMin": str(x_min), + "xMax": str(int(new_x_max) - 1), + "yMin": str(y_min), + "yMax": str(int(y_max) + 1), + "group_polygon": poly, + } + + print(overlap_count) + + if overlap_count == 0: + raw_groups[group_id_b] = groups[group_id_b] + + return raw_groups + + def test_display_groups(self): + raw_groups = self.test_adjust_groups_overlap() + t.save_vertical_slices_as_geojson( + raw_groups, "fixtures/completeness/check_Groups.geojson" + ) if __name__ == "__main__": From 6417fa240b7bc212c590f3b7fcb6a1fbb6450b65 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 2 Jul 2020 12:41:20 +0200 Subject: [PATCH 08/69] adjust structure of test for groups overlap --- .../utils/tile_grouping_functions.py | 70 ++++++++++++++++ .../tests/unittests/test_groups_overlap.py | 80 ++----------------- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py index 811f53e97..ed209126b 100644 --- a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py +++ b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py @@ -280,6 +280,76 @@ def get_vertical_slice(slice_infos, zoom, width_threshold=40): return raw_groups +def adjust_overlapping_groups(groups): + group_ids = list(groups.keys()) + raw_groups = {} + + for group_id in group_ids: + x_max = groups[group_id]["xMax"] + x_min = groups[group_id]["xMin"] + + y_max = groups[group_id]["yMax"] + y_min = groups[group_id]["yMin"] + + group_ids.remove(group_id) + overlap_count = 0 + for group_id_b in group_ids: + y_minB = groups[group_id_b]["yMin"] + y_maxB = groups[group_id_b]["yMax"] + x_maxB = groups[group_id_b]["xMax"] + x_minB = groups[group_id_b]["xMin"] + + # content from range_overlap + if ( + (int(x_min) <= int(x_maxB)) + and (int(x_minB) <= int(x_max)) + and (int(y_min) <= int(y_maxB)) + and (int(y_minB) <= int(y_max)) + ): + overlap_count += 1 + new_x_max = int(x_minB) + 1 + + # Calculate lat, lon of upper left corner of tile + PixelX = int(x_min) * 256 + PixelY = (int(y_max) + 1) * 256 + lon_left, lat_top = t.pixel_coords_zoom_to_lat_lon(PixelX, PixelY, 18) + # logging.info('lon_left: %s, lat_top: %s' % (lon_left, lat_top)) + + # Calculate lat, lon of bottom right corner of tile + PixelX = (int(new_x_max) - 1) * 256 + PixelY = (int(y_min)) * 256 + lon_right, lat_bottom = t.pixel_coords_zoom_to_lat_lon( + PixelX, PixelY, 18 + ) + + # Create Geometry + ring = ogr.Geometry(ogr.wkbLinearRing) + ring.AddPoint(lon_left, lat_top) + ring.AddPoint(lon_right, lat_top) + ring.AddPoint(lon_right, lat_bottom) + ring.AddPoint(lon_left, lat_bottom) + ring.AddPoint(lon_left, lat_top) + poly = ogr.Geometry(ogr.wkbPolygon) + poly.AddGeometry(ring) + + # add info to groups_dict + + raw_groups[group_id] = { + "xMin": str(x_min), + "xMax": str(int(new_x_max) - 1), + "yMin": str(y_min), + "yMax": str(int(y_max) + 1), + "group_polygon": poly, + } + + print(overlap_count) + + if overlap_count == 0: + raw_groups[group_id_b] = groups[group_id_b] + + return raw_groups + + def extent_to_slices(infile, zoom, groupSize): """ The function to polygon geometries of a given input file diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index 11783fd55..26aeced13 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -1,8 +1,6 @@ import os import unittest from mapswipe_workers.utils import tile_grouping_functions as t -from mapswipe_workers.utils import tile_functions as s -from osgeo import ogr class TestGroupsOverlap(unittest.TestCase): @@ -13,82 +11,14 @@ def setUp(self): ) def test_adjust_groups_overlap(self): - groups = t.extent_to_slices(self.project_extent_file, 18, 100) - group_ids = list(groups.keys()) - raw_groups = {} + groups_with_overlaps = t.extent_to_slices(self.project_extent_file, 18, 100) + groups = t.adjust_overlapping_groups(groups_with_overlaps) - for group_id in group_ids: - x_max = groups[group_id]["xMax"] - x_min = groups[group_id]["xMin"] - - y_max = groups[group_id]["yMax"] - y_min = groups[group_id]["yMin"] - - group_ids.remove(group_id) - overlap_count = 0 - for group_id_b in group_ids: - y_minB = groups[group_id_b]["yMin"] - y_maxB = groups[group_id_b]["yMax"] - x_maxB = groups[group_id_b]["xMax"] - x_minB = groups[group_id_b]["xMin"] - - # content from range_overlap - if ( - (int(x_min) <= int(x_maxB)) - and (int(x_minB) <= int(x_max)) - and (int(y_min) <= int(y_maxB)) - and (int(y_minB) <= int(y_max)) - ): - overlap_count += 1 - new_x_max = int(x_minB) + 1 - - # Calculate lat, lon of upper left corner of tile - PixelX = int(x_min) * 256 - PixelY = (int(y_max) + 1) * 256 - lon_left, lat_top = s.pixel_coords_zoom_to_lat_lon( - PixelX, PixelY, 18 - ) - # logging.info('lon_left: %s, lat_top: %s' % (lon_left, lat_top)) - - # Calculate lat, lon of bottom right corner of tile - PixelX = (int(new_x_max) - 1) * 256 - PixelY = (int(y_min)) * 256 - lon_right, lat_bottom = s.pixel_coords_zoom_to_lat_lon( - PixelX, PixelY, 18 - ) - - # Create Geometry - ring = ogr.Geometry(ogr.wkbLinearRing) - ring.AddPoint(lon_left, lat_top) - ring.AddPoint(lon_right, lat_top) - ring.AddPoint(lon_right, lat_bottom) - ring.AddPoint(lon_left, lat_bottom) - ring.AddPoint(lon_left, lat_top) - poly = ogr.Geometry(ogr.wkbPolygon) - poly.AddGeometry(ring) - - # add info to groups_dict - - raw_groups[group_id] = { - "xMin": str(x_min), - "xMax": str(int(new_x_max) - 1), - "yMin": str(y_min), - "yMax": str(int(y_max) + 1), - "group_polygon": poly, - } - - print(overlap_count) - - if overlap_count == 0: - raw_groups[group_id_b] = groups[group_id_b] - - return raw_groups - - def test_display_groups(self): - raw_groups = self.test_adjust_groups_overlap() + # save files for visual inspection in qgis t.save_vertical_slices_as_geojson( - raw_groups, "fixtures/completeness/check_Groups.geojson" + groups_with_overlaps, "groups_with_overlaps.geojson" ) + t.save_vertical_slices_as_geojson(groups, "groups.geojson") if __name__ == "__main__": From 62b45d86ed11fef0ec34c5cd8f6db83c8d3208ff Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 2 Jul 2020 12:45:19 +0200 Subject: [PATCH 09/69] add assertion to test number of groups correct --- mapswipe_workers/tests/unittests/test_groups_overlap.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index 26aeced13..392998765 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -20,6 +20,9 @@ def test_adjust_groups_overlap(self): ) t.save_vertical_slices_as_geojson(groups, "groups.geojson") + # we expect 117 groups + self.assertEqual(len(groups), 117) + if __name__ == "__main__": unittest.main() From f6a4c45085f3108bd38c0700f4d18de3a5931adb Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 2 Jul 2020 12:48:59 +0200 Subject: [PATCH 10/69] add some print and rename variable --- .../utils/tile_grouping_functions.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py index ed209126b..f48689914 100644 --- a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py +++ b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py @@ -282,12 +282,11 @@ def get_vertical_slice(slice_infos, zoom, width_threshold=40): def adjust_overlapping_groups(groups): group_ids = list(groups.keys()) - raw_groups = {} + groups_without_overlap = {} for group_id in group_ids: x_max = groups[group_id]["xMax"] x_min = groups[group_id]["xMin"] - y_max = groups[group_id]["yMax"] y_min = groups[group_id]["yMin"] @@ -333,8 +332,7 @@ def adjust_overlapping_groups(groups): poly.AddGeometry(ring) # add info to groups_dict - - raw_groups[group_id] = { + groups_without_overlap[group_id] = { "xMin": str(x_min), "xMax": str(int(new_x_max) - 1), "yMin": str(y_min), @@ -342,12 +340,13 @@ def adjust_overlapping_groups(groups): "group_polygon": poly, } - print(overlap_count) + # print(overlap_count) if overlap_count == 0: - raw_groups[group_id_b] = groups[group_id_b] + groups_without_overlap[group_id] = groups[group_id] - return raw_groups + print(len(groups_without_overlap)) + return groups_without_overlap def extent_to_slices(infile, zoom, groupSize): From 61a7a1969e5051f2b842765b0083b42380f29b47 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 2 Jul 2020 14:20:23 +0200 Subject: [PATCH 11/69] fix test --- .../utils/tile_grouping_functions.py | 16 +++++++++------- .../fixtures/completeness/check_Groups.geojson | 2 +- .../tests/unittests/test_groups_overlap.py | 7 ++++--- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py index f48689914..e39577912 100644 --- a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py +++ b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py @@ -281,18 +281,21 @@ def get_vertical_slice(slice_infos, zoom, width_threshold=40): def adjust_overlapping_groups(groups): - group_ids = list(groups.keys()) + groups_without_overlap = {} - for group_id in group_ids: + for group_id in list(groups.keys()): x_max = groups[group_id]["xMax"] x_min = groups[group_id]["xMin"] y_max = groups[group_id]["yMax"] y_min = groups[group_id]["yMin"] - group_ids.remove(group_id) overlap_count = 0 - for group_id_b in group_ids: + for group_id_b in list(groups.keys()): + # skip if it is the same group + if group_id_b == group_id: + continue + y_minB = groups[group_id_b]["yMin"] y_maxB = groups[group_id_b]["yMax"] x_maxB = groups[group_id_b]["xMax"] @@ -340,12 +343,11 @@ def adjust_overlapping_groups(groups): "group_polygon": poly, } - # print(overlap_count) - if overlap_count == 0: groups_without_overlap[group_id] = groups[group_id] - print(len(groups_without_overlap)) + del groups[group_id] + return groups_without_overlap diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/check_Groups.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/check_Groups.geojson index 686a1ae03..f51384cf0 100644 --- a/mapswipe_workers/tests/unittests/fixtures/completeness/check_Groups.geojson +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/check_Groups.geojson @@ -1,6 +1,6 @@ { "type": "FeatureCollection", -"name": "fixtures\/completeness\/check_Groups.geojson", +"name": "\/home\/h9b\/GIT_REPOS\/python-mapswipe-workers\/mapswipe_workers\/tests\/unittests\/fixtures\/completeness\/check_Groups.geojson", "features": [ { "type": "Feature", "properties": { "group_id": "g217", "xmin": 140716, "xmax": 140770, "ymin": 122452, "ymax": 122454 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.2440185546875, 11.754436756202466, 0.0 ], [ 13.319549560546875, 11.754436756202466, 0.0 ], [ 13.319549560546875, 11.750403248589137, 0.0 ], [ 13.2440185546875, 11.750403248589137, 0.0 ], [ 13.2440185546875, 11.754436756202466, 0.0 ] ] ] } }, { "type": "Feature", "properties": { "group_id": "g119", "xmin": 140586, "xmax": 140660, "ymin": 122389, "ymax": 122392 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 13.06549072265625, 11.835094475418842, 0.0 ], [ 13.1671142578125, 11.835094475418842, 0.0 ], [ 13.1671142578125, 11.839126738255743, 0.0 ], [ 13.06549072265625, 11.839126738255743, 0.0 ], [ 13.06549072265625, 11.835094475418842, 0.0 ] ] ] } }, diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index 392998765..f99b90417 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -12,12 +12,13 @@ def setUp(self): def test_adjust_groups_overlap(self): groups_with_overlaps = t.extent_to_slices(self.project_extent_file, 18, 100) - groups = t.adjust_overlapping_groups(groups_with_overlaps) - - # save files for visual inspection in qgis t.save_vertical_slices_as_geojson( groups_with_overlaps, "groups_with_overlaps.geojson" ) + + groups = t.adjust_overlapping_groups(groups_with_overlaps) + + # save files for visual inspection in qgis t.save_vertical_slices_as_geojson(groups, "groups.geojson") # we expect 117 groups From 5bbc06f08e6aa3d99c04e3201a8a3b4fb36660d1 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 2 Jul 2020 16:08:14 +0200 Subject: [PATCH 12/69] add test for polygons within --- .../tests/unittests/test_groups_overlap.py | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index f99b90417..f7b0ab4e0 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -6,12 +6,14 @@ class TestGroupsOverlap(unittest.TestCase): def setUp(self): self.test_dir = os.path.dirname(os.path.abspath(__file__)) - self.project_extent_file = os.path.join( + + def test_project_geometries_intersection(self): + + project_extent_file = os.path.join( self.test_dir, "fixtures/completeness/closed_polygons.geojson" ) - def test_adjust_groups_overlap(self): - groups_with_overlaps = t.extent_to_slices(self.project_extent_file, 18, 100) + groups_with_overlaps = t.extent_to_slices(project_extent_file, 18, 100) t.save_vertical_slices_as_geojson( groups_with_overlaps, "groups_with_overlaps.geojson" ) @@ -24,6 +26,24 @@ def test_adjust_groups_overlap(self): # we expect 117 groups self.assertEqual(len(groups), 117) + def test_project_geometries_within(self): + project_extent_file = os.path.join( + self.test_dir, "fixtures/completeness/project_geometries_within.geojson" + ) + + groups_with_overlaps = t.extent_to_slices(project_extent_file, 18, 100) + t.save_vertical_slices_as_geojson( + groups_with_overlaps, "groups_with_overlaps.geojson" + ) + + groups = t.adjust_overlapping_groups(groups_with_overlaps) + + # save files for visual inspection in qgis + t.save_vertical_slices_as_geojson(groups, "groups.geojson") + + # we expect 117 groups + self.assertEqual(len(groups), 64) + if __name__ == "__main__": unittest.main() From 6baa368f0f07fb6ada9f8584e5389f66c28ac08c Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 2 Jul 2020 16:08:27 +0200 Subject: [PATCH 13/69] add test for polygons within --- .../completeness/project_geometries_within.geojson | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/project_geometries_within.geojson diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/project_geometries_within.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/project_geometries_within.geojson new file mode 100644 index 000000000..b39212284 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/project_geometries_within.geojson @@ -0,0 +1,9 @@ +{ +"type": "FeatureCollection", +"name": "polygon_within_polygon", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.003076718322333, 11.869916022241306 ], [ 13.097087731675623, 11.878798759411533 ], [ 13.149254802448171, 11.863389980500067 ], [ 13.195986940462742, 11.790660683530046 ], [ 13.049902530295142, 11.744137951246383 ], [ 12.902151181837251, 11.780810593632856 ], [ 13.003076718322333, 11.869916022241306 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.008483052253723, 11.790721398637817 ], [ 13.024244785308838, 11.82491634492688 ], [ 13.100381970405579, 11.856039089010284 ], [ 13.14098846912384, 11.85403547887616 ], [ 13.172779083251953, 11.802743059442566 ], [ 13.173847675323486, 11.789652806566284 ], [ 13.008483052253723, 11.790721398637817 ] ] ] ] } } +] +} From b70f320c814e52b0713e00e30aa39a6d4f0568ab Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 2 Jul 2020 16:08:52 +0200 Subject: [PATCH 14/69] add test for polygons within --- mapswipe_workers/tests/unittests/test_groups_overlap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index f7b0ab4e0..a4210b6e6 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -41,7 +41,7 @@ def test_project_geometries_within(self): # save files for visual inspection in qgis t.save_vertical_slices_as_geojson(groups, "groups.geojson") - # we expect 117 groups + # we expect 64 groups self.assertEqual(len(groups), 64) From c324f0c5da2bbc2d6e79ea1170094b049a6556c1 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 2 Jul 2020 17:52:21 +0200 Subject: [PATCH 15/69] wip groups within other groups --- .../utils/tile_grouping_functions.py | 120 +++++++++++++++--- ...ct_geometries_very_small_and_close.geojson | 13 ++ .../tests/unittests/test_groups_overlap.py | 62 ++++++++- 3 files changed, 169 insertions(+), 26 deletions(-) create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/project_geometries_very_small_and_close.geojson diff --git a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py index e39577912..fc4601f6c 100644 --- a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py +++ b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py @@ -1,6 +1,5 @@ import math from osgeo import ogr - from mapswipe_workers.definitions import logger from mapswipe_workers.utils import tile_functions as t @@ -280,11 +279,83 @@ def get_vertical_slice(slice_infos, zoom, width_threshold=40): return raw_groups -def adjust_overlapping_groups(groups): +def remove_groups_within_other_groups(groups, zoom): + def a_within_b(): + # b is bigger/wider than a + # TODO: find correct expression + return ( + (int(x_max) <= int(x_maxB)) + and (int(x_min) >= int(x_minB)) + and (int(y_min) <= int(y_maxB)) + and (int(y_minB) <= int(y_max)) + ) + + def b_within_a(): + # a is bigger/wider than b + return ( + (int(x_maxB) <= int(x_max)) + and (int(x_minB) >= int(x_min)) + and (int(y_min) <= int(y_maxB)) + and (int(y_minB) <= int(y_max)) + ) + + counter = 0 + for group_id in list(groups.keys()): + + # skip if groups has been removed already + if group_id not in groups.keys(): + continue + + x_max = groups[group_id]["xMax"] + x_min = groups[group_id]["xMin"] + y_max = groups[group_id]["yMax"] + y_min = groups[group_id]["yMin"] + + counter = 0 + for group_id_b in list(groups.keys()): + # skip if it is the same group + if group_id_b == group_id: + continue + + y_minB = groups[group_id_b]["yMin"] + y_maxB = groups[group_id_b]["yMax"] + x_maxB = groups[group_id_b]["xMax"] + x_minB = groups[group_id_b]["xMin"] + + if a_within_b(): + counter += 1 + # remove group a and break + del groups[group_id] + break + + elif b_within_a(): + counter += 1 + # remove group b and continue + del groups[group_id_b] + continue + + return groups + + +def adjust_overlapping_groups(groups, zoom): + def groups_intersect(): + # returns True if groups intersect + return ( + (int(x_min) <= int(x_maxB)) + and (int(x_minB) <= int(x_max)) + and (int(y_min) <= int(y_maxB)) + and (int(y_minB) <= int(y_max)) + ) groups_without_overlap = {} + overlaps_total = 0 for group_id in list(groups.keys()): + + # skip if groups has been removed already + if group_id not in groups.keys(): + continue + x_max = groups[group_id]["xMax"] x_min = groups[group_id]["xMin"] y_max = groups[group_id]["yMax"] @@ -301,27 +372,31 @@ def adjust_overlapping_groups(groups): x_maxB = groups[group_id_b]["xMax"] x_minB = groups[group_id_b]["xMin"] - # content from range_overlap - if ( - (int(x_min) <= int(x_maxB)) - and (int(x_minB) <= int(x_max)) - and (int(y_min) <= int(y_maxB)) - and (int(y_minB) <= int(y_max)) - ): + if groups_intersect(): overlap_count += 1 - new_x_max = int(x_minB) + 1 + + # define new x_min and x_max + + # add info to groups_dict + # depending on intersection x_min or x_max need to change + if x_max >= x_minB: # intersection on left side + new_x_min = int(x_min) + new_x_max = int(x_minB) - 1 + elif x_min <= x_maxB: # intersection on right side + new_x_min = int(x_maxB) + 1 + new_x_max = int(x_max) # Calculate lat, lon of upper left corner of tile - PixelX = int(x_min) * 256 + PixelX = int(new_x_min) * 256 PixelY = (int(y_max) + 1) * 256 - lon_left, lat_top = t.pixel_coords_zoom_to_lat_lon(PixelX, PixelY, 18) + lon_left, lat_top = t.pixel_coords_zoom_to_lat_lon(PixelX, PixelY, zoom) # logging.info('lon_left: %s, lat_top: %s' % (lon_left, lat_top)) # Calculate lat, lon of bottom right corner of tile - PixelX = (int(new_x_max) - 1) * 256 - PixelY = (int(y_min)) * 256 + PixelX = (int(new_x_max) + 1) * 256 + PixelY = int(y_min) * 256 lon_right, lat_bottom = t.pixel_coords_zoom_to_lat_lon( - PixelX, PixelY, 18 + PixelX, PixelY, zoom ) # Create Geometry @@ -334,12 +409,11 @@ def adjust_overlapping_groups(groups): poly = ogr.Geometry(ogr.wkbPolygon) poly.AddGeometry(ring) - # add info to groups_dict groups_without_overlap[group_id] = { - "xMin": str(x_min), - "xMax": str(int(new_x_max) - 1), + "xMin": str(new_x_min), + "xMax": str(new_x_max), "yMin": str(y_min), - "yMax": str(int(y_max) + 1), + "yMax": str(y_max), "group_polygon": poly, } @@ -347,8 +421,10 @@ def adjust_overlapping_groups(groups): groups_without_overlap[group_id] = groups[group_id] del groups[group_id] + overlaps_total += overlap_count - return groups_without_overlap + print(f"overlaps_total: {overlaps_total}") + return groups_without_overlap, overlaps_total def extent_to_slices(infile, zoom, groupSize): @@ -379,6 +455,10 @@ def extent_to_slices(infile, zoom, groupSize): # then get vertical slices --> columns raw_groups_dict = get_vertical_slice(horizontal_slice_infos, zoom, groupSize) + # finally remove overlapping groups + # TODO: add this line once properly working + # groups_dict, overlaps_total = adjust_overlapping_groups(raw_groups_dict, zoom) + return raw_groups_dict diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/project_geometries_very_small_and_close.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/project_geometries_very_small_and_close.geojson new file mode 100644 index 000000000..ed6605606 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/project_geometries_very_small_and_close.geojson @@ -0,0 +1,13 @@ +{ +"type": "FeatureCollection", +"name": "project_geometries_very_small_and_close", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.003076718322333, 11.869916022241306 ], [ 13.097087731675623, 11.878798759411533 ], [ 13.149254802448171, 11.863389980500067 ], [ 13.195986940462742, 11.790660683530046 ], [ 13.049902530295142, 11.744137951246383 ], [ 12.902151181837251, 11.780810593632856 ], [ 13.003076718322333, 11.869916022241306 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.15812404906697, 11.865065324767126 ], [ 13.167257901968719, 11.877624372507032 ], [ 13.197704078307883, 11.871535137239199 ], [ 13.19066340002945, 11.865065324767126 ], [ 13.176201466268347, 11.850413102403905 ], [ 13.165164727345401, 11.861449841326852 ], [ 13.15812404906697, 11.865065324767126 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": "3" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.151868311272283, 11.86185420460636 ], [ 13.151868311272283, 11.860284323638872 ], [ 13.152510535304437, 11.859832388208837 ], [ 13.153224117562386, 11.860736259068906 ], [ 13.153152759336592, 11.862163423584803 ], [ 13.152843540358147, 11.862567786864309 ], [ 13.151868311272283, 11.86185420460636 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": "4" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.153200331487122, 11.859332880628273 ], [ 13.154603709927756, 11.861164408423676 ], [ 13.156221163045773, 11.860545970466786 ], [ 13.156221163045773, 11.859761029983042 ], [ 13.155436222562029, 11.858666870520853 ], [ 13.153200331487122, 11.859332880628273 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": "5" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.15386634159454, 11.863424085573849 ], [ 13.15400905804613, 11.862068279283745 ], [ 13.154698854228815, 11.861830418531095 ], [ 13.155055645357789, 11.862520214713779 ], [ 13.154984287131994, 11.863019722294343 ], [ 13.154746426379345, 11.863899807079147 ], [ 13.15386634159454, 11.863424085573849 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": "6" }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 13.156363879497363, 11.862472642563249 ], [ 13.156173590895243, 11.861735274230035 ], [ 13.157006103529516, 11.861259552724736 ], [ 13.158385695894886, 11.861735274230035 ], [ 13.158623556647536, 11.862972150143813 ], [ 13.156007088368389, 11.863828448853353 ], [ 13.156007088368389, 11.863828448853353 ], [ 13.156363879497363, 11.862472642563249 ] ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index a4210b6e6..b79014974 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -8,29 +8,77 @@ def setUp(self): self.test_dir = os.path.dirname(os.path.abspath(__file__)) def test_project_geometries_intersection(self): - + zoom = 18 project_extent_file = os.path.join( self.test_dir, "fixtures/completeness/closed_polygons.geojson" ) - groups_with_overlaps = t.extent_to_slices(project_extent_file, 18, 100) + groups_with_overlaps = t.extent_to_slices(project_extent_file, zoom, 100) t.save_vertical_slices_as_geojson( groups_with_overlaps, "groups_with_overlaps.geojson" ) - groups = t.adjust_overlapping_groups(groups_with_overlaps) + # remove groups within other groups + groups_with_overlaps_2 = t.remove_groups_within_other_groups( + groups_with_overlaps, zoom + ) + t.save_vertical_slices_as_geojson( + groups_with_overlaps, "groups_with_overlaps2.geojson" + ) - # save files for visual inspection in qgis + # TODO: remove once implemented in real function + groups, overlaps_total = t.adjust_overlapping_groups( + groups_with_overlaps_2, zoom + ) t.save_vertical_slices_as_geojson(groups, "groups.geojson") + groups_2, overlaps_total_2 = t.adjust_overlapping_groups(groups, zoom) + t.save_vertical_slices_as_geojson(groups_2, "groups_2.geojson") + # we expect 117 groups - self.assertEqual(len(groups), 117) + self.assertEqual(len(groups_2), 117) def test_project_geometries_within(self): + zoom = 18 project_extent_file = os.path.join( self.test_dir, "fixtures/completeness/project_geometries_within.geojson" ) + groups_with_overlaps = t.extent_to_slices(project_extent_file, zoom, 100) + t.save_vertical_slices_as_geojson( + groups_with_overlaps, "groups_with_overlaps.geojson" + ) + + # remove groups within other groups + groups_with_overlaps_2 = t.remove_groups_within_other_groups( + groups_with_overlaps, zoom + ) + t.save_vertical_slices_as_geojson( + groups_with_overlaps, "groups_with_overlaps2.geojson" + ) + + # TODO: remove once implemented in real function + groups, overlaps_total = t.adjust_overlapping_groups( + groups_with_overlaps_2, zoom + ) + t.save_vertical_slices_as_geojson(groups, "groups.geojson") + + groups_2, overlaps_total_2 = t.adjust_overlapping_groups(groups, zoom) + t.save_vertical_slices_as_geojson(groups_2, "groups_2.geojson") + + groups_3, overlaps_total_3 = t.adjust_overlapping_groups(groups_2, zoom) + t.save_vertical_slices_as_geojson(groups_3, "groups_3.geojson") + + # we expect 64 groups + self.assertEqual(len(groups_3), 64) + + """ + def test_project_geometries_very_small_and_close(self): + project_extent_file = os.path.join( + self.test_dir, + "fixtures/completeness/project_geometries_very_small_and_close.geojson" + ) + groups_with_overlaps = t.extent_to_slices(project_extent_file, 18, 100) t.save_vertical_slices_as_geojson( groups_with_overlaps, "groups_with_overlaps.geojson" @@ -41,8 +89,10 @@ def test_project_geometries_within(self): # save files for visual inspection in qgis t.save_vertical_slices_as_geojson(groups, "groups.geojson") + # TODO: add correct assertion, what is the expected output? # we expect 64 groups - self.assertEqual(len(groups), 64) + #self.assertEqual(len(groups), 64) + """ if __name__ == "__main__": From 6ac8e2b50fa74676a63ab2e5674e085918c33a3e Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 2 Jul 2020 23:48:19 +0200 Subject: [PATCH 16/69] fix bug in zoom level --- mapswipe_workers/python_scripts/tasks_to_geojson.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapswipe_workers/python_scripts/tasks_to_geojson.py b/mapswipe_workers/python_scripts/tasks_to_geojson.py index 497f94a79..888dfffb9 100644 --- a/mapswipe_workers/python_scripts/tasks_to_geojson.py +++ b/mapswipe_workers/python_scripts/tasks_to_geojson.py @@ -37,7 +37,7 @@ def tasks_to_geojson(project_extent_file, zoomlevel, outfile): project.zoomLevel = int(zoomlevel) project.tileServer = vars(BaseTileServer(tile_server_dict)) - raw_groups = t.extent_to_slices(project_extent_file, 18, 120) + raw_groups = t.extent_to_slices(project_extent_file, project.zoomLevel, 120) tasks = list() From 1c041f0cc5ef55546d6be8568058830f7fa45c3a Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Wed, 8 Jul 2020 16:27:48 +0200 Subject: [PATCH 17/69] trying to find out bug while saving project geometry to postgres --- .../project_types/base/project.py | 4 +-- .../tile_map_service_grid/project.py | 1 + .../python_scripts/tasks_to_geojson.py | 6 ++++ .../projectDraft_save_postgres.json | 28 +++++++++++++++++++ .../tests/unittests/test_groups_overlap.py | 2 ++ .../unittests/test_validate_geometries.py | 2 -- 6 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_save_postgres.json diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/project.py b/mapswipe_workers/mapswipe_workers/project_types/base/project.py index e48ccf499..27b40caa1 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/project.py @@ -224,7 +224,7 @@ def save_to_postgres(self, project, groups, groupsOfTasks): VALUES ( %s -- created ,%s -- createdBy - ,ST_Force2D(ST_Multi(ST_GeomFromText(%s, 4326))) -- geometry + ,ST_Force2D(ST_Collect(ST_Multi(ST_GeomFromText(%s, 4326)))) -- geometry ,%s -- image ,%s -- isFeatured ,%s -- lookFor @@ -327,7 +327,7 @@ def save_to_postgres(self, project, groups, groupsOfTasks): project_id, group_id, task_id, - ST_Force2D(ST_Multi(ST_GeomFromText(geom, 4326))), + ST_Force2D(ST_Collect(ST_Multi(ST_GeomFromText(%s, 4326)))), project_type_specifics FROM raw_tasks; DROP TABLE IF EXISTS raw_tasks CASCADE; diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py index 187b6bdc7..6ac621c88 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py @@ -21,6 +21,7 @@ def __init__(self, project_draft: dict): # get TileServerB for change detection and completeness type if self.project_type in [3, 4]: self.tileServerB = vars(BaseTileServer(project_draft["tileServerB"])) + print(self.geometry) def validate_geometries(self): raw_input_file = ( diff --git a/mapswipe_workers/python_scripts/tasks_to_geojson.py b/mapswipe_workers/python_scripts/tasks_to_geojson.py index 888dfffb9..b7531d3e3 100644 --- a/mapswipe_workers/python_scripts/tasks_to_geojson.py +++ b/mapswipe_workers/python_scripts/tasks_to_geojson.py @@ -53,6 +53,12 @@ def tasks_to_geojson(project_extent_file, zoomlevel, outfile): task = Task(group, project, TileX, TileY) tasks.append(vars(task)) + # count tasks + count_tasks = 0 + for i in tasks: + count_tasks += 1 + + print(count_tasks) # Create the output Driver driver = ogr.GetDriverByName("GeoJSON") # Create the output GeoJSON diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_save_postgres.json b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_save_postgres.json new file mode 100644 index 000000000..f15a007e4 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_save_postgres.json @@ -0,0 +1,28 @@ +{ + "projectDraftId": "validate_geom", + "createdBy": "test", + "geometry": { + "type": "FeatureCollection", + "name": "testMulti", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": [ + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 139.217815783421315, 35.398636251323254 ], [ 139.225854467584156, 35.399218708396056 ], [ 139.227224021182309, 35.393830819923309 ], [ 139.21787532922994, 35.393539572452553 ], [ 139.217815783421315, 35.398636251323254 ] ] ] ] } }, + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 139.237763629306926, 35.409896342321126 ], [ 139.241336377823757, 35.414506701527927 ], [ 139.24806505419707, 35.412614059662388 ], [ 139.24806505419707, 35.408585981571072 ], [ 139.240324099077299, 35.406935867358285 ], [ 139.237763629306926, 35.409896342321126 ] ] ] ] } } + ] + }, + "image": "", + "lookFor": "buildings", + "name": "test - Malawi (1)\ntest", + "projectDetails": "test", + "verificationNumber": 1, + "groupSize": 120, + "tileServer": { + "name": "bing", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "tileServerB": { + "name": "bing", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "projectType": 4 +} diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index b79014974..b074e29ff 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -38,6 +38,7 @@ def test_project_geometries_intersection(self): # we expect 117 groups self.assertEqual(len(groups_2), 117) + ''' def test_project_geometries_within(self): zoom = 18 project_extent_file = os.path.join( @@ -93,6 +94,7 @@ def test_project_geometries_very_small_and_close(self): # we expect 64 groups #self.assertEqual(len(groups), 64) """ +''' if __name__ == "__main__": diff --git a/mapswipe_workers/tests/unittests/test_validate_geometries.py b/mapswipe_workers/tests/unittests/test_validate_geometries.py index b289d679f..9836211c9 100644 --- a/mapswipe_workers/tests/unittests/test_validate_geometries.py +++ b/mapswipe_workers/tests/unittests/test_validate_geometries.py @@ -25,7 +25,6 @@ def test_multiple_geom_validation(self): path = os.path.join(test_dir, "fixtures/completeness/multiplePolygons.geojson") driver = ogr.GetDriverByName("GeoJSON") data_source = driver.Open(path, 0) - wkt_geometries_expected = [] # Get the data layer layer = data_source.GetLayer() @@ -35,7 +34,6 @@ def test_multiple_geom_validation(self): # results coming from the validate geometries function wkt = project.validate_geometries() - # Test that sequence first contains the same elements as second self.assertCountEqual(wkt, wkt_geometries_expected) def test_single_geom_validation(self): From e8145b06a3f59fc474fb3362271ee810ed43695d Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Wed, 8 Jul 2020 16:32:21 +0200 Subject: [PATCH 18/69] trying to save multiple geometries into postgres --- .../projectDraft_save_postgres.json | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_save_postgres.json diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_save_postgres.json b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_save_postgres.json deleted file mode 100644 index f15a007e4..000000000 --- a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_save_postgres.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "projectDraftId": "validate_geom", - "createdBy": "test", - "geometry": { - "type": "FeatureCollection", - "name": "testMulti", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": [ - { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 139.217815783421315, 35.398636251323254 ], [ 139.225854467584156, 35.399218708396056 ], [ 139.227224021182309, 35.393830819923309 ], [ 139.21787532922994, 35.393539572452553 ], [ 139.217815783421315, 35.398636251323254 ] ] ] ] } }, - { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 139.237763629306926, 35.409896342321126 ], [ 139.241336377823757, 35.414506701527927 ], [ 139.24806505419707, 35.412614059662388 ], [ 139.24806505419707, 35.408585981571072 ], [ 139.240324099077299, 35.406935867358285 ], [ 139.237763629306926, 35.409896342321126 ] ] ] ] } } - ] - }, - "image": "", - "lookFor": "buildings", - "name": "test - Malawi (1)\ntest", - "projectDetails": "test", - "verificationNumber": 1, - "groupSize": 120, - "tileServer": { - "name": "bing", - "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" - }, - "tileServerB": { - "name": "bing", - "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" - }, - "projectType": 4 -} From cdb18c983b1bd754fdf7098c0cf53f923e185f70 Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Wed, 8 Jul 2020 16:33:32 +0200 Subject: [PATCH 19/69] changed geometry column in DB --- postgres/initdb.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/postgres/initdb.sql b/postgres/initdb.sql index 873c0cb6b..7a2db8ec3 100644 --- a/postgres/initdb.sql +++ b/postgres/initdb.sql @@ -4,7 +4,7 @@ CREATE EXTENSION postgis; CREATE TABLE IF NOT EXISTS projects ( created timestamp, created_by varchar, - geom geometry(MULTIPOLYGON, 4326), + geom geometry, image varchar, is_featured boolean, look_for varchar, @@ -43,7 +43,7 @@ CREATE TABLE IF NOT EXISTS tasks ( project_id varchar, group_id varchar, task_id varchar, - geom geometry(MULTIPOLYGON, 4326), + geom geometry, project_type_specifics json, PRIMARY KEY (project_id, group_id, task_id), FOREIGN KEY (project_id) REFERENCES projects (project_id), From 42f8437523f235bd0d0931c318de3f7cab863e4d Mon Sep 17 00:00:00 2001 From: h9b Date: Wed, 8 Jul 2020 17:59:23 +0200 Subject: [PATCH 20/69] found bug postgres import #374 --- mapswipe_workers/mapswipe_workers/mapswipe_workers.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mapswipe_workers/mapswipe_workers/mapswipe_workers.py b/mapswipe_workers/mapswipe_workers/mapswipe_workers.py index 92d6647b3..5966af406 100644 --- a/mapswipe_workers/mapswipe_workers/mapswipe_workers.py +++ b/mapswipe_workers/mapswipe_workers/mapswipe_workers.py @@ -75,6 +75,15 @@ def run_create_projects(): try: # Create a project object using appropriate class (project type). project = ProjectType(project_type).constructor(project_draft) + # TODO: here the project.geometry attribute is overwritten + # this is super confusing since it's not a geojson anymore + # but this is what we set initially, + # e.g. in tile_map_service_grid/project.py + # project.geometry is set to a list of wkt geometries now + # this can't be handled in postgres, + # postgres expects just a string not an array + # validated_geometries should be called during init already + # for the respective project types project.geometry = project.validate_geometries() project.create_groups() project.calc_required_results() From 0869347b1fe866022287654d3aae504154bd47f6 Mon Sep 17 00:00:00 2001 From: h9b Date: Wed, 8 Jul 2020 18:13:37 +0200 Subject: [PATCH 21/69] fix postgres import bug and use geometry collection instead of list --- .../mapswipe_workers/project_types/base/project.py | 4 ++-- .../project_types/tile_map_service_grid/project.py | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/project.py b/mapswipe_workers/mapswipe_workers/project_types/base/project.py index 27b40caa1..acaa9eeba 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/project.py @@ -224,7 +224,7 @@ def save_to_postgres(self, project, groups, groupsOfTasks): VALUES ( %s -- created ,%s -- createdBy - ,ST_Force2D(ST_Collect(ST_Multi(ST_GeomFromText(%s, 4326)))) -- geometry + ,ST_Force2D(ST_GeomFromText(%s, 4326)) -- geometry ,%s -- image ,%s -- isFeatured ,%s -- lookFor @@ -327,7 +327,7 @@ def save_to_postgres(self, project, groups, groupsOfTasks): project_id, group_id, task_id, - ST_Force2D(ST_Collect(ST_Multi(ST_GeomFromText(%s, 4326)))), + ST_Force2D(ST_Multi(ST_GeomFromText(geom, 4326))), project_type_specifics FROM raw_tasks; DROP TABLE IF EXISTS raw_tasks CASCADE; diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py index 6ac621c88..0aa4c17c6 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py @@ -14,6 +14,7 @@ def __init__(self, project_draft: dict): super().__init__(project_draft) self.project_type = project_draft["projectType"] self.groupSize = project_draft["groupSize"] + # Note: this will be overwritten by validate_geometry in mapswipe_workers.py self.geometry = project_draft["geometry"] self.zoomLevel = int(project_draft.get("zoomLevel", 18)) self.tileServer = vars(BaseTileServer(project_draft["tileServer"])) @@ -21,7 +22,6 @@ def __init__(self, project_draft: dict): # get TileServerB for change detection and completeness type if self.project_type in [3, 4]: self.tileServerB = vars(BaseTileServer(project_draft["tileServerB"])) - print(self.geometry) def validate_geometries(self): raw_input_file = ( @@ -69,7 +69,7 @@ def validate_geometries(self): raise CustomError(f"Input file contains more than 10 geometries. ") project_area = 0 - wkt_geometries = [] + geometry_collection = ogr.Geometry(ogr.wkbGeometryCollection) # check if the input geometry is a valid polygon for feature in layer: feat_geom = feature.GetGeometryRef() @@ -94,9 +94,8 @@ def validate_geometries(self): ) raise CustomError(f"Invalid geometry type: {geom_name}. ") - # get geometry as wkt - wkt_geometry = feat_geom.ExportToWkt() - wkt_geometries.append(wkt_geometry) + # add geometry to geometry collection + geometry_collection.AddGeometry(feat_geom) # check size of project make sure its smaller than 5,000 sqkm # for doing this we transform the geometry @@ -135,12 +134,13 @@ def validate_geometries(self): del layer self.validInputGeometries = raw_input_file + wkt_geometry_collection = geometry_collection.ExportToWkt() logger.info( f"{self.projectId}" f" - validate geometry - " f"input geometry is correct." ) - return wkt_geometries + return wkt_geometry_collection def create_groups(self): """ From 984e299808157eea60a2a7aa62e213b6b0e01bd6 Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Mon, 20 Jul 2020 12:44:11 +0200 Subject: [PATCH 22/69] multiple geoms dissolve return none --- .../fixtures/completeness/collected.geojson | 8 +++++ .../completeness/overlappingGeoms.geojson | 9 ++++++ .../unittests/test_validate_geometries.py | 30 ++++++++++++++----- 3 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/collected.geojson create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/overlappingGeoms.geojson diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/collected.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/collected.geojson new file mode 100644 index 000000000..cfb9841a3 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/collected.geojson @@ -0,0 +1,8 @@ +{ +"type": "FeatureCollection", +"name": "collected", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.267717755524947, 48.812788568504551 ], [ 9.274544337888633, 48.834874570269413 ], [ 9.300846758172247, 48.826642515066148 ], [ 9.28177248392077, 48.798533058274501 ], [ 9.267717755524947, 48.812788568504551 ] ] ], [ [ [ 9.301850667343377, 48.796324458098013 ], [ 9.286591247942196, 48.812387004836097 ], [ 9.291209230129395, 48.822626878381627 ], [ 9.321125723429077, 48.818209678028651 ], [ 9.301850667343377, 48.796324458098013 ] ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/overlappingGeoms.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/overlappingGeoms.geojson new file mode 100644 index 000000000..7a0f39328 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/overlappingGeoms.geojson @@ -0,0 +1,9 @@ +{ +"type": "FeatureCollection", +"name": "overlappingGeoms", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.267717755524947, 48.812788568504551 ], [ 9.274544337888633, 48.834874570269413 ], [ 9.300846758172247, 48.826642515066148 ], [ 9.28177248392077, 48.798533058274501 ], [ 9.267717755524947, 48.812788568504551 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.301850667343377, 48.796324458098013 ], [ 9.286591247942196, 48.812387004836097 ], [ 9.291209230129395, 48.822626878381627 ], [ 9.321125723429077, 48.818209678028651 ], [ 9.301850667343377, 48.796324458098013 ] ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/test_validate_geometries.py b/mapswipe_workers/tests/unittests/test_validate_geometries.py index 9836211c9..2eb7bd27c 100644 --- a/mapswipe_workers/tests/unittests/test_validate_geometries.py +++ b/mapswipe_workers/tests/unittests/test_validate_geometries.py @@ -20,22 +20,31 @@ class TestGeometryValidation(unittest.TestCase): def test_multiple_geom_validation(self): path = "fixtures/completeness/projectDraft.json" test_dir = os.path.dirname(os.path.abspath(__file__)) - project = create_project(path) + # project = create_project(path) # prepare data that is expected - path = os.path.join(test_dir, "fixtures/completeness/multiplePolygons.geojson") + path = os.path.join(test_dir, "fixtures/completeness/overlappingGeoms.geojson") driver = ogr.GetDriverByName("GeoJSON") data_source = driver.Open(path, 0) - wkt_geometries_expected = [] + + multipolygon_geometry = ogr.Geometry(ogr.wkbMultiPolygon) # Get the data layer layer = data_source.GetLayer() + for feature in layer: feat_geom = feature.GetGeometryRef() - wkt_geometries_expected.append(feat_geom.ExportToWkt()) + wkt = feat_geom.ExportToWkt() + geom_name = feat_geom.GetGeometryName() + print(geom_name) + multipolygon_geometry.AddGeometryDirectly(ogr.CreateGeometryFromWkt(wkt)) + + dissolved_geometry = multipolygon_geometry.UnionCascaded() + print(dissolved_geometry) + # wkt_geometry_collection = geometry_collection.ExportToWkt() + # print(wkt_geometry_collection) # results coming from the validate geometries function - wkt = project.validate_geometries() - self.assertCountEqual(wkt, wkt_geometries_expected) + """ def test_single_geom_validation(self): path = "fixtures/completeness/projectDraft_single.json" test_dir = os.path.dirname(os.path.abspath(__file__)) @@ -46,17 +55,22 @@ def test_single_geom_validation(self): driver = ogr.GetDriverByName("GeoJSON") datasource = driver.Open(path, 0) - wkt_geometries_expected = [] + + geometry_collection = ogr.Geometry(ogr.wkbGeometryCollection) # Get the data layer layer = datasource.GetLayer() for feature in layer: feat_geom = feature.GetGeometryRef() - wkt_geometries_expected.append(feat_geom.ExportToWkt()) + geometry_collection.AddGeometry(feat_geom) + + wkt_geometry_collection = geometry_collection.ExportToWkt() + print(wkt_geometry_collection) # results coming from the validate_geometries function wkt = project.validate_geometries() # Test that sequence first contains the same elements as second self.assertCountEqual(wkt, wkt_geometries_expected) + """ if __name__ == "__main__": From 4716d3ae3331907f0323c743b3714860992380d5 Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Thu, 23 Jul 2020 17:16:10 +0200 Subject: [PATCH 23/69] multiple polygons as input does not incorporate second polygon --- .../manager_dashboard/js/forms.js | 1 - .../project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson | 1 + .../project_geom_-MClQtGCC_sgKTB7mAeW.geojson | 1 + .../project_geom_-MCw-n1trbI1yzqDEOuc.geojson | 1 + .../project_geom_-MCw0zzwMY4ZNExGSrvw.geojson | 1 + .../project_geom_-MCwCkpstMiHcHQmL3Ex.geojson | 1 + .../raw_input_-MC6vz49TfX2dk-6myDd.geojson | 1 + .../raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson | 1 + .../raw_input_-MClQtGCC_sgKTB7mAeW.geojson | 1 + .../raw_input_-MCw-n1trbI1yzqDEOuc.geojson | 1 + .../raw_input_-MCw0zzwMY4ZNExGSrvw.geojson | 1 + .../raw_input_-MCwCkpstMiHcHQmL3Ex.geojson | 1 + mapswipe-data/mapswipe_workers.log.2020-07-13 | 75 ++++++++++ mapswipe-data/mapswipe_workers.log.2020-07-20 | 2 + mapswipe-data/mapswipe_workers.log.2020-07-21 | 19 +++ .../tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt | 6 + .../tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt | 138 ++++++++++++++++++ .../tile_map_service_grid/project.py | 18 ++- .../utils/tile_grouping_functions.py | 73 +-------- .../python_scripts/tasks_to_geojson.py | 2 +- .../completeness/overlapping_groups.geojson | 9 ++ .../projectDraft_overlappingGeom.json | 28 ++++ .../completeness/projectDraft_single.json | 12 +- .../completeness/single_polygon.geojson | 15 +- .../tests/unittests/test_groups_overlap.py | 28 ++-- .../tests/unittests/test_multiple_geoms.py | 45 ------ .../unittests/test_validate_geometries.py | 56 ++++--- 27 files changed, 366 insertions(+), 172 deletions(-) create mode 100644 mapswipe-data/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson create mode 100644 mapswipe-data/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson create mode 100644 mapswipe-data/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson create mode 100644 mapswipe-data/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson create mode 100644 mapswipe-data/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson create mode 100644 mapswipe-data/input_geometries/raw_input_-MC6vz49TfX2dk-6myDd.geojson create mode 100644 mapswipe-data/input_geometries/raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson create mode 100644 mapswipe-data/input_geometries/raw_input_-MClQtGCC_sgKTB7mAeW.geojson create mode 100644 mapswipe-data/input_geometries/raw_input_-MCw-n1trbI1yzqDEOuc.geojson create mode 100644 mapswipe-data/input_geometries/raw_input_-MCw0zzwMY4ZNExGSrvw.geojson create mode 100644 mapswipe-data/input_geometries/raw_input_-MCwCkpstMiHcHQmL3Ex.geojson create mode 100644 mapswipe-data/mapswipe_workers.log.2020-07-13 create mode 100644 mapswipe-data/mapswipe_workers.log.2020-07-20 create mode 100644 mapswipe-data/mapswipe_workers.log.2020-07-21 create mode 100644 mapswipe-data/tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt create mode 100644 mapswipe-data/tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/overlapping_groups.geojson create mode 100644 mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_overlappingGeom.json delete mode 100644 mapswipe_workers/tests/unittests/test_multiple_geoms.py diff --git a/manager_dashboard/manager_dashboard/js/forms.js b/manager_dashboard/manager_dashboard/js/forms.js index b320cc0f7..726bf25e7 100644 --- a/manager_dashboard/manager_dashboard/js/forms.js +++ b/manager_dashboard/manager_dashboard/js/forms.js @@ -141,7 +141,6 @@ function openFile(event) { try { var text = reader.result; var geojsonData = JSON.parse(text) - console.log(geojsonData); // check number of features numberOfFeatures = geojsonData['features'].length diff --git a/mapswipe-data/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson b/mapswipe-data/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson new file mode 100644 index 000000000..c7cfaf06b --- /dev/null +++ b/mapswipe-data/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson @@ -0,0 +1 @@ +{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "GeometryCollection", "geometries": [{"type": "MultiPolygon", "coordinates": [[[[139.2178158, 35.3986363], [139.2178753, 35.3935396], [139.227224, 35.3938308], [139.2258545, 35.3992187], [139.2178158, 35.3986363]]], [[[139.2377636, 35.4098963], [139.2403241, 35.4069359], [139.2480651, 35.408586], [139.2480651, 35.4126141], [139.2413364, 35.4145067], [139.2377636, 35.4098963]]]]}]}}]} \ No newline at end of file diff --git a/mapswipe-data/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson b/mapswipe-data/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson new file mode 100644 index 000000000..aa39cf224 --- /dev/null +++ b/mapswipe-data/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson @@ -0,0 +1 @@ +{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "MultiPolygon", "coordinates": []}}]} \ No newline at end of file diff --git a/mapswipe-data/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson b/mapswipe-data/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson new file mode 100644 index 000000000..762a0c71c --- /dev/null +++ b/mapswipe-data/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson @@ -0,0 +1 @@ +{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[9.2086897, 48.8026663], [9.2097325, 48.8023333], [9.209645, 48.8034636], [9.2087603, 48.8034266], [9.2086897, 48.8026663]]], [[[9.2106306, 48.8035645], [9.2107281, 48.8026327], [9.2120131, 48.8024948], [9.2119122, 48.8035443], [9.2106306, 48.8035645]]]]}}]} \ No newline at end of file diff --git a/mapswipe-data/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson b/mapswipe-data/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson new file mode 100644 index 000000000..254eb72e5 --- /dev/null +++ b/mapswipe-data/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson @@ -0,0 +1 @@ +{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[9.2086897, 48.8026663], [9.2097325, 48.8023333], [9.209645, 48.8034636], [9.2087603, 48.8034266], [9.2086897, 48.8026663]]], [[[9.2106306, 48.8035645], [9.2107281, 48.8026327], [9.2120131, 48.8024948], [9.2119122, 48.8035443], [9.2106306, 48.8035645]]]]}}]} \ No newline at end of file diff --git a/mapswipe-data/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson b/mapswipe-data/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson new file mode 100644 index 000000000..2c859438f --- /dev/null +++ b/mapswipe-data/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson @@ -0,0 +1 @@ +{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[9.2086897, 48.8026663], [9.2097325, 48.8023333], [9.209645, 48.8034636], [9.2087603, 48.8034266], [9.2086897, 48.8026663]]], [[[9.2106306, 48.8035645], [9.2107281, 48.8026327], [9.2120131, 48.8024948], [9.2119122, 48.8035443], [9.2106306, 48.8035645]]]]}}]} \ No newline at end of file diff --git a/mapswipe-data/input_geometries/raw_input_-MC6vz49TfX2dk-6myDd.geojson b/mapswipe-data/input_geometries/raw_input_-MC6vz49TfX2dk-6myDd.geojson new file mode 100644 index 000000000..7d12cc945 --- /dev/null +++ b/mapswipe-data/input_geometries/raw_input_-MC6vz49TfX2dk-6myDd.geojson @@ -0,0 +1 @@ +{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[139.21781578342132, 35.39863625132325], [139.22585446758416, 35.399218708396056], [139.2272240211823, 35.39383081992331], [139.21787532922994, 35.39353957245255], [139.21781578342132, 35.39863625132325]]], [[[139.23776362930693, 35.409896342321126], [139.24133637782376, 35.41450670152793], [139.24806505419707, 35.41261405966239], [139.24806505419707, 35.40858598157107], [139.2403240990773, 35.406935867358285], [139.23776362930693, 35.409896342321126]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "collected", "type": "FeatureCollection"} \ No newline at end of file diff --git a/mapswipe-data/input_geometries/raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson b/mapswipe-data/input_geometries/raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson new file mode 100644 index 000000000..7d12cc945 --- /dev/null +++ b/mapswipe-data/input_geometries/raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson @@ -0,0 +1 @@ +{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[139.21781578342132, 35.39863625132325], [139.22585446758416, 35.399218708396056], [139.2272240211823, 35.39383081992331], [139.21787532922994, 35.39353957245255], [139.21781578342132, 35.39863625132325]]], [[[139.23776362930693, 35.409896342321126], [139.24133637782376, 35.41450670152793], [139.24806505419707, 35.41261405966239], [139.24806505419707, 35.40858598157107], [139.2403240990773, 35.406935867358285], [139.23776362930693, 35.409896342321126]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "collected", "type": "FeatureCollection"} \ No newline at end of file diff --git a/mapswipe-data/input_geometries/raw_input_-MClQtGCC_sgKTB7mAeW.geojson b/mapswipe-data/input_geometries/raw_input_-MClQtGCC_sgKTB7mAeW.geojson new file mode 100644 index 000000000..635115473 --- /dev/null +++ b/mapswipe-data/input_geometries/raw_input_-MClQtGCC_sgKTB7mAeW.geojson @@ -0,0 +1 @@ +{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[139.21781578342132, 35.39863625132325], [139.22585446758416, 35.399218708396056], [139.2272240211823, 35.39383081992331], [139.21787532922994, 35.39353957245255], [139.21781578342132, 35.39863625132325]]]], "type": "MultiPolygon"}, "type": "Feature"}, {"geometry": {"coordinates": [[[[139.23776362930693, 35.409896342321126], [139.24133637782376, 35.41450670152793], [139.24806505419707, 35.41261405966239], [139.24806505419707, 35.40858598157107], [139.2403240990773, 35.406935867358285], [139.23776362930693, 35.409896342321126]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "testMulti", "type": "FeatureCollection"} \ No newline at end of file diff --git a/mapswipe-data/input_geometries/raw_input_-MCw-n1trbI1yzqDEOuc.geojson b/mapswipe-data/input_geometries/raw_input_-MCw-n1trbI1yzqDEOuc.geojson new file mode 100644 index 000000000..57f08ff0b --- /dev/null +++ b/mapswipe-data/input_geometries/raw_input_-MCw-n1trbI1yzqDEOuc.geojson @@ -0,0 +1 @@ +{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[9.208689680161699, 48.802666331380884], [9.20876032010785, 48.803426551753745], [9.209645001338208, 48.803463553630294], [9.209732460319156, 48.80233331449189], [9.208689680161699, 48.802666331380884]]]], "type": "MultiPolygon"}, "type": "Feature"}, {"geometry": {"coordinates": [[[[9.210630596777351, 48.80356446783908], [9.211912207228934, 48.80354428499732], [9.212013121437721, 48.80249477722595], [9.210728147179179, 48.80263269331129], [9.210630596777351, 48.80356446783908]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "multi_poly_test", "type": "FeatureCollection"} \ No newline at end of file diff --git a/mapswipe-data/input_geometries/raw_input_-MCw0zzwMY4ZNExGSrvw.geojson b/mapswipe-data/input_geometries/raw_input_-MCw0zzwMY4ZNExGSrvw.geojson new file mode 100644 index 000000000..57f08ff0b --- /dev/null +++ b/mapswipe-data/input_geometries/raw_input_-MCw0zzwMY4ZNExGSrvw.geojson @@ -0,0 +1 @@ +{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[9.208689680161699, 48.802666331380884], [9.20876032010785, 48.803426551753745], [9.209645001338208, 48.803463553630294], [9.209732460319156, 48.80233331449189], [9.208689680161699, 48.802666331380884]]]], "type": "MultiPolygon"}, "type": "Feature"}, {"geometry": {"coordinates": [[[[9.210630596777351, 48.80356446783908], [9.211912207228934, 48.80354428499732], [9.212013121437721, 48.80249477722595], [9.210728147179179, 48.80263269331129], [9.210630596777351, 48.80356446783908]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "multi_poly_test", "type": "FeatureCollection"} \ No newline at end of file diff --git a/mapswipe-data/input_geometries/raw_input_-MCwCkpstMiHcHQmL3Ex.geojson b/mapswipe-data/input_geometries/raw_input_-MCwCkpstMiHcHQmL3Ex.geojson new file mode 100644 index 000000000..57f08ff0b --- /dev/null +++ b/mapswipe-data/input_geometries/raw_input_-MCwCkpstMiHcHQmL3Ex.geojson @@ -0,0 +1 @@ +{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[9.208689680161699, 48.802666331380884], [9.20876032010785, 48.803426551753745], [9.209645001338208, 48.803463553630294], [9.209732460319156, 48.80233331449189], [9.208689680161699, 48.802666331380884]]]], "type": "MultiPolygon"}, "type": "Feature"}, {"geometry": {"coordinates": [[[[9.210630596777351, 48.80356446783908], [9.211912207228934, 48.80354428499732], [9.212013121437721, 48.80249477722595], [9.210728147179179, 48.80263269331129], [9.210630596777351, 48.80356446783908]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "multi_poly_test", "type": "FeatureCollection"} \ No newline at end of file diff --git a/mapswipe-data/mapswipe_workers.log.2020-07-13 b/mapswipe-data/mapswipe_workers.log.2020-07-13 new file mode 100644 index 000000000..2f8964a08 --- /dev/null +++ b/mapswipe-data/mapswipe_workers.log.2020-07-13 @@ -0,0 +1,75 @@ +2020-07-13 11:40:21,518 - INFO - mapswipe_workers.py - cli - Logging enabled +2020-07-13 11:40:24,102 - INFO - project.py - validate_geometries - -MC6vz49TfX2dk-6myDd - validate geometry - input geometry is correct. +2020-07-13 11:40:24,102 - INFO - tile_grouping_functions.py - get_geometry_from_file - got geometry and extent from file +2020-07-13 11:40:24,104 - INFO - tile_grouping_functions.py - get_vertical_slice - created vertical_slice +2020-07-13 11:40:24,117 - INFO - project.py - create_groups - -MC6vz49TfX2dk-6myDd - create_groups - created groups dictionary +2020-07-13 11:40:24,117 - INFO - project.py - save_project - -MC6vz49TfX2dk-6myDd - start creating a project +2020-07-13 11:40:24,124 - ERROR - project.py - save_project - -MC6vz49TfX2dk-6myDd - the project could not be saved to postgres and will therefor not be saved to firebase +Traceback (most recent call last): + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 360, in save_to_postgres + p_con = auth.postgresDB() + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/auth.py", line 53, in __init__ + self._db_connection = psycopg2.connect( + File "/usr/local/lib/python3.8/dist-packages/psycopg2/__init__.py", line 126, in connect + conn = _connect(dsn, connection_factory=connection_factory, **kwasync) +psycopg2.OperationalError: could not connect to server: Connection refused + Is the server running on host "postgres" (172.22.0.2) and accepting + TCP/IP connections on port 5432? + + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 119, in save_project + self.save_to_postgres( + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 376, in save_to_postgres + del p_con +UnboundLocalError: local variable 'p_con' referenced before assignment +2020-07-13 11:40:24,691 - ERROR - mapswipe_workers.py - run_create_projects - Failed: Project Creation (multiTest - (1) +)) +Traceback (most recent call last): + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 360, in save_to_postgres + p_con = auth.postgresDB() + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/auth.py", line 53, in __init__ + self._db_connection = psycopg2.connect( + File "/usr/local/lib/python3.8/dist-packages/psycopg2/__init__.py", line 126, in connect + conn = _connect(dsn, connection_factory=connection_factory, **kwasync) +psycopg2.OperationalError: could not connect to server: Connection refused + Is the server running on host "postgres" (172.22.0.2) and accepting + TCP/IP connections on port 5432? + + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 119, in save_project + self.save_to_postgres( + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 376, in save_to_postgres + del p_con +UnboundLocalError: local variable 'p_con' referenced before assignment + +During handling of the above exception, another exception occurred: + +Traceback (most recent call last): + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/mapswipe_workers.py", line 91, in run_create_projects + project.save_project() + File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 132, in save_project + raise CustomError(e) +mapswipe_workers.definitions.CustomError: local variable 'p_con' referenced before assignment +2020-07-13 11:43:55,566 - INFO - mapswipe_workers.py - cli - Logging enabled +2020-07-13 11:43:56,309 - INFO - project.py - validate_geometries - -MC6zDSrCeUXzyCCwTQ_ - validate geometry - input geometry is correct. +2020-07-13 11:43:56,309 - INFO - tile_grouping_functions.py - get_geometry_from_file - got geometry and extent from file +2020-07-13 11:43:56,311 - INFO - tile_grouping_functions.py - get_vertical_slice - created vertical_slice +2020-07-13 11:43:56,324 - INFO - project.py - create_groups - -MC6zDSrCeUXzyCCwTQ_ - create_groups - created groups dictionary +2020-07-13 11:43:56,324 - INFO - project.py - save_project - -MC6zDSrCeUXzyCCwTQ_ - start creating a project +2020-07-13 11:43:56,391 - INFO - project.py - save_project - -MC6zDSrCeUXzyCCwTQ_ - the project has been saved to postgres +2020-07-13 11:43:56,392 - INFO - geojson_functions.py - create_geojson_file - created outfile: /root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson. +2020-07-13 11:43:56,393 - INFO - geojson_functions.py - create_geojson_file - created outfile: /root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson. +2020-07-13 11:43:56,393 - INFO - project.py - save_project - -MC6zDSrCeUXzyCCwTQ_ - the project has been saved to files +2020-07-13 11:43:56,718 - INFO - project.py - save_to_firebase - -MC6zDSrCeUXzyCCwTQ_ - uploaded project to firebase realtime database +2020-07-13 11:43:56,939 - INFO - project.py - save_to_firebase - -MC6zDSrCeUXzyCCwTQ_ - uploaded groups to firebase realtime database +2020-07-13 11:43:56,939 - INFO - project.py - save_to_firebase - there are 6 groups for this project +2020-07-13 11:43:57,392 - INFO - project.py - save_to_firebase - -MC6zDSrCeUXzyCCwTQ_ - uploaded 150 groups with tasks to firebase realtime database +2020-07-13 11:43:57,581 - INFO - project.py - save_project - -MC6zDSrCeUXzyCCwTQ_ - the project has been saved to firebase +2020-07-13 11:43:57,835 - INFO - mapswipe_workers.py - run_create_projects - Success: Project Creation (multiTest - (1) +) diff --git a/mapswipe-data/mapswipe_workers.log.2020-07-20 b/mapswipe-data/mapswipe_workers.log.2020-07-20 new file mode 100644 index 000000000..abb0be176 --- /dev/null +++ b/mapswipe-data/mapswipe_workers.log.2020-07-20 @@ -0,0 +1,2 @@ +2020-07-20 12:31:13,718 - INFO - mapswipe_workers.py - cli - Logging enabled +2020-07-20 12:31:14,555 - INFO - mapswipe_workers.py - run_create_projects - There are no project drafts in firebase. diff --git a/mapswipe-data/mapswipe_workers.log.2020-07-21 b/mapswipe-data/mapswipe_workers.log.2020-07-21 new file mode 100644 index 000000000..a755e9780 --- /dev/null +++ b/mapswipe-data/mapswipe_workers.log.2020-07-21 @@ -0,0 +1,19 @@ +2020-07-21 12:50:24,233 - INFO - mapswipe_workers.py - cli - Logging enabled +2020-07-21 12:50:25,159 - INFO - mapswipe_workers.py - run_create_projects - There are no project drafts in firebase. +2020-07-21 12:58:14,346 - INFO - mapswipe_workers.py - cli - Logging enabled +2020-07-21 12:58:15,534 - INFO - project.py - validate_geometries - -MClQtGCC_sgKTB7mAeW - validate geometry - input geometry is correct. +2020-07-21 12:58:15,535 - INFO - tile_grouping_functions.py - get_geometry_from_file - got geometry and extent from file +2020-07-21 12:58:15,538 - INFO - tile_grouping_functions.py - get_vertical_slice - created vertical_slice +2020-07-21 12:58:15,555 - INFO - project.py - create_groups - -MClQtGCC_sgKTB7mAeW - create_groups - created groups dictionary +2020-07-21 12:58:15,555 - INFO - project.py - save_project - -MClQtGCC_sgKTB7mAeW - start creating a project +2020-07-21 12:58:16,213 - INFO - project.py - save_project - -MClQtGCC_sgKTB7mAeW - the project has been saved to postgres +2020-07-21 12:58:16,215 - INFO - geojson_functions.py - create_geojson_file - created outfile: /root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson. +2020-07-21 12:58:16,216 - INFO - geojson_functions.py - create_geojson_file - created outfile: /root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson. +2020-07-21 12:58:16,216 - INFO - project.py - save_project - -MClQtGCC_sgKTB7mAeW - the project has been saved to files +2020-07-21 12:58:16,456 - INFO - project.py - save_to_firebase - -MClQtGCC_sgKTB7mAeW - uploaded project to firebase realtime database +2020-07-21 12:58:16,828 - INFO - project.py - save_to_firebase - -MClQtGCC_sgKTB7mAeW - uploaded groups to firebase realtime database +2020-07-21 12:58:16,828 - INFO - project.py - save_to_firebase - there are 6 groups for this project +2020-07-21 12:58:17,443 - INFO - project.py - save_to_firebase - -MClQtGCC_sgKTB7mAeW - uploaded 150 groups with tasks to firebase realtime database +2020-07-21 12:58:17,648 - INFO - project.py - save_project - -MClQtGCC_sgKTB7mAeW - the project has been saved to firebase +2020-07-21 12:58:18,063 - INFO - mapswipe_workers.py - run_create_projects - Success: Project Creation (multiTest2 - (1) +) diff --git a/mapswipe-data/tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt b/mapswipe-data/tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt new file mode 100644 index 000000000..9a5308759 --- /dev/null +++ b/mapswipe-data/tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt @@ -0,0 +1,6 @@ +-MC6vz49TfX2dk-6myDd g101 24 0 3 0 {"groupId": "g101", "numberOfTasks": 24, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232469", "xMin": "232462", "yMax": "103467", "yMin": "103465"} +-MC6vz49TfX2dk-6myDd g102 27 0 3 0 {"groupId": "g102", "numberOfTasks": 27, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232469", "xMin": "232461", "yMax": "103470", "yMin": "103468"} +-MC6vz49TfX2dk-6myDd g103 18 0 3 0 {"groupId": "g103", "numberOfTasks": 18, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232467", "xMin": "232462", "yMax": "103473", "yMin": "103471"} +-MC6vz49TfX2dk-6myDd g104 21 0 3 0 {"groupId": "g104", "numberOfTasks": 21, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232453", "xMin": "232447", "yMax": "103479", "yMin": "103477"} +-MC6vz49TfX2dk-6myDd g105 24 0 3 0 {"groupId": "g105", "numberOfTasks": 24, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232454", "xMin": "232447", "yMax": "103482", "yMin": "103480"} +-MC6vz49TfX2dk-6myDd g106 24 0 3 0 {"groupId": "g106", "numberOfTasks": 24, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232454", "xMin": "232447", "yMax": "103485", "yMin": "103483"} diff --git a/mapswipe-data/tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt b/mapswipe-data/tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt new file mode 100644 index 000000000..a2da4ab6d --- /dev/null +++ b/mapswipe-data/tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt @@ -0,0 +1,138 @@ +-MC6vz49TfX2dk-6myDd g101 18-232462-103465 POLYGON ((139.237976074219 35.4147957290186 0,139.239349365234 35.4147957290186 0,139.239349365234 35.4136765190358 0,139.237976074219 35.4136765190358 0,139.237976074219 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232462-103465", "taskX": "232462", "taskY": "103465", "geometry": "POLYGON ((139.237976074219 35.4147957290186 0,139.239349365234 35.4147957290186 0,139.239349365234 35.4136765190358 0,139.237976074219 35.4136765190358 0,139.237976074219 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203112.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232462-103466 POLYGON ((139.237976074219 35.4136765190358 0,139.239349365234 35.4136765190358 0,139.239349365234 35.412557293508 0,139.237976074219 35.412557293508 0,139.237976074219 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232462-103466", "taskX": "232462", "taskY": "103466", "geometry": "POLYGON ((139.237976074219 35.4136765190358 0,139.239349365234 35.4136765190358 0,139.239349365234 35.412557293508 0,139.237976074219 35.412557293508 0,139.237976074219 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203130.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232462-103467 POLYGON ((139.237976074219 35.412557293508 0,139.239349365234 35.412557293508 0,139.239349365234 35.4114380524355 0,139.237976074219 35.4114380524355 0,139.237976074219 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232462-103467", "taskX": "232462", "taskY": "103467", "geometry": "POLYGON ((139.237976074219 35.412557293508 0,139.239349365234 35.412557293508 0,139.239349365234 35.4114380524355 0,139.237976074219 35.4114380524355 0,139.237976074219 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203132.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232463-103465 POLYGON ((139.239349365234 35.4147957290186 0,139.24072265625 35.4147957290186 0,139.24072265625 35.4136765190358 0,139.239349365234 35.4136765190358 0,139.239349365234 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232463-103465", "taskX": "232463", "taskY": "103465", "geometry": "POLYGON ((139.239349365234 35.4147957290186 0,139.24072265625 35.4147957290186 0,139.24072265625 35.4136765190358 0,139.239349365234 35.4136765190358 0,139.239349365234 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203113.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232463-103466 POLYGON ((139.239349365234 35.4136765190358 0,139.24072265625 35.4136765190358 0,139.24072265625 35.412557293508 0,139.239349365234 35.412557293508 0,139.239349365234 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232463-103466", "taskX": "232463", "taskY": "103466", "geometry": "POLYGON ((139.239349365234 35.4136765190358 0,139.24072265625 35.4136765190358 0,139.24072265625 35.412557293508 0,139.239349365234 35.412557293508 0,139.239349365234 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203131.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232463-103467 POLYGON ((139.239349365234 35.412557293508 0,139.24072265625 35.412557293508 0,139.24072265625 35.4114380524355 0,139.239349365234 35.4114380524355 0,139.239349365234 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232463-103467", "taskX": "232463", "taskY": "103467", "geometry": "POLYGON ((139.239349365234 35.412557293508 0,139.24072265625 35.412557293508 0,139.24072265625 35.4114380524355 0,139.239349365234 35.4114380524355 0,139.239349365234 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203133.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232464-103465 POLYGON ((139.24072265625 35.4147957290186 0,139.242095947266 35.4147957290186 0,139.242095947266 35.4136765190358 0,139.24072265625 35.4136765190358 0,139.24072265625 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232464-103465", "taskX": "232464", "taskY": "103465", "geometry": "POLYGON ((139.24072265625 35.4147957290186 0,139.242095947266 35.4147957290186 0,139.242095947266 35.4136765190358 0,139.24072265625 35.4136765190358 0,139.24072265625 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212002.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232464-103466 POLYGON ((139.24072265625 35.4136765190358 0,139.242095947266 35.4136765190358 0,139.242095947266 35.412557293508 0,139.24072265625 35.412557293508 0,139.24072265625 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232464-103466", "taskX": "232464", "taskY": "103466", "geometry": "POLYGON ((139.24072265625 35.4136765190358 0,139.242095947266 35.4136765190358 0,139.242095947266 35.412557293508 0,139.24072265625 35.412557293508 0,139.24072265625 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212020.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232464-103467 POLYGON ((139.24072265625 35.412557293508 0,139.242095947266 35.412557293508 0,139.242095947266 35.4114380524355 0,139.24072265625 35.4114380524355 0,139.24072265625 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232464-103467", "taskX": "232464", "taskY": "103467", "geometry": "POLYGON ((139.24072265625 35.412557293508 0,139.242095947266 35.412557293508 0,139.242095947266 35.4114380524355 0,139.24072265625 35.4114380524355 0,139.24072265625 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212022.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232465-103465 POLYGON ((139.242095947266 35.4147957290186 0,139.243469238281 35.4147957290186 0,139.243469238281 35.4136765190358 0,139.242095947266 35.4136765190358 0,139.242095947266 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232465-103465", "taskX": "232465", "taskY": "103465", "geometry": "POLYGON ((139.242095947266 35.4147957290186 0,139.243469238281 35.4147957290186 0,139.243469238281 35.4136765190358 0,139.242095947266 35.4136765190358 0,139.242095947266 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212003.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232465-103466 POLYGON ((139.242095947266 35.4136765190358 0,139.243469238281 35.4136765190358 0,139.243469238281 35.412557293508 0,139.242095947266 35.412557293508 0,139.242095947266 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232465-103466", "taskX": "232465", "taskY": "103466", "geometry": "POLYGON ((139.242095947266 35.4136765190358 0,139.243469238281 35.4136765190358 0,139.243469238281 35.412557293508 0,139.242095947266 35.412557293508 0,139.242095947266 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212021.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232465-103467 POLYGON ((139.242095947266 35.412557293508 0,139.243469238281 35.412557293508 0,139.243469238281 35.4114380524355 0,139.242095947266 35.4114380524355 0,139.242095947266 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232465-103467", "taskX": "232465", "taskY": "103467", "geometry": "POLYGON ((139.242095947266 35.412557293508 0,139.243469238281 35.412557293508 0,139.243469238281 35.4114380524355 0,139.242095947266 35.4114380524355 0,139.242095947266 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212023.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232466-103465 POLYGON ((139.243469238281 35.4147957290186 0,139.244842529297 35.4147957290186 0,139.244842529297 35.4136765190358 0,139.243469238281 35.4136765190358 0,139.243469238281 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232466-103465", "taskX": "232466", "taskY": "103465", "geometry": "POLYGON ((139.243469238281 35.4147957290186 0,139.244842529297 35.4147957290186 0,139.244842529297 35.4136765190358 0,139.243469238281 35.4136765190358 0,139.243469238281 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212012.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232466-103466 POLYGON ((139.243469238281 35.4136765190358 0,139.244842529297 35.4136765190358 0,139.244842529297 35.412557293508 0,139.243469238281 35.412557293508 0,139.243469238281 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232466-103466", "taskX": "232466", "taskY": "103466", "geometry": "POLYGON ((139.243469238281 35.4136765190358 0,139.244842529297 35.4136765190358 0,139.244842529297 35.412557293508 0,139.243469238281 35.412557293508 0,139.243469238281 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212030.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232466-103467 POLYGON ((139.243469238281 35.412557293508 0,139.244842529297 35.412557293508 0,139.244842529297 35.4114380524355 0,139.243469238281 35.4114380524355 0,139.243469238281 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232466-103467", "taskX": "232466", "taskY": "103467", "geometry": "POLYGON ((139.243469238281 35.412557293508 0,139.244842529297 35.412557293508 0,139.244842529297 35.4114380524355 0,139.243469238281 35.4114380524355 0,139.243469238281 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212032.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232467-103465 POLYGON ((139.244842529297 35.4147957290186 0,139.246215820312 35.4147957290186 0,139.246215820312 35.4136765190358 0,139.244842529297 35.4136765190358 0,139.244842529297 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232467-103465", "taskX": "232467", "taskY": "103465", "geometry": "POLYGON ((139.244842529297 35.4147957290186 0,139.246215820312 35.4147957290186 0,139.246215820312 35.4136765190358 0,139.244842529297 35.4136765190358 0,139.244842529297 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212013.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232467-103466 POLYGON ((139.244842529297 35.4136765190358 0,139.246215820312 35.4136765190358 0,139.246215820312 35.412557293508 0,139.244842529297 35.412557293508 0,139.244842529297 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232467-103466", "taskX": "232467", "taskY": "103466", "geometry": "POLYGON ((139.244842529297 35.4136765190358 0,139.246215820312 35.4136765190358 0,139.246215820312 35.412557293508 0,139.244842529297 35.412557293508 0,139.244842529297 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212031.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232467-103467 POLYGON ((139.244842529297 35.412557293508 0,139.246215820312 35.412557293508 0,139.246215820312 35.4114380524355 0,139.244842529297 35.4114380524355 0,139.244842529297 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232467-103467", "taskX": "232467", "taskY": "103467", "geometry": "POLYGON ((139.244842529297 35.412557293508 0,139.246215820312 35.412557293508 0,139.246215820312 35.4114380524355 0,139.244842529297 35.4114380524355 0,139.244842529297 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212033.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232468-103465 POLYGON ((139.246215820312 35.4147957290186 0,139.247589111328 35.4147957290186 0,139.247589111328 35.4136765190358 0,139.246215820312 35.4136765190358 0,139.246215820312 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232468-103465", "taskX": "232468", "taskY": "103465", "geometry": "POLYGON ((139.246215820312 35.4147957290186 0,139.247589111328 35.4147957290186 0,139.247589111328 35.4136765190358 0,139.246215820312 35.4136765190358 0,139.246215820312 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212102.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232468-103466 POLYGON ((139.246215820312 35.4136765190358 0,139.247589111328 35.4136765190358 0,139.247589111328 35.412557293508 0,139.246215820312 35.412557293508 0,139.246215820312 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232468-103466", "taskX": "232468", "taskY": "103466", "geometry": "POLYGON ((139.246215820312 35.4136765190358 0,139.247589111328 35.4136765190358 0,139.247589111328 35.412557293508 0,139.246215820312 35.412557293508 0,139.246215820312 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212120.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232468-103467 POLYGON ((139.246215820312 35.412557293508 0,139.247589111328 35.412557293508 0,139.247589111328 35.4114380524355 0,139.246215820312 35.4114380524355 0,139.246215820312 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232468-103467", "taskX": "232468", "taskY": "103467", "geometry": "POLYGON ((139.246215820312 35.412557293508 0,139.247589111328 35.412557293508 0,139.247589111328 35.4114380524355 0,139.246215820312 35.4114380524355 0,139.246215820312 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212122.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232469-103465 POLYGON ((139.247589111328 35.4147957290186 0,139.248962402344 35.4147957290186 0,139.248962402344 35.4136765190358 0,139.247589111328 35.4136765190358 0,139.247589111328 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232469-103465", "taskX": "232469", "taskY": "103465", "geometry": "POLYGON ((139.247589111328 35.4147957290186 0,139.248962402344 35.4147957290186 0,139.248962402344 35.4136765190358 0,139.247589111328 35.4136765190358 0,139.247589111328 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212103.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232469-103466 POLYGON ((139.247589111328 35.4136765190358 0,139.248962402344 35.4136765190358 0,139.248962402344 35.412557293508 0,139.247589111328 35.412557293508 0,139.247589111328 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232469-103466", "taskX": "232469", "taskY": "103466", "geometry": "POLYGON ((139.247589111328 35.4136765190358 0,139.248962402344 35.4136765190358 0,139.248962402344 35.412557293508 0,139.247589111328 35.412557293508 0,139.247589111328 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212121.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g101 18-232469-103467 POLYGON ((139.247589111328 35.412557293508 0,139.248962402344 35.412557293508 0,139.248962402344 35.4114380524355 0,139.247589111328 35.4114380524355 0,139.247589111328 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232469-103467", "taskX": "232469", "taskY": "103467", "geometry": "POLYGON ((139.247589111328 35.412557293508 0,139.248962402344 35.412557293508 0,139.248962402344 35.4114380524355 0,139.247589111328 35.4114380524355 0,139.247589111328 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212123.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232461-103468 POLYGON ((139.236602783203 35.4114380524355 0,139.237976074219 35.4114380524355 0,139.237976074219 35.4103187958184 0,139.236602783203 35.4103187958184 0,139.236602783203 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232461-103468", "taskX": "232461", "taskY": "103468", "geometry": "POLYGON ((139.236602783203 35.4114380524355 0,139.237976074219 35.4114380524355 0,139.237976074219 35.4103187958184 0,139.236602783203 35.4103187958184 0,139.236602783203 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203301.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232461/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232461-103469 POLYGON ((139.236602783203 35.4103187958184 0,139.237976074219 35.4103187958184 0,139.237976074219 35.409199523657 0,139.236602783203 35.409199523657 0,139.236602783203 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232461-103469", "taskX": "232461", "taskY": "103469", "geometry": "POLYGON ((139.236602783203 35.4103187958184 0,139.237976074219 35.4103187958184 0,139.237976074219 35.409199523657 0,139.236602783203 35.409199523657 0,139.236602783203 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203303.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232461/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232461-103470 POLYGON ((139.236602783203 35.409199523657 0,139.237976074219 35.409199523657 0,139.237976074219 35.4080802359514 0,139.236602783203 35.4080802359514 0,139.236602783203 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232461-103470", "taskX": "232461", "taskY": "103470", "geometry": "POLYGON ((139.236602783203 35.409199523657 0,139.237976074219 35.409199523657 0,139.237976074219 35.4080802359514 0,139.236602783203 35.4080802359514 0,139.236602783203 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203321.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232461/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232462-103468 POLYGON ((139.237976074219 35.4114380524355 0,139.239349365234 35.4114380524355 0,139.239349365234 35.4103187958184 0,139.237976074219 35.4103187958184 0,139.237976074219 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232462-103468", "taskX": "232462", "taskY": "103468", "geometry": "POLYGON ((139.237976074219 35.4114380524355 0,139.239349365234 35.4114380524355 0,139.239349365234 35.4103187958184 0,139.237976074219 35.4103187958184 0,139.237976074219 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203310.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232462-103469 POLYGON ((139.237976074219 35.4103187958184 0,139.239349365234 35.4103187958184 0,139.239349365234 35.409199523657 0,139.237976074219 35.409199523657 0,139.237976074219 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232462-103469", "taskX": "232462", "taskY": "103469", "geometry": "POLYGON ((139.237976074219 35.4103187958184 0,139.239349365234 35.4103187958184 0,139.239349365234 35.409199523657 0,139.237976074219 35.409199523657 0,139.237976074219 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203312.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232462-103470 POLYGON ((139.237976074219 35.409199523657 0,139.239349365234 35.409199523657 0,139.239349365234 35.4080802359514 0,139.237976074219 35.4080802359514 0,139.237976074219 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232462-103470", "taskX": "232462", "taskY": "103470", "geometry": "POLYGON ((139.237976074219 35.409199523657 0,139.239349365234 35.409199523657 0,139.239349365234 35.4080802359514 0,139.237976074219 35.4080802359514 0,139.237976074219 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203330.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232463-103468 POLYGON ((139.239349365234 35.4114380524355 0,139.24072265625 35.4114380524355 0,139.24072265625 35.4103187958184 0,139.239349365234 35.4103187958184 0,139.239349365234 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232463-103468", "taskX": "232463", "taskY": "103468", "geometry": "POLYGON ((139.239349365234 35.4114380524355 0,139.24072265625 35.4114380524355 0,139.24072265625 35.4103187958184 0,139.239349365234 35.4103187958184 0,139.239349365234 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203311.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232463-103469 POLYGON ((139.239349365234 35.4103187958184 0,139.24072265625 35.4103187958184 0,139.24072265625 35.409199523657 0,139.239349365234 35.409199523657 0,139.239349365234 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232463-103469", "taskX": "232463", "taskY": "103469", "geometry": "POLYGON ((139.239349365234 35.4103187958184 0,139.24072265625 35.4103187958184 0,139.24072265625 35.409199523657 0,139.239349365234 35.409199523657 0,139.239349365234 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203313.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232463-103470 POLYGON ((139.239349365234 35.409199523657 0,139.24072265625 35.409199523657 0,139.24072265625 35.4080802359514 0,139.239349365234 35.4080802359514 0,139.239349365234 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232463-103470", "taskX": "232463", "taskY": "103470", "geometry": "POLYGON ((139.239349365234 35.409199523657 0,139.24072265625 35.409199523657 0,139.24072265625 35.4080802359514 0,139.239349365234 35.4080802359514 0,139.239349365234 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203331.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232464-103468 POLYGON ((139.24072265625 35.4114380524355 0,139.242095947266 35.4114380524355 0,139.242095947266 35.4103187958184 0,139.24072265625 35.4103187958184 0,139.24072265625 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232464-103468", "taskX": "232464", "taskY": "103468", "geometry": "POLYGON ((139.24072265625 35.4114380524355 0,139.242095947266 35.4114380524355 0,139.242095947266 35.4103187958184 0,139.24072265625 35.4103187958184 0,139.24072265625 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212200.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232464-103469 POLYGON ((139.24072265625 35.4103187958184 0,139.242095947266 35.4103187958184 0,139.242095947266 35.409199523657 0,139.24072265625 35.409199523657 0,139.24072265625 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232464-103469", "taskX": "232464", "taskY": "103469", "geometry": "POLYGON ((139.24072265625 35.4103187958184 0,139.242095947266 35.4103187958184 0,139.242095947266 35.409199523657 0,139.24072265625 35.409199523657 0,139.24072265625 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212202.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232464-103470 POLYGON ((139.24072265625 35.409199523657 0,139.242095947266 35.409199523657 0,139.242095947266 35.4080802359514 0,139.24072265625 35.4080802359514 0,139.24072265625 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232464-103470", "taskX": "232464", "taskY": "103470", "geometry": "POLYGON ((139.24072265625 35.409199523657 0,139.242095947266 35.409199523657 0,139.242095947266 35.4080802359514 0,139.24072265625 35.4080802359514 0,139.24072265625 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212220.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232465-103468 POLYGON ((139.242095947266 35.4114380524355 0,139.243469238281 35.4114380524355 0,139.243469238281 35.4103187958184 0,139.242095947266 35.4103187958184 0,139.242095947266 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232465-103468", "taskX": "232465", "taskY": "103468", "geometry": "POLYGON ((139.242095947266 35.4114380524355 0,139.243469238281 35.4114380524355 0,139.243469238281 35.4103187958184 0,139.242095947266 35.4103187958184 0,139.242095947266 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212201.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232465-103469 POLYGON ((139.242095947266 35.4103187958184 0,139.243469238281 35.4103187958184 0,139.243469238281 35.409199523657 0,139.242095947266 35.409199523657 0,139.242095947266 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232465-103469", "taskX": "232465", "taskY": "103469", "geometry": "POLYGON ((139.242095947266 35.4103187958184 0,139.243469238281 35.4103187958184 0,139.243469238281 35.409199523657 0,139.242095947266 35.409199523657 0,139.242095947266 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212203.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232465-103470 POLYGON ((139.242095947266 35.409199523657 0,139.243469238281 35.409199523657 0,139.243469238281 35.4080802359514 0,139.242095947266 35.4080802359514 0,139.242095947266 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232465-103470", "taskX": "232465", "taskY": "103470", "geometry": "POLYGON ((139.242095947266 35.409199523657 0,139.243469238281 35.409199523657 0,139.243469238281 35.4080802359514 0,139.242095947266 35.4080802359514 0,139.242095947266 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212221.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232466-103468 POLYGON ((139.243469238281 35.4114380524355 0,139.244842529297 35.4114380524355 0,139.244842529297 35.4103187958184 0,139.243469238281 35.4103187958184 0,139.243469238281 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232466-103468", "taskX": "232466", "taskY": "103468", "geometry": "POLYGON ((139.243469238281 35.4114380524355 0,139.244842529297 35.4114380524355 0,139.244842529297 35.4103187958184 0,139.243469238281 35.4103187958184 0,139.243469238281 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212210.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232466-103469 POLYGON ((139.243469238281 35.4103187958184 0,139.244842529297 35.4103187958184 0,139.244842529297 35.409199523657 0,139.243469238281 35.409199523657 0,139.243469238281 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232466-103469", "taskX": "232466", "taskY": "103469", "geometry": "POLYGON ((139.243469238281 35.4103187958184 0,139.244842529297 35.4103187958184 0,139.244842529297 35.409199523657 0,139.243469238281 35.409199523657 0,139.243469238281 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212212.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232466-103470 POLYGON ((139.243469238281 35.409199523657 0,139.244842529297 35.409199523657 0,139.244842529297 35.4080802359514 0,139.243469238281 35.4080802359514 0,139.243469238281 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232466-103470", "taskX": "232466", "taskY": "103470", "geometry": "POLYGON ((139.243469238281 35.409199523657 0,139.244842529297 35.409199523657 0,139.244842529297 35.4080802359514 0,139.243469238281 35.4080802359514 0,139.243469238281 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212230.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232467-103468 POLYGON ((139.244842529297 35.4114380524355 0,139.246215820312 35.4114380524355 0,139.246215820312 35.4103187958184 0,139.244842529297 35.4103187958184 0,139.244842529297 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232467-103468", "taskX": "232467", "taskY": "103468", "geometry": "POLYGON ((139.244842529297 35.4114380524355 0,139.246215820312 35.4114380524355 0,139.246215820312 35.4103187958184 0,139.244842529297 35.4103187958184 0,139.244842529297 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212211.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232467-103469 POLYGON ((139.244842529297 35.4103187958184 0,139.246215820312 35.4103187958184 0,139.246215820312 35.409199523657 0,139.244842529297 35.409199523657 0,139.244842529297 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232467-103469", "taskX": "232467", "taskY": "103469", "geometry": "POLYGON ((139.244842529297 35.4103187958184 0,139.246215820312 35.4103187958184 0,139.246215820312 35.409199523657 0,139.244842529297 35.409199523657 0,139.244842529297 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212213.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232467-103470 POLYGON ((139.244842529297 35.409199523657 0,139.246215820312 35.409199523657 0,139.246215820312 35.4080802359514 0,139.244842529297 35.4080802359514 0,139.244842529297 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232467-103470", "taskX": "232467", "taskY": "103470", "geometry": "POLYGON ((139.244842529297 35.409199523657 0,139.246215820312 35.409199523657 0,139.246215820312 35.4080802359514 0,139.244842529297 35.4080802359514 0,139.244842529297 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212231.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232468-103468 POLYGON ((139.246215820312 35.4114380524355 0,139.247589111328 35.4114380524355 0,139.247589111328 35.4103187958184 0,139.246215820312 35.4103187958184 0,139.246215820312 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232468-103468", "taskX": "232468", "taskY": "103468", "geometry": "POLYGON ((139.246215820312 35.4114380524355 0,139.247589111328 35.4114380524355 0,139.247589111328 35.4103187958184 0,139.246215820312 35.4103187958184 0,139.246215820312 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212300.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232468-103469 POLYGON ((139.246215820312 35.4103187958184 0,139.247589111328 35.4103187958184 0,139.247589111328 35.409199523657 0,139.246215820312 35.409199523657 0,139.246215820312 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232468-103469", "taskX": "232468", "taskY": "103469", "geometry": "POLYGON ((139.246215820312 35.4103187958184 0,139.247589111328 35.4103187958184 0,139.247589111328 35.409199523657 0,139.246215820312 35.409199523657 0,139.246215820312 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212302.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232468-103470 POLYGON ((139.246215820312 35.409199523657 0,139.247589111328 35.409199523657 0,139.247589111328 35.4080802359514 0,139.246215820312 35.4080802359514 0,139.246215820312 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232468-103470", "taskX": "232468", "taskY": "103470", "geometry": "POLYGON ((139.246215820312 35.409199523657 0,139.247589111328 35.409199523657 0,139.247589111328 35.4080802359514 0,139.246215820312 35.4080802359514 0,139.246215820312 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212320.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232469-103468 POLYGON ((139.247589111328 35.4114380524355 0,139.248962402344 35.4114380524355 0,139.248962402344 35.4103187958184 0,139.247589111328 35.4103187958184 0,139.247589111328 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232469-103468", "taskX": "232469", "taskY": "103468", "geometry": "POLYGON ((139.247589111328 35.4114380524355 0,139.248962402344 35.4114380524355 0,139.248962402344 35.4103187958184 0,139.247589111328 35.4103187958184 0,139.247589111328 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212301.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232469-103469 POLYGON ((139.247589111328 35.4103187958184 0,139.248962402344 35.4103187958184 0,139.248962402344 35.409199523657 0,139.247589111328 35.409199523657 0,139.247589111328 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232469-103469", "taskX": "232469", "taskY": "103469", "geometry": "POLYGON ((139.247589111328 35.4103187958184 0,139.248962402344 35.4103187958184 0,139.248962402344 35.409199523657 0,139.247589111328 35.409199523657 0,139.247589111328 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212303.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g102 18-232469-103470 POLYGON ((139.247589111328 35.409199523657 0,139.248962402344 35.409199523657 0,139.248962402344 35.4080802359514 0,139.247589111328 35.4080802359514 0,139.247589111328 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232469-103470", "taskX": "232469", "taskY": "103470", "geometry": "POLYGON ((139.247589111328 35.409199523657 0,139.248962402344 35.409199523657 0,139.248962402344 35.4080802359514 0,139.247589111328 35.4080802359514 0,139.247589111328 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212321.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232462-103471 POLYGON ((139.237976074219 35.4080802359514 0,139.239349365234 35.4080802359514 0,139.239349365234 35.406960932702 0,139.237976074219 35.406960932702 0,139.237976074219 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232462-103471", "taskX": "232462", "taskY": "103471", "geometry": "POLYGON ((139.237976074219 35.4080802359514 0,139.239349365234 35.4080802359514 0,139.239349365234 35.406960932702 0,139.237976074219 35.406960932702 0,139.237976074219 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203332.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232462-103472 POLYGON ((139.237976074219 35.406960932702 0,139.239349365234 35.406960932702 0,139.239349365234 35.4058416139089 0,139.237976074219 35.4058416139089 0,139.237976074219 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232462-103472", "taskX": "232462", "taskY": "103472", "geometry": "POLYGON ((139.237976074219 35.406960932702 0,139.239349365234 35.406960932702 0,139.239349365234 35.4058416139089 0,139.237976074219 35.4058416139089 0,139.237976074219 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000221110.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232462-103473 POLYGON ((139.237976074219 35.4058416139089 0,139.239349365234 35.4058416139089 0,139.239349365234 35.4047222795722 0,139.237976074219 35.4047222795722 0,139.237976074219 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232462-103473", "taskX": "232462", "taskY": "103473", "geometry": "POLYGON ((139.237976074219 35.4058416139089 0,139.239349365234 35.4058416139089 0,139.239349365234 35.4047222795722 0,139.237976074219 35.4047222795722 0,139.237976074219 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000221112.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232463-103471 POLYGON ((139.239349365234 35.4080802359514 0,139.24072265625 35.4080802359514 0,139.24072265625 35.406960932702 0,139.239349365234 35.406960932702 0,139.239349365234 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232463-103471", "taskX": "232463", "taskY": "103471", "geometry": "POLYGON ((139.239349365234 35.4080802359514 0,139.24072265625 35.4080802359514 0,139.24072265625 35.406960932702 0,139.239349365234 35.406960932702 0,139.239349365234 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203333.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232463-103472 POLYGON ((139.239349365234 35.406960932702 0,139.24072265625 35.406960932702 0,139.24072265625 35.4058416139089 0,139.239349365234 35.4058416139089 0,139.239349365234 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232463-103472", "taskX": "232463", "taskY": "103472", "geometry": "POLYGON ((139.239349365234 35.406960932702 0,139.24072265625 35.406960932702 0,139.24072265625 35.4058416139089 0,139.239349365234 35.4058416139089 0,139.239349365234 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000221111.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232463-103473 POLYGON ((139.239349365234 35.4058416139089 0,139.24072265625 35.4058416139089 0,139.24072265625 35.4047222795722 0,139.239349365234 35.4047222795722 0,139.239349365234 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232463-103473", "taskX": "232463", "taskY": "103473", "geometry": "POLYGON ((139.239349365234 35.4058416139089 0,139.24072265625 35.4058416139089 0,139.24072265625 35.4047222795722 0,139.239349365234 35.4047222795722 0,139.239349365234 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000221113.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232464-103471 POLYGON ((139.24072265625 35.4080802359514 0,139.242095947266 35.4080802359514 0,139.242095947266 35.406960932702 0,139.24072265625 35.406960932702 0,139.24072265625 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232464-103471", "taskX": "232464", "taskY": "103471", "geometry": "POLYGON ((139.24072265625 35.4080802359514 0,139.242095947266 35.4080802359514 0,139.242095947266 35.406960932702 0,139.24072265625 35.406960932702 0,139.24072265625 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212222.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232464-103472 POLYGON ((139.24072265625 35.406960932702 0,139.242095947266 35.406960932702 0,139.242095947266 35.4058416139089 0,139.24072265625 35.4058416139089 0,139.24072265625 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232464-103472", "taskX": "232464", "taskY": "103472", "geometry": "POLYGON ((139.24072265625 35.406960932702 0,139.242095947266 35.406960932702 0,139.242095947266 35.4058416139089 0,139.24072265625 35.4058416139089 0,139.24072265625 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230000.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232464-103473 POLYGON ((139.24072265625 35.4058416139089 0,139.242095947266 35.4058416139089 0,139.242095947266 35.4047222795722 0,139.24072265625 35.4047222795722 0,139.24072265625 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232464-103473", "taskX": "232464", "taskY": "103473", "geometry": "POLYGON ((139.24072265625 35.4058416139089 0,139.242095947266 35.4058416139089 0,139.242095947266 35.4047222795722 0,139.24072265625 35.4047222795722 0,139.24072265625 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230002.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232465-103471 POLYGON ((139.242095947266 35.4080802359514 0,139.243469238281 35.4080802359514 0,139.243469238281 35.406960932702 0,139.242095947266 35.406960932702 0,139.242095947266 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232465-103471", "taskX": "232465", "taskY": "103471", "geometry": "POLYGON ((139.242095947266 35.4080802359514 0,139.243469238281 35.4080802359514 0,139.243469238281 35.406960932702 0,139.242095947266 35.406960932702 0,139.242095947266 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212223.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232465-103472 POLYGON ((139.242095947266 35.406960932702 0,139.243469238281 35.406960932702 0,139.243469238281 35.4058416139089 0,139.242095947266 35.4058416139089 0,139.242095947266 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232465-103472", "taskX": "232465", "taskY": "103472", "geometry": "POLYGON ((139.242095947266 35.406960932702 0,139.243469238281 35.406960932702 0,139.243469238281 35.4058416139089 0,139.242095947266 35.4058416139089 0,139.242095947266 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230001.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232465-103473 POLYGON ((139.242095947266 35.4058416139089 0,139.243469238281 35.4058416139089 0,139.243469238281 35.4047222795722 0,139.242095947266 35.4047222795722 0,139.242095947266 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232465-103473", "taskX": "232465", "taskY": "103473", "geometry": "POLYGON ((139.242095947266 35.4058416139089 0,139.243469238281 35.4058416139089 0,139.243469238281 35.4047222795722 0,139.242095947266 35.4047222795722 0,139.242095947266 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230003.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232466-103471 POLYGON ((139.243469238281 35.4080802359514 0,139.244842529297 35.4080802359514 0,139.244842529297 35.406960932702 0,139.243469238281 35.406960932702 0,139.243469238281 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232466-103471", "taskX": "232466", "taskY": "103471", "geometry": "POLYGON ((139.243469238281 35.4080802359514 0,139.244842529297 35.4080802359514 0,139.244842529297 35.406960932702 0,139.243469238281 35.406960932702 0,139.243469238281 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212232.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232466-103472 POLYGON ((139.243469238281 35.406960932702 0,139.244842529297 35.406960932702 0,139.244842529297 35.4058416139089 0,139.243469238281 35.4058416139089 0,139.243469238281 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232466-103472", "taskX": "232466", "taskY": "103472", "geometry": "POLYGON ((139.243469238281 35.406960932702 0,139.244842529297 35.406960932702 0,139.244842529297 35.4058416139089 0,139.243469238281 35.4058416139089 0,139.243469238281 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230010.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232466-103473 POLYGON ((139.243469238281 35.4058416139089 0,139.244842529297 35.4058416139089 0,139.244842529297 35.4047222795722 0,139.243469238281 35.4047222795722 0,139.243469238281 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232466-103473", "taskX": "232466", "taskY": "103473", "geometry": "POLYGON ((139.243469238281 35.4058416139089 0,139.244842529297 35.4058416139089 0,139.244842529297 35.4047222795722 0,139.243469238281 35.4047222795722 0,139.243469238281 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230012.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232467-103471 POLYGON ((139.244842529297 35.4080802359514 0,139.246215820312 35.4080802359514 0,139.246215820312 35.406960932702 0,139.244842529297 35.406960932702 0,139.244842529297 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232467-103471", "taskX": "232467", "taskY": "103471", "geometry": "POLYGON ((139.244842529297 35.4080802359514 0,139.246215820312 35.4080802359514 0,139.246215820312 35.406960932702 0,139.244842529297 35.406960932702 0,139.244842529297 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212233.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232467-103472 POLYGON ((139.244842529297 35.406960932702 0,139.246215820312 35.406960932702 0,139.246215820312 35.4058416139089 0,139.244842529297 35.4058416139089 0,139.244842529297 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232467-103472", "taskX": "232467", "taskY": "103472", "geometry": "POLYGON ((139.244842529297 35.406960932702 0,139.246215820312 35.406960932702 0,139.246215820312 35.4058416139089 0,139.244842529297 35.4058416139089 0,139.244842529297 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230011.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g103 18-232467-103473 POLYGON ((139.244842529297 35.4058416139089 0,139.246215820312 35.4058416139089 0,139.246215820312 35.4047222795722 0,139.244842529297 35.4047222795722 0,139.244842529297 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232467-103473", "taskX": "232467", "taskY": "103473", "geometry": "POLYGON ((139.244842529297 35.4058416139089 0,139.246215820312 35.4058416139089 0,139.246215820312 35.4047222795722 0,139.244842529297 35.4047222795722 0,139.244842529297 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230013.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232447-103477 POLYGON ((139.217376708984 35.4013641833035 0,139.21875 35.4013641833035 0,139.21875 35.4002447867951 0,139.217376708984 35.4002447867951 0,139.217376708984 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232447-103477", "taskX": "232447", "taskY": "103477", "geometry": "POLYGON ((139.217376708984 35.4013641833035 0,139.21875 35.4013641833035 0,139.21875 35.4002447867951 0,139.217376708984 35.4002447867951 0,139.217376708984 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111331313.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232447-103478 POLYGON ((139.217376708984 35.4002447867951 0,139.21875 35.4002447867951 0,139.21875 35.3991253747442 0,139.217376708984 35.3991253747442 0,139.217376708984 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232447-103478", "taskX": "232447", "taskY": "103478", "geometry": "POLYGON ((139.217376708984 35.4002447867951 0,139.21875 35.4002447867951 0,139.21875 35.3991253747442 0,139.217376708984 35.3991253747442 0,139.217376708984 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111331331.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232447-103479 POLYGON ((139.217376708984 35.3991253747442 0,139.21875 35.3991253747442 0,139.21875 35.3980059471511 0,139.217376708984 35.3980059471511 0,139.217376708984 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232447-103479", "taskX": "232447", "taskY": "103479", "geometry": "POLYGON ((139.217376708984 35.3991253747442 0,139.21875 35.3991253747442 0,139.21875 35.3980059471511 0,139.217376708984 35.3980059471511 0,139.217376708984 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111331333.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232448-103477 POLYGON ((139.21875 35.4013641833035 0,139.220123291016 35.4013641833035 0,139.220123291016 35.4002447867951 0,139.21875 35.4002447867951 0,139.21875 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232448-103477", "taskX": "232448", "taskY": "103477", "geometry": "POLYGON ((139.21875 35.4013641833035 0,139.220123291016 35.4013641833035 0,139.220123291016 35.4002447867951 0,139.21875 35.4002447867951 0,139.21875 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220202.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232448-103478 POLYGON ((139.21875 35.4002447867951 0,139.220123291016 35.4002447867951 0,139.220123291016 35.3991253747442 0,139.21875 35.3991253747442 0,139.21875 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232448-103478", "taskX": "232448", "taskY": "103478", "geometry": "POLYGON ((139.21875 35.4002447867951 0,139.220123291016 35.4002447867951 0,139.220123291016 35.3991253747442 0,139.21875 35.3991253747442 0,139.21875 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220220.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232448-103479 POLYGON ((139.21875 35.3991253747442 0,139.220123291016 35.3991253747442 0,139.220123291016 35.3980059471511 0,139.21875 35.3980059471511 0,139.21875 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232448-103479", "taskX": "232448", "taskY": "103479", "geometry": "POLYGON ((139.21875 35.3991253747442 0,139.220123291016 35.3991253747442 0,139.220123291016 35.3980059471511 0,139.21875 35.3980059471511 0,139.21875 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220222.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232449-103477 POLYGON ((139.220123291016 35.4013641833035 0,139.221496582031 35.4013641833035 0,139.221496582031 35.4002447867951 0,139.220123291016 35.4002447867951 0,139.220123291016 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232449-103477", "taskX": "232449", "taskY": "103477", "geometry": "POLYGON ((139.220123291016 35.4013641833035 0,139.221496582031 35.4013641833035 0,139.221496582031 35.4002447867951 0,139.220123291016 35.4002447867951 0,139.220123291016 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220203.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232449-103478 POLYGON ((139.220123291016 35.4002447867951 0,139.221496582031 35.4002447867951 0,139.221496582031 35.3991253747442 0,139.220123291016 35.3991253747442 0,139.220123291016 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232449-103478", "taskX": "232449", "taskY": "103478", "geometry": "POLYGON ((139.220123291016 35.4002447867951 0,139.221496582031 35.4002447867951 0,139.221496582031 35.3991253747442 0,139.220123291016 35.3991253747442 0,139.220123291016 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220221.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232449-103479 POLYGON ((139.220123291016 35.3991253747442 0,139.221496582031 35.3991253747442 0,139.221496582031 35.3980059471511 0,139.220123291016 35.3980059471511 0,139.220123291016 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232449-103479", "taskX": "232449", "taskY": "103479", "geometry": "POLYGON ((139.220123291016 35.3991253747442 0,139.221496582031 35.3991253747442 0,139.221496582031 35.3980059471511 0,139.220123291016 35.3980059471511 0,139.220123291016 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220223.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232450-103477 POLYGON ((139.221496582031 35.4013641833035 0,139.222869873047 35.4013641833035 0,139.222869873047 35.4002447867951 0,139.221496582031 35.4002447867951 0,139.221496582031 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232450-103477", "taskX": "232450", "taskY": "103477", "geometry": "POLYGON ((139.221496582031 35.4013641833035 0,139.222869873047 35.4013641833035 0,139.222869873047 35.4002447867951 0,139.221496582031 35.4002447867951 0,139.221496582031 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220212.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232450-103478 POLYGON ((139.221496582031 35.4002447867951 0,139.222869873047 35.4002447867951 0,139.222869873047 35.3991253747442 0,139.221496582031 35.3991253747442 0,139.221496582031 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232450-103478", "taskX": "232450", "taskY": "103478", "geometry": "POLYGON ((139.221496582031 35.4002447867951 0,139.222869873047 35.4002447867951 0,139.222869873047 35.3991253747442 0,139.221496582031 35.3991253747442 0,139.221496582031 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220230.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232450-103479 POLYGON ((139.221496582031 35.3991253747442 0,139.222869873047 35.3991253747442 0,139.222869873047 35.3980059471511 0,139.221496582031 35.3980059471511 0,139.221496582031 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232450-103479", "taskX": "232450", "taskY": "103479", "geometry": "POLYGON ((139.221496582031 35.3991253747442 0,139.222869873047 35.3991253747442 0,139.222869873047 35.3980059471511 0,139.221496582031 35.3980059471511 0,139.221496582031 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220232.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232451-103477 POLYGON ((139.222869873047 35.4013641833035 0,139.224243164062 35.4013641833035 0,139.224243164062 35.4002447867951 0,139.222869873047 35.4002447867951 0,139.222869873047 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232451-103477", "taskX": "232451", "taskY": "103477", "geometry": "POLYGON ((139.222869873047 35.4013641833035 0,139.224243164062 35.4013641833035 0,139.224243164062 35.4002447867951 0,139.222869873047 35.4002447867951 0,139.222869873047 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220213.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232451-103478 POLYGON ((139.222869873047 35.4002447867951 0,139.224243164062 35.4002447867951 0,139.224243164062 35.3991253747442 0,139.222869873047 35.3991253747442 0,139.222869873047 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232451-103478", "taskX": "232451", "taskY": "103478", "geometry": "POLYGON ((139.222869873047 35.4002447867951 0,139.224243164062 35.4002447867951 0,139.224243164062 35.3991253747442 0,139.222869873047 35.3991253747442 0,139.222869873047 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220231.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232451-103479 POLYGON ((139.222869873047 35.3991253747442 0,139.224243164062 35.3991253747442 0,139.224243164062 35.3980059471511 0,139.222869873047 35.3980059471511 0,139.222869873047 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232451-103479", "taskX": "232451", "taskY": "103479", "geometry": "POLYGON ((139.222869873047 35.3991253747442 0,139.224243164062 35.3991253747442 0,139.224243164062 35.3980059471511 0,139.222869873047 35.3980059471511 0,139.222869873047 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220233.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232452-103477 POLYGON ((139.224243164062 35.4013641833035 0,139.225616455078 35.4013641833035 0,139.225616455078 35.4002447867951 0,139.224243164062 35.4002447867951 0,139.224243164062 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232452-103477", "taskX": "232452", "taskY": "103477", "geometry": "POLYGON ((139.224243164062 35.4013641833035 0,139.225616455078 35.4013641833035 0,139.225616455078 35.4002447867951 0,139.224243164062 35.4002447867951 0,139.224243164062 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220302.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232452-103478 POLYGON ((139.224243164062 35.4002447867951 0,139.225616455078 35.4002447867951 0,139.225616455078 35.3991253747442 0,139.224243164062 35.3991253747442 0,139.224243164062 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232452-103478", "taskX": "232452", "taskY": "103478", "geometry": "POLYGON ((139.224243164062 35.4002447867951 0,139.225616455078 35.4002447867951 0,139.225616455078 35.3991253747442 0,139.224243164062 35.3991253747442 0,139.224243164062 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220320.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232452-103479 POLYGON ((139.224243164062 35.3991253747442 0,139.225616455078 35.3991253747442 0,139.225616455078 35.3980059471511 0,139.224243164062 35.3980059471511 0,139.224243164062 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232452-103479", "taskX": "232452", "taskY": "103479", "geometry": "POLYGON ((139.224243164062 35.3991253747442 0,139.225616455078 35.3991253747442 0,139.225616455078 35.3980059471511 0,139.224243164062 35.3980059471511 0,139.224243164062 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220322.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232453-103477 POLYGON ((139.225616455078 35.4013641833035 0,139.226989746094 35.4013641833035 0,139.226989746094 35.4002447867951 0,139.225616455078 35.4002447867951 0,139.225616455078 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232453-103477", "taskX": "232453", "taskY": "103477", "geometry": "POLYGON ((139.225616455078 35.4013641833035 0,139.226989746094 35.4013641833035 0,139.226989746094 35.4002447867951 0,139.225616455078 35.4002447867951 0,139.225616455078 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220303.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232453-103478 POLYGON ((139.225616455078 35.4002447867951 0,139.226989746094 35.4002447867951 0,139.226989746094 35.3991253747442 0,139.225616455078 35.3991253747442 0,139.225616455078 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232453-103478", "taskX": "232453", "taskY": "103478", "geometry": "POLYGON ((139.225616455078 35.4002447867951 0,139.226989746094 35.4002447867951 0,139.226989746094 35.3991253747442 0,139.225616455078 35.3991253747442 0,139.225616455078 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220321.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g104 18-232453-103479 POLYGON ((139.225616455078 35.3991253747442 0,139.226989746094 35.3991253747442 0,139.226989746094 35.3980059471511 0,139.225616455078 35.3980059471511 0,139.225616455078 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232453-103479", "taskX": "232453", "taskY": "103479", "geometry": "POLYGON ((139.225616455078 35.3991253747442 0,139.226989746094 35.3991253747442 0,139.226989746094 35.3980059471511 0,139.225616455078 35.3980059471511 0,139.225616455078 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220323.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232447-103480 POLYGON ((139.217376708984 35.3980059471511 0,139.21875 35.3980059471511 0,139.21875 35.3968865040159 0,139.217376708984 35.3968865040159 0,139.217376708984 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232447-103480", "taskX": "232447", "taskY": "103480", "geometry": "POLYGON ((139.217376708984 35.3980059471511 0,139.21875 35.3980059471511 0,139.21875 35.3968865040159 0,139.217376708984 35.3968865040159 0,139.217376708984 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333111.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232447-103481 POLYGON ((139.217376708984 35.3968865040159 0,139.21875 35.3968865040159 0,139.21875 35.395767045339 0,139.217376708984 35.395767045339 0,139.217376708984 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232447-103481", "taskX": "232447", "taskY": "103481", "geometry": "POLYGON ((139.217376708984 35.3968865040159 0,139.21875 35.3968865040159 0,139.21875 35.395767045339 0,139.217376708984 35.395767045339 0,139.217376708984 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333113.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232447-103482 POLYGON ((139.217376708984 35.395767045339 0,139.21875 35.395767045339 0,139.21875 35.3946475711205 0,139.217376708984 35.3946475711205 0,139.217376708984 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232447-103482", "taskX": "232447", "taskY": "103482", "geometry": "POLYGON ((139.217376708984 35.395767045339 0,139.21875 35.395767045339 0,139.21875 35.3946475711205 0,139.217376708984 35.3946475711205 0,139.217376708984 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333131.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232448-103480 POLYGON ((139.21875 35.3980059471511 0,139.220123291016 35.3980059471511 0,139.220123291016 35.3968865040159 0,139.21875 35.3968865040159 0,139.21875 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232448-103480", "taskX": "232448", "taskY": "103480", "geometry": "POLYGON ((139.21875 35.3980059471511 0,139.220123291016 35.3980059471511 0,139.220123291016 35.3968865040159 0,139.21875 35.3968865040159 0,139.21875 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222000.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232448-103481 POLYGON ((139.21875 35.3968865040159 0,139.220123291016 35.3968865040159 0,139.220123291016 35.395767045339 0,139.21875 35.395767045339 0,139.21875 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232448-103481", "taskX": "232448", "taskY": "103481", "geometry": "POLYGON ((139.21875 35.3968865040159 0,139.220123291016 35.3968865040159 0,139.220123291016 35.395767045339 0,139.21875 35.395767045339 0,139.21875 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222002.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232448-103482 POLYGON ((139.21875 35.395767045339 0,139.220123291016 35.395767045339 0,139.220123291016 35.3946475711205 0,139.21875 35.3946475711205 0,139.21875 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232448-103482", "taskX": "232448", "taskY": "103482", "geometry": "POLYGON ((139.21875 35.395767045339 0,139.220123291016 35.395767045339 0,139.220123291016 35.3946475711205 0,139.21875 35.3946475711205 0,139.21875 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222020.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232449-103480 POLYGON ((139.220123291016 35.3980059471511 0,139.221496582031 35.3980059471511 0,139.221496582031 35.3968865040159 0,139.220123291016 35.3968865040159 0,139.220123291016 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232449-103480", "taskX": "232449", "taskY": "103480", "geometry": "POLYGON ((139.220123291016 35.3980059471511 0,139.221496582031 35.3980059471511 0,139.221496582031 35.3968865040159 0,139.220123291016 35.3968865040159 0,139.220123291016 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222001.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232449-103481 POLYGON ((139.220123291016 35.3968865040159 0,139.221496582031 35.3968865040159 0,139.221496582031 35.395767045339 0,139.220123291016 35.395767045339 0,139.220123291016 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232449-103481", "taskX": "232449", "taskY": "103481", "geometry": "POLYGON ((139.220123291016 35.3968865040159 0,139.221496582031 35.3968865040159 0,139.221496582031 35.395767045339 0,139.220123291016 35.395767045339 0,139.220123291016 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222003.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232449-103482 POLYGON ((139.220123291016 35.395767045339 0,139.221496582031 35.395767045339 0,139.221496582031 35.3946475711205 0,139.220123291016 35.3946475711205 0,139.220123291016 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232449-103482", "taskX": "232449", "taskY": "103482", "geometry": "POLYGON ((139.220123291016 35.395767045339 0,139.221496582031 35.395767045339 0,139.221496582031 35.3946475711205 0,139.220123291016 35.3946475711205 0,139.220123291016 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222021.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232450-103480 POLYGON ((139.221496582031 35.3980059471511 0,139.222869873047 35.3980059471511 0,139.222869873047 35.3968865040159 0,139.221496582031 35.3968865040159 0,139.221496582031 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232450-103480", "taskX": "232450", "taskY": "103480", "geometry": "POLYGON ((139.221496582031 35.3980059471511 0,139.222869873047 35.3980059471511 0,139.222869873047 35.3968865040159 0,139.221496582031 35.3968865040159 0,139.221496582031 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222010.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232450-103481 POLYGON ((139.221496582031 35.3968865040159 0,139.222869873047 35.3968865040159 0,139.222869873047 35.395767045339 0,139.221496582031 35.395767045339 0,139.221496582031 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232450-103481", "taskX": "232450", "taskY": "103481", "geometry": "POLYGON ((139.221496582031 35.3968865040159 0,139.222869873047 35.3968865040159 0,139.222869873047 35.395767045339 0,139.221496582031 35.395767045339 0,139.221496582031 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222012.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232450-103482 POLYGON ((139.221496582031 35.395767045339 0,139.222869873047 35.395767045339 0,139.222869873047 35.3946475711205 0,139.221496582031 35.3946475711205 0,139.221496582031 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232450-103482", "taskX": "232450", "taskY": "103482", "geometry": "POLYGON ((139.221496582031 35.395767045339 0,139.222869873047 35.395767045339 0,139.222869873047 35.3946475711205 0,139.221496582031 35.3946475711205 0,139.221496582031 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222030.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232451-103480 POLYGON ((139.222869873047 35.3980059471511 0,139.224243164062 35.3980059471511 0,139.224243164062 35.3968865040159 0,139.222869873047 35.3968865040159 0,139.222869873047 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232451-103480", "taskX": "232451", "taskY": "103480", "geometry": "POLYGON ((139.222869873047 35.3980059471511 0,139.224243164062 35.3980059471511 0,139.224243164062 35.3968865040159 0,139.222869873047 35.3968865040159 0,139.222869873047 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222011.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232451-103481 POLYGON ((139.222869873047 35.3968865040159 0,139.224243164062 35.3968865040159 0,139.224243164062 35.395767045339 0,139.222869873047 35.395767045339 0,139.222869873047 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232451-103481", "taskX": "232451", "taskY": "103481", "geometry": "POLYGON ((139.222869873047 35.3968865040159 0,139.224243164062 35.3968865040159 0,139.224243164062 35.395767045339 0,139.222869873047 35.395767045339 0,139.222869873047 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222013.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232451-103482 POLYGON ((139.222869873047 35.395767045339 0,139.224243164062 35.395767045339 0,139.224243164062 35.3946475711205 0,139.222869873047 35.3946475711205 0,139.222869873047 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232451-103482", "taskX": "232451", "taskY": "103482", "geometry": "POLYGON ((139.222869873047 35.395767045339 0,139.224243164062 35.395767045339 0,139.224243164062 35.3946475711205 0,139.222869873047 35.3946475711205 0,139.222869873047 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222031.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232452-103480 POLYGON ((139.224243164062 35.3980059471511 0,139.225616455078 35.3980059471511 0,139.225616455078 35.3968865040159 0,139.224243164062 35.3968865040159 0,139.224243164062 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232452-103480", "taskX": "232452", "taskY": "103480", "geometry": "POLYGON ((139.224243164062 35.3980059471511 0,139.225616455078 35.3980059471511 0,139.225616455078 35.3968865040159 0,139.224243164062 35.3968865040159 0,139.224243164062 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222100.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232452-103481 POLYGON ((139.224243164062 35.3968865040159 0,139.225616455078 35.3968865040159 0,139.225616455078 35.395767045339 0,139.224243164062 35.395767045339 0,139.224243164062 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232452-103481", "taskX": "232452", "taskY": "103481", "geometry": "POLYGON ((139.224243164062 35.3968865040159 0,139.225616455078 35.3968865040159 0,139.225616455078 35.395767045339 0,139.224243164062 35.395767045339 0,139.224243164062 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222102.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232452-103482 POLYGON ((139.224243164062 35.395767045339 0,139.225616455078 35.395767045339 0,139.225616455078 35.3946475711205 0,139.224243164062 35.3946475711205 0,139.224243164062 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232452-103482", "taskX": "232452", "taskY": "103482", "geometry": "POLYGON ((139.224243164062 35.395767045339 0,139.225616455078 35.395767045339 0,139.225616455078 35.3946475711205 0,139.224243164062 35.3946475711205 0,139.224243164062 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222120.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232453-103480 POLYGON ((139.225616455078 35.3980059471511 0,139.226989746094 35.3980059471511 0,139.226989746094 35.3968865040159 0,139.225616455078 35.3968865040159 0,139.225616455078 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232453-103480", "taskX": "232453", "taskY": "103480", "geometry": "POLYGON ((139.225616455078 35.3980059471511 0,139.226989746094 35.3980059471511 0,139.226989746094 35.3968865040159 0,139.225616455078 35.3968865040159 0,139.225616455078 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222101.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232453-103481 POLYGON ((139.225616455078 35.3968865040159 0,139.226989746094 35.3968865040159 0,139.226989746094 35.395767045339 0,139.225616455078 35.395767045339 0,139.225616455078 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232453-103481", "taskX": "232453", "taskY": "103481", "geometry": "POLYGON ((139.225616455078 35.3968865040159 0,139.226989746094 35.3968865040159 0,139.226989746094 35.395767045339 0,139.225616455078 35.395767045339 0,139.225616455078 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222103.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232453-103482 POLYGON ((139.225616455078 35.395767045339 0,139.226989746094 35.395767045339 0,139.226989746094 35.3946475711205 0,139.225616455078 35.3946475711205 0,139.225616455078 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232453-103482", "taskX": "232453", "taskY": "103482", "geometry": "POLYGON ((139.225616455078 35.395767045339 0,139.226989746094 35.395767045339 0,139.226989746094 35.3946475711205 0,139.225616455078 35.3946475711205 0,139.225616455078 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222121.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232454-103480 POLYGON ((139.226989746094 35.3980059471511 0,139.228363037109 35.3980059471511 0,139.228363037109 35.3968865040159 0,139.226989746094 35.3968865040159 0,139.226989746094 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232454-103480", "taskX": "232454", "taskY": "103480", "geometry": "POLYGON ((139.226989746094 35.3980059471511 0,139.228363037109 35.3980059471511 0,139.228363037109 35.3968865040159 0,139.226989746094 35.3968865040159 0,139.226989746094 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222110.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232454-103481 POLYGON ((139.226989746094 35.3968865040159 0,139.228363037109 35.3968865040159 0,139.228363037109 35.395767045339 0,139.226989746094 35.395767045339 0,139.226989746094 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232454-103481", "taskX": "232454", "taskY": "103481", "geometry": "POLYGON ((139.226989746094 35.3968865040159 0,139.228363037109 35.3968865040159 0,139.228363037109 35.395767045339 0,139.226989746094 35.395767045339 0,139.226989746094 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222112.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g105 18-232454-103482 POLYGON ((139.226989746094 35.395767045339 0,139.228363037109 35.395767045339 0,139.228363037109 35.3946475711205 0,139.226989746094 35.3946475711205 0,139.226989746094 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232454-103482", "taskX": "232454", "taskY": "103482", "geometry": "POLYGON ((139.226989746094 35.395767045339 0,139.228363037109 35.395767045339 0,139.228363037109 35.3946475711205 0,139.226989746094 35.3946475711205 0,139.226989746094 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222130.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232447-103483 POLYGON ((139.217376708984 35.3946475711205 0,139.21875 35.3946475711205 0,139.21875 35.3935280813606 0,139.217376708984 35.3935280813606 0,139.217376708984 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232447-103483", "taskX": "232447", "taskY": "103483", "geometry": "POLYGON ((139.217376708984 35.3946475711205 0,139.21875 35.3946475711205 0,139.21875 35.3935280813606 0,139.217376708984 35.3935280813606 0,139.217376708984 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333133.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232447-103484 POLYGON ((139.217376708984 35.3935280813606 0,139.21875 35.3935280813606 0,139.21875 35.3924085760596 0,139.217376708984 35.3924085760596 0,139.217376708984 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232447-103484", "taskX": "232447", "taskY": "103484", "geometry": "POLYGON ((139.217376708984 35.3935280813606 0,139.21875 35.3935280813606 0,139.21875 35.3924085760596 0,139.217376708984 35.3924085760596 0,139.217376708984 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333311.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232447-103485 POLYGON ((139.217376708984 35.3924085760596 0,139.21875 35.3924085760596 0,139.21875 35.3912890552176 0,139.217376708984 35.3912890552176 0,139.217376708984 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232447-103485", "taskX": "232447", "taskY": "103485", "geometry": "POLYGON ((139.217376708984 35.3924085760596 0,139.21875 35.3924085760596 0,139.21875 35.3912890552176 0,139.217376708984 35.3912890552176 0,139.217376708984 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333313.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232448-103483 POLYGON ((139.21875 35.3946475711205 0,139.220123291016 35.3946475711205 0,139.220123291016 35.3935280813606 0,139.21875 35.3935280813606 0,139.21875 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232448-103483", "taskX": "232448", "taskY": "103483", "geometry": "POLYGON ((139.21875 35.3946475711205 0,139.220123291016 35.3946475711205 0,139.220123291016 35.3935280813606 0,139.21875 35.3935280813606 0,139.21875 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222022.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232448-103484 POLYGON ((139.21875 35.3935280813606 0,139.220123291016 35.3935280813606 0,139.220123291016 35.3924085760596 0,139.21875 35.3924085760596 0,139.21875 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232448-103484", "taskX": "232448", "taskY": "103484", "geometry": "POLYGON ((139.21875 35.3935280813606 0,139.220123291016 35.3935280813606 0,139.220123291016 35.3924085760596 0,139.21875 35.3924085760596 0,139.21875 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222200.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232448-103485 POLYGON ((139.21875 35.3924085760596 0,139.220123291016 35.3924085760596 0,139.220123291016 35.3912890552176 0,139.21875 35.3912890552176 0,139.21875 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232448-103485", "taskX": "232448", "taskY": "103485", "geometry": "POLYGON ((139.21875 35.3924085760596 0,139.220123291016 35.3924085760596 0,139.220123291016 35.3912890552176 0,139.21875 35.3912890552176 0,139.21875 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222202.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232449-103483 POLYGON ((139.220123291016 35.3946475711205 0,139.221496582031 35.3946475711205 0,139.221496582031 35.3935280813606 0,139.220123291016 35.3935280813606 0,139.220123291016 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232449-103483", "taskX": "232449", "taskY": "103483", "geometry": "POLYGON ((139.220123291016 35.3946475711205 0,139.221496582031 35.3946475711205 0,139.221496582031 35.3935280813606 0,139.220123291016 35.3935280813606 0,139.220123291016 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222023.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232449-103484 POLYGON ((139.220123291016 35.3935280813606 0,139.221496582031 35.3935280813606 0,139.221496582031 35.3924085760596 0,139.220123291016 35.3924085760596 0,139.220123291016 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232449-103484", "taskX": "232449", "taskY": "103484", "geometry": "POLYGON ((139.220123291016 35.3935280813606 0,139.221496582031 35.3935280813606 0,139.221496582031 35.3924085760596 0,139.220123291016 35.3924085760596 0,139.220123291016 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222201.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232449-103485 POLYGON ((139.220123291016 35.3924085760596 0,139.221496582031 35.3924085760596 0,139.221496582031 35.3912890552176 0,139.220123291016 35.3912890552176 0,139.220123291016 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232449-103485", "taskX": "232449", "taskY": "103485", "geometry": "POLYGON ((139.220123291016 35.3924085760596 0,139.221496582031 35.3924085760596 0,139.221496582031 35.3912890552176 0,139.220123291016 35.3912890552176 0,139.220123291016 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222203.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232450-103483 POLYGON ((139.221496582031 35.3946475711205 0,139.222869873047 35.3946475711205 0,139.222869873047 35.3935280813606 0,139.221496582031 35.3935280813606 0,139.221496582031 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232450-103483", "taskX": "232450", "taskY": "103483", "geometry": "POLYGON ((139.221496582031 35.3946475711205 0,139.222869873047 35.3946475711205 0,139.222869873047 35.3935280813606 0,139.221496582031 35.3935280813606 0,139.221496582031 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222032.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232450-103484 POLYGON ((139.221496582031 35.3935280813606 0,139.222869873047 35.3935280813606 0,139.222869873047 35.3924085760596 0,139.221496582031 35.3924085760596 0,139.221496582031 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232450-103484", "taskX": "232450", "taskY": "103484", "geometry": "POLYGON ((139.221496582031 35.3935280813606 0,139.222869873047 35.3935280813606 0,139.222869873047 35.3924085760596 0,139.221496582031 35.3924085760596 0,139.221496582031 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222210.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232450-103485 POLYGON ((139.221496582031 35.3924085760596 0,139.222869873047 35.3924085760596 0,139.222869873047 35.3912890552176 0,139.221496582031 35.3912890552176 0,139.221496582031 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232450-103485", "taskX": "232450", "taskY": "103485", "geometry": "POLYGON ((139.221496582031 35.3924085760596 0,139.222869873047 35.3924085760596 0,139.222869873047 35.3912890552176 0,139.221496582031 35.3912890552176 0,139.221496582031 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222212.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232451-103483 POLYGON ((139.222869873047 35.3946475711205 0,139.224243164062 35.3946475711205 0,139.224243164062 35.3935280813606 0,139.222869873047 35.3935280813606 0,139.222869873047 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232451-103483", "taskX": "232451", "taskY": "103483", "geometry": "POLYGON ((139.222869873047 35.3946475711205 0,139.224243164062 35.3946475711205 0,139.224243164062 35.3935280813606 0,139.222869873047 35.3935280813606 0,139.222869873047 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222033.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232451-103484 POLYGON ((139.222869873047 35.3935280813606 0,139.224243164062 35.3935280813606 0,139.224243164062 35.3924085760596 0,139.222869873047 35.3924085760596 0,139.222869873047 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232451-103484", "taskX": "232451", "taskY": "103484", "geometry": "POLYGON ((139.222869873047 35.3935280813606 0,139.224243164062 35.3935280813606 0,139.224243164062 35.3924085760596 0,139.222869873047 35.3924085760596 0,139.222869873047 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222211.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232451-103485 POLYGON ((139.222869873047 35.3924085760596 0,139.224243164062 35.3924085760596 0,139.224243164062 35.3912890552176 0,139.222869873047 35.3912890552176 0,139.222869873047 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232451-103485", "taskX": "232451", "taskY": "103485", "geometry": "POLYGON ((139.222869873047 35.3924085760596 0,139.224243164062 35.3924085760596 0,139.224243164062 35.3912890552176 0,139.222869873047 35.3912890552176 0,139.222869873047 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222213.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232452-103483 POLYGON ((139.224243164062 35.3946475711205 0,139.225616455078 35.3946475711205 0,139.225616455078 35.3935280813606 0,139.224243164062 35.3935280813606 0,139.224243164062 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232452-103483", "taskX": "232452", "taskY": "103483", "geometry": "POLYGON ((139.224243164062 35.3946475711205 0,139.225616455078 35.3946475711205 0,139.225616455078 35.3935280813606 0,139.224243164062 35.3935280813606 0,139.224243164062 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222122.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232452-103484 POLYGON ((139.224243164062 35.3935280813606 0,139.225616455078 35.3935280813606 0,139.225616455078 35.3924085760596 0,139.224243164062 35.3924085760596 0,139.224243164062 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232452-103484", "taskX": "232452", "taskY": "103484", "geometry": "POLYGON ((139.224243164062 35.3935280813606 0,139.225616455078 35.3935280813606 0,139.225616455078 35.3924085760596 0,139.224243164062 35.3924085760596 0,139.224243164062 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222300.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232452-103485 POLYGON ((139.224243164062 35.3924085760596 0,139.225616455078 35.3924085760596 0,139.225616455078 35.3912890552176 0,139.224243164062 35.3912890552176 0,139.224243164062 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232452-103485", "taskX": "232452", "taskY": "103485", "geometry": "POLYGON ((139.224243164062 35.3924085760596 0,139.225616455078 35.3924085760596 0,139.225616455078 35.3912890552176 0,139.224243164062 35.3912890552176 0,139.224243164062 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222302.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232453-103483 POLYGON ((139.225616455078 35.3946475711205 0,139.226989746094 35.3946475711205 0,139.226989746094 35.3935280813606 0,139.225616455078 35.3935280813606 0,139.225616455078 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232453-103483", "taskX": "232453", "taskY": "103483", "geometry": "POLYGON ((139.225616455078 35.3946475711205 0,139.226989746094 35.3946475711205 0,139.226989746094 35.3935280813606 0,139.225616455078 35.3935280813606 0,139.225616455078 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222123.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232453-103484 POLYGON ((139.225616455078 35.3935280813606 0,139.226989746094 35.3935280813606 0,139.226989746094 35.3924085760596 0,139.225616455078 35.3924085760596 0,139.225616455078 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232453-103484", "taskX": "232453", "taskY": "103484", "geometry": "POLYGON ((139.225616455078 35.3935280813606 0,139.226989746094 35.3935280813606 0,139.226989746094 35.3924085760596 0,139.225616455078 35.3924085760596 0,139.225616455078 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222301.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232453-103485 POLYGON ((139.225616455078 35.3924085760596 0,139.226989746094 35.3924085760596 0,139.226989746094 35.3912890552176 0,139.225616455078 35.3912890552176 0,139.225616455078 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232453-103485", "taskX": "232453", "taskY": "103485", "geometry": "POLYGON ((139.225616455078 35.3924085760596 0,139.226989746094 35.3924085760596 0,139.226989746094 35.3912890552176 0,139.225616455078 35.3912890552176 0,139.225616455078 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222303.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232454-103483 POLYGON ((139.226989746094 35.3946475711205 0,139.228363037109 35.3946475711205 0,139.228363037109 35.3935280813606 0,139.226989746094 35.3935280813606 0,139.226989746094 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232454-103483", "taskX": "232454", "taskY": "103483", "geometry": "POLYGON ((139.226989746094 35.3946475711205 0,139.228363037109 35.3946475711205 0,139.228363037109 35.3935280813606 0,139.226989746094 35.3935280813606 0,139.226989746094 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222132.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232454-103484 POLYGON ((139.226989746094 35.3935280813606 0,139.228363037109 35.3935280813606 0,139.228363037109 35.3924085760596 0,139.226989746094 35.3924085760596 0,139.226989746094 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232454-103484", "taskX": "232454", "taskY": "103484", "geometry": "POLYGON ((139.226989746094 35.3935280813606 0,139.228363037109 35.3935280813606 0,139.228363037109 35.3924085760596 0,139.226989746094 35.3924085760596 0,139.226989746094 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222310.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} +-MC6vz49TfX2dk-6myDd g106 18-232454-103485 POLYGON ((139.226989746094 35.3924085760596 0,139.228363037109 35.3924085760596 0,139.228363037109 35.3912890552176 0,139.226989746094 35.3912890552176 0,139.226989746094 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232454-103485", "taskX": "232454", "taskY": "103485", "geometry": "POLYGON ((139.226989746094 35.3924085760596 0,139.228363037109 35.3924085760596 0,139.228363037109 35.3912890552176 0,139.226989746094 35.3912890552176 0,139.226989746094 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222312.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py index 0aa4c17c6..8c9c4b404 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py @@ -69,11 +69,20 @@ def validate_geometries(self): raise CustomError(f"Input file contains more than 10 geometries. ") project_area = 0 - geometry_collection = ogr.Geometry(ogr.wkbGeometryCollection) + geometry_collection = ogr.Geometry(ogr.wkbMultiPolygon) # check if the input geometry is a valid polygon for feature in layer: feat_geom = feature.GetGeometryRef() geom_name = feat_geom.GetGeometryName() + # add geometry to geometry collection + if geom_name == "MULTIPOLYGON": + for multi in feat_geom: + geometry_collection.AddGeometry(multi) + dissolved_geometry = geometry_collection.UnionCascaded() + wkt_geometry_collection = dissolved_geometry.ExportToWkt() + if geom_name == "POLYGON": + geometry_collection.AddGeometry(feat_geom) + wkt_geometry_collection = geometry_collection.ExportToWkt() if not feat_geom.IsValid(): logger.warning( f"{self.projectId}" @@ -94,9 +103,6 @@ def validate_geometries(self): ) raise CustomError(f"Invalid geometry type: {geom_name}. ") - # add geometry to geometry collection - geometry_collection.AddGeometry(feat_geom) - # check size of project make sure its smaller than 5,000 sqkm # for doing this we transform the geometry # into Mollweide projection (EPSG Code 54009) @@ -134,8 +140,6 @@ def validate_geometries(self): del layer self.validInputGeometries = raw_input_file - wkt_geometry_collection = geometry_collection.ExportToWkt() - logger.info( f"{self.projectId}" f" - validate geometry - " f"input geometry is correct." ) @@ -147,7 +151,7 @@ def create_groups(self): The function to create groups from the project extent """ # first step get properties of each group from extent - raw_groups = grouping_functions.extent_to_slices( + raw_groups = grouping_functions.extent_to_groups( self.validInputGeometries, self.zoomLevel, self.groupSize ) diff --git a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py index fc4601f6c..5c443b11e 100644 --- a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py +++ b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py @@ -250,6 +250,8 @@ def get_vertical_slice(slice_infos, zoom, width_threshold=40): PixelY = TileY_bottom * 256 lon_right, lat_bottom = t.pixel_coords_zoom_to_lat_lon(PixelX, PixelY, zoom) + # TODO line 254-262 does exactly the same as in line 345-352, + # maybe put it in a function create_geom_from_group_coords # Create Geometry ring = ogr.Geometry(ogr.wkbLinearRing) ring.AddPoint(lon_left, lat_top) @@ -271,72 +273,12 @@ def get_vertical_slice(slice_infos, zoom, width_threshold=40): "group_polygon": group_poly, } - ##################### - # TODO what does the line below exactly do? TileX = TileX + step_size logger.info("created vertical_slice") return raw_groups -def remove_groups_within_other_groups(groups, zoom): - def a_within_b(): - # b is bigger/wider than a - # TODO: find correct expression - return ( - (int(x_max) <= int(x_maxB)) - and (int(x_min) >= int(x_minB)) - and (int(y_min) <= int(y_maxB)) - and (int(y_minB) <= int(y_max)) - ) - - def b_within_a(): - # a is bigger/wider than b - return ( - (int(x_maxB) <= int(x_max)) - and (int(x_minB) >= int(x_min)) - and (int(y_min) <= int(y_maxB)) - and (int(y_minB) <= int(y_max)) - ) - - counter = 0 - for group_id in list(groups.keys()): - - # skip if groups has been removed already - if group_id not in groups.keys(): - continue - - x_max = groups[group_id]["xMax"] - x_min = groups[group_id]["xMin"] - y_max = groups[group_id]["yMax"] - y_min = groups[group_id]["yMin"] - - counter = 0 - for group_id_b in list(groups.keys()): - # skip if it is the same group - if group_id_b == group_id: - continue - - y_minB = groups[group_id_b]["yMin"] - y_maxB = groups[group_id_b]["yMax"] - x_maxB = groups[group_id_b]["xMax"] - x_minB = groups[group_id_b]["xMin"] - - if a_within_b(): - counter += 1 - # remove group a and break - del groups[group_id] - break - - elif b_within_a(): - counter += 1 - # remove group b and continue - del groups[group_id_b] - continue - - return groups - - def adjust_overlapping_groups(groups, zoom): def groups_intersect(): # returns True if groups intersect @@ -376,7 +318,6 @@ def groups_intersect(): overlap_count += 1 # define new x_min and x_max - # add info to groups_dict # depending on intersection x_min or x_max need to change if x_max >= x_minB: # intersection on left side @@ -427,7 +368,7 @@ def groups_intersect(): return groups_without_overlap, overlaps_total -def extent_to_slices(infile, zoom, groupSize): +def extent_to_groups(infile, zoom, groupSize): """ The function to polygon geometries of a given input file into horizontal slices and then vertical slices. @@ -457,12 +398,12 @@ def extent_to_slices(infile, zoom, groupSize): # finally remove overlapping groups # TODO: add this line once properly working - # groups_dict, overlaps_total = adjust_overlapping_groups(raw_groups_dict, zoom) + groups_dict, overlaps_total = adjust_overlapping_groups(raw_groups_dict, zoom) - return raw_groups_dict + return groups_dict -def save_vertical_slices_as_geojson(raw_group_infos, outfile): +def vertical_groups_as_geojson(raw_group_infos, outfile): """ The function to create a geojson file from the groups dictionary. @@ -512,7 +453,7 @@ def save_vertical_slices_as_geojson(raw_group_infos, outfile): return True -def save_horizontal_slices_as_geojson(slices_info, outfile): +def horizontal_groups_as_geojson(slices_info, outfile): # Create the output Driver and out GeoJson outDriver = ogr.GetDriverByName("GeoJSON") diff --git a/mapswipe_workers/python_scripts/tasks_to_geojson.py b/mapswipe_workers/python_scripts/tasks_to_geojson.py index b7531d3e3..1ebb75d63 100644 --- a/mapswipe_workers/python_scripts/tasks_to_geojson.py +++ b/mapswipe_workers/python_scripts/tasks_to_geojson.py @@ -37,7 +37,7 @@ def tasks_to_geojson(project_extent_file, zoomlevel, outfile): project.zoomLevel = int(zoomlevel) project.tileServer = vars(BaseTileServer(tile_server_dict)) - raw_groups = t.extent_to_slices(project_extent_file, project.zoomLevel, 120) + raw_groups = t.extent_to_groups(project_extent_file, project.zoomLevel, 120) tasks = list() diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/overlapping_groups.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/overlapping_groups.geojson new file mode 100644 index 000000000..3c90aea77 --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/overlapping_groups.geojson @@ -0,0 +1,9 @@ +{ +"type": "FeatureCollection", +"name": "overlapping_groups", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.182385475978874, 48.803954167798601 ], [ 9.200455841059219, 48.819615150868238 ], [ 9.221337151818728, 48.808170586317353 ], [ 9.217522296968433, 48.791104130408137 ], [ 9.186200330829168, 48.786686930055161 ], [ 9.182385475978874, 48.803954167798601 ] ] ] ] } }, +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.217877148128514, 48.788892661919718 ], [ 9.22191081420223, 48.809674811038654 ], [ 9.236028645460241, 48.806781094072726 ], [ 9.241640702606283, 48.788629596740996 ], [ 9.218578655271768, 48.781614525308449 ], [ 9.217877148128514, 48.788892661919718 ] ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_overlappingGeom.json b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_overlappingGeom.json new file mode 100644 index 000000000..da4238fba --- /dev/null +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_overlappingGeom.json @@ -0,0 +1,28 @@ +{ + "projectDraftId": "validate_geom", + "createdBy": "test", + "geometry": { + "type": "FeatureCollection", + "name": "overlappingGeoms", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": [ + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.267717755524947, 48.812788568504551 ], [ 9.274544337888633, 48.834874570269413 ], [ 9.300846758172247, 48.826642515066148 ], [ 9.28177248392077, 48.798533058274501 ], [ 9.267717755524947, 48.812788568504551 ] ] ] ] } }, + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.301850667343377, 48.796324458098013 ], [ 9.286591247942196, 48.812387004836097 ], [ 9.291209230129395, 48.822626878381627 ], [ 9.321125723429077, 48.818209678028651 ], [ 9.301850667343377, 48.796324458098013 ] ] ] ] } } + ] + }, + "image": "", + "lookFor": "buildings", + "name": "test - Malawi (1)\ntest", + "projectDetails": "test", + "verificationNumber": 1, + "groupSize": 120, + "tileServer": { + "name": "bing", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "tileServerB": { + "name": "bing", + "credits": "© 2019 Microsoft Corporation, Earthstar Geographics SIO" + }, + "projectType": 4 +} diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_single.json b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_single.json index bdea7b7b6..b3b0d523f 100644 --- a/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_single.json +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/projectDraft_single.json @@ -3,12 +3,12 @@ "createdBy": "test", "geometry": { "type": "FeatureCollection", - "name": "test_multiFeatures", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": [ - { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.154977920780345, 48.779969269089108 ], [ 9.145166381262182, 48.783511025029817 ], [ 9.152503706467067, 48.792504837393238 ], [ 9.177501802804644, 48.793066897143774 ], [ 9.190982004925244, 48.781599632232819 ], [ 9.176222036780535, 48.77637103888955 ], [ 9.154977920780345, 48.779969269089108 ] ] ] ] } } - ] - }, + "name": "single_polygon", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": [ + { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -0.302461899179367, -0.1957796014068 ], [ -0.107854630715123, 0.078546307151231 ], [ 0.351699882766706, -0.052754982415006 ], [ 0.178194607268464, -0.416178194607269 ], [ -0.302461899179367, -0.1957796014068 ] ] ] ] } } + ] + }, "image": "", "lookFor": "buildings", "name": "test - Malawi (1)\ntest", diff --git a/mapswipe_workers/tests/unittests/fixtures/completeness/single_polygon.geojson b/mapswipe_workers/tests/unittests/fixtures/completeness/single_polygon.geojson index 3f2d99a0c..1146f89f4 100644 --- a/mapswipe_workers/tests/unittests/fixtures/completeness/single_polygon.geojson +++ b/mapswipe_workers/tests/unittests/fixtures/completeness/single_polygon.geojson @@ -1,9 +1,8 @@ { - "type": "FeatureCollection", - "name": "test_multiFeatures", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": [ - { "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 9.154977920780345, 48.779969269089108 ], [ 9.145166381262182, 48.783511025029817 ], [ 9.152503706467067, 48.792504837393238 ], [ 9.177501802804644, 48.793066897143774 ], [ 9.190982004925244, 48.781599632232819 ], [ 9.176222036780535, 48.77637103888955 ], [ 9.154977920780345, 48.779969269089108 ] ] ] ] } } - ] - } - +"type": "FeatureCollection", +"name": "single_polygon", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "id": null }, "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ -0.302461899179367, -0.1957796014068 ], [ -0.107854630715123, 0.078546307151231 ], [ 0.351699882766706, -0.052754982415006 ], [ 0.178194607268464, -0.416178194607269 ], [ -0.302461899179367, -0.1957796014068 ] ] ] ] } } +] +} diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index b074e29ff..db998f82a 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -13,8 +13,8 @@ def test_project_geometries_intersection(self): self.test_dir, "fixtures/completeness/closed_polygons.geojson" ) - groups_with_overlaps = t.extent_to_slices(project_extent_file, zoom, 100) - t.save_vertical_slices_as_geojson( + groups_with_overlaps = t.extent_to_groups(project_extent_file, zoom, 100) + t.vertical_groups_as_geojson( groups_with_overlaps, "groups_with_overlaps.geojson" ) @@ -22,7 +22,7 @@ def test_project_geometries_intersection(self): groups_with_overlaps_2 = t.remove_groups_within_other_groups( groups_with_overlaps, zoom ) - t.save_vertical_slices_as_geojson( + t.vertical_groups_as_geojson( groups_with_overlaps, "groups_with_overlaps2.geojson" ) @@ -30,10 +30,10 @@ def test_project_geometries_intersection(self): groups, overlaps_total = t.adjust_overlapping_groups( groups_with_overlaps_2, zoom ) - t.save_vertical_slices_as_geojson(groups, "groups.geojson") + t.vertical_groups_as_geojson(groups, "groups.geojson") groups_2, overlaps_total_2 = t.adjust_overlapping_groups(groups, zoom) - t.save_vertical_slices_as_geojson(groups_2, "groups_2.geojson") + t.vertical_groups_as_geojson(groups_2, "groups_2.geojson") # we expect 117 groups self.assertEqual(len(groups_2), 117) @@ -45,8 +45,8 @@ def test_project_geometries_within(self): self.test_dir, "fixtures/completeness/project_geometries_within.geojson" ) - groups_with_overlaps = t.extent_to_slices(project_extent_file, zoom, 100) - t.save_vertical_slices_as_geojson( + groups_with_overlaps = t.extent_to_groups(project_extent_file, zoom, 100) + t.vertical_groups_as_geojson( groups_with_overlaps, "groups_with_overlaps.geojson" ) @@ -54,7 +54,7 @@ def test_project_geometries_within(self): groups_with_overlaps_2 = t.remove_groups_within_other_groups( groups_with_overlaps, zoom ) - t.save_vertical_slices_as_geojson( + t.vertical_groups_as_geojson( groups_with_overlaps, "groups_with_overlaps2.geojson" ) @@ -62,13 +62,13 @@ def test_project_geometries_within(self): groups, overlaps_total = t.adjust_overlapping_groups( groups_with_overlaps_2, zoom ) - t.save_vertical_slices_as_geojson(groups, "groups.geojson") + t.vertical_groups_as_geojson(groups, "groups.geojson") groups_2, overlaps_total_2 = t.adjust_overlapping_groups(groups, zoom) - t.save_vertical_slices_as_geojson(groups_2, "groups_2.geojson") + t.vertical_groups_as_geojson(groups_2, "groups_2.geojson") groups_3, overlaps_total_3 = t.adjust_overlapping_groups(groups_2, zoom) - t.save_vertical_slices_as_geojson(groups_3, "groups_3.geojson") + t.vertical_groups_as_geojson(groups_3, "groups_3.geojson") # we expect 64 groups self.assertEqual(len(groups_3), 64) @@ -80,15 +80,15 @@ def test_project_geometries_very_small_and_close(self): "fixtures/completeness/project_geometries_very_small_and_close.geojson" ) - groups_with_overlaps = t.extent_to_slices(project_extent_file, 18, 100) - t.save_vertical_slices_as_geojson( + groups_with_overlaps = t.extent_to_groups(project_extent_file, 18, 100) + t.vertical_groups_as_geojson( groups_with_overlaps, "groups_with_overlaps.geojson" ) groups = t.adjust_overlapping_groups(groups_with_overlaps) # save files for visual inspection in qgis - t.save_vertical_slices_as_geojson(groups, "groups.geojson") + t.vertical_groups_as_geojson(groups, "groups.geojson") # TODO: add correct assertion, what is the expected output? # we expect 64 groups diff --git a/mapswipe_workers/tests/unittests/test_multiple_geoms.py b/mapswipe_workers/tests/unittests/test_multiple_geoms.py deleted file mode 100644 index 26abc4c14..000000000 --- a/mapswipe_workers/tests/unittests/test_multiple_geoms.py +++ /dev/null @@ -1,45 +0,0 @@ -import os -import unittest -from mapswipe_workers.utils import tile_grouping_functions as t -from osgeo import ogr - - -class TestMultipleGeoms(unittest.TestCase): - def setUp(self): - self.test_dir = os.path.dirname(os.path.abspath(__file__)) - self.project_extent_file = os.path.join( - self.test_dir, "fixtures/completeness/single_polygon.geojson" - ) - - def test_get_horizontal_slice(self): - extent, geomcol = t.get_geometry_from_file(self.project_extent_file) - - horizontal_slices_expected = os.path.join( - self.test_dir, "fixtures/completeness/horizontal_slices_expected.geojson" - ) - # read geojson file with expected geometry - driver = ogr.GetDriverByName("GeoJSON") - datasource = driver.Open(horizontal_slices_expected, 0) - layer = datasource.GetLayer() - wkt_before = [] - - # transform geometries into wkt geometries - for feature in layer: - feat_geom = feature.GetGeometryRef() - wkt_geometry = feat_geom.ExportToWkt() - wkt_before.append(wkt_geometry) - - # check if geometries are the same as before (before modification) - slices_info = t.get_horizontal_slice(extent, geomcol, 18) - geomcol = slices_info["slice_collection"] - - wkt_after = [] - for feature in geomcol: - wkt_geometry = feature.ExportToWkt() - wkt_after.append(wkt_geometry) - - self.assertCountEqual(wkt_before, wkt_after) - - -if __name__ == "__main__": - unittest.main() diff --git a/mapswipe_workers/tests/unittests/test_validate_geometries.py b/mapswipe_workers/tests/unittests/test_validate_geometries.py index 2eb7bd27c..ffc91b6fd 100644 --- a/mapswipe_workers/tests/unittests/test_validate_geometries.py +++ b/mapswipe_workers/tests/unittests/test_validate_geometries.py @@ -18,33 +18,38 @@ def create_project(path): class TestGeometryValidation(unittest.TestCase): def test_multiple_geom_validation(self): - path = "fixtures/completeness/projectDraft.json" + path = "fixtures/completeness/projectDraft_overlappingGeom.json" test_dir = os.path.dirname(os.path.abspath(__file__)) - # project = create_project(path) + project = create_project(path) + # prepare data that is expected path = os.path.join(test_dir, "fixtures/completeness/overlappingGeoms.geojson") driver = ogr.GetDriverByName("GeoJSON") - data_source = driver.Open(path, 0) + datasource = driver.Open(path, 0) - multipolygon_geometry = ogr.Geometry(ogr.wkbMultiPolygon) + geometry_collection = ogr.Geometry(ogr.wkbMultiPolygon) # Get the data layer - layer = data_source.GetLayer() - + layer = datasource.GetLayer() for feature in layer: feat_geom = feature.GetGeometryRef() - wkt = feat_geom.ExportToWkt() geom_name = feat_geom.GetGeometryName() - print(geom_name) - multipolygon_geometry.AddGeometryDirectly(ogr.CreateGeometryFromWkt(wkt)) - - dissolved_geometry = multipolygon_geometry.UnionCascaded() - print(dissolved_geometry) + # add geometry to geometry collection + # check if input geom is multipolygon or polygon + if geom_name == "MULTIPOLYGON": + for multi in feat_geom: + geometry_collection.AddGeometry(multi) + # apply union function if multiple geoms of polygons overlap + dissolved_geometry = geometry_collection.UnionCascaded() + wkt_geometry_collection = dissolved_geometry.ExportToWkt() + if geom_name == "POLYGON": + geometry_collection.AddGeometry(feat_geom) + wkt_geometry_collection = geometry_collection.ExportToWkt() - # wkt_geometry_collection = geometry_collection.ExportToWkt() - # print(wkt_geometry_collection) - # results coming from the validate geometries function + # results coming from the validate_geometries function + wkt = project.validate_geometries() + # Test that sequence first contains the same elements as second + self.assertCountEqual(wkt, wkt_geometry_collection) - """ def test_single_geom_validation(self): path = "fixtures/completeness/projectDraft_single.json" test_dir = os.path.dirname(os.path.abspath(__file__)) @@ -55,24 +60,27 @@ def test_single_geom_validation(self): driver = ogr.GetDriverByName("GeoJSON") datasource = driver.Open(path, 0) - - geometry_collection = ogr.Geometry(ogr.wkbGeometryCollection) + geometry_collection = ogr.Geometry(ogr.wkbMultiPolygon) # Get the data layer layer = datasource.GetLayer() for feature in layer: feat_geom = feature.GetGeometryRef() - geometry_collection.AddGeometry(feat_geom) + geom_name = feat_geom.GetGeometryName() + # add geometry to geometry collection + if geom_name == "MULTIPOLYGON": + for multi in feat_geom: + geometry_collection.AddGeometry(multi) + if geom_name == "POLYGON": + geometry_collection.AddGeometry(feat_geom) - wkt_geometry_collection = geometry_collection.ExportToWkt() - print(wkt_geometry_collection) + dissolved_geometry = geometry_collection.UnionCascaded() + wkt_geometry_collection = dissolved_geometry.ExportToWkt() # results coming from the validate_geometries function wkt = project.validate_geometries() # Test that sequence first contains the same elements as second - self.assertCountEqual(wkt, wkt_geometries_expected) - """ + self.assertCountEqual(wkt, wkt_geometry_collection) if __name__ == "__main__": - unittest.main() From 6f930293ddfb73f53b4f533f7a04feb8a7fabf3b Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Mon, 27 Jul 2020 12:46:26 +0200 Subject: [PATCH 24/69] completeness tutorial adjusted path to geojson file --- .../sample_data/completeness/completeness_tutorial.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapswipe_workers/sample_data/completeness/completeness_tutorial.json b/mapswipe_workers/sample_data/completeness/completeness_tutorial.json index dc564b75c..18e9321ac 100644 --- a/mapswipe_workers/sample_data/completeness/completeness_tutorial.json +++ b/mapswipe_workers/sample_data/completeness/completeness_tutorial.json @@ -8,7 +8,7 @@ "projectDetails": "This is a tutorial", "progress": 0, "contributorCount": 0, - "examplesFile": "mapswipe_workers/sample_data/completeness/completeness_tutorial_tasks.geojson", + "examplesFile": "sample_data/completeness/completeness_tutorial_tasks.geojson", "tileServer":{ "name": "bing" }, From e454a8b65d266e38e0f6e2da20ba6bdbb8453ac7 Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Tue, 28 Jul 2020 17:13:26 +0200 Subject: [PATCH 25/69] put number of features for input geom in definitions.py --- mapswipe_workers/mapswipe_workers/definitions.py | 5 ++++- .../project_types/tile_map_service_grid/project.py | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/definitions.py b/mapswipe_workers/mapswipe_workers/definitions.py index aab79f10f..ddf6cdf76 100644 --- a/mapswipe_workers/mapswipe_workers/definitions.py +++ b/mapswipe_workers/mapswipe_workers/definitions.py @@ -12,6 +12,9 @@ os.makedirs(DATA_PATH) LOGGING_FILE_PATH = os.path.join(DATA_PATH, "mapswipe_workers.log") +# number of geometries for project geometries +featureNumber = 2 + LOGGING_CONFIG = { "version": 1, "disable_existing_loggers": True, @@ -147,7 +150,7 @@ def tutorial(self): ) # TODO: implement for arbitrary geometries - # from mapswipe_workers.project_types.arbitrary_geometries.arbitrary_geometries_tutorial import ( + # from mapswipe_workers.project_types.arbitrary_geometries.arbitrary_geometries_tutorial import ( # noqa E501 # ArbitraryGeometriesTutorial, # ) diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py index 8c9c4b404..e56574662 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py @@ -2,7 +2,7 @@ import os from mapswipe_workers.project_types.base.project import BaseProject -from mapswipe_workers.definitions import DATA_PATH, CustomError, logger +from mapswipe_workers.definitions import DATA_PATH, CustomError, logger, featureNumber from mapswipe_workers.project_types.tile_map_service_grid.group import Group from mapswipe_workers.utils import tile_grouping_functions as grouping_functions from mapswipe_workers.project_types.base.tile_server import BaseTileServer @@ -59,12 +59,12 @@ def validate_geometries(self): raise CustomError(f"Empty file. ") # check if more than 1 geometry is provided - elif layer.GetFeatureCount() > 10: + elif layer.GetFeatureCount() > featureNumber: logger.warning( f"{self.projectId}" f" - validate geometry - " - f"Input file contains more than 10 geometries. " - f"Make sure to provide less than 10 geometries." + f"Input file contains more than {featureNumber} geometries. " + f"Make sure to provide less than {featureNumber} geometries." ) raise CustomError(f"Input file contains more than 10 geometries. ") From ccf893286b06b600674d50e58f98d923d500e941 Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Wed, 29 Jul 2020 14:08:03 +0200 Subject: [PATCH 26/69] union cascaded outside of loop --- .gitignore | 2 + .../mapswipe_workers/definitions.py | 2 +- .../tile_map_service_grid/project.py | 27 ++++--- .../utils/tile_grouping_functions.py | 3 + .../tests/unittests/test_groups_overlap.py | 78 ------------------- postgres/scripts/changeGeomType.sql | 1 + 6 files changed, 24 insertions(+), 89 deletions(-) create mode 100644 postgres/scripts/changeGeomType.sql diff --git a/.gitignore b/.gitignore index 943f76b5a..2a74dc6ab 100644 --- a/.gitignore +++ b/.gitignore @@ -120,6 +120,8 @@ mapswipe_workers/config/configuration.json # don´t upload data dir data/ +mapswipe-data/ + # don't upload app config for project managers dashboard app.js diff --git a/mapswipe_workers/mapswipe_workers/definitions.py b/mapswipe_workers/mapswipe_workers/definitions.py index ddf6cdf76..16cde8ddf 100644 --- a/mapswipe_workers/mapswipe_workers/definitions.py +++ b/mapswipe_workers/mapswipe_workers/definitions.py @@ -13,7 +13,7 @@ LOGGING_FILE_PATH = os.path.join(DATA_PATH, "mapswipe_workers.log") # number of geometries for project geometries -featureNumber = 2 +MAX_INPUT_GEOMETRIES = 2 LOGGING_CONFIG = { "version": 1, diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py index e56574662..b45b554c3 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py @@ -2,7 +2,12 @@ import os from mapswipe_workers.project_types.base.project import BaseProject -from mapswipe_workers.definitions import DATA_PATH, CustomError, logger, featureNumber +from mapswipe_workers.definitions import ( + DATA_PATH, + CustomError, + logger, + MAX_INPUT_GEOMETRIES, +) from mapswipe_workers.project_types.tile_map_service_grid.group import Group from mapswipe_workers.utils import tile_grouping_functions as grouping_functions from mapswipe_workers.project_types.base.tile_server import BaseTileServer @@ -59,14 +64,16 @@ def validate_geometries(self): raise CustomError(f"Empty file. ") # check if more than 1 geometry is provided - elif layer.GetFeatureCount() > featureNumber: + elif layer.GetFeatureCount() > MAX_INPUT_GEOMETRIES: logger.warning( f"{self.projectId}" f" - validate geometry - " - f"Input file contains more than {featureNumber} geometries. " - f"Make sure to provide less than {featureNumber} geometries." + f"Input file contains more than {MAX_INPUT_GEOMETRIES} geometries. " + f"Make sure to provide less than {MAX_INPUT_GEOMETRIES} geometries." + ) + raise CustomError( + f"Input file contains more than {MAX_INPUT_GEOMETRIES} geometries. " ) - raise CustomError(f"Input file contains more than 10 geometries. ") project_area = 0 geometry_collection = ogr.Geometry(ogr.wkbMultiPolygon) @@ -76,13 +83,10 @@ def validate_geometries(self): geom_name = feat_geom.GetGeometryName() # add geometry to geometry collection if geom_name == "MULTIPOLYGON": - for multi in feat_geom: - geometry_collection.AddGeometry(multi) - dissolved_geometry = geometry_collection.UnionCascaded() - wkt_geometry_collection = dissolved_geometry.ExportToWkt() + for singlepart_polygon in feat_geom: + geometry_collection.AddGeometry(singlepart_polygon) if geom_name == "POLYGON": geometry_collection.AddGeometry(feat_geom) - wkt_geometry_collection = geometry_collection.ExportToWkt() if not feat_geom.IsValid(): logger.warning( f"{self.projectId}" @@ -144,6 +148,9 @@ def validate_geometries(self): f"{self.projectId}" f" - validate geometry - " f"input geometry is correct." ) + dissolved_geometry = geometry_collection.UnionCascaded() + wkt_geometry_collection = dissolved_geometry.ExportToWkt() + return wkt_geometry_collection def create_groups(self): diff --git a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py index 5c443b11e..fe231e1a7 100644 --- a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py +++ b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py @@ -400,6 +400,9 @@ def extent_to_groups(infile, zoom, groupSize): # TODO: add this line once properly working groups_dict, overlaps_total = adjust_overlapping_groups(raw_groups_dict, zoom) + if overlaps_total == 0: + groups_dict = groups_dict + return groups_dict diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index db998f82a..da238b74c 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -18,84 +18,6 @@ def test_project_geometries_intersection(self): groups_with_overlaps, "groups_with_overlaps.geojson" ) - # remove groups within other groups - groups_with_overlaps_2 = t.remove_groups_within_other_groups( - groups_with_overlaps, zoom - ) - t.vertical_groups_as_geojson( - groups_with_overlaps, "groups_with_overlaps2.geojson" - ) - - # TODO: remove once implemented in real function - groups, overlaps_total = t.adjust_overlapping_groups( - groups_with_overlaps_2, zoom - ) - t.vertical_groups_as_geojson(groups, "groups.geojson") - - groups_2, overlaps_total_2 = t.adjust_overlapping_groups(groups, zoom) - t.vertical_groups_as_geojson(groups_2, "groups_2.geojson") - - # we expect 117 groups - self.assertEqual(len(groups_2), 117) - - ''' - def test_project_geometries_within(self): - zoom = 18 - project_extent_file = os.path.join( - self.test_dir, "fixtures/completeness/project_geometries_within.geojson" - ) - - groups_with_overlaps = t.extent_to_groups(project_extent_file, zoom, 100) - t.vertical_groups_as_geojson( - groups_with_overlaps, "groups_with_overlaps.geojson" - ) - - # remove groups within other groups - groups_with_overlaps_2 = t.remove_groups_within_other_groups( - groups_with_overlaps, zoom - ) - t.vertical_groups_as_geojson( - groups_with_overlaps, "groups_with_overlaps2.geojson" - ) - - # TODO: remove once implemented in real function - groups, overlaps_total = t.adjust_overlapping_groups( - groups_with_overlaps_2, zoom - ) - t.vertical_groups_as_geojson(groups, "groups.geojson") - - groups_2, overlaps_total_2 = t.adjust_overlapping_groups(groups, zoom) - t.vertical_groups_as_geojson(groups_2, "groups_2.geojson") - - groups_3, overlaps_total_3 = t.adjust_overlapping_groups(groups_2, zoom) - t.vertical_groups_as_geojson(groups_3, "groups_3.geojson") - - # we expect 64 groups - self.assertEqual(len(groups_3), 64) - - """ - def test_project_geometries_very_small_and_close(self): - project_extent_file = os.path.join( - self.test_dir, - "fixtures/completeness/project_geometries_very_small_and_close.geojson" - ) - - groups_with_overlaps = t.extent_to_groups(project_extent_file, 18, 100) - t.vertical_groups_as_geojson( - groups_with_overlaps, "groups_with_overlaps.geojson" - ) - - groups = t.adjust_overlapping_groups(groups_with_overlaps) - - # save files for visual inspection in qgis - t.vertical_groups_as_geojson(groups, "groups.geojson") - - # TODO: add correct assertion, what is the expected output? - # we expect 64 groups - #self.assertEqual(len(groups), 64) - """ -''' - if __name__ == "__main__": unittest.main() diff --git a/postgres/scripts/changeGeomType.sql b/postgres/scripts/changeGeomType.sql new file mode 100644 index 000000000..e7599d5c5 --- /dev/null +++ b/postgres/scripts/changeGeomType.sql @@ -0,0 +1 @@ +ALTER TABLE projects ALTER COLUMN geom SET DATA TYPE geometry; \ No newline at end of file From aa1bd3f56e9e415e03b7d7733355d1f6146955c8 Mon Sep 17 00:00:00 2001 From: Hagellach37 Date: Tue, 4 Aug 2020 13:00:14 +0200 Subject: [PATCH 27/69] Delete project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson --- .../project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson diff --git a/mapswipe-data/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson b/mapswipe-data/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson deleted file mode 100644 index c7cfaf06b..000000000 --- a/mapswipe-data/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson +++ /dev/null @@ -1 +0,0 @@ -{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "GeometryCollection", "geometries": [{"type": "MultiPolygon", "coordinates": [[[[139.2178158, 35.3986363], [139.2178753, 35.3935396], [139.227224, 35.3938308], [139.2258545, 35.3992187], [139.2178158, 35.3986363]]], [[[139.2377636, 35.4098963], [139.2403241, 35.4069359], [139.2480651, 35.408586], [139.2480651, 35.4126141], [139.2413364, 35.4145067], [139.2377636, 35.4098963]]]]}]}}]} \ No newline at end of file From 59edbeb30fee3706f1249965f031604429f26f39 Mon Sep 17 00:00:00 2001 From: Hagellach37 Date: Tue, 4 Aug 2020 13:01:06 +0200 Subject: [PATCH 28/69] Delete project_geom_-MClQtGCC_sgKTB7mAeW.geojson --- .../project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson diff --git a/mapswipe-data/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson b/mapswipe-data/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson deleted file mode 100644 index aa39cf224..000000000 --- a/mapswipe-data/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson +++ /dev/null @@ -1 +0,0 @@ -{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "MultiPolygon", "coordinates": []}}]} \ No newline at end of file From b0af0ec1e182def204633d51755bf6dcb9400543 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:07:35 +0200 Subject: [PATCH 29/69] Delete project_geom_-MCw-n1trbI1yzqDEOuc.geojson --- .../project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson diff --git a/mapswipe-data/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson b/mapswipe-data/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson deleted file mode 100644 index 762a0c71c..000000000 --- a/mapswipe-data/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson +++ /dev/null @@ -1 +0,0 @@ -{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MCw-n1trbI1yzqDEOuc.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[9.2086897, 48.8026663], [9.2097325, 48.8023333], [9.209645, 48.8034636], [9.2087603, 48.8034266], [9.2086897, 48.8026663]]], [[[9.2106306, 48.8035645], [9.2107281, 48.8026327], [9.2120131, 48.8024948], [9.2119122, 48.8035443], [9.2106306, 48.8035645]]]]}}]} \ No newline at end of file From 3d37038ef5693097abec7be0c08f12e09ee12e60 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:07:47 +0200 Subject: [PATCH 30/69] Delete project_geom_-MCw0zzwMY4ZNExGSrvw.geojson --- .../project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson diff --git a/mapswipe-data/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson b/mapswipe-data/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson deleted file mode 100644 index 254eb72e5..000000000 --- a/mapswipe-data/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson +++ /dev/null @@ -1 +0,0 @@ -{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MCw0zzwMY4ZNExGSrvw.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[9.2086897, 48.8026663], [9.2097325, 48.8023333], [9.209645, 48.8034636], [9.2087603, 48.8034266], [9.2086897, 48.8026663]]], [[[9.2106306, 48.8035645], [9.2107281, 48.8026327], [9.2120131, 48.8024948], [9.2119122, 48.8035443], [9.2106306, 48.8035645]]]]}}]} \ No newline at end of file From f44d1d58a9dc784790fc6eb7108db804267f29b9 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:08:04 +0200 Subject: [PATCH 31/69] Delete project_geom_-MCwCkpstMiHcHQmL3Ex.geojson --- .../project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson diff --git a/mapswipe-data/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson b/mapswipe-data/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson deleted file mode 100644 index 2c859438f..000000000 --- a/mapswipe-data/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson +++ /dev/null @@ -1 +0,0 @@ -{"type": "FeatureCollection", "name": "/root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MCwCkpstMiHcHQmL3Ex.geojson", "crs": {"type": "name", "properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}}, "features": [{"type": "Feature", "properties": {"id": 1}, "geometry": {"type": "MultiPolygon", "coordinates": [[[[9.2086897, 48.8026663], [9.2097325, 48.8023333], [9.209645, 48.8034636], [9.2087603, 48.8034266], [9.2086897, 48.8026663]]], [[[9.2106306, 48.8035645], [9.2107281, 48.8026327], [9.2120131, 48.8024948], [9.2119122, 48.8035443], [9.2106306, 48.8035645]]]]}}]} \ No newline at end of file From 40dafce64a6a9cd7d9db822297dab6ac88cfbf95 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:08:20 +0200 Subject: [PATCH 32/69] Delete raw_input_-MC6vz49TfX2dk-6myDd.geojson --- .../input_geometries/raw_input_-MC6vz49TfX2dk-6myDd.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/input_geometries/raw_input_-MC6vz49TfX2dk-6myDd.geojson diff --git a/mapswipe-data/input_geometries/raw_input_-MC6vz49TfX2dk-6myDd.geojson b/mapswipe-data/input_geometries/raw_input_-MC6vz49TfX2dk-6myDd.geojson deleted file mode 100644 index 7d12cc945..000000000 --- a/mapswipe-data/input_geometries/raw_input_-MC6vz49TfX2dk-6myDd.geojson +++ /dev/null @@ -1 +0,0 @@ -{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[139.21781578342132, 35.39863625132325], [139.22585446758416, 35.399218708396056], [139.2272240211823, 35.39383081992331], [139.21787532922994, 35.39353957245255], [139.21781578342132, 35.39863625132325]]], [[[139.23776362930693, 35.409896342321126], [139.24133637782376, 35.41450670152793], [139.24806505419707, 35.41261405966239], [139.24806505419707, 35.40858598157107], [139.2403240990773, 35.406935867358285], [139.23776362930693, 35.409896342321126]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "collected", "type": "FeatureCollection"} \ No newline at end of file From eb2cce65a278df9f47d4018087b10a4c4ef09397 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:08:35 +0200 Subject: [PATCH 33/69] Delete raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson --- .../input_geometries/raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/input_geometries/raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson diff --git a/mapswipe-data/input_geometries/raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson b/mapswipe-data/input_geometries/raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson deleted file mode 100644 index 7d12cc945..000000000 --- a/mapswipe-data/input_geometries/raw_input_-MC6zDSrCeUXzyCCwTQ_.geojson +++ /dev/null @@ -1 +0,0 @@ -{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[139.21781578342132, 35.39863625132325], [139.22585446758416, 35.399218708396056], [139.2272240211823, 35.39383081992331], [139.21787532922994, 35.39353957245255], [139.21781578342132, 35.39863625132325]]], [[[139.23776362930693, 35.409896342321126], [139.24133637782376, 35.41450670152793], [139.24806505419707, 35.41261405966239], [139.24806505419707, 35.40858598157107], [139.2403240990773, 35.406935867358285], [139.23776362930693, 35.409896342321126]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "collected", "type": "FeatureCollection"} \ No newline at end of file From de09816b0a4431f612b372b23640a2c7801e7970 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:08:50 +0200 Subject: [PATCH 34/69] Delete raw_input_-MClQtGCC_sgKTB7mAeW.geojson --- .../input_geometries/raw_input_-MClQtGCC_sgKTB7mAeW.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/input_geometries/raw_input_-MClQtGCC_sgKTB7mAeW.geojson diff --git a/mapswipe-data/input_geometries/raw_input_-MClQtGCC_sgKTB7mAeW.geojson b/mapswipe-data/input_geometries/raw_input_-MClQtGCC_sgKTB7mAeW.geojson deleted file mode 100644 index 635115473..000000000 --- a/mapswipe-data/input_geometries/raw_input_-MClQtGCC_sgKTB7mAeW.geojson +++ /dev/null @@ -1 +0,0 @@ -{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[139.21781578342132, 35.39863625132325], [139.22585446758416, 35.399218708396056], [139.2272240211823, 35.39383081992331], [139.21787532922994, 35.39353957245255], [139.21781578342132, 35.39863625132325]]]], "type": "MultiPolygon"}, "type": "Feature"}, {"geometry": {"coordinates": [[[[139.23776362930693, 35.409896342321126], [139.24133637782376, 35.41450670152793], [139.24806505419707, 35.41261405966239], [139.24806505419707, 35.40858598157107], [139.2403240990773, 35.406935867358285], [139.23776362930693, 35.409896342321126]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "testMulti", "type": "FeatureCollection"} \ No newline at end of file From 0601b29bc6f901f0779c2d06a9aa3470351732a2 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:09:03 +0200 Subject: [PATCH 35/69] Delete raw_input_-MCw-n1trbI1yzqDEOuc.geojson --- .../input_geometries/raw_input_-MCw-n1trbI1yzqDEOuc.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/input_geometries/raw_input_-MCw-n1trbI1yzqDEOuc.geojson diff --git a/mapswipe-data/input_geometries/raw_input_-MCw-n1trbI1yzqDEOuc.geojson b/mapswipe-data/input_geometries/raw_input_-MCw-n1trbI1yzqDEOuc.geojson deleted file mode 100644 index 57f08ff0b..000000000 --- a/mapswipe-data/input_geometries/raw_input_-MCw-n1trbI1yzqDEOuc.geojson +++ /dev/null @@ -1 +0,0 @@ -{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[9.208689680161699, 48.802666331380884], [9.20876032010785, 48.803426551753745], [9.209645001338208, 48.803463553630294], [9.209732460319156, 48.80233331449189], [9.208689680161699, 48.802666331380884]]]], "type": "MultiPolygon"}, "type": "Feature"}, {"geometry": {"coordinates": [[[[9.210630596777351, 48.80356446783908], [9.211912207228934, 48.80354428499732], [9.212013121437721, 48.80249477722595], [9.210728147179179, 48.80263269331129], [9.210630596777351, 48.80356446783908]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "multi_poly_test", "type": "FeatureCollection"} \ No newline at end of file From bde303c15e94bc53e6387fe09aaa82848eb453a2 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:09:17 +0200 Subject: [PATCH 36/69] Delete raw_input_-MCw0zzwMY4ZNExGSrvw.geojson --- .../input_geometries/raw_input_-MCw0zzwMY4ZNExGSrvw.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/input_geometries/raw_input_-MCw0zzwMY4ZNExGSrvw.geojson diff --git a/mapswipe-data/input_geometries/raw_input_-MCw0zzwMY4ZNExGSrvw.geojson b/mapswipe-data/input_geometries/raw_input_-MCw0zzwMY4ZNExGSrvw.geojson deleted file mode 100644 index 57f08ff0b..000000000 --- a/mapswipe-data/input_geometries/raw_input_-MCw0zzwMY4ZNExGSrvw.geojson +++ /dev/null @@ -1 +0,0 @@ -{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[9.208689680161699, 48.802666331380884], [9.20876032010785, 48.803426551753745], [9.209645001338208, 48.803463553630294], [9.209732460319156, 48.80233331449189], [9.208689680161699, 48.802666331380884]]]], "type": "MultiPolygon"}, "type": "Feature"}, {"geometry": {"coordinates": [[[[9.210630596777351, 48.80356446783908], [9.211912207228934, 48.80354428499732], [9.212013121437721, 48.80249477722595], [9.210728147179179, 48.80263269331129], [9.210630596777351, 48.80356446783908]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "multi_poly_test", "type": "FeatureCollection"} \ No newline at end of file From 85e5edcb0d1257f0350ad26db2e388a193dc9d12 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:09:30 +0200 Subject: [PATCH 37/69] Delete raw_input_-MCwCkpstMiHcHQmL3Ex.geojson --- .../input_geometries/raw_input_-MCwCkpstMiHcHQmL3Ex.geojson | 1 - 1 file changed, 1 deletion(-) delete mode 100644 mapswipe-data/input_geometries/raw_input_-MCwCkpstMiHcHQmL3Ex.geojson diff --git a/mapswipe-data/input_geometries/raw_input_-MCwCkpstMiHcHQmL3Ex.geojson b/mapswipe-data/input_geometries/raw_input_-MCwCkpstMiHcHQmL3Ex.geojson deleted file mode 100644 index 57f08ff0b..000000000 --- a/mapswipe-data/input_geometries/raw_input_-MCwCkpstMiHcHQmL3Ex.geojson +++ /dev/null @@ -1 +0,0 @@ -{"crs": {"properties": {"name": "urn:ogc:def:crs:OGC:1.3:CRS84"}, "type": "name"}, "features": [{"geometry": {"coordinates": [[[[9.208689680161699, 48.802666331380884], [9.20876032010785, 48.803426551753745], [9.209645001338208, 48.803463553630294], [9.209732460319156, 48.80233331449189], [9.208689680161699, 48.802666331380884]]]], "type": "MultiPolygon"}, "type": "Feature"}, {"geometry": {"coordinates": [[[[9.210630596777351, 48.80356446783908], [9.211912207228934, 48.80354428499732], [9.212013121437721, 48.80249477722595], [9.210728147179179, 48.80263269331129], [9.210630596777351, 48.80356446783908]]]], "type": "MultiPolygon"}, "type": "Feature"}], "name": "multi_poly_test", "type": "FeatureCollection"} \ No newline at end of file From fcee8d8eed0096915b3ea6c6cbb8e655b4bc3dab Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:09:46 +0200 Subject: [PATCH 38/69] Delete mapswipe_workers.log.2020-07-13 --- mapswipe-data/mapswipe_workers.log.2020-07-13 | 75 ------------------- 1 file changed, 75 deletions(-) delete mode 100644 mapswipe-data/mapswipe_workers.log.2020-07-13 diff --git a/mapswipe-data/mapswipe_workers.log.2020-07-13 b/mapswipe-data/mapswipe_workers.log.2020-07-13 deleted file mode 100644 index 2f8964a08..000000000 --- a/mapswipe-data/mapswipe_workers.log.2020-07-13 +++ /dev/null @@ -1,75 +0,0 @@ -2020-07-13 11:40:21,518 - INFO - mapswipe_workers.py - cli - Logging enabled -2020-07-13 11:40:24,102 - INFO - project.py - validate_geometries - -MC6vz49TfX2dk-6myDd - validate geometry - input geometry is correct. -2020-07-13 11:40:24,102 - INFO - tile_grouping_functions.py - get_geometry_from_file - got geometry and extent from file -2020-07-13 11:40:24,104 - INFO - tile_grouping_functions.py - get_vertical_slice - created vertical_slice -2020-07-13 11:40:24,117 - INFO - project.py - create_groups - -MC6vz49TfX2dk-6myDd - create_groups - created groups dictionary -2020-07-13 11:40:24,117 - INFO - project.py - save_project - -MC6vz49TfX2dk-6myDd - start creating a project -2020-07-13 11:40:24,124 - ERROR - project.py - save_project - -MC6vz49TfX2dk-6myDd - the project could not be saved to postgres and will therefor not be saved to firebase -Traceback (most recent call last): - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 360, in save_to_postgres - p_con = auth.postgresDB() - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/auth.py", line 53, in __init__ - self._db_connection = psycopg2.connect( - File "/usr/local/lib/python3.8/dist-packages/psycopg2/__init__.py", line 126, in connect - conn = _connect(dsn, connection_factory=connection_factory, **kwasync) -psycopg2.OperationalError: could not connect to server: Connection refused - Is the server running on host "postgres" (172.22.0.2) and accepting - TCP/IP connections on port 5432? - - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 119, in save_project - self.save_to_postgres( - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 376, in save_to_postgres - del p_con -UnboundLocalError: local variable 'p_con' referenced before assignment -2020-07-13 11:40:24,691 - ERROR - mapswipe_workers.py - run_create_projects - Failed: Project Creation (multiTest - (1) -)) -Traceback (most recent call last): - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 360, in save_to_postgres - p_con = auth.postgresDB() - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/auth.py", line 53, in __init__ - self._db_connection = psycopg2.connect( - File "/usr/local/lib/python3.8/dist-packages/psycopg2/__init__.py", line 126, in connect - conn = _connect(dsn, connection_factory=connection_factory, **kwasync) -psycopg2.OperationalError: could not connect to server: Connection refused - Is the server running on host "postgres" (172.22.0.2) and accepting - TCP/IP connections on port 5432? - - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 119, in save_project - self.save_to_postgres( - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 376, in save_to_postgres - del p_con -UnboundLocalError: local variable 'p_con' referenced before assignment - -During handling of the above exception, another exception occurred: - -Traceback (most recent call last): - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/mapswipe_workers.py", line 91, in run_create_projects - project.save_project() - File "/usr/local/lib/python3.8/dist-packages/mapswipe_workers/project_types/base/project.py", line 132, in save_project - raise CustomError(e) -mapswipe_workers.definitions.CustomError: local variable 'p_con' referenced before assignment -2020-07-13 11:43:55,566 - INFO - mapswipe_workers.py - cli - Logging enabled -2020-07-13 11:43:56,309 - INFO - project.py - validate_geometries - -MC6zDSrCeUXzyCCwTQ_ - validate geometry - input geometry is correct. -2020-07-13 11:43:56,309 - INFO - tile_grouping_functions.py - get_geometry_from_file - got geometry and extent from file -2020-07-13 11:43:56,311 - INFO - tile_grouping_functions.py - get_vertical_slice - created vertical_slice -2020-07-13 11:43:56,324 - INFO - project.py - create_groups - -MC6zDSrCeUXzyCCwTQ_ - create_groups - created groups dictionary -2020-07-13 11:43:56,324 - INFO - project.py - save_project - -MC6zDSrCeUXzyCCwTQ_ - start creating a project -2020-07-13 11:43:56,391 - INFO - project.py - save_project - -MC6zDSrCeUXzyCCwTQ_ - the project has been saved to postgres -2020-07-13 11:43:56,392 - INFO - geojson_functions.py - create_geojson_file - created outfile: /root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson. -2020-07-13 11:43:56,393 - INFO - geojson_functions.py - create_geojson_file - created outfile: /root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MC6zDSrCeUXzyCCwTQ_.geojson. -2020-07-13 11:43:56,393 - INFO - project.py - save_project - -MC6zDSrCeUXzyCCwTQ_ - the project has been saved to files -2020-07-13 11:43:56,718 - INFO - project.py - save_to_firebase - -MC6zDSrCeUXzyCCwTQ_ - uploaded project to firebase realtime database -2020-07-13 11:43:56,939 - INFO - project.py - save_to_firebase - -MC6zDSrCeUXzyCCwTQ_ - uploaded groups to firebase realtime database -2020-07-13 11:43:56,939 - INFO - project.py - save_to_firebase - there are 6 groups for this project -2020-07-13 11:43:57,392 - INFO - project.py - save_to_firebase - -MC6zDSrCeUXzyCCwTQ_ - uploaded 150 groups with tasks to firebase realtime database -2020-07-13 11:43:57,581 - INFO - project.py - save_project - -MC6zDSrCeUXzyCCwTQ_ - the project has been saved to firebase -2020-07-13 11:43:57,835 - INFO - mapswipe_workers.py - run_create_projects - Success: Project Creation (multiTest - (1) -) From 5d400d3d93a3690bdf4f2a9fad74d3e4f881ceb3 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:10:00 +0200 Subject: [PATCH 39/69] Delete mapswipe_workers.log.2020-07-21 --- mapswipe-data/mapswipe_workers.log.2020-07-21 | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100644 mapswipe-data/mapswipe_workers.log.2020-07-21 diff --git a/mapswipe-data/mapswipe_workers.log.2020-07-21 b/mapswipe-data/mapswipe_workers.log.2020-07-21 deleted file mode 100644 index a755e9780..000000000 --- a/mapswipe-data/mapswipe_workers.log.2020-07-21 +++ /dev/null @@ -1,19 +0,0 @@ -2020-07-21 12:50:24,233 - INFO - mapswipe_workers.py - cli - Logging enabled -2020-07-21 12:50:25,159 - INFO - mapswipe_workers.py - run_create_projects - There are no project drafts in firebase. -2020-07-21 12:58:14,346 - INFO - mapswipe_workers.py - cli - Logging enabled -2020-07-21 12:58:15,534 - INFO - project.py - validate_geometries - -MClQtGCC_sgKTB7mAeW - validate geometry - input geometry is correct. -2020-07-21 12:58:15,535 - INFO - tile_grouping_functions.py - get_geometry_from_file - got geometry and extent from file -2020-07-21 12:58:15,538 - INFO - tile_grouping_functions.py - get_vertical_slice - created vertical_slice -2020-07-21 12:58:15,555 - INFO - project.py - create_groups - -MClQtGCC_sgKTB7mAeW - create_groups - created groups dictionary -2020-07-21 12:58:15,555 - INFO - project.py - save_project - -MClQtGCC_sgKTB7mAeW - start creating a project -2020-07-21 12:58:16,213 - INFO - project.py - save_project - -MClQtGCC_sgKTB7mAeW - the project has been saved to postgres -2020-07-21 12:58:16,215 - INFO - geojson_functions.py - create_geojson_file - created outfile: /root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson. -2020-07-21 12:58:16,216 - INFO - geojson_functions.py - create_geojson_file - created outfile: /root/.local/share/mapswipe_workers/api/project_geometries/project_geom_-MClQtGCC_sgKTB7mAeW.geojson. -2020-07-21 12:58:16,216 - INFO - project.py - save_project - -MClQtGCC_sgKTB7mAeW - the project has been saved to files -2020-07-21 12:58:16,456 - INFO - project.py - save_to_firebase - -MClQtGCC_sgKTB7mAeW - uploaded project to firebase realtime database -2020-07-21 12:58:16,828 - INFO - project.py - save_to_firebase - -MClQtGCC_sgKTB7mAeW - uploaded groups to firebase realtime database -2020-07-21 12:58:16,828 - INFO - project.py - save_to_firebase - there are 6 groups for this project -2020-07-21 12:58:17,443 - INFO - project.py - save_to_firebase - -MClQtGCC_sgKTB7mAeW - uploaded 150 groups with tasks to firebase realtime database -2020-07-21 12:58:17,648 - INFO - project.py - save_project - -MClQtGCC_sgKTB7mAeW - the project has been saved to firebase -2020-07-21 12:58:18,063 - INFO - mapswipe_workers.py - run_create_projects - Success: Project Creation (multiTest2 - (1) -) From 2e423b4b6d3b11d6050b97241e5b72c9ee415c57 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:10:17 +0200 Subject: [PATCH 40/69] Delete mapswipe_workers.log.2020-07-20 --- mapswipe-data/mapswipe_workers.log.2020-07-20 | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 mapswipe-data/mapswipe_workers.log.2020-07-20 diff --git a/mapswipe-data/mapswipe_workers.log.2020-07-20 b/mapswipe-data/mapswipe_workers.log.2020-07-20 deleted file mode 100644 index abb0be176..000000000 --- a/mapswipe-data/mapswipe_workers.log.2020-07-20 +++ /dev/null @@ -1,2 +0,0 @@ -2020-07-20 12:31:13,718 - INFO - mapswipe_workers.py - cli - Logging enabled -2020-07-20 12:31:14,555 - INFO - mapswipe_workers.py - run_create_projects - There are no project drafts in firebase. From 92ddb5692e9543162bfca5b293bd9aa2a5ec6572 Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:10:30 +0200 Subject: [PATCH 41/69] Delete raw_groups_-MC6vz49TfX2dk-6myDd.txt --- mapswipe-data/tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 mapswipe-data/tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt diff --git a/mapswipe-data/tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt b/mapswipe-data/tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt deleted file mode 100644 index 9a5308759..000000000 --- a/mapswipe-data/tmp/raw_groups_-MC6vz49TfX2dk-6myDd.txt +++ /dev/null @@ -1,6 +0,0 @@ --MC6vz49TfX2dk-6myDd g101 24 0 3 0 {"groupId": "g101", "numberOfTasks": 24, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232469", "xMin": "232462", "yMax": "103467", "yMin": "103465"} --MC6vz49TfX2dk-6myDd g102 27 0 3 0 {"groupId": "g102", "numberOfTasks": 27, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232469", "xMin": "232461", "yMax": "103470", "yMin": "103468"} --MC6vz49TfX2dk-6myDd g103 18 0 3 0 {"groupId": "g103", "numberOfTasks": 18, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232467", "xMin": "232462", "yMax": "103473", "yMin": "103471"} --MC6vz49TfX2dk-6myDd g104 21 0 3 0 {"groupId": "g104", "numberOfTasks": 21, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232453", "xMin": "232447", "yMax": "103479", "yMin": "103477"} --MC6vz49TfX2dk-6myDd g105 24 0 3 0 {"groupId": "g105", "numberOfTasks": 24, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232454", "xMin": "232447", "yMax": "103482", "yMin": "103480"} --MC6vz49TfX2dk-6myDd g106 24 0 3 0 {"groupId": "g106", "numberOfTasks": 24, "projectId": "-MC6vz49TfX2dk-6myDd", "finishedCount": 0, "requiredCount": 3, "xMax": "232454", "xMin": "232447", "yMax": "103485", "yMin": "103483"} From 87e86959b85bf0b3eb8ffad838f3ed73e8dc98fc Mon Sep 17 00:00:00 2001 From: TahiraU <56635666+TahiraU@users.noreply.github.com> Date: Tue, 4 Aug 2020 13:10:45 +0200 Subject: [PATCH 42/69] Delete raw_tasks_-MC6vz49TfX2dk-6myDd.txt --- .../tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt | 138 ------------------ 1 file changed, 138 deletions(-) delete mode 100644 mapswipe-data/tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt diff --git a/mapswipe-data/tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt b/mapswipe-data/tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt deleted file mode 100644 index a2da4ab6d..000000000 --- a/mapswipe-data/tmp/raw_tasks_-MC6vz49TfX2dk-6myDd.txt +++ /dev/null @@ -1,138 +0,0 @@ --MC6vz49TfX2dk-6myDd g101 18-232462-103465 POLYGON ((139.237976074219 35.4147957290186 0,139.239349365234 35.4147957290186 0,139.239349365234 35.4136765190358 0,139.237976074219 35.4136765190358 0,139.237976074219 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232462-103465", "taskX": "232462", "taskY": "103465", "geometry": "POLYGON ((139.237976074219 35.4147957290186 0,139.239349365234 35.4147957290186 0,139.239349365234 35.4136765190358 0,139.237976074219 35.4136765190358 0,139.237976074219 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203112.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232462-103466 POLYGON ((139.237976074219 35.4136765190358 0,139.239349365234 35.4136765190358 0,139.239349365234 35.412557293508 0,139.237976074219 35.412557293508 0,139.237976074219 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232462-103466", "taskX": "232462", "taskY": "103466", "geometry": "POLYGON ((139.237976074219 35.4136765190358 0,139.239349365234 35.4136765190358 0,139.239349365234 35.412557293508 0,139.237976074219 35.412557293508 0,139.237976074219 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203130.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232462-103467 POLYGON ((139.237976074219 35.412557293508 0,139.239349365234 35.412557293508 0,139.239349365234 35.4114380524355 0,139.237976074219 35.4114380524355 0,139.237976074219 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232462-103467", "taskX": "232462", "taskY": "103467", "geometry": "POLYGON ((139.237976074219 35.412557293508 0,139.239349365234 35.412557293508 0,139.239349365234 35.4114380524355 0,139.237976074219 35.4114380524355 0,139.237976074219 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203132.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232463-103465 POLYGON ((139.239349365234 35.4147957290186 0,139.24072265625 35.4147957290186 0,139.24072265625 35.4136765190358 0,139.239349365234 35.4136765190358 0,139.239349365234 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232463-103465", "taskX": "232463", "taskY": "103465", "geometry": "POLYGON ((139.239349365234 35.4147957290186 0,139.24072265625 35.4147957290186 0,139.24072265625 35.4136765190358 0,139.239349365234 35.4136765190358 0,139.239349365234 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203113.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232463-103466 POLYGON ((139.239349365234 35.4136765190358 0,139.24072265625 35.4136765190358 0,139.24072265625 35.412557293508 0,139.239349365234 35.412557293508 0,139.239349365234 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232463-103466", "taskX": "232463", "taskY": "103466", "geometry": "POLYGON ((139.239349365234 35.4136765190358 0,139.24072265625 35.4136765190358 0,139.24072265625 35.412557293508 0,139.239349365234 35.412557293508 0,139.239349365234 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203131.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232463-103467 POLYGON ((139.239349365234 35.412557293508 0,139.24072265625 35.412557293508 0,139.24072265625 35.4114380524355 0,139.239349365234 35.4114380524355 0,139.239349365234 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232463-103467", "taskX": "232463", "taskY": "103467", "geometry": "POLYGON ((139.239349365234 35.412557293508 0,139.24072265625 35.412557293508 0,139.24072265625 35.4114380524355 0,139.239349365234 35.4114380524355 0,139.239349365234 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203133.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232464-103465 POLYGON ((139.24072265625 35.4147957290186 0,139.242095947266 35.4147957290186 0,139.242095947266 35.4136765190358 0,139.24072265625 35.4136765190358 0,139.24072265625 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232464-103465", "taskX": "232464", "taskY": "103465", "geometry": "POLYGON ((139.24072265625 35.4147957290186 0,139.242095947266 35.4147957290186 0,139.242095947266 35.4136765190358 0,139.24072265625 35.4136765190358 0,139.24072265625 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212002.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232464-103466 POLYGON ((139.24072265625 35.4136765190358 0,139.242095947266 35.4136765190358 0,139.242095947266 35.412557293508 0,139.24072265625 35.412557293508 0,139.24072265625 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232464-103466", "taskX": "232464", "taskY": "103466", "geometry": "POLYGON ((139.24072265625 35.4136765190358 0,139.242095947266 35.4136765190358 0,139.242095947266 35.412557293508 0,139.24072265625 35.412557293508 0,139.24072265625 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212020.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232464-103467 POLYGON ((139.24072265625 35.412557293508 0,139.242095947266 35.412557293508 0,139.242095947266 35.4114380524355 0,139.24072265625 35.4114380524355 0,139.24072265625 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232464-103467", "taskX": "232464", "taskY": "103467", "geometry": "POLYGON ((139.24072265625 35.412557293508 0,139.242095947266 35.412557293508 0,139.242095947266 35.4114380524355 0,139.24072265625 35.4114380524355 0,139.24072265625 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212022.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232465-103465 POLYGON ((139.242095947266 35.4147957290186 0,139.243469238281 35.4147957290186 0,139.243469238281 35.4136765190358 0,139.242095947266 35.4136765190358 0,139.242095947266 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232465-103465", "taskX": "232465", "taskY": "103465", "geometry": "POLYGON ((139.242095947266 35.4147957290186 0,139.243469238281 35.4147957290186 0,139.243469238281 35.4136765190358 0,139.242095947266 35.4136765190358 0,139.242095947266 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212003.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232465-103466 POLYGON ((139.242095947266 35.4136765190358 0,139.243469238281 35.4136765190358 0,139.243469238281 35.412557293508 0,139.242095947266 35.412557293508 0,139.242095947266 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232465-103466", "taskX": "232465", "taskY": "103466", "geometry": "POLYGON ((139.242095947266 35.4136765190358 0,139.243469238281 35.4136765190358 0,139.243469238281 35.412557293508 0,139.242095947266 35.412557293508 0,139.242095947266 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212021.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232465-103467 POLYGON ((139.242095947266 35.412557293508 0,139.243469238281 35.412557293508 0,139.243469238281 35.4114380524355 0,139.242095947266 35.4114380524355 0,139.242095947266 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232465-103467", "taskX": "232465", "taskY": "103467", "geometry": "POLYGON ((139.242095947266 35.412557293508 0,139.243469238281 35.412557293508 0,139.243469238281 35.4114380524355 0,139.242095947266 35.4114380524355 0,139.242095947266 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212023.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232466-103465 POLYGON ((139.243469238281 35.4147957290186 0,139.244842529297 35.4147957290186 0,139.244842529297 35.4136765190358 0,139.243469238281 35.4136765190358 0,139.243469238281 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232466-103465", "taskX": "232466", "taskY": "103465", "geometry": "POLYGON ((139.243469238281 35.4147957290186 0,139.244842529297 35.4147957290186 0,139.244842529297 35.4136765190358 0,139.243469238281 35.4136765190358 0,139.243469238281 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212012.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232466-103466 POLYGON ((139.243469238281 35.4136765190358 0,139.244842529297 35.4136765190358 0,139.244842529297 35.412557293508 0,139.243469238281 35.412557293508 0,139.243469238281 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232466-103466", "taskX": "232466", "taskY": "103466", "geometry": "POLYGON ((139.243469238281 35.4136765190358 0,139.244842529297 35.4136765190358 0,139.244842529297 35.412557293508 0,139.243469238281 35.412557293508 0,139.243469238281 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212030.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232466-103467 POLYGON ((139.243469238281 35.412557293508 0,139.244842529297 35.412557293508 0,139.244842529297 35.4114380524355 0,139.243469238281 35.4114380524355 0,139.243469238281 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232466-103467", "taskX": "232466", "taskY": "103467", "geometry": "POLYGON ((139.243469238281 35.412557293508 0,139.244842529297 35.412557293508 0,139.244842529297 35.4114380524355 0,139.243469238281 35.4114380524355 0,139.243469238281 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212032.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232467-103465 POLYGON ((139.244842529297 35.4147957290186 0,139.246215820312 35.4147957290186 0,139.246215820312 35.4136765190358 0,139.244842529297 35.4136765190358 0,139.244842529297 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232467-103465", "taskX": "232467", "taskY": "103465", "geometry": "POLYGON ((139.244842529297 35.4147957290186 0,139.246215820312 35.4147957290186 0,139.246215820312 35.4136765190358 0,139.244842529297 35.4136765190358 0,139.244842529297 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212013.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232467-103466 POLYGON ((139.244842529297 35.4136765190358 0,139.246215820312 35.4136765190358 0,139.246215820312 35.412557293508 0,139.244842529297 35.412557293508 0,139.244842529297 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232467-103466", "taskX": "232467", "taskY": "103466", "geometry": "POLYGON ((139.244842529297 35.4136765190358 0,139.246215820312 35.4136765190358 0,139.246215820312 35.412557293508 0,139.244842529297 35.412557293508 0,139.244842529297 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212031.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232467-103467 POLYGON ((139.244842529297 35.412557293508 0,139.246215820312 35.412557293508 0,139.246215820312 35.4114380524355 0,139.244842529297 35.4114380524355 0,139.244842529297 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232467-103467", "taskX": "232467", "taskY": "103467", "geometry": "POLYGON ((139.244842529297 35.412557293508 0,139.246215820312 35.412557293508 0,139.246215820312 35.4114380524355 0,139.244842529297 35.4114380524355 0,139.244842529297 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212033.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232468-103465 POLYGON ((139.246215820312 35.4147957290186 0,139.247589111328 35.4147957290186 0,139.247589111328 35.4136765190358 0,139.246215820312 35.4136765190358 0,139.246215820312 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232468-103465", "taskX": "232468", "taskY": "103465", "geometry": "POLYGON ((139.246215820312 35.4147957290186 0,139.247589111328 35.4147957290186 0,139.247589111328 35.4136765190358 0,139.246215820312 35.4136765190358 0,139.246215820312 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212102.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232468-103466 POLYGON ((139.246215820312 35.4136765190358 0,139.247589111328 35.4136765190358 0,139.247589111328 35.412557293508 0,139.246215820312 35.412557293508 0,139.246215820312 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232468-103466", "taskX": "232468", "taskY": "103466", "geometry": "POLYGON ((139.246215820312 35.4136765190358 0,139.247589111328 35.4136765190358 0,139.247589111328 35.412557293508 0,139.246215820312 35.412557293508 0,139.246215820312 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212120.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232468-103467 POLYGON ((139.246215820312 35.412557293508 0,139.247589111328 35.412557293508 0,139.247589111328 35.4114380524355 0,139.246215820312 35.4114380524355 0,139.246215820312 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232468-103467", "taskX": "232468", "taskY": "103467", "geometry": "POLYGON ((139.246215820312 35.412557293508 0,139.247589111328 35.412557293508 0,139.247589111328 35.4114380524355 0,139.246215820312 35.4114380524355 0,139.246215820312 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212122.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232469-103465 POLYGON ((139.247589111328 35.4147957290186 0,139.248962402344 35.4147957290186 0,139.248962402344 35.4136765190358 0,139.247589111328 35.4136765190358 0,139.247589111328 35.4147957290186 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232469-103465", "taskX": "232469", "taskY": "103465", "geometry": "POLYGON ((139.247589111328 35.4147957290186 0,139.248962402344 35.4147957290186 0,139.248962402344 35.4136765190358 0,139.247589111328 35.4136765190358 0,139.247589111328 35.4147957290186 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212103.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103465?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232469-103466 POLYGON ((139.247589111328 35.4136765190358 0,139.248962402344 35.4136765190358 0,139.248962402344 35.412557293508 0,139.247589111328 35.412557293508 0,139.247589111328 35.4136765190358 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232469-103466", "taskX": "232469", "taskY": "103466", "geometry": "POLYGON ((139.247589111328 35.4136765190358 0,139.248962402344 35.4136765190358 0,139.248962402344 35.412557293508 0,139.247589111328 35.412557293508 0,139.247589111328 35.4136765190358 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212121.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103466?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g101 18-232469-103467 POLYGON ((139.247589111328 35.412557293508 0,139.248962402344 35.412557293508 0,139.248962402344 35.4114380524355 0,139.247589111328 35.4114380524355 0,139.247589111328 35.412557293508 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g101", "taskId": "18-232469-103467", "taskX": "232469", "taskY": "103467", "geometry": "POLYGON ((139.247589111328 35.412557293508 0,139.248962402344 35.412557293508 0,139.248962402344 35.4114380524355 0,139.247589111328 35.4114380524355 0,139.247589111328 35.412557293508 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212123.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103467?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232461-103468 POLYGON ((139.236602783203 35.4114380524355 0,139.237976074219 35.4114380524355 0,139.237976074219 35.4103187958184 0,139.236602783203 35.4103187958184 0,139.236602783203 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232461-103468", "taskX": "232461", "taskY": "103468", "geometry": "POLYGON ((139.236602783203 35.4114380524355 0,139.237976074219 35.4114380524355 0,139.237976074219 35.4103187958184 0,139.236602783203 35.4103187958184 0,139.236602783203 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203301.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232461/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232461-103469 POLYGON ((139.236602783203 35.4103187958184 0,139.237976074219 35.4103187958184 0,139.237976074219 35.409199523657 0,139.236602783203 35.409199523657 0,139.236602783203 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232461-103469", "taskX": "232461", "taskY": "103469", "geometry": "POLYGON ((139.236602783203 35.4103187958184 0,139.237976074219 35.4103187958184 0,139.237976074219 35.409199523657 0,139.236602783203 35.409199523657 0,139.236602783203 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203303.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232461/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232461-103470 POLYGON ((139.236602783203 35.409199523657 0,139.237976074219 35.409199523657 0,139.237976074219 35.4080802359514 0,139.236602783203 35.4080802359514 0,139.236602783203 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232461-103470", "taskX": "232461", "taskY": "103470", "geometry": "POLYGON ((139.236602783203 35.409199523657 0,139.237976074219 35.409199523657 0,139.237976074219 35.4080802359514 0,139.236602783203 35.4080802359514 0,139.236602783203 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203321.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232461/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232462-103468 POLYGON ((139.237976074219 35.4114380524355 0,139.239349365234 35.4114380524355 0,139.239349365234 35.4103187958184 0,139.237976074219 35.4103187958184 0,139.237976074219 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232462-103468", "taskX": "232462", "taskY": "103468", "geometry": "POLYGON ((139.237976074219 35.4114380524355 0,139.239349365234 35.4114380524355 0,139.239349365234 35.4103187958184 0,139.237976074219 35.4103187958184 0,139.237976074219 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203310.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232462-103469 POLYGON ((139.237976074219 35.4103187958184 0,139.239349365234 35.4103187958184 0,139.239349365234 35.409199523657 0,139.237976074219 35.409199523657 0,139.237976074219 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232462-103469", "taskX": "232462", "taskY": "103469", "geometry": "POLYGON ((139.237976074219 35.4103187958184 0,139.239349365234 35.4103187958184 0,139.239349365234 35.409199523657 0,139.237976074219 35.409199523657 0,139.237976074219 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203312.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232462-103470 POLYGON ((139.237976074219 35.409199523657 0,139.239349365234 35.409199523657 0,139.239349365234 35.4080802359514 0,139.237976074219 35.4080802359514 0,139.237976074219 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232462-103470", "taskX": "232462", "taskY": "103470", "geometry": "POLYGON ((139.237976074219 35.409199523657 0,139.239349365234 35.409199523657 0,139.239349365234 35.4080802359514 0,139.237976074219 35.4080802359514 0,139.237976074219 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203330.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232463-103468 POLYGON ((139.239349365234 35.4114380524355 0,139.24072265625 35.4114380524355 0,139.24072265625 35.4103187958184 0,139.239349365234 35.4103187958184 0,139.239349365234 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232463-103468", "taskX": "232463", "taskY": "103468", "geometry": "POLYGON ((139.239349365234 35.4114380524355 0,139.24072265625 35.4114380524355 0,139.24072265625 35.4103187958184 0,139.239349365234 35.4103187958184 0,139.239349365234 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203311.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232463-103469 POLYGON ((139.239349365234 35.4103187958184 0,139.24072265625 35.4103187958184 0,139.24072265625 35.409199523657 0,139.239349365234 35.409199523657 0,139.239349365234 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232463-103469", "taskX": "232463", "taskY": "103469", "geometry": "POLYGON ((139.239349365234 35.4103187958184 0,139.24072265625 35.4103187958184 0,139.24072265625 35.409199523657 0,139.239349365234 35.409199523657 0,139.239349365234 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203313.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232463-103470 POLYGON ((139.239349365234 35.409199523657 0,139.24072265625 35.409199523657 0,139.24072265625 35.4080802359514 0,139.239349365234 35.4080802359514 0,139.239349365234 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232463-103470", "taskX": "232463", "taskY": "103470", "geometry": "POLYGON ((139.239349365234 35.409199523657 0,139.24072265625 35.409199523657 0,139.24072265625 35.4080802359514 0,139.239349365234 35.4080802359514 0,139.239349365234 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203331.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232464-103468 POLYGON ((139.24072265625 35.4114380524355 0,139.242095947266 35.4114380524355 0,139.242095947266 35.4103187958184 0,139.24072265625 35.4103187958184 0,139.24072265625 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232464-103468", "taskX": "232464", "taskY": "103468", "geometry": "POLYGON ((139.24072265625 35.4114380524355 0,139.242095947266 35.4114380524355 0,139.242095947266 35.4103187958184 0,139.24072265625 35.4103187958184 0,139.24072265625 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212200.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232464-103469 POLYGON ((139.24072265625 35.4103187958184 0,139.242095947266 35.4103187958184 0,139.242095947266 35.409199523657 0,139.24072265625 35.409199523657 0,139.24072265625 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232464-103469", "taskX": "232464", "taskY": "103469", "geometry": "POLYGON ((139.24072265625 35.4103187958184 0,139.242095947266 35.4103187958184 0,139.242095947266 35.409199523657 0,139.24072265625 35.409199523657 0,139.24072265625 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212202.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232464-103470 POLYGON ((139.24072265625 35.409199523657 0,139.242095947266 35.409199523657 0,139.242095947266 35.4080802359514 0,139.24072265625 35.4080802359514 0,139.24072265625 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232464-103470", "taskX": "232464", "taskY": "103470", "geometry": "POLYGON ((139.24072265625 35.409199523657 0,139.242095947266 35.409199523657 0,139.242095947266 35.4080802359514 0,139.24072265625 35.4080802359514 0,139.24072265625 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212220.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232465-103468 POLYGON ((139.242095947266 35.4114380524355 0,139.243469238281 35.4114380524355 0,139.243469238281 35.4103187958184 0,139.242095947266 35.4103187958184 0,139.242095947266 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232465-103468", "taskX": "232465", "taskY": "103468", "geometry": "POLYGON ((139.242095947266 35.4114380524355 0,139.243469238281 35.4114380524355 0,139.243469238281 35.4103187958184 0,139.242095947266 35.4103187958184 0,139.242095947266 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212201.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232465-103469 POLYGON ((139.242095947266 35.4103187958184 0,139.243469238281 35.4103187958184 0,139.243469238281 35.409199523657 0,139.242095947266 35.409199523657 0,139.242095947266 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232465-103469", "taskX": "232465", "taskY": "103469", "geometry": "POLYGON ((139.242095947266 35.4103187958184 0,139.243469238281 35.4103187958184 0,139.243469238281 35.409199523657 0,139.242095947266 35.409199523657 0,139.242095947266 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212203.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232465-103470 POLYGON ((139.242095947266 35.409199523657 0,139.243469238281 35.409199523657 0,139.243469238281 35.4080802359514 0,139.242095947266 35.4080802359514 0,139.242095947266 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232465-103470", "taskX": "232465", "taskY": "103470", "geometry": "POLYGON ((139.242095947266 35.409199523657 0,139.243469238281 35.409199523657 0,139.243469238281 35.4080802359514 0,139.242095947266 35.4080802359514 0,139.242095947266 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212221.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232466-103468 POLYGON ((139.243469238281 35.4114380524355 0,139.244842529297 35.4114380524355 0,139.244842529297 35.4103187958184 0,139.243469238281 35.4103187958184 0,139.243469238281 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232466-103468", "taskX": "232466", "taskY": "103468", "geometry": "POLYGON ((139.243469238281 35.4114380524355 0,139.244842529297 35.4114380524355 0,139.244842529297 35.4103187958184 0,139.243469238281 35.4103187958184 0,139.243469238281 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212210.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232466-103469 POLYGON ((139.243469238281 35.4103187958184 0,139.244842529297 35.4103187958184 0,139.244842529297 35.409199523657 0,139.243469238281 35.409199523657 0,139.243469238281 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232466-103469", "taskX": "232466", "taskY": "103469", "geometry": "POLYGON ((139.243469238281 35.4103187958184 0,139.244842529297 35.4103187958184 0,139.244842529297 35.409199523657 0,139.243469238281 35.409199523657 0,139.243469238281 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212212.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232466-103470 POLYGON ((139.243469238281 35.409199523657 0,139.244842529297 35.409199523657 0,139.244842529297 35.4080802359514 0,139.243469238281 35.4080802359514 0,139.243469238281 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232466-103470", "taskX": "232466", "taskY": "103470", "geometry": "POLYGON ((139.243469238281 35.409199523657 0,139.244842529297 35.409199523657 0,139.244842529297 35.4080802359514 0,139.243469238281 35.4080802359514 0,139.243469238281 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212230.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232467-103468 POLYGON ((139.244842529297 35.4114380524355 0,139.246215820312 35.4114380524355 0,139.246215820312 35.4103187958184 0,139.244842529297 35.4103187958184 0,139.244842529297 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232467-103468", "taskX": "232467", "taskY": "103468", "geometry": "POLYGON ((139.244842529297 35.4114380524355 0,139.246215820312 35.4114380524355 0,139.246215820312 35.4103187958184 0,139.244842529297 35.4103187958184 0,139.244842529297 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212211.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232467-103469 POLYGON ((139.244842529297 35.4103187958184 0,139.246215820312 35.4103187958184 0,139.246215820312 35.409199523657 0,139.244842529297 35.409199523657 0,139.244842529297 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232467-103469", "taskX": "232467", "taskY": "103469", "geometry": "POLYGON ((139.244842529297 35.4103187958184 0,139.246215820312 35.4103187958184 0,139.246215820312 35.409199523657 0,139.244842529297 35.409199523657 0,139.244842529297 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212213.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232467-103470 POLYGON ((139.244842529297 35.409199523657 0,139.246215820312 35.409199523657 0,139.246215820312 35.4080802359514 0,139.244842529297 35.4080802359514 0,139.244842529297 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232467-103470", "taskX": "232467", "taskY": "103470", "geometry": "POLYGON ((139.244842529297 35.409199523657 0,139.246215820312 35.409199523657 0,139.246215820312 35.4080802359514 0,139.244842529297 35.4080802359514 0,139.244842529297 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212231.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232468-103468 POLYGON ((139.246215820312 35.4114380524355 0,139.247589111328 35.4114380524355 0,139.247589111328 35.4103187958184 0,139.246215820312 35.4103187958184 0,139.246215820312 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232468-103468", "taskX": "232468", "taskY": "103468", "geometry": "POLYGON ((139.246215820312 35.4114380524355 0,139.247589111328 35.4114380524355 0,139.247589111328 35.4103187958184 0,139.246215820312 35.4103187958184 0,139.246215820312 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212300.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232468-103469 POLYGON ((139.246215820312 35.4103187958184 0,139.247589111328 35.4103187958184 0,139.247589111328 35.409199523657 0,139.246215820312 35.409199523657 0,139.246215820312 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232468-103469", "taskX": "232468", "taskY": "103469", "geometry": "POLYGON ((139.246215820312 35.4103187958184 0,139.247589111328 35.4103187958184 0,139.247589111328 35.409199523657 0,139.246215820312 35.409199523657 0,139.246215820312 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212302.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232468-103470 POLYGON ((139.246215820312 35.409199523657 0,139.247589111328 35.409199523657 0,139.247589111328 35.4080802359514 0,139.246215820312 35.4080802359514 0,139.246215820312 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232468-103470", "taskX": "232468", "taskY": "103470", "geometry": "POLYGON ((139.246215820312 35.409199523657 0,139.247589111328 35.409199523657 0,139.247589111328 35.4080802359514 0,139.246215820312 35.4080802359514 0,139.246215820312 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212320.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232468/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232469-103468 POLYGON ((139.247589111328 35.4114380524355 0,139.248962402344 35.4114380524355 0,139.248962402344 35.4103187958184 0,139.247589111328 35.4103187958184 0,139.247589111328 35.4114380524355 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232469-103468", "taskX": "232469", "taskY": "103468", "geometry": "POLYGON ((139.247589111328 35.4114380524355 0,139.248962402344 35.4114380524355 0,139.248962402344 35.4103187958184 0,139.247589111328 35.4103187958184 0,139.247589111328 35.4114380524355 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212301.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103468?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232469-103469 POLYGON ((139.247589111328 35.4103187958184 0,139.248962402344 35.4103187958184 0,139.248962402344 35.409199523657 0,139.247589111328 35.409199523657 0,139.247589111328 35.4103187958184 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232469-103469", "taskX": "232469", "taskY": "103469", "geometry": "POLYGON ((139.247589111328 35.4103187958184 0,139.248962402344 35.4103187958184 0,139.248962402344 35.409199523657 0,139.247589111328 35.409199523657 0,139.247589111328 35.4103187958184 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212303.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103469?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g102 18-232469-103470 POLYGON ((139.247589111328 35.409199523657 0,139.248962402344 35.409199523657 0,139.248962402344 35.4080802359514 0,139.247589111328 35.4080802359514 0,139.247589111328 35.409199523657 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g102", "taskId": "18-232469-103470", "taskX": "232469", "taskY": "103470", "geometry": "POLYGON ((139.247589111328 35.409199523657 0,139.248962402344 35.409199523657 0,139.248962402344 35.4080802359514 0,139.247589111328 35.4080802359514 0,139.247589111328 35.409199523657 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212321.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232469/103470?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232462-103471 POLYGON ((139.237976074219 35.4080802359514 0,139.239349365234 35.4080802359514 0,139.239349365234 35.406960932702 0,139.237976074219 35.406960932702 0,139.237976074219 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232462-103471", "taskX": "232462", "taskY": "103471", "geometry": "POLYGON ((139.237976074219 35.4080802359514 0,139.239349365234 35.4080802359514 0,139.239349365234 35.406960932702 0,139.237976074219 35.406960932702 0,139.237976074219 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203332.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232462-103472 POLYGON ((139.237976074219 35.406960932702 0,139.239349365234 35.406960932702 0,139.239349365234 35.4058416139089 0,139.237976074219 35.4058416139089 0,139.237976074219 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232462-103472", "taskX": "232462", "taskY": "103472", "geometry": "POLYGON ((139.237976074219 35.406960932702 0,139.239349365234 35.406960932702 0,139.239349365234 35.4058416139089 0,139.237976074219 35.4058416139089 0,139.237976074219 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000221110.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232462-103473 POLYGON ((139.237976074219 35.4058416139089 0,139.239349365234 35.4058416139089 0,139.239349365234 35.4047222795722 0,139.237976074219 35.4047222795722 0,139.237976074219 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232462-103473", "taskX": "232462", "taskY": "103473", "geometry": "POLYGON ((139.237976074219 35.4058416139089 0,139.239349365234 35.4058416139089 0,139.239349365234 35.4047222795722 0,139.237976074219 35.4047222795722 0,139.237976074219 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000221112.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232462/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232463-103471 POLYGON ((139.239349365234 35.4080802359514 0,139.24072265625 35.4080802359514 0,139.24072265625 35.406960932702 0,139.239349365234 35.406960932702 0,139.239349365234 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232463-103471", "taskX": "232463", "taskY": "103471", "geometry": "POLYGON ((139.239349365234 35.4080802359514 0,139.24072265625 35.4080802359514 0,139.24072265625 35.406960932702 0,139.239349365234 35.406960932702 0,139.239349365234 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000203333.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232463-103472 POLYGON ((139.239349365234 35.406960932702 0,139.24072265625 35.406960932702 0,139.24072265625 35.4058416139089 0,139.239349365234 35.4058416139089 0,139.239349365234 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232463-103472", "taskX": "232463", "taskY": "103472", "geometry": "POLYGON ((139.239349365234 35.406960932702 0,139.24072265625 35.406960932702 0,139.24072265625 35.4058416139089 0,139.239349365234 35.4058416139089 0,139.239349365234 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000221111.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232463-103473 POLYGON ((139.239349365234 35.4058416139089 0,139.24072265625 35.4058416139089 0,139.24072265625 35.4047222795722 0,139.239349365234 35.4047222795722 0,139.239349365234 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232463-103473", "taskX": "232463", "taskY": "103473", "geometry": "POLYGON ((139.239349365234 35.4058416139089 0,139.24072265625 35.4058416139089 0,139.24072265625 35.4047222795722 0,139.239349365234 35.4047222795722 0,139.239349365234 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000221113.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232463/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232464-103471 POLYGON ((139.24072265625 35.4080802359514 0,139.242095947266 35.4080802359514 0,139.242095947266 35.406960932702 0,139.24072265625 35.406960932702 0,139.24072265625 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232464-103471", "taskX": "232464", "taskY": "103471", "geometry": "POLYGON ((139.24072265625 35.4080802359514 0,139.242095947266 35.4080802359514 0,139.242095947266 35.406960932702 0,139.24072265625 35.406960932702 0,139.24072265625 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212222.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232464-103472 POLYGON ((139.24072265625 35.406960932702 0,139.242095947266 35.406960932702 0,139.242095947266 35.4058416139089 0,139.24072265625 35.4058416139089 0,139.24072265625 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232464-103472", "taskX": "232464", "taskY": "103472", "geometry": "POLYGON ((139.24072265625 35.406960932702 0,139.242095947266 35.406960932702 0,139.242095947266 35.4058416139089 0,139.24072265625 35.4058416139089 0,139.24072265625 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230000.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232464-103473 POLYGON ((139.24072265625 35.4058416139089 0,139.242095947266 35.4058416139089 0,139.242095947266 35.4047222795722 0,139.24072265625 35.4047222795722 0,139.24072265625 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232464-103473", "taskX": "232464", "taskY": "103473", "geometry": "POLYGON ((139.24072265625 35.4058416139089 0,139.242095947266 35.4058416139089 0,139.242095947266 35.4047222795722 0,139.24072265625 35.4047222795722 0,139.24072265625 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230002.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232464/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232465-103471 POLYGON ((139.242095947266 35.4080802359514 0,139.243469238281 35.4080802359514 0,139.243469238281 35.406960932702 0,139.242095947266 35.406960932702 0,139.242095947266 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232465-103471", "taskX": "232465", "taskY": "103471", "geometry": "POLYGON ((139.242095947266 35.4080802359514 0,139.243469238281 35.4080802359514 0,139.243469238281 35.406960932702 0,139.242095947266 35.406960932702 0,139.242095947266 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212223.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232465-103472 POLYGON ((139.242095947266 35.406960932702 0,139.243469238281 35.406960932702 0,139.243469238281 35.4058416139089 0,139.242095947266 35.4058416139089 0,139.242095947266 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232465-103472", "taskX": "232465", "taskY": "103472", "geometry": "POLYGON ((139.242095947266 35.406960932702 0,139.243469238281 35.406960932702 0,139.243469238281 35.4058416139089 0,139.242095947266 35.4058416139089 0,139.242095947266 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230001.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232465-103473 POLYGON ((139.242095947266 35.4058416139089 0,139.243469238281 35.4058416139089 0,139.243469238281 35.4047222795722 0,139.242095947266 35.4047222795722 0,139.242095947266 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232465-103473", "taskX": "232465", "taskY": "103473", "geometry": "POLYGON ((139.242095947266 35.4058416139089 0,139.243469238281 35.4058416139089 0,139.243469238281 35.4047222795722 0,139.242095947266 35.4047222795722 0,139.242095947266 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230003.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232465/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232466-103471 POLYGON ((139.243469238281 35.4080802359514 0,139.244842529297 35.4080802359514 0,139.244842529297 35.406960932702 0,139.243469238281 35.406960932702 0,139.243469238281 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232466-103471", "taskX": "232466", "taskY": "103471", "geometry": "POLYGON ((139.243469238281 35.4080802359514 0,139.244842529297 35.4080802359514 0,139.244842529297 35.406960932702 0,139.243469238281 35.406960932702 0,139.243469238281 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212232.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232466-103472 POLYGON ((139.243469238281 35.406960932702 0,139.244842529297 35.406960932702 0,139.244842529297 35.4058416139089 0,139.243469238281 35.4058416139089 0,139.243469238281 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232466-103472", "taskX": "232466", "taskY": "103472", "geometry": "POLYGON ((139.243469238281 35.406960932702 0,139.244842529297 35.406960932702 0,139.244842529297 35.4058416139089 0,139.243469238281 35.4058416139089 0,139.243469238281 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230010.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232466-103473 POLYGON ((139.243469238281 35.4058416139089 0,139.244842529297 35.4058416139089 0,139.244842529297 35.4047222795722 0,139.243469238281 35.4047222795722 0,139.243469238281 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232466-103473", "taskX": "232466", "taskY": "103473", "geometry": "POLYGON ((139.243469238281 35.4058416139089 0,139.244842529297 35.4058416139089 0,139.244842529297 35.4047222795722 0,139.243469238281 35.4047222795722 0,139.243469238281 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230012.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232466/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232467-103471 POLYGON ((139.244842529297 35.4080802359514 0,139.246215820312 35.4080802359514 0,139.246215820312 35.406960932702 0,139.244842529297 35.406960932702 0,139.244842529297 35.4080802359514 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232467-103471", "taskX": "232467", "taskY": "103471", "geometry": "POLYGON ((139.244842529297 35.4080802359514 0,139.246215820312 35.4080802359514 0,139.246215820312 35.406960932702 0,139.244842529297 35.406960932702 0,139.244842529297 35.4080802359514 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000212233.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103471?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232467-103472 POLYGON ((139.244842529297 35.406960932702 0,139.246215820312 35.406960932702 0,139.246215820312 35.4058416139089 0,139.244842529297 35.4058416139089 0,139.244842529297 35.406960932702 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232467-103472", "taskX": "232467", "taskY": "103472", "geometry": "POLYGON ((139.244842529297 35.406960932702 0,139.246215820312 35.406960932702 0,139.246215820312 35.4058416139089 0,139.244842529297 35.4058416139089 0,139.244842529297 35.406960932702 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230011.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103472?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g103 18-232467-103473 POLYGON ((139.244842529297 35.4058416139089 0,139.246215820312 35.4058416139089 0,139.246215820312 35.4047222795722 0,139.244842529297 35.4047222795722 0,139.244842529297 35.4058416139089 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g103", "taskId": "18-232467-103473", "taskX": "232467", "taskY": "103473", "geometry": "POLYGON ((139.244842529297 35.4058416139089 0,139.246215820312 35.4058416139089 0,139.246215820312 35.4047222795722 0,139.244842529297 35.4047222795722 0,139.244842529297 35.4058416139089 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000230013.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232467/103473?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232447-103477 POLYGON ((139.217376708984 35.4013641833035 0,139.21875 35.4013641833035 0,139.21875 35.4002447867951 0,139.217376708984 35.4002447867951 0,139.217376708984 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232447-103477", "taskX": "232447", "taskY": "103477", "geometry": "POLYGON ((139.217376708984 35.4013641833035 0,139.21875 35.4013641833035 0,139.21875 35.4002447867951 0,139.217376708984 35.4002447867951 0,139.217376708984 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111331313.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232447-103478 POLYGON ((139.217376708984 35.4002447867951 0,139.21875 35.4002447867951 0,139.21875 35.3991253747442 0,139.217376708984 35.3991253747442 0,139.217376708984 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232447-103478", "taskX": "232447", "taskY": "103478", "geometry": "POLYGON ((139.217376708984 35.4002447867951 0,139.21875 35.4002447867951 0,139.21875 35.3991253747442 0,139.217376708984 35.3991253747442 0,139.217376708984 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111331331.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232447-103479 POLYGON ((139.217376708984 35.3991253747442 0,139.21875 35.3991253747442 0,139.21875 35.3980059471511 0,139.217376708984 35.3980059471511 0,139.217376708984 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232447-103479", "taskX": "232447", "taskY": "103479", "geometry": "POLYGON ((139.217376708984 35.3991253747442 0,139.21875 35.3991253747442 0,139.21875 35.3980059471511 0,139.217376708984 35.3980059471511 0,139.217376708984 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111331333.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232448-103477 POLYGON ((139.21875 35.4013641833035 0,139.220123291016 35.4013641833035 0,139.220123291016 35.4002447867951 0,139.21875 35.4002447867951 0,139.21875 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232448-103477", "taskX": "232448", "taskY": "103477", "geometry": "POLYGON ((139.21875 35.4013641833035 0,139.220123291016 35.4013641833035 0,139.220123291016 35.4002447867951 0,139.21875 35.4002447867951 0,139.21875 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220202.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232448-103478 POLYGON ((139.21875 35.4002447867951 0,139.220123291016 35.4002447867951 0,139.220123291016 35.3991253747442 0,139.21875 35.3991253747442 0,139.21875 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232448-103478", "taskX": "232448", "taskY": "103478", "geometry": "POLYGON ((139.21875 35.4002447867951 0,139.220123291016 35.4002447867951 0,139.220123291016 35.3991253747442 0,139.21875 35.3991253747442 0,139.21875 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220220.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232448-103479 POLYGON ((139.21875 35.3991253747442 0,139.220123291016 35.3991253747442 0,139.220123291016 35.3980059471511 0,139.21875 35.3980059471511 0,139.21875 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232448-103479", "taskX": "232448", "taskY": "103479", "geometry": "POLYGON ((139.21875 35.3991253747442 0,139.220123291016 35.3991253747442 0,139.220123291016 35.3980059471511 0,139.21875 35.3980059471511 0,139.21875 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220222.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232449-103477 POLYGON ((139.220123291016 35.4013641833035 0,139.221496582031 35.4013641833035 0,139.221496582031 35.4002447867951 0,139.220123291016 35.4002447867951 0,139.220123291016 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232449-103477", "taskX": "232449", "taskY": "103477", "geometry": "POLYGON ((139.220123291016 35.4013641833035 0,139.221496582031 35.4013641833035 0,139.221496582031 35.4002447867951 0,139.220123291016 35.4002447867951 0,139.220123291016 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220203.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232449-103478 POLYGON ((139.220123291016 35.4002447867951 0,139.221496582031 35.4002447867951 0,139.221496582031 35.3991253747442 0,139.220123291016 35.3991253747442 0,139.220123291016 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232449-103478", "taskX": "232449", "taskY": "103478", "geometry": "POLYGON ((139.220123291016 35.4002447867951 0,139.221496582031 35.4002447867951 0,139.221496582031 35.3991253747442 0,139.220123291016 35.3991253747442 0,139.220123291016 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220221.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232449-103479 POLYGON ((139.220123291016 35.3991253747442 0,139.221496582031 35.3991253747442 0,139.221496582031 35.3980059471511 0,139.220123291016 35.3980059471511 0,139.220123291016 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232449-103479", "taskX": "232449", "taskY": "103479", "geometry": "POLYGON ((139.220123291016 35.3991253747442 0,139.221496582031 35.3991253747442 0,139.221496582031 35.3980059471511 0,139.220123291016 35.3980059471511 0,139.220123291016 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220223.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232450-103477 POLYGON ((139.221496582031 35.4013641833035 0,139.222869873047 35.4013641833035 0,139.222869873047 35.4002447867951 0,139.221496582031 35.4002447867951 0,139.221496582031 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232450-103477", "taskX": "232450", "taskY": "103477", "geometry": "POLYGON ((139.221496582031 35.4013641833035 0,139.222869873047 35.4013641833035 0,139.222869873047 35.4002447867951 0,139.221496582031 35.4002447867951 0,139.221496582031 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220212.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232450-103478 POLYGON ((139.221496582031 35.4002447867951 0,139.222869873047 35.4002447867951 0,139.222869873047 35.3991253747442 0,139.221496582031 35.3991253747442 0,139.221496582031 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232450-103478", "taskX": "232450", "taskY": "103478", "geometry": "POLYGON ((139.221496582031 35.4002447867951 0,139.222869873047 35.4002447867951 0,139.222869873047 35.3991253747442 0,139.221496582031 35.3991253747442 0,139.221496582031 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220230.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232450-103479 POLYGON ((139.221496582031 35.3991253747442 0,139.222869873047 35.3991253747442 0,139.222869873047 35.3980059471511 0,139.221496582031 35.3980059471511 0,139.221496582031 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232450-103479", "taskX": "232450", "taskY": "103479", "geometry": "POLYGON ((139.221496582031 35.3991253747442 0,139.222869873047 35.3991253747442 0,139.222869873047 35.3980059471511 0,139.221496582031 35.3980059471511 0,139.221496582031 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220232.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232451-103477 POLYGON ((139.222869873047 35.4013641833035 0,139.224243164062 35.4013641833035 0,139.224243164062 35.4002447867951 0,139.222869873047 35.4002447867951 0,139.222869873047 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232451-103477", "taskX": "232451", "taskY": "103477", "geometry": "POLYGON ((139.222869873047 35.4013641833035 0,139.224243164062 35.4013641833035 0,139.224243164062 35.4002447867951 0,139.222869873047 35.4002447867951 0,139.222869873047 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220213.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232451-103478 POLYGON ((139.222869873047 35.4002447867951 0,139.224243164062 35.4002447867951 0,139.224243164062 35.3991253747442 0,139.222869873047 35.3991253747442 0,139.222869873047 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232451-103478", "taskX": "232451", "taskY": "103478", "geometry": "POLYGON ((139.222869873047 35.4002447867951 0,139.224243164062 35.4002447867951 0,139.224243164062 35.3991253747442 0,139.222869873047 35.3991253747442 0,139.222869873047 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220231.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232451-103479 POLYGON ((139.222869873047 35.3991253747442 0,139.224243164062 35.3991253747442 0,139.224243164062 35.3980059471511 0,139.222869873047 35.3980059471511 0,139.222869873047 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232451-103479", "taskX": "232451", "taskY": "103479", "geometry": "POLYGON ((139.222869873047 35.3991253747442 0,139.224243164062 35.3991253747442 0,139.224243164062 35.3980059471511 0,139.222869873047 35.3980059471511 0,139.222869873047 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220233.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232452-103477 POLYGON ((139.224243164062 35.4013641833035 0,139.225616455078 35.4013641833035 0,139.225616455078 35.4002447867951 0,139.224243164062 35.4002447867951 0,139.224243164062 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232452-103477", "taskX": "232452", "taskY": "103477", "geometry": "POLYGON ((139.224243164062 35.4013641833035 0,139.225616455078 35.4013641833035 0,139.225616455078 35.4002447867951 0,139.224243164062 35.4002447867951 0,139.224243164062 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220302.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232452-103478 POLYGON ((139.224243164062 35.4002447867951 0,139.225616455078 35.4002447867951 0,139.225616455078 35.3991253747442 0,139.224243164062 35.3991253747442 0,139.224243164062 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232452-103478", "taskX": "232452", "taskY": "103478", "geometry": "POLYGON ((139.224243164062 35.4002447867951 0,139.225616455078 35.4002447867951 0,139.225616455078 35.3991253747442 0,139.224243164062 35.3991253747442 0,139.224243164062 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220320.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232452-103479 POLYGON ((139.224243164062 35.3991253747442 0,139.225616455078 35.3991253747442 0,139.225616455078 35.3980059471511 0,139.224243164062 35.3980059471511 0,139.224243164062 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232452-103479", "taskX": "232452", "taskY": "103479", "geometry": "POLYGON ((139.224243164062 35.3991253747442 0,139.225616455078 35.3991253747442 0,139.225616455078 35.3980059471511 0,139.224243164062 35.3980059471511 0,139.224243164062 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220322.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232453-103477 POLYGON ((139.225616455078 35.4013641833035 0,139.226989746094 35.4013641833035 0,139.226989746094 35.4002447867951 0,139.225616455078 35.4002447867951 0,139.225616455078 35.4013641833035 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232453-103477", "taskX": "232453", "taskY": "103477", "geometry": "POLYGON ((139.225616455078 35.4013641833035 0,139.226989746094 35.4013641833035 0,139.226989746094 35.4002447867951 0,139.225616455078 35.4002447867951 0,139.225616455078 35.4013641833035 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220303.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103477?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232453-103478 POLYGON ((139.225616455078 35.4002447867951 0,139.226989746094 35.4002447867951 0,139.226989746094 35.3991253747442 0,139.225616455078 35.3991253747442 0,139.225616455078 35.4002447867951 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232453-103478", "taskX": "232453", "taskY": "103478", "geometry": "POLYGON ((139.225616455078 35.4002447867951 0,139.226989746094 35.4002447867951 0,139.226989746094 35.3991253747442 0,139.225616455078 35.3991253747442 0,139.225616455078 35.4002447867951 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220321.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103478?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g104 18-232453-103479 POLYGON ((139.225616455078 35.3991253747442 0,139.226989746094 35.3991253747442 0,139.226989746094 35.3980059471511 0,139.225616455078 35.3980059471511 0,139.225616455078 35.3991253747442 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g104", "taskId": "18-232453-103479", "taskX": "232453", "taskY": "103479", "geometry": "POLYGON ((139.225616455078 35.3991253747442 0,139.226989746094 35.3991253747442 0,139.226989746094 35.3980059471511 0,139.225616455078 35.3980059471511 0,139.225616455078 35.3991253747442 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000220323.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103479?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232447-103480 POLYGON ((139.217376708984 35.3980059471511 0,139.21875 35.3980059471511 0,139.21875 35.3968865040159 0,139.217376708984 35.3968865040159 0,139.217376708984 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232447-103480", "taskX": "232447", "taskY": "103480", "geometry": "POLYGON ((139.217376708984 35.3980059471511 0,139.21875 35.3980059471511 0,139.21875 35.3968865040159 0,139.217376708984 35.3968865040159 0,139.217376708984 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333111.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232447-103481 POLYGON ((139.217376708984 35.3968865040159 0,139.21875 35.3968865040159 0,139.21875 35.395767045339 0,139.217376708984 35.395767045339 0,139.217376708984 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232447-103481", "taskX": "232447", "taskY": "103481", "geometry": "POLYGON ((139.217376708984 35.3968865040159 0,139.21875 35.3968865040159 0,139.21875 35.395767045339 0,139.217376708984 35.395767045339 0,139.217376708984 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333113.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232447-103482 POLYGON ((139.217376708984 35.395767045339 0,139.21875 35.395767045339 0,139.21875 35.3946475711205 0,139.217376708984 35.3946475711205 0,139.217376708984 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232447-103482", "taskX": "232447", "taskY": "103482", "geometry": "POLYGON ((139.217376708984 35.395767045339 0,139.21875 35.395767045339 0,139.21875 35.3946475711205 0,139.217376708984 35.3946475711205 0,139.217376708984 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333131.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232448-103480 POLYGON ((139.21875 35.3980059471511 0,139.220123291016 35.3980059471511 0,139.220123291016 35.3968865040159 0,139.21875 35.3968865040159 0,139.21875 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232448-103480", "taskX": "232448", "taskY": "103480", "geometry": "POLYGON ((139.21875 35.3980059471511 0,139.220123291016 35.3980059471511 0,139.220123291016 35.3968865040159 0,139.21875 35.3968865040159 0,139.21875 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222000.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232448-103481 POLYGON ((139.21875 35.3968865040159 0,139.220123291016 35.3968865040159 0,139.220123291016 35.395767045339 0,139.21875 35.395767045339 0,139.21875 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232448-103481", "taskX": "232448", "taskY": "103481", "geometry": "POLYGON ((139.21875 35.3968865040159 0,139.220123291016 35.3968865040159 0,139.220123291016 35.395767045339 0,139.21875 35.395767045339 0,139.21875 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222002.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232448-103482 POLYGON ((139.21875 35.395767045339 0,139.220123291016 35.395767045339 0,139.220123291016 35.3946475711205 0,139.21875 35.3946475711205 0,139.21875 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232448-103482", "taskX": "232448", "taskY": "103482", "geometry": "POLYGON ((139.21875 35.395767045339 0,139.220123291016 35.395767045339 0,139.220123291016 35.3946475711205 0,139.21875 35.3946475711205 0,139.21875 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222020.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232449-103480 POLYGON ((139.220123291016 35.3980059471511 0,139.221496582031 35.3980059471511 0,139.221496582031 35.3968865040159 0,139.220123291016 35.3968865040159 0,139.220123291016 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232449-103480", "taskX": "232449", "taskY": "103480", "geometry": "POLYGON ((139.220123291016 35.3980059471511 0,139.221496582031 35.3980059471511 0,139.221496582031 35.3968865040159 0,139.220123291016 35.3968865040159 0,139.220123291016 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222001.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232449-103481 POLYGON ((139.220123291016 35.3968865040159 0,139.221496582031 35.3968865040159 0,139.221496582031 35.395767045339 0,139.220123291016 35.395767045339 0,139.220123291016 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232449-103481", "taskX": "232449", "taskY": "103481", "geometry": "POLYGON ((139.220123291016 35.3968865040159 0,139.221496582031 35.3968865040159 0,139.221496582031 35.395767045339 0,139.220123291016 35.395767045339 0,139.220123291016 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222003.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232449-103482 POLYGON ((139.220123291016 35.395767045339 0,139.221496582031 35.395767045339 0,139.221496582031 35.3946475711205 0,139.220123291016 35.3946475711205 0,139.220123291016 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232449-103482", "taskX": "232449", "taskY": "103482", "geometry": "POLYGON ((139.220123291016 35.395767045339 0,139.221496582031 35.395767045339 0,139.221496582031 35.3946475711205 0,139.220123291016 35.3946475711205 0,139.220123291016 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222021.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232450-103480 POLYGON ((139.221496582031 35.3980059471511 0,139.222869873047 35.3980059471511 0,139.222869873047 35.3968865040159 0,139.221496582031 35.3968865040159 0,139.221496582031 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232450-103480", "taskX": "232450", "taskY": "103480", "geometry": "POLYGON ((139.221496582031 35.3980059471511 0,139.222869873047 35.3980059471511 0,139.222869873047 35.3968865040159 0,139.221496582031 35.3968865040159 0,139.221496582031 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222010.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232450-103481 POLYGON ((139.221496582031 35.3968865040159 0,139.222869873047 35.3968865040159 0,139.222869873047 35.395767045339 0,139.221496582031 35.395767045339 0,139.221496582031 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232450-103481", "taskX": "232450", "taskY": "103481", "geometry": "POLYGON ((139.221496582031 35.3968865040159 0,139.222869873047 35.3968865040159 0,139.222869873047 35.395767045339 0,139.221496582031 35.395767045339 0,139.221496582031 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222012.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232450-103482 POLYGON ((139.221496582031 35.395767045339 0,139.222869873047 35.395767045339 0,139.222869873047 35.3946475711205 0,139.221496582031 35.3946475711205 0,139.221496582031 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232450-103482", "taskX": "232450", "taskY": "103482", "geometry": "POLYGON ((139.221496582031 35.395767045339 0,139.222869873047 35.395767045339 0,139.222869873047 35.3946475711205 0,139.221496582031 35.3946475711205 0,139.221496582031 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222030.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232451-103480 POLYGON ((139.222869873047 35.3980059471511 0,139.224243164062 35.3980059471511 0,139.224243164062 35.3968865040159 0,139.222869873047 35.3968865040159 0,139.222869873047 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232451-103480", "taskX": "232451", "taskY": "103480", "geometry": "POLYGON ((139.222869873047 35.3980059471511 0,139.224243164062 35.3980059471511 0,139.224243164062 35.3968865040159 0,139.222869873047 35.3968865040159 0,139.222869873047 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222011.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232451-103481 POLYGON ((139.222869873047 35.3968865040159 0,139.224243164062 35.3968865040159 0,139.224243164062 35.395767045339 0,139.222869873047 35.395767045339 0,139.222869873047 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232451-103481", "taskX": "232451", "taskY": "103481", "geometry": "POLYGON ((139.222869873047 35.3968865040159 0,139.224243164062 35.3968865040159 0,139.224243164062 35.395767045339 0,139.222869873047 35.395767045339 0,139.222869873047 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222013.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232451-103482 POLYGON ((139.222869873047 35.395767045339 0,139.224243164062 35.395767045339 0,139.224243164062 35.3946475711205 0,139.222869873047 35.3946475711205 0,139.222869873047 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232451-103482", "taskX": "232451", "taskY": "103482", "geometry": "POLYGON ((139.222869873047 35.395767045339 0,139.224243164062 35.395767045339 0,139.224243164062 35.3946475711205 0,139.222869873047 35.3946475711205 0,139.222869873047 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222031.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232452-103480 POLYGON ((139.224243164062 35.3980059471511 0,139.225616455078 35.3980059471511 0,139.225616455078 35.3968865040159 0,139.224243164062 35.3968865040159 0,139.224243164062 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232452-103480", "taskX": "232452", "taskY": "103480", "geometry": "POLYGON ((139.224243164062 35.3980059471511 0,139.225616455078 35.3980059471511 0,139.225616455078 35.3968865040159 0,139.224243164062 35.3968865040159 0,139.224243164062 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222100.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232452-103481 POLYGON ((139.224243164062 35.3968865040159 0,139.225616455078 35.3968865040159 0,139.225616455078 35.395767045339 0,139.224243164062 35.395767045339 0,139.224243164062 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232452-103481", "taskX": "232452", "taskY": "103481", "geometry": "POLYGON ((139.224243164062 35.3968865040159 0,139.225616455078 35.3968865040159 0,139.225616455078 35.395767045339 0,139.224243164062 35.395767045339 0,139.224243164062 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222102.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232452-103482 POLYGON ((139.224243164062 35.395767045339 0,139.225616455078 35.395767045339 0,139.225616455078 35.3946475711205 0,139.224243164062 35.3946475711205 0,139.224243164062 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232452-103482", "taskX": "232452", "taskY": "103482", "geometry": "POLYGON ((139.224243164062 35.395767045339 0,139.225616455078 35.395767045339 0,139.225616455078 35.3946475711205 0,139.224243164062 35.3946475711205 0,139.224243164062 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222120.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232453-103480 POLYGON ((139.225616455078 35.3980059471511 0,139.226989746094 35.3980059471511 0,139.226989746094 35.3968865040159 0,139.225616455078 35.3968865040159 0,139.225616455078 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232453-103480", "taskX": "232453", "taskY": "103480", "geometry": "POLYGON ((139.225616455078 35.3980059471511 0,139.226989746094 35.3980059471511 0,139.226989746094 35.3968865040159 0,139.225616455078 35.3968865040159 0,139.225616455078 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222101.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232453-103481 POLYGON ((139.225616455078 35.3968865040159 0,139.226989746094 35.3968865040159 0,139.226989746094 35.395767045339 0,139.225616455078 35.395767045339 0,139.225616455078 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232453-103481", "taskX": "232453", "taskY": "103481", "geometry": "POLYGON ((139.225616455078 35.3968865040159 0,139.226989746094 35.3968865040159 0,139.226989746094 35.395767045339 0,139.225616455078 35.395767045339 0,139.225616455078 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222103.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232453-103482 POLYGON ((139.225616455078 35.395767045339 0,139.226989746094 35.395767045339 0,139.226989746094 35.3946475711205 0,139.225616455078 35.3946475711205 0,139.225616455078 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232453-103482", "taskX": "232453", "taskY": "103482", "geometry": "POLYGON ((139.225616455078 35.395767045339 0,139.226989746094 35.395767045339 0,139.226989746094 35.3946475711205 0,139.225616455078 35.3946475711205 0,139.225616455078 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222121.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232454-103480 POLYGON ((139.226989746094 35.3980059471511 0,139.228363037109 35.3980059471511 0,139.228363037109 35.3968865040159 0,139.226989746094 35.3968865040159 0,139.226989746094 35.3980059471511 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232454-103480", "taskX": "232454", "taskY": "103480", "geometry": "POLYGON ((139.226989746094 35.3980059471511 0,139.228363037109 35.3980059471511 0,139.228363037109 35.3968865040159 0,139.226989746094 35.3968865040159 0,139.226989746094 35.3980059471511 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222110.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103480?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232454-103481 POLYGON ((139.226989746094 35.3968865040159 0,139.228363037109 35.3968865040159 0,139.228363037109 35.395767045339 0,139.226989746094 35.395767045339 0,139.226989746094 35.3968865040159 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232454-103481", "taskX": "232454", "taskY": "103481", "geometry": "POLYGON ((139.226989746094 35.3968865040159 0,139.228363037109 35.3968865040159 0,139.228363037109 35.395767045339 0,139.226989746094 35.395767045339 0,139.226989746094 35.3968865040159 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222112.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103481?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g105 18-232454-103482 POLYGON ((139.226989746094 35.395767045339 0,139.228363037109 35.395767045339 0,139.228363037109 35.3946475711205 0,139.226989746094 35.3946475711205 0,139.226989746094 35.395767045339 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g105", "taskId": "18-232454-103482", "taskX": "232454", "taskY": "103482", "geometry": "POLYGON ((139.226989746094 35.395767045339 0,139.228363037109 35.395767045339 0,139.228363037109 35.3946475711205 0,139.226989746094 35.3946475711205 0,139.226989746094 35.395767045339 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222130.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103482?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232447-103483 POLYGON ((139.217376708984 35.3946475711205 0,139.21875 35.3946475711205 0,139.21875 35.3935280813606 0,139.217376708984 35.3935280813606 0,139.217376708984 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232447-103483", "taskX": "232447", "taskY": "103483", "geometry": "POLYGON ((139.217376708984 35.3946475711205 0,139.21875 35.3946475711205 0,139.21875 35.3935280813606 0,139.217376708984 35.3935280813606 0,139.217376708984 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333133.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232447-103484 POLYGON ((139.217376708984 35.3935280813606 0,139.21875 35.3935280813606 0,139.21875 35.3924085760596 0,139.217376708984 35.3924085760596 0,139.217376708984 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232447-103484", "taskX": "232447", "taskY": "103484", "geometry": "POLYGON ((139.217376708984 35.3935280813606 0,139.21875 35.3935280813606 0,139.21875 35.3924085760596 0,139.217376708984 35.3924085760596 0,139.217376708984 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333311.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232447-103485 POLYGON ((139.217376708984 35.3924085760596 0,139.21875 35.3924085760596 0,139.21875 35.3912890552176 0,139.217376708984 35.3912890552176 0,139.217376708984 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232447-103485", "taskX": "232447", "taskY": "103485", "geometry": "POLYGON ((139.217376708984 35.3924085760596 0,139.21875 35.3924085760596 0,139.21875 35.3912890552176 0,139.217376708984 35.3912890552176 0,139.217376708984 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002121111333313.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232447/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232448-103483 POLYGON ((139.21875 35.3946475711205 0,139.220123291016 35.3946475711205 0,139.220123291016 35.3935280813606 0,139.21875 35.3935280813606 0,139.21875 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232448-103483", "taskX": "232448", "taskY": "103483", "geometry": "POLYGON ((139.21875 35.3946475711205 0,139.220123291016 35.3946475711205 0,139.220123291016 35.3935280813606 0,139.21875 35.3935280813606 0,139.21875 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222022.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232448-103484 POLYGON ((139.21875 35.3935280813606 0,139.220123291016 35.3935280813606 0,139.220123291016 35.3924085760596 0,139.21875 35.3924085760596 0,139.21875 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232448-103484", "taskX": "232448", "taskY": "103484", "geometry": "POLYGON ((139.21875 35.3935280813606 0,139.220123291016 35.3935280813606 0,139.220123291016 35.3924085760596 0,139.21875 35.3924085760596 0,139.21875 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222200.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232448-103485 POLYGON ((139.21875 35.3924085760596 0,139.220123291016 35.3924085760596 0,139.220123291016 35.3912890552176 0,139.21875 35.3912890552176 0,139.21875 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232448-103485", "taskX": "232448", "taskY": "103485", "geometry": "POLYGON ((139.21875 35.3924085760596 0,139.220123291016 35.3924085760596 0,139.220123291016 35.3912890552176 0,139.21875 35.3912890552176 0,139.21875 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222202.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232448/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232449-103483 POLYGON ((139.220123291016 35.3946475711205 0,139.221496582031 35.3946475711205 0,139.221496582031 35.3935280813606 0,139.220123291016 35.3935280813606 0,139.220123291016 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232449-103483", "taskX": "232449", "taskY": "103483", "geometry": "POLYGON ((139.220123291016 35.3946475711205 0,139.221496582031 35.3946475711205 0,139.221496582031 35.3935280813606 0,139.220123291016 35.3935280813606 0,139.220123291016 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222023.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232449-103484 POLYGON ((139.220123291016 35.3935280813606 0,139.221496582031 35.3935280813606 0,139.221496582031 35.3924085760596 0,139.220123291016 35.3924085760596 0,139.220123291016 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232449-103484", "taskX": "232449", "taskY": "103484", "geometry": "POLYGON ((139.220123291016 35.3935280813606 0,139.221496582031 35.3935280813606 0,139.221496582031 35.3924085760596 0,139.220123291016 35.3924085760596 0,139.220123291016 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222201.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232449-103485 POLYGON ((139.220123291016 35.3924085760596 0,139.221496582031 35.3924085760596 0,139.221496582031 35.3912890552176 0,139.220123291016 35.3912890552176 0,139.220123291016 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232449-103485", "taskX": "232449", "taskY": "103485", "geometry": "POLYGON ((139.220123291016 35.3924085760596 0,139.221496582031 35.3924085760596 0,139.221496582031 35.3912890552176 0,139.220123291016 35.3912890552176 0,139.220123291016 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222203.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232449/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232450-103483 POLYGON ((139.221496582031 35.3946475711205 0,139.222869873047 35.3946475711205 0,139.222869873047 35.3935280813606 0,139.221496582031 35.3935280813606 0,139.221496582031 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232450-103483", "taskX": "232450", "taskY": "103483", "geometry": "POLYGON ((139.221496582031 35.3946475711205 0,139.222869873047 35.3946475711205 0,139.222869873047 35.3935280813606 0,139.221496582031 35.3935280813606 0,139.221496582031 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222032.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232450-103484 POLYGON ((139.221496582031 35.3935280813606 0,139.222869873047 35.3935280813606 0,139.222869873047 35.3924085760596 0,139.221496582031 35.3924085760596 0,139.221496582031 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232450-103484", "taskX": "232450", "taskY": "103484", "geometry": "POLYGON ((139.221496582031 35.3935280813606 0,139.222869873047 35.3935280813606 0,139.222869873047 35.3924085760596 0,139.221496582031 35.3924085760596 0,139.221496582031 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222210.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232450-103485 POLYGON ((139.221496582031 35.3924085760596 0,139.222869873047 35.3924085760596 0,139.222869873047 35.3912890552176 0,139.221496582031 35.3912890552176 0,139.221496582031 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232450-103485", "taskX": "232450", "taskY": "103485", "geometry": "POLYGON ((139.221496582031 35.3924085760596 0,139.222869873047 35.3924085760596 0,139.222869873047 35.3912890552176 0,139.221496582031 35.3912890552176 0,139.221496582031 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222212.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232450/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232451-103483 POLYGON ((139.222869873047 35.3946475711205 0,139.224243164062 35.3946475711205 0,139.224243164062 35.3935280813606 0,139.222869873047 35.3935280813606 0,139.222869873047 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232451-103483", "taskX": "232451", "taskY": "103483", "geometry": "POLYGON ((139.222869873047 35.3946475711205 0,139.224243164062 35.3946475711205 0,139.224243164062 35.3935280813606 0,139.222869873047 35.3935280813606 0,139.222869873047 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222033.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232451-103484 POLYGON ((139.222869873047 35.3935280813606 0,139.224243164062 35.3935280813606 0,139.224243164062 35.3924085760596 0,139.222869873047 35.3924085760596 0,139.222869873047 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232451-103484", "taskX": "232451", "taskY": "103484", "geometry": "POLYGON ((139.222869873047 35.3935280813606 0,139.224243164062 35.3935280813606 0,139.224243164062 35.3924085760596 0,139.222869873047 35.3924085760596 0,139.222869873047 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222211.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232451-103485 POLYGON ((139.222869873047 35.3924085760596 0,139.224243164062 35.3924085760596 0,139.224243164062 35.3912890552176 0,139.222869873047 35.3912890552176 0,139.222869873047 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232451-103485", "taskX": "232451", "taskY": "103485", "geometry": "POLYGON ((139.222869873047 35.3924085760596 0,139.224243164062 35.3924085760596 0,139.224243164062 35.3912890552176 0,139.222869873047 35.3912890552176 0,139.222869873047 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222213.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232451/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232452-103483 POLYGON ((139.224243164062 35.3946475711205 0,139.225616455078 35.3946475711205 0,139.225616455078 35.3935280813606 0,139.224243164062 35.3935280813606 0,139.224243164062 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232452-103483", "taskX": "232452", "taskY": "103483", "geometry": "POLYGON ((139.224243164062 35.3946475711205 0,139.225616455078 35.3946475711205 0,139.225616455078 35.3935280813606 0,139.224243164062 35.3935280813606 0,139.224243164062 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222122.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232452-103484 POLYGON ((139.224243164062 35.3935280813606 0,139.225616455078 35.3935280813606 0,139.225616455078 35.3924085760596 0,139.224243164062 35.3924085760596 0,139.224243164062 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232452-103484", "taskX": "232452", "taskY": "103484", "geometry": "POLYGON ((139.224243164062 35.3935280813606 0,139.225616455078 35.3935280813606 0,139.225616455078 35.3924085760596 0,139.224243164062 35.3924085760596 0,139.224243164062 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222300.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232452-103485 POLYGON ((139.224243164062 35.3924085760596 0,139.225616455078 35.3924085760596 0,139.225616455078 35.3912890552176 0,139.224243164062 35.3912890552176 0,139.224243164062 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232452-103485", "taskX": "232452", "taskY": "103485", "geometry": "POLYGON ((139.224243164062 35.3924085760596 0,139.225616455078 35.3924085760596 0,139.225616455078 35.3912890552176 0,139.224243164062 35.3912890552176 0,139.224243164062 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222302.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232452/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232453-103483 POLYGON ((139.225616455078 35.3946475711205 0,139.226989746094 35.3946475711205 0,139.226989746094 35.3935280813606 0,139.225616455078 35.3935280813606 0,139.225616455078 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232453-103483", "taskX": "232453", "taskY": "103483", "geometry": "POLYGON ((139.225616455078 35.3946475711205 0,139.226989746094 35.3946475711205 0,139.226989746094 35.3935280813606 0,139.225616455078 35.3935280813606 0,139.225616455078 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222123.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232453-103484 POLYGON ((139.225616455078 35.3935280813606 0,139.226989746094 35.3935280813606 0,139.226989746094 35.3924085760596 0,139.225616455078 35.3924085760596 0,139.225616455078 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232453-103484", "taskX": "232453", "taskY": "103484", "geometry": "POLYGON ((139.225616455078 35.3935280813606 0,139.226989746094 35.3935280813606 0,139.226989746094 35.3924085760596 0,139.225616455078 35.3924085760596 0,139.225616455078 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222301.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232453-103485 POLYGON ((139.225616455078 35.3924085760596 0,139.226989746094 35.3924085760596 0,139.226989746094 35.3912890552176 0,139.225616455078 35.3912890552176 0,139.225616455078 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232453-103485", "taskX": "232453", "taskY": "103485", "geometry": "POLYGON ((139.225616455078 35.3924085760596 0,139.226989746094 35.3924085760596 0,139.226989746094 35.3912890552176 0,139.225616455078 35.3912890552176 0,139.225616455078 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222303.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232453/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232454-103483 POLYGON ((139.226989746094 35.3946475711205 0,139.228363037109 35.3946475711205 0,139.228363037109 35.3935280813606 0,139.226989746094 35.3935280813606 0,139.226989746094 35.3946475711205 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232454-103483", "taskX": "232454", "taskY": "103483", "geometry": "POLYGON ((139.226989746094 35.3946475711205 0,139.228363037109 35.3946475711205 0,139.228363037109 35.3935280813606 0,139.226989746094 35.3935280813606 0,139.226989746094 35.3946475711205 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222132.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103483?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232454-103484 POLYGON ((139.226989746094 35.3935280813606 0,139.228363037109 35.3935280813606 0,139.228363037109 35.3924085760596 0,139.226989746094 35.3924085760596 0,139.226989746094 35.3935280813606 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232454-103484", "taskX": "232454", "taskY": "103484", "geometry": "POLYGON ((139.226989746094 35.3935280813606 0,139.228363037109 35.3935280813606 0,139.228363037109 35.3924085760596 0,139.226989746094 35.3924085760596 0,139.226989746094 35.3935280813606 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222310.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103484?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} --MC6vz49TfX2dk-6myDd g106 18-232454-103485 POLYGON ((139.226989746094 35.3924085760596 0,139.228363037109 35.3924085760596 0,139.228363037109 35.3912890552176 0,139.226989746094 35.3912890552176 0,139.226989746094 35.3924085760596 0)) {"projectId": "-MC6vz49TfX2dk-6myDd", "groupId": "g106", "taskId": "18-232454-103485", "taskX": "232454", "taskY": "103485", "geometry": "POLYGON ((139.226989746094 35.3924085760596 0,139.228363037109 35.3924085760596 0,139.228363037109 35.3912890552176 0,139.226989746094 35.3912890552176 0,139.226989746094 35.3924085760596 0))", "url": "https://ecn.t0.tiles.virtualearth.net/tiles/a133002130000222312.jpeg?g=7505&mkt=en-US&token=AopsdXjtTu-IwNoCTiZBtgRJ1g7yPkzAi65nXplc-eLJwZHYlAIf2yuSY_Kjg3Wn", "urlB": "https://api.mapbox.com/styles/v1/tahirau/ck9wt55hc0rnd1is3lcd4wd8o/tiles/18/232454/103485?access_token=pk.eyJ1IjoidGFoaXJhdSIsImEiOiJjazZrdGQyMjYwMnpsM2VwNjdmdnl6eGo5In0.RIyd6m3AoPKWEkJFSc5CDA"} From 3c38233b142448328a653f4d4411e38b25c9646d Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Tue, 4 Aug 2020 13:21:08 +0200 Subject: [PATCH 43/69] test function improved --- .../mapswipe_workers/utils/tile_grouping_functions.py | 3 --- mapswipe_workers/tests/unittests/test_groups_overlap.py | 4 +--- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py index fe231e1a7..5c443b11e 100644 --- a/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py +++ b/mapswipe_workers/mapswipe_workers/utils/tile_grouping_functions.py @@ -400,9 +400,6 @@ def extent_to_groups(infile, zoom, groupSize): # TODO: add this line once properly working groups_dict, overlaps_total = adjust_overlapping_groups(raw_groups_dict, zoom) - if overlaps_total == 0: - groups_dict = groups_dict - return groups_dict diff --git a/mapswipe_workers/tests/unittests/test_groups_overlap.py b/mapswipe_workers/tests/unittests/test_groups_overlap.py index da238b74c..ec7deb1f9 100644 --- a/mapswipe_workers/tests/unittests/test_groups_overlap.py +++ b/mapswipe_workers/tests/unittests/test_groups_overlap.py @@ -14,9 +14,7 @@ def test_project_geometries_intersection(self): ) groups_with_overlaps = t.extent_to_groups(project_extent_file, zoom, 100) - t.vertical_groups_as_geojson( - groups_with_overlaps, "groups_with_overlaps.geojson" - ) + self.assertEqual(len(groups_with_overlaps), 117) if __name__ == "__main__": From f401e032b96bc41a56756e8cce982c120da30b1e Mon Sep 17 00:00:00 2001 From: Tahira Ullah Date: Tue, 4 Aug 2020 14:28:03 +0200 Subject: [PATCH 44/69] max input geometries extended to 10 --- mapswipe_workers/mapswipe_workers/definitions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mapswipe_workers/mapswipe_workers/definitions.py b/mapswipe_workers/mapswipe_workers/definitions.py index 16cde8ddf..d5a042476 100644 --- a/mapswipe_workers/mapswipe_workers/definitions.py +++ b/mapswipe_workers/mapswipe_workers/definitions.py @@ -13,7 +13,7 @@ LOGGING_FILE_PATH = os.path.join(DATA_PATH, "mapswipe_workers.log") # number of geometries for project geometries -MAX_INPUT_GEOMETRIES = 2 +MAX_INPUT_GEOMETRIES = 10 LOGGING_CONFIG = { "version": 1, From 3411036d26c4d51e18e4b6008e5f2d4a8ec21723 Mon Sep 17 00:00:00 2001 From: h9b Date: Sat, 15 Aug 2020 14:38:25 +0200 Subject: [PATCH 45/69] set up manager dasboard to upload tutorial data #409 --- firebase/database.rules.json | 8 + .../manager_dashboard/create.html | 3 + .../manager_dashboard/index.html | 3 + .../manager_dashboard/js/forms-tutorial.js | 175 +++++++++++ .../manager_dashboard/js/upload-tutorial.js | 95 ++++++ .../manager_dashboard/manage.html | 3 + .../manager_dashboard/teams.html | 3 + .../manager_dashboard/tutorial.html | 278 ++++++++++++++++++ .../solid_waste_tutorial_screens.json | 98 ++++++ 9 files changed, 666 insertions(+) create mode 100644 manager_dashboard/manager_dashboard/js/forms-tutorial.js create mode 100644 manager_dashboard/manager_dashboard/js/upload-tutorial.js create mode 100644 manager_dashboard/manager_dashboard/tutorial.html create mode 100644 mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json diff --git a/firebase/database.rules.json b/firebase/database.rules.json index 44072f6d7..3f3c41fd7 100644 --- a/firebase/database.rules.json +++ b/firebase/database.rules.json @@ -45,6 +45,14 @@ "complete" ] }, + "tutorialDrafts": { + // only project managers can write projectDrafts + ".read": false, + ".write": "auth.token.projectManager === true", + ".indexOn": [ + "complete" + ] + }, "groups": { ".write": false, ".read": "auth.token.projectManager === true", diff --git a/manager_dashboard/manager_dashboard/create.html b/manager_dashboard/manager_dashboard/create.html index cef26d5bc..85df7df25 100644 --- a/manager_dashboard/manager_dashboard/create.html +++ b/manager_dashboard/manager_dashboard/create.html @@ -65,6 +65,9 @@ + diff --git a/manager_dashboard/manager_dashboard/index.html b/manager_dashboard/manager_dashboard/index.html index 984655b8e..975bb05ee 100644 --- a/manager_dashboard/manager_dashboard/index.html +++ b/manager_dashboard/manager_dashboard/index.html @@ -63,6 +63,9 @@ + diff --git a/manager_dashboard/manager_dashboard/js/forms-tutorial.js b/manager_dashboard/manager_dashboard/js/forms-tutorial.js new file mode 100644 index 000000000..5597f194d --- /dev/null +++ b/manager_dashboard/manager_dashboard/js/forms-tutorial.js @@ -0,0 +1,175 @@ +//auto expand textarea +function adjust_textarea(h) { + h.style.height = "20px"; + h.style.height = (h.scrollHeight)+"px"; +} + +function initForm() { + displayProjectTypeForm("build_area") +} + + + +function displayProjectTypeForm(projectType) { + document.getElementById("projectType").value = projectType; + switch (projectType) { + case "build_area": + displayTileServer("bing", "A"); + document.getElementById("form_zoom_level").style.display = "block"; + document.getElementById("form_tile_server_a").style.display = "block"; + document.getElementById("form_tile_server_b").style.display = "None"; + break; + case "footprint": + displayTileServer("bing", "A"); + document.getElementById("form_zoom_level").style.display = "None"; + document.getElementById("form_tile_server_a").style.display = "block"; + document.getElementById("form_tile_server_b").style.display = "None"; + break; + case "change_detection": + case "completeness": + displayTileServer("bing", "A"); + displayTileServer("bing", "B"); + document.getElementById("form_zoom_level").style.display = "block"; + document.getElementById("form_tile_server_a").style.display = "block"; + document.getElementById("form_tile_server_b").style.display = "block"; + break; + } +} + +function addTileServerCredits (tileServerName, which) { + var credits = { + "bing": "© 2019 Microsoft Corporation, Earthstar Geographics SIO", + "maxar_premium": "© 2019 Maxar", + "maxar_standard": "© 2019 Maxar", + "esri": "© 2019 ESRI", + "esri_beta": "© 2019 ESRI", + "mapbox": "© 2019 MapBox", + "sinergise": "© 2019 Sinergise", + "custom": "Please add imagery credits here." + } + document.getElementById("tileServer"+which+"Credits").value = credits[tileServerName] +} + + +function displayTileServer (tileServerName, which) { + switch (tileServerName) { + case "custom": + document.getElementById("tileServer"+which+"UrlField").style.display = "block"; + document.getElementById("tileServer"+which+"LayerNameField").style.display = "block"; + break; + case "sinergise": + document.getElementById("tileServer"+which+"UrlField").style.display = "None"; + document.getElementById("tileServer"+which+"LayerNameField").style.display = "block"; + break; + default: + document.getElementById("tileServer"+which+"UrlField").style.display = "None"; + document.getElementById("tileServer"+which+"LayerNameField").style.display = "None"; + } + addTileServerCredits(tileServerName, which) +} + +function clear_fields() { + console.log('clear fields.') + displayProjectTypeForm("build_area") + } + +function displaySuccessMessage() { + //document.getElementById("import-formular").style.display = "None"; + alert('Your project has been uploaded. It can take up to one hour for the project to appear in the dashboard.') +} + +function displayImportForm() { + document.getElementById("import-formular").style.display = "block"; +} + +function openJsonFile(event) { + var input = event.target; + + // clear info field + var info_output = document.getElementById("screenInfo"); + info_output.innerHTML = ''; + info_output.style.display = 'block' + + // Check file size before loading + var filesize = input.files[0].size; + if (filesize > 1 * 1024 * 1024) { + var err='filesize is too big (max 1MB): ' + filesize/(1000*1000) + info_output.innerHTML = 'Error reading GeoJSON file
' + err; + info_output.style.display = 'block' + } else { + info_output.innerHTML += 'File Size is valid
'; + info_output.style.display = 'block' + + var reader = new FileReader(); + reader.onload = function(){ + + try { + var text = reader.result; + var screensJsonData = JSON.parse(text) + // check number of screens + numberOfScreens = Object.keys(screensJsonData).length + console.log('number of screens: ' + numberOfScreens) + + info_output.innerHTML += 'Number of Screens: ' + numberOfScreens + '
'; + info_output.style.display = 'block' + screens = text + + } + catch(err) { + info_output.innerHTML = 'Error reading JSON file
' + err; + info_output.style.display = 'block' + } + }; + reader.readAsText(input.files[0]); + } + }; + +function openGeoJsonFile(event) { + var input = event.target; + + // clear info field + var info_output = document.getElementById("tutorialTasksInfo"); + info_output.innerHTML = ''; + info_output.style.display = 'block' + + // Check file size before loading + var filesize = input.files[0].size; + if (filesize > 1 * 1024 * 1024) { + var err='filesize is too big (max 1MB): ' + filesize/(1000*1000) + info_output.innerHTML = 'Error reading GeoJSON file
' + err; + info_output.style.display = 'block' + } else { + info_output.innerHTML += 'File Size is valid
'; + info_output.style.display = 'block' + + var reader = new FileReader(); + reader.onload = function(){ + + try { + var text = reader.result; + var geoJsonData = JSON.parse(text) + // check number of screens + numberOfFeatures = Object.keys(geoJsonData["features"]).length + console.log('number of features: ' + numberOfFeatures) + + info_output.innerHTML += 'Number of Features: ' + numberOfFeatures + '
'; + info_output.style.display = 'block' + tutorialTasks = text + + } + catch(err) { + info_output.innerHTML = 'Error reading GeoJSON file
' + err; + info_output.style.display = 'block' + } + }; + reader.readAsText(input.files[0]); + } + }; + + +function closeModal() { + var modal = document.getElementById("uploadModal"); + modal.style.display = "none"; + var modalSuccess = document.getElementById("modalSuccess"); + modalSuccess.style.display = "none"; +} diff --git a/manager_dashboard/manager_dashboard/js/upload-tutorial.js b/manager_dashboard/manager_dashboard/js/upload-tutorial.js new file mode 100644 index 000000000..7f3f43c9b --- /dev/null +++ b/manager_dashboard/manager_dashboard/js/upload-tutorial.js @@ -0,0 +1,95 @@ +var database = firebase.database(); + + +function getFormInput() { + var form_data = { + lookFor: document.getElementById("lookFor").value, + createdBy: currentUid + } + + // add project type specific attributes + projectType = document.getElementById("projectType").value + switch (projectType) { + case "build_area": + form_data.projectType = 1; + form_data.zoomLevel = parseInt(document.getElementById("zoomLevel").value); + form_data.tileServer = { + name: document.getElementById("tileServerAName").value, + url: document.getElementById("tileServerAUrl").value, + wmtsLayerName: document.getElementById("tileServerALayerName").value, + credits: document.getElementById("tileServerACredits").value + }; + break; + case "footprint": + form_data.projectType = 2; + form_data.tileServer = { + name: document.getElementById("tileServerAName").value, + url: document.getElementById("tileServerAUrl").value, + wmtsLayerName: document.getElementById("tileServerALayerName").value, + credits: document.getElementById("tileServerACredits").value + }; + break; + case "change_detection": + case "completeness": + if (projectType == "change_detection") { + form_data.projectType = 3; + } else { + form_data.projectType = 4; + } + form_data.zoomLevel = parseInt(document.getElementById("zoomLevel").value); + form_data.tileServer = { + name: document.getElementById("tileServerAName").value, + url: document.getElementById("tileServerAUrl").value, + wmtsLayerName: document.getElementById("tileServerALayerName").value, + credits: document.getElementById("tileServerACredits").value + }; + form_data.tileServerB = { + name: document.getElementById("tileServerBName").value, + url: document.getElementById("tileServerBUrl").value, + wmtsLayerName: document.getElementById("tileServerBLayerName").value, + credits: document.getElementById("tileServerBCredits").value + }; + break; + } + + form_data.screens = JSON.parse(screens) + form_data.tutorialTasks = JSON.parse(tutorialTasks) + + form_data.name = projectType + '_tutorial_' + form_data.lookFor + form_data.status = projectType + '_tutorial_' + form_data.lookFor + return form_data +} + +function upload_to_firebase() { + switch (currentUid) { + case null: + alert("You are not logged in."); + default: + var modal = document.getElementById("uploadModal"); + modal.style.display = "block"; + var modalOngoing = document.getElementById("modalOngoing"); + modalOngoing.style.display = "block"; + + var modal = document.getElementById("uploadModal"); + modal.style.display = "block"; + + // get form data + // TODO: add checks if all input values are valid, e.g. image available + mapswipe_import = getFormInput() + + // TODO: unwrap this here and use separate function and await + firebase.database().ref('v2/tutorialDrafts/').push().set(mapswipe_import) + .then(function() { + clear_fields(); + var modalOngoing = document.getElementById("modalOngoing"); + modalOngoing.style.display = "none"; + var modalSuccess = document.getElementById("modalSuccess"); + modalSuccess.style.display = "block"; + }) + .catch(function(error) { + modal.style.display = "none"; + alert('could not upload data: ' + error); + }); + + } +} diff --git a/manager_dashboard/manager_dashboard/manage.html b/manager_dashboard/manager_dashboard/manage.html index d68dc0750..9cd0409fd 100644 --- a/manager_dashboard/manager_dashboard/manage.html +++ b/manager_dashboard/manager_dashboard/manage.html @@ -63,6 +63,9 @@ + diff --git a/manager_dashboard/manager_dashboard/teams.html b/manager_dashboard/manager_dashboard/teams.html index d9d554ba3..ba0b663f0 100644 --- a/manager_dashboard/manager_dashboard/teams.html +++ b/manager_dashboard/manager_dashboard/teams.html @@ -63,6 +63,9 @@ + diff --git a/manager_dashboard/manager_dashboard/tutorial.html b/manager_dashboard/manager_dashboard/tutorial.html new file mode 100644 index 000000000..b00e44094 --- /dev/null +++ b/manager_dashboard/manager_dashboard/tutorial.html @@ -0,0 +1,278 @@ + + + + + + + Project Tutorial | MapSwipe + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

Please log in first.

+
+
+ + + +
+
+ Copyright © 2019 MapSwipe +
+
+ + + + + + + + + + + + + + diff --git a/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json new file mode 100644 index 000000000..133bf9b8a --- /dev/null +++ b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json @@ -0,0 +1,98 @@ +{ + "1": { + "instructions": { + "title": "There's some waste in this image", + "description": "Tap once where you think you can see waste.", + "icon": "tap-1" + }, + "success": { + "title": "You found your first area with waste!", + "description": "Swipe to the next screen to look for more", + "icon": "check" + } + }, + "2": { + "instructions": { + "title": "We're not sure about this one", + "description": "Tap Twice to indicate there might be waste.", + "icon": "tap-2" + }, + "success": { + "title": "Nice. Use this whenever you're unsure", + "description": "Swipe to the next screen to learn more.", + "icon": "check" + } + }, + "3": { + "instructions": { + "title": "Some of the imagery is missing here", + "description": "Tap 3 times to mark the tile red.", + "icon": "tap-3" + }, + "success": { + "title": "Great stuff!", + "description": "Swipe to keep on going", + "icon": "check" + } + }, + "4": { + "instructions": { + "title": "Often, there will be no waste on screen.", + "description": "You can just swipe to the next screen.", + "icon": "swipe-left" + } + }, + "5": { + "instructions": { + "title": "Find all the waste", + "description": "Mark all the tiles using what you've learned. You can show answers if you get stuck", + "icon": "tap" + }, + "success": { + "title": "Well done, you found all the waste!", + "description": "Swipe to practice some more.", + "icon": "check" + } + }, + "6": { + "instructions": { + "title": "Let's try another trickier one.", + "description": "Remember, tap once for waste, twice for maybe, three times for poor imagery.", + "icon": "tap" + }, + "success": { + "title": "Well done, you found all the waste!", + "description": "Swipe to practice some more.", + "icon": "check" + }, + "hint": { + "title": "This is how the tiles should look.", + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left" + } + }, + "7": { + "instructions": { + "title": "It's all bad imagery... so many taps", + "description": "When every tiles is bad imagery, you can swipe down to mark all tiles red.", + "icon": "swipe-down" + }, + "success": { + "title": "Perfect", + "description": "This could save you a lot of tapping. Swipe to learn more.", + "icon": "check" + } + }, + "8": { + "instructions": { + "title": "How to reset a screen?", + "description": "You can undo and clear the color of every tile by swiping up.", + "icon": "swipe-up" + }, + "success": { + "title": "Cool", + "description": "This could save you a lot of tapping. Swipe to learn more.", + "icon": "check" + } + } +} \ No newline at end of file From 8b4a62f6f17eed9ed199f2204044a05b8cf1e0f8 Mon Sep 17 00:00:00 2001 From: Hagellach37 Date: Tue, 18 Aug 2020 12:53:32 +0200 Subject: [PATCH 46/69] Update database.rules.json adjust db rules to allow completeness tutorial --- firebase/database.rules.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/firebase/database.rules.json b/firebase/database.rules.json index 44072f6d7..b7bcc5e77 100644 --- a/firebase/database.rules.json +++ b/firebase/database.rules.json @@ -15,6 +15,8 @@ || (auth != null && query.orderByChild == 'status' && query.equalTo == 'build_area_tutorial' && query.limitToFirst == 1) || + (auth != null && query.orderByChild == 'status' && query.equalTo == 'completeness_tutorial' && query.limitToFirst == 1) + || // only team members can query by their own teamId (auth != null && query.orderByChild == 'teamId' && query.equalTo == root.child('/v2/users/'+auth.uid+'/teamId').val()) @@ -137,4 +139,4 @@ } } } -} \ No newline at end of file +} From 64fb4f9548d9478dcbdd9a11015e63b27c72f0b6 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 20 Aug 2020 17:35:28 +0200 Subject: [PATCH 47/69] change datastructure for tutorials --- .../manager_dashboard/js/upload-tutorial.js | 1 - .../mapswipe_workers/mapswipe_workers.py | 44 ++++++++++++------- .../project_types/base/tutorial.py | 4 +- .../tile_map_service_grid/tutorial.py | 33 +++++++------- 4 files changed, 46 insertions(+), 36 deletions(-) diff --git a/manager_dashboard/manager_dashboard/js/upload-tutorial.js b/manager_dashboard/manager_dashboard/js/upload-tutorial.js index 7f3f43c9b..f4d64b2f6 100644 --- a/manager_dashboard/manager_dashboard/js/upload-tutorial.js +++ b/manager_dashboard/manager_dashboard/js/upload-tutorial.js @@ -56,7 +56,6 @@ function getFormInput() { form_data.tutorialTasks = JSON.parse(tutorialTasks) form_data.name = projectType + '_tutorial_' + form_data.lookFor - form_data.status = projectType + '_tutorial_' + form_data.lookFor return form_data } diff --git a/mapswipe_workers/mapswipe_workers/mapswipe_workers.py b/mapswipe_workers/mapswipe_workers/mapswipe_workers.py index ebc347adc..d8e4ebe49 100644 --- a/mapswipe_workers/mapswipe_workers/mapswipe_workers.py +++ b/mapswipe_workers/mapswipe_workers/mapswipe_workers.py @@ -1,7 +1,6 @@ """Command Line Interface for MapSwipe Workers.""" import ast -import json import time import click @@ -258,23 +257,36 @@ def run_team_management(team_name, team_id, action) -> None: @cli.command("create-tutorial") -@click.option( - "--input-file", help=(f"A JSON file of the tutorial."), required=True, type=str, -) -def run_create_tutorial(input_file) -> None: +def run_create_tutorial() -> None: """Create a tutorial project from provided JSON file.""" - try: - logger.info(f"will generate tutorial based on {input_file}") - with open(input_file) as json_file: - tutorial_draft = json.load(json_file) + + fb_db = auth.firebaseDB() + ref = fb_db.reference("v2/tutorialDrafts/") + tutorial_drafts = ref.get() + + if tutorial_drafts is None: + logger.info("There are no tutorial drafts in firebase.") + return None + + for tutorial_draft_id, tutorial_draft in tutorial_drafts.items(): + tutorial_draft["tutorialDraftId"] = tutorial_draft_id project_type = tutorial_draft["projectType"] - tutorial = ProjectType(project_type).tutorial(tutorial_draft) - tutorial.create_tutorial_groups() - tutorial.create_tutorial_tasks() - tutorial.save_tutorial() - except Exception: - logger.exception("Tutorials could not be created.") - sentry.capture_exception() + project_name = tutorial_draft["name"] + + try: + tutorial = ProjectType(project_type).tutorial(tutorial_draft) + tutorial.create_tutorial_groups() + tutorial.create_tutorial_tasks() + tutorial.save_tutorial() + send_slack_message(MessageType.SUCCESS, project_name, tutorial.projectId) + logger.info(f"Success: Tutorial Creation ({project_name})") + except CustomError: + ref = fb_db.reference(f"v2/tutorialDrafts/{tutorial_draft_id}") + ref.set({}) + send_slack_message(MessageType.FAIL, project_name, tutorial.projectId) + logger.exception("Failed: Project Creation ({0}))".format(project_name)) + sentry.capture_exception() + continue @cli.command("archive") diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py index f217fbca8..e31771ce8 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py @@ -10,8 +10,8 @@ def __init__(self, tutorial_draft): """The function to initialize a new tutorial.""" self.lookFor = tutorial_draft["lookFor"] self.name = tutorial_draft["name"] - self.projectId = tutorial_draft["projectId"] - self.projectDetails = tutorial_draft["projectDetails"] + self.projectId = tutorial_draft["name"] + self.projectDetails = "This is a tutorial" self.progress = 0 self.contributorCount = 0 diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py index c32514e96..4b4ba6221 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py @@ -1,4 +1,3 @@ -import json from mapswipe_workers.definitions import logger from mapswipe_workers.project_types.base.tutorial import BaseTutorial from mapswipe_workers.project_types.base.tile_server import BaseTileServer @@ -15,8 +14,8 @@ def __init__(self, tutorial_draft): self.projectType = tutorial_draft["projectType"] self.zoomLevel = int(tutorial_draft.get("zoomLevel", 18)) self.tileServer = vars(BaseTileServer(tutorial_draft["tileServer"])) - self.examplesFile = tutorial_draft["examplesFile"] - self.categories = tutorial_draft["categories"] + self.tutorial_tasks = tutorial_draft["tutorialTasks"] + self.screens = tutorial_draft["screens"] self.groups = dict() self.tasks = dict() @@ -34,14 +33,10 @@ def __init__(self, tutorial_draft): self.status = status_dict[self.projectType] def create_tutorial_groups(self): - """Create a single group for the tutorial based on provided examples in geojson file.""" + """Create group for the tutorial based on provided examples in geojson file.""" # load examples/tasks from file - with open(self.examplesFile, "r") as f: - self.raw_tasks = json.load(f)[ - "features" - ] # get list of features from geojson file - number_of_screens = len(self.categories) + number_of_screens = len(self.screens) # create the groups dict to be uploaded in Firebase self.groups[101] = { "xMax": 100 @@ -50,14 +45,14 @@ def create_tutorial_groups(self): "xMin": 100, # this will be always set to 100 "yMax": 131074, # this is set to be at the equator "yMin": 131072, # this is set to be at the equator - "requiredCount": 5, # this is not needed from back end perspective, maybe for client - "finishedCount": 0, # this is not needed from back end perspective, maybe for client + "requiredCount": 5, # this is not needed from back end perspective + "finishedCount": 0, # this is not needed from back end perspective "groupId": 101, # a tutorial has only one group "projectId": self.projectId, "numberOfTasks": len( - self.raw_tasks + self.tutorial_tasks ), # this depends on the number of screens/tasks to show - "progress": 0, # this is not needed from back end perspective, maybe for client + "progress": 0, # this is not needed from back end perspective } if self.projectType in [3]: @@ -77,13 +72,17 @@ def create_tutorial_tasks(self): self.tasks = dict() self.tasks[101] = list() - number_of_screens = len(self.categories) + number_of_screens = len(self.screens) for screen in range(1, number_of_screens + 1): # get all tasks for this screen + raw_tasks_screen = [ - d for d in self.raw_tasks if d["properties"]["screen"] in [screen] + d + for d in self.tutorial_tasks["features"] + if d["properties"]["screen"] in [screen] ] + # sort by tile_x and tile_y raw_tasks_screen_sorted = sorted( raw_tasks_screen, @@ -109,8 +108,8 @@ def create_tutorial_tasks(self): task = { "taskId_real": f"{self.zoomLevel}-{tile_x}-{tile_y}", "taskId": f"{self.zoomLevel}-{tile_x_tutorial}-{tile_y_tutorial}", - "taskX": tile_x_tutorial, # need to set this correctly based on screen - "taskY": tile_y_tutorial, # need to set this correctly based on screen + "taskX": tile_x_tutorial, # need to set this based on screen + "taskY": tile_y_tutorial, # need to set this based on screen "groupId": 101, # a tutorial has only one group "projectId": self.projectId, "referenceAnswer": raw_task["properties"]["reference"], From f47027e8cd779997665f7ba216fd98d310f6835c Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 20 Aug 2020 18:28:32 +0200 Subject: [PATCH 48/69] add solid waste tutorial --- .../project_types/base/tutorial.py | 5 ++ .../tile_map_service_grid/tutorial.py | 2 +- .../solid_waste_tutorial_tasks.geojson | 55 +++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 mapswipe_workers/sample_data/build_area/solid_waste_tutorial_tasks.geojson diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py index e31771ce8..cae1f7e26 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py @@ -11,6 +11,7 @@ def __init__(self, tutorial_draft): self.lookFor = tutorial_draft["lookFor"] self.name = tutorial_draft["name"] self.projectId = tutorial_draft["name"] + self.tutorialDraftId = tutorial_draft["tutorialDraftId"] self.projectDetails = "This is a tutorial" self.progress = 0 self.contributorCount = 0 @@ -26,6 +27,7 @@ def save_tutorial(self): tutorial.pop("tasks", None) tutorial.pop("raw_tasks", None) tutorial.pop("examplesFile", None) + tutorial.pop("tutorial_tasks", None) fb_db = auth.firebaseDB() ref = fb_db.reference("") @@ -46,6 +48,9 @@ def save_tutorial(self): logger.info(f"uploaded tutorial data to firebase for {self.projectId}") + ref = fb_db.reference(f"v2/tutorialDrafts/{self.tutorialDraftId}") + ref.set({}) + @abstractmethod def create_tutorial_groups(): pass diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py index 4b4ba6221..bfa08ef3d 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py @@ -113,7 +113,7 @@ def create_tutorial_tasks(self): "groupId": 101, # a tutorial has only one group "projectId": self.projectId, "referenceAnswer": raw_task["properties"]["reference"], - "category": raw_task["properties"]["category"], + "screen": raw_task["properties"]["screen"], "url": t.tile_coords_zoom_and_tileserver_to_url( tile_x, tile_y, self.zoomLevel, self.tileServer ), diff --git a/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_tasks.geojson b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_tasks.geojson new file mode 100644 index 000000000..741be1e4b --- /dev/null +++ b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_tasks.geojson @@ -0,0 +1,55 @@ +{ +"type": "FeatureCollection", +"name": "solid_waste_tutorial_tasks", +"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, +"features": [ +{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001565-974060", "tile_x": 1001565, "tile_y": 974060, "tile_z": 21, "screen": 3, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.069972991943359, 12.6865643428187 ], [ -8.06980133056641, 12.6865643428187 ], [ -8.06980133056641, 12.6863968723155 ], [ -8.069972991943359, 12.6863968723155 ], [ -8.069972991943359, 12.6865643428187 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001565-974061", "tile_x": 1001565, "tile_y": 974061, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.069972991943359, 12.6863968723155 ], [ -8.06980133056641, 12.6863968723155 ], [ -8.06980133056641, 12.686229401702001 ], [ -8.069972991943359, 12.686229401702001 ], [ -8.069972991943359, 12.6863968723155 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001565-974062", "tile_x": 1001565, "tile_y": 974062, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.069972991943359, 12.686229401702001 ], [ -8.06980133056641, 12.686229401702001 ], [ -8.06980133056641, 12.686061930978401 ], [ -8.069972991943359, 12.686061930978401 ], [ -8.069972991943359, 12.686229401702001 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001566-974060", "tile_x": 1001566, "tile_y": 974060, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06980133056641, 12.6865643428187 ], [ -8.06962966918945, 12.6865643428187 ], [ -8.06962966918945, 12.6863968723155 ], [ -8.06980133056641, 12.6863968723155 ], [ -8.06980133056641, 12.6865643428187 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001566-974061", "tile_x": 1001566, "tile_y": 974061, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06980133056641, 12.6863968723155 ], [ -8.06962966918945, 12.6863968723155 ], [ -8.06962966918945, 12.686229401702001 ], [ -8.06980133056641, 12.686229401702001 ], [ -8.06980133056641, 12.6863968723155 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001566-974062", "tile_x": 1001566, "tile_y": 974062, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06980133056641, 12.686229401702001 ], [ -8.06962966918945, 12.686229401702001 ], [ -8.06962966918945, 12.686061930978401 ], [ -8.06980133056641, 12.686061930978401 ], [ -8.06980133056641, 12.686229401702001 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001548-974078", "tile_x": 1001548, "tile_y": 974078, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072891235351561, 12.6835498569018 ], [ -8.072719573974609, 12.6835498569018 ], [ -8.072719573974609, 12.6833823844153 ], [ -8.072891235351561, 12.6833823844153 ], [ -8.072891235351561, 12.6835498569018 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001548-974079", "tile_x": 1001548, "tile_y": 974079, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072891235351561, 12.6833823844153 ], [ -8.072719573974609, 12.6833823844153 ], [ -8.072719573974609, 12.6832149118187 ], [ -8.072891235351561, 12.6832149118187 ], [ -8.072891235351561, 12.6833823844153 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001548-974080", "tile_x": 1001548, "tile_y": 974080, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072891235351561, 12.6832149118187 ], [ -8.072719573974609, 12.6832149118187 ], [ -8.072719573974609, 12.6830474391118 ], [ -8.072891235351561, 12.6830474391118 ], [ -8.072891235351561, 12.6832149118187 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001549-974078", "tile_x": 1001549, "tile_y": 974078, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072719573974609, 12.6835498569018 ], [ -8.07254791259766, 12.6835498569018 ], [ -8.07254791259766, 12.6833823844153 ], [ -8.072719573974609, 12.6833823844153 ], [ -8.072719573974609, 12.6835498569018 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001549-974079", "tile_x": 1001549, "tile_y": 974079, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072719573974609, 12.6833823844153 ], [ -8.07254791259766, 12.6833823844153 ], [ -8.07254791259766, 12.6832149118187 ], [ -8.072719573974609, 12.6832149118187 ], [ -8.072719573974609, 12.6833823844153 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001549-974080", "tile_x": 1001549, "tile_y": 974080, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072719573974609, 12.6832149118187 ], [ -8.07254791259766, 12.6832149118187 ], [ -8.07254791259766, 12.6830474391118 ], [ -8.072719573974609, 12.6830474391118 ], [ -8.072719573974609, 12.6832149118187 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001608-974111", "tile_x": 1001608, "tile_y": 974111, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06259155273438, 12.6780232066862 ], [ -8.06241989135742, 12.6780232066862 ], [ -8.06241989135742, 12.6778557305649 ], [ -8.06259155273438, 12.6778557305649 ], [ -8.06259155273438, 12.6780232066862 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001608-974112", "tile_x": 1001608, "tile_y": 974112, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06259155273438, 12.6778557305649 ], [ -8.06241989135742, 12.6778557305649 ], [ -8.06241989135742, 12.6776882543335 ], [ -8.06259155273438, 12.6776882543335 ], [ -8.06259155273438, 12.6778557305649 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001608-974113", "tile_x": 1001608, "tile_y": 974113, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06259155273438, 12.6776882543335 ], [ -8.06241989135742, 12.6776882543335 ], [ -8.06241989135742, 12.6775207779919 ], [ -8.06259155273438, 12.6775207779919 ], [ -8.06259155273438, 12.6776882543335 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001609-974111", "tile_x": 1001609, "tile_y": 974111, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06241989135742, 12.6780232066862 ], [ -8.062248229980471, 12.6780232066862 ], [ -8.062248229980471, 12.6778557305649 ], [ -8.06241989135742, 12.6778557305649 ], [ -8.06241989135742, 12.6780232066862 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001609-974112", "tile_x": 1001609, "tile_y": 974112, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06241989135742, 12.6778557305649 ], [ -8.062248229980471, 12.6778557305649 ], [ -8.062248229980471, 12.6776882543335 ], [ -8.06241989135742, 12.6776882543335 ], [ -8.06241989135742, 12.6778557305649 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001609-974113", "tile_x": 1001609, "tile_y": 974113, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06241989135742, 12.6776882543335 ], [ -8.062248229980471, 12.6776882543335 ], [ -8.062248229980471, 12.6775207779919 ], [ -8.06241989135742, 12.6775207779919 ], [ -8.06241989135742, 12.6776882543335 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g148", "taskId": "21-1001756-974176", "tile_x": 1001756, "tile_y": 974176, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037185668945311, 12.6671370298053 ], [ -8.037014007568359, 12.6671370298053 ], [ -8.037014007568359, 12.6669695465289 ], [ -8.037185668945311, 12.6669695465289 ], [ -8.037185668945311, 12.6671370298053 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g148", "taskId": "21-1001757-974176", "tile_x": 1001757, "tile_y": 974176, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037014007568359, 12.6671370298053 ], [ -8.03684234619141, 12.6671370298053 ], [ -8.03684234619141, 12.6669695465289 ], [ -8.037014007568359, 12.6669695465289 ], [ -8.037014007568359, 12.6671370298053 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001724-974177", "tile_x": 1001724, "tile_y": 974177, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042678833007811, 12.6669695465289 ], [ -8.042507171630859, 12.6669695465289 ], [ -8.042507171630859, 12.6668020631424 ], [ -8.042678833007811, 12.6668020631424 ], [ -8.042678833007811, 12.6669695465289 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001724-974178", "tile_x": 1001724, "tile_y": 974178, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042678833007811, 12.6668020631424 ], [ -8.042507171630859, 12.6668020631424 ], [ -8.042507171630859, 12.666634579645899 ], [ -8.042678833007811, 12.666634579645899 ], [ -8.042678833007811, 12.6668020631424 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001724-974179", "tile_x": 1001724, "tile_y": 974179, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042678833007811, 12.666634579645899 ], [ -8.042507171630859, 12.666634579645899 ], [ -8.042507171630859, 12.6664670960393 ], [ -8.042678833007811, 12.6664670960393 ], [ -8.042678833007811, 12.666634579645899 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001725-974177", "tile_x": 1001725, "tile_y": 974177, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042507171630859, 12.6669695465289 ], [ -8.04233551025391, 12.6669695465289 ], [ -8.04233551025391, 12.6668020631424 ], [ -8.042507171630859, 12.6668020631424 ], [ -8.042507171630859, 12.6669695465289 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001725-974178", "tile_x": 1001725, "tile_y": 974178, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042507171630859, 12.6668020631424 ], [ -8.04233551025391, 12.6668020631424 ], [ -8.04233551025391, 12.666634579645899 ], [ -8.042507171630859, 12.666634579645899 ], [ -8.042507171630859, 12.6668020631424 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001725-974179", "tile_x": 1001725, "tile_y": 974179, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042507171630859, 12.666634579645899 ], [ -8.04233551025391, 12.666634579645899 ], [ -8.04233551025391, 12.6664670960393 ], [ -8.042507171630859, 12.6664670960393 ], [ -8.042507171630859, 12.666634579645899 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001751-974179", "tile_x": 1001751, "tile_y": 974179, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03804397583008, 12.666634579645899 ], [ -8.03787231445312, 12.666634579645899 ], [ -8.03787231445312, 12.6664670960393 ], [ -8.03804397583008, 12.6664670960393 ], [ -8.03804397583008, 12.666634579645899 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001752-974179", "tile_x": 1001752, "tile_y": 974179, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03787231445312, 12.666634579645899 ], [ -8.03770065307617, 12.666634579645899 ], [ -8.03770065307617, 12.6664670960393 ], [ -8.03787231445312, 12.6664670960393 ], [ -8.03787231445312, 12.666634579645899 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001756-974177", "tile_x": 1001756, "tile_y": 974177, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037185668945311, 12.6669695465289 ], [ -8.037014007568359, 12.6669695465289 ], [ -8.037014007568359, 12.6668020631424 ], [ -8.037185668945311, 12.6668020631424 ], [ -8.037185668945311, 12.6669695465289 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001756-974178", "tile_x": 1001756, "tile_y": 974178, "tile_z": 21, "screen": 2, "reference": 2 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037185668945311, 12.6668020631424 ], [ -8.037014007568359, 12.6668020631424 ], [ -8.037014007568359, 12.666634579645899 ], [ -8.037185668945311, 12.666634579645899 ], [ -8.037185668945311, 12.6668020631424 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001757-974177", "tile_x": 1001757, "tile_y": 974177, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037014007568359, 12.6669695465289 ], [ -8.03684234619141, 12.6669695465289 ], [ -8.03684234619141, 12.6668020631424 ], [ -8.037014007568359, 12.6668020631424 ], [ -8.037014007568359, 12.6669695465289 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001757-974178", "tile_x": 1001757, "tile_y": 974178, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037014007568359, 12.6668020631424 ], [ -8.03684234619141, 12.6668020631424 ], [ -8.03684234619141, 12.666634579645899 ], [ -8.037014007568359, 12.666634579645899 ], [ -8.037014007568359, 12.6668020631424 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001726-974181", "tile_x": 1001726, "tile_y": 974181, "tile_z": 21, "screen": 6, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04233551025391, 12.6662996123227 ], [ -8.04216384887695, 12.6662996123227 ], [ -8.04216384887695, 12.6661321284961 ], [ -8.04233551025391, 12.6661321284961 ], [ -8.04233551025391, 12.6662996123227 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001726-974182", "tile_x": 1001726, "tile_y": 974182, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04233551025391, 12.6661321284961 ], [ -8.04216384887695, 12.6661321284961 ], [ -8.04216384887695, 12.6659646445595 ], [ -8.04233551025391, 12.6659646445595 ], [ -8.04233551025391, 12.6661321284961 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001727-974181", "tile_x": 1001727, "tile_y": 974181, "tile_z": 21, "screen": 6, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04216384887695, 12.6662996123227 ], [ -8.0419921875, 12.6662996123227 ], [ -8.0419921875, 12.6661321284961 ], [ -8.04216384887695, 12.6661321284961 ], [ -8.04216384887695, 12.6662996123227 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001727-974182", "tile_x": 1001727, "tile_y": 974182, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04216384887695, 12.6661321284961 ], [ -8.0419921875, 12.6661321284961 ], [ -8.0419921875, 12.6659646445595 ], [ -8.04216384887695, 12.6659646445595 ], [ -8.04216384887695, 12.6661321284961 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001735-974180", "tile_x": 1001735, "tile_y": 974180, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04079055786133, 12.6664670960393 ], [ -8.04061889648438, 12.6664670960393 ], [ -8.04061889648438, 12.6662996123227 ], [ -8.04079055786133, 12.6662996123227 ], [ -8.04079055786133, 12.6664670960393 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001735-974181", "tile_x": 1001735, "tile_y": 974181, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04079055786133, 12.6662996123227 ], [ -8.04061889648438, 12.6662996123227 ], [ -8.04061889648438, 12.6661321284961 ], [ -8.04079055786133, 12.6661321284961 ], [ -8.04079055786133, 12.6662996123227 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001735-974182", "tile_x": 1001735, "tile_y": 974182, "tile_z": 21, "screen": 5, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04079055786133, 12.6661321284961 ], [ -8.04061889648438, 12.6661321284961 ], [ -8.04061889648438, 12.6659646445595 ], [ -8.04079055786133, 12.6659646445595 ], [ -8.04079055786133, 12.6661321284961 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001736-974180", "tile_x": 1001736, "tile_y": 974180, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04061889648438, 12.6664670960393 ], [ -8.04044723510742, 12.6664670960393 ], [ -8.04044723510742, 12.6662996123227 ], [ -8.04061889648438, 12.6662996123227 ], [ -8.04061889648438, 12.6664670960393 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001736-974181", "tile_x": 1001736, "tile_y": 974181, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04061889648438, 12.6662996123227 ], [ -8.04044723510742, 12.6662996123227 ], [ -8.04044723510742, 12.6661321284961 ], [ -8.04061889648438, 12.6661321284961 ], [ -8.04061889648438, 12.6662996123227 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001736-974182", "tile_x": 1001736, "tile_y": 974182, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04061889648438, 12.6661321284961 ], [ -8.04044723510742, 12.6661321284961 ], [ -8.04044723510742, 12.6659646445595 ], [ -8.04061889648438, 12.6659646445595 ], [ -8.04061889648438, 12.6661321284961 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001751-974180", "tile_x": 1001751, "tile_y": 974180, "tile_z": 21, "screen": 1, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03804397583008, 12.6664670960393 ], [ -8.03787231445312, 12.6664670960393 ], [ -8.03787231445312, 12.6662996123227 ], [ -8.03804397583008, 12.6662996123227 ], [ -8.03804397583008, 12.6664670960393 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001751-974181", "tile_x": 1001751, "tile_y": 974181, "tile_z": 21, "screen": 1, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03804397583008, 12.6662996123227 ], [ -8.03787231445312, 12.6662996123227 ], [ -8.03787231445312, 12.6661321284961 ], [ -8.03804397583008, 12.6661321284961 ], [ -8.03804397583008, 12.6662996123227 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001752-974180", "tile_x": 1001752, "tile_y": 974180, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03787231445312, 12.6664670960393 ], [ -8.03770065307617, 12.6664670960393 ], [ -8.03770065307617, 12.6662996123227 ], [ -8.03787231445312, 12.6662996123227 ], [ -8.03787231445312, 12.6664670960393 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001752-974181", "tile_x": 1001752, "tile_y": 974181, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03787231445312, 12.6662996123227 ], [ -8.03770065307617, 12.6662996123227 ], [ -8.03770065307617, 12.6661321284961 ], [ -8.03787231445312, 12.6661321284961 ], [ -8.03787231445312, 12.6662996123227 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g154", "taskId": "21-1001726-974183", "tile_x": 1001726, "tile_y": 974183, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04233551025391, 12.6659646445595 ], [ -8.04216384887695, 12.6659646445595 ], [ -8.04216384887695, 12.665797160512801 ], [ -8.04233551025391, 12.665797160512801 ], [ -8.04233551025391, 12.6659646445595 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g154", "taskId": "21-1001727-974183", "tile_x": 1001727, "tile_y": 974183, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04216384887695, 12.6659646445595 ], [ -8.0419921875, 12.6659646445595 ], [ -8.0419921875, 12.665797160512801 ], [ -8.04216384887695, 12.665797160512801 ], [ -8.04216384887695, 12.6659646445595 ] ] ] } } +] +} From 1aa571c63e89451456025bb0e75cab4e41f4b6b7 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 20 Aug 2020 18:35:21 +0200 Subject: [PATCH 49/69] change db rules to query multiple tutorial to allow filter in the app --- firebase/database.rules.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firebase/database.rules.json b/firebase/database.rules.json index 3f3c41fd7..098234f09 100644 --- a/firebase/database.rules.json +++ b/firebase/database.rules.json @@ -13,7 +13,7 @@ // all users can query by status (auth != null && query.orderByChild == 'status' && query.equalTo == 'active') || - (auth != null && query.orderByChild == 'status' && query.equalTo == 'build_area_tutorial' && query.limitToFirst == 1) + (auth != null && query.orderByChild == 'status' && query.equalTo == 'build_area_tutorial' && query.limitToFirst == 5) || // only team members can query by their own teamId (auth != null && query.orderByChild == 'teamId' && From 45f787abd8f05f1d083f11e3d24a11ec6907b299 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 20 Aug 2020 18:36:36 +0200 Subject: [PATCH 50/69] change db rules to query multiple tutorial to allow filter in the app --- firebase/database.rules.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/firebase/database.rules.json b/firebase/database.rules.json index 098234f09..7ed711e95 100644 --- a/firebase/database.rules.json +++ b/firebase/database.rules.json @@ -13,7 +13,9 @@ // all users can query by status (auth != null && query.orderByChild == 'status' && query.equalTo == 'active') || - (auth != null && query.orderByChild == 'status' && query.equalTo == 'build_area_tutorial' && query.limitToFirst == 5) + (auth != null && query.orderByChild == 'status' && query.equalTo == 'build_area_tutorial' && query.limitToFirst == 1) + || + (auth != null && query.orderByChild == 'name' && query.equalTo == 'build_area_tutorial_solid_waste' && query.limitToFirst == 1) || // only team members can query by their own teamId (auth != null && query.orderByChild == 'teamId' && From 84fe8f41eb4d02f7abc1ba5220d5e6a4cd8d67e0 Mon Sep 17 00:00:00 2001 From: h9b Date: Wed, 9 Sep 2020 15:57:55 +0200 Subject: [PATCH 51/69] add image upload to tutorial creation page --- .../manager_dashboard/js/forms-tutorial.js | 21 ++++- .../manager_dashboard/js/upload-tutorial.js | 85 ++++++++++++++++--- .../manager_dashboard/tutorial.html | 14 +++ 3 files changed, 105 insertions(+), 15 deletions(-) diff --git a/manager_dashboard/manager_dashboard/js/forms-tutorial.js b/manager_dashboard/manager_dashboard/js/forms-tutorial.js index 5597f194d..d99d5e32c 100644 --- a/manager_dashboard/manager_dashboard/js/forms-tutorial.js +++ b/manager_dashboard/manager_dashboard/js/forms-tutorial.js @@ -8,7 +8,26 @@ function initForm() { displayProjectTypeForm("build_area") } - +function openImageFile(event) { + var input = event.target; + console.log(event.target.id) + element_id = event.target.id + 'File' + + var reader = new FileReader(); + reader.onload = function(){ + try { + var dataURL = reader.result; + var output = document.getElementById(element_id); + output.src = dataURL; + } + catch(err) { + element_id = event.target.id + 'Text' + var output = document.getElementById(element_id); + output.innerHTML = 'Error reading Image file
' + err; + } + }; + reader.readAsDataURL(input.files[0]); + }; function displayProjectTypeForm(projectType) { document.getElementById("projectType").value = projectType; diff --git a/manager_dashboard/manager_dashboard/js/upload-tutorial.js b/manager_dashboard/manager_dashboard/js/upload-tutorial.js index f4d64b2f6..bec643219 100644 --- a/manager_dashboard/manager_dashboard/js/upload-tutorial.js +++ b/manager_dashboard/manager_dashboard/js/upload-tutorial.js @@ -56,9 +56,53 @@ function getFormInput() { form_data.tutorialTasks = JSON.parse(tutorialTasks) form_data.name = projectType + '_tutorial_' + form_data.lookFor + return form_data } +function upload_project_image(id) { + + var file = document.getElementById(id).files[0] + console.log(file) + var filename = file.name + console.log(filename) + // Create a reference to the image + var storageRef = firebase.storage().ref(); + var projectImageRef = storageRef.child('projectImages/'+filename); + + var uploadImage = projectImageRef.put(file); + uploadImage.on('state_changed', function(snapshot){ + // Observe state change events such as progress, pause, and resume + // Get task progress, including the number of bytes uploaded and the total number of bytes to be uploaded + var progress = (snapshot.bytesTransferred / snapshot.totalBytes) * 100; + console.log('Upload is ' + progress + '% done'); + switch (snapshot.state) { + case firebase.storage.TaskState.PAUSED: // or 'paused' + console.log('Upload is paused'); + break; + case firebase.storage.TaskState.RUNNING: // or 'running' + console.log('Upload is running'); + break; + } + }, function(error) { + // Handle unsuccessful uploads + modal.style.display = "none"; + }, function() { + // Handle successful uploads on complete + // For instance, get the download URL: https://firebasestorage.googleapis.com/... + uploadImage.snapshot.ref.getDownloadURL().then(function(downloadURL) { + console.log('File available at', downloadURL); + if (id == "image1") { + exampleImage1 = downloadURL + } else if (id == "image2") { + exampleImage2 = downloadURL + } + }); + }); + + +} + function upload_to_firebase() { switch (currentUid) { case null: @@ -76,19 +120,32 @@ function upload_to_firebase() { // TODO: add checks if all input values are valid, e.g. image available mapswipe_import = getFormInput() - // TODO: unwrap this here and use separate function and await - firebase.database().ref('v2/tutorialDrafts/').push().set(mapswipe_import) - .then(function() { - clear_fields(); - var modalOngoing = document.getElementById("modalOngoing"); - modalOngoing.style.display = "none"; - var modalSuccess = document.getElementById("modalSuccess"); - modalSuccess.style.display = "block"; - }) - .catch(function(error) { - modal.style.display = "none"; - alert('could not upload data: ' + error); - }); + upload_project_image("image1") + upload_project_image("image2") - } + + // TODO: this should be implemented better... + setTimeout(function() { + + mapswipe_import.exampleImage1 = exampleImage1 + mapswipe_import.exampleImage2 = exampleImage2 + + console.log(mapswipe_import) + + // TODO: unwrap this here and use separate function and await + firebase.database().ref('v2/tutorialDrafts/').push().set(mapswipe_import) + .then(function() { + clear_fields(); + var modalOngoing = document.getElementById("modalOngoing"); + modalOngoing.style.display = "none"; + var modalSuccess = document.getElementById("modalSuccess"); + modalSuccess.style.display = "block"; + }) + .catch(function(error) { + modal.style.display = "none"; + alert('could not upload data: ' + error); + }); + }, 15000) + + } } diff --git a/manager_dashboard/manager_dashboard/tutorial.html b/manager_dashboard/manager_dashboard/tutorial.html index b00e44094..dfab5aa72 100644 --- a/manager_dashboard/manager_dashboard/tutorial.html +++ b/manager_dashboard/manager_dashboard/tutorial.html @@ -149,6 +149,20 @@

Basic Information

It should end with .geojson

+
  • + + + Make sure you have the rights to use this image. It should end with .jpg or .png. +

    + +
  • +
  • + + + Make sure you have the rights to use this image. It should end with .jpg or .png. +

    + +
  • From 5cf43d78cbc19b57a020c402cb2645b1c7a2eeca Mon Sep 17 00:00:00 2001 From: h9b Date: Wed, 9 Sep 2020 16:05:32 +0200 Subject: [PATCH 52/69] add example images as attributes to tutorial --- manager_dashboard/manager_dashboard/js/upload-tutorial.js | 1 - .../mapswipe_workers/project_types/base/tutorial.py | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/manager_dashboard/manager_dashboard/js/upload-tutorial.js b/manager_dashboard/manager_dashboard/js/upload-tutorial.js index bec643219..24d7c7ccf 100644 --- a/manager_dashboard/manager_dashboard/js/upload-tutorial.js +++ b/manager_dashboard/manager_dashboard/js/upload-tutorial.js @@ -146,6 +146,5 @@ function upload_to_firebase() { alert('could not upload data: ' + error); }); }, 15000) - } } diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py index cae1f7e26..4151cb232 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py @@ -15,6 +15,8 @@ def __init__(self, tutorial_draft): self.projectDetails = "This is a tutorial" self.progress = 0 self.contributorCount = 0 + self.exampleImage1 = tutorial_draft.get("exampleImage1", None) + self.exampleImage2 = tutorial_draft.get("exampleImage2", None) def save_tutorial(self): """Save the tutorial in Firebase.""" From 2df97cc46575745f3b380f11c391a8d34df1811b Mon Sep 17 00:00:00 2001 From: h9b Date: Wed, 9 Sep 2020 16:39:26 +0200 Subject: [PATCH 53/69] add max tasks per project to project creation form --- manager_dashboard/manager_dashboard/create.html | 15 ++++++++++++++- manager_dashboard/manager_dashboard/js/forms.js | 13 +++++++++++++ .../manager_dashboard/js/uploadProjects.js | 4 ++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/manager_dashboard/manager_dashboard/create.html b/manager_dashboard/manager_dashboard/create.html index 85df7df25..042696a43 100644 --- a/manager_dashboard/manager_dashboard/create.html +++ b/manager_dashboard/manager_dashboard/create.html @@ -144,7 +144,7 @@

    Basic Project Information

  • - Choose either "public" or select the team for which this project should be displayed. @@ -236,6 +236,19 @@

    Project Tasks Geometry

    +
    +

    Team Settings

    +
    +
      +
    • + + + How many tasks each user is allowed to work on for this project. "-1" indicates that no limit is set. +
    • +
    • +
    +
    +

    Tile Server A

    diff --git a/manager_dashboard/manager_dashboard/js/forms.js b/manager_dashboard/manager_dashboard/js/forms.js index 31a3628a6..56220df2a 100644 --- a/manager_dashboard/manager_dashboard/js/forms.js +++ b/manager_dashboard/manager_dashboard/js/forms.js @@ -54,6 +54,7 @@ function displayProjectTypeForm(projectType) { document.getElementById("form_tile_server_a").style.display = "block"; document.getElementById("form_tile_server_b").style.display = "None"; setTimeout(function(){ ProjectAoiMap.invalidateSize()}, 400); + document.getElementById("form_team_settings").style.display = "None"; break; case "footprint": displayTileServer("bing", "A"); @@ -63,6 +64,7 @@ function displayProjectTypeForm(projectType) { document.getElementById("form_zoom_level").style.display = "None"; document.getElementById("form_tile_server_a").style.display = "block"; document.getElementById("form_tile_server_b").style.display = "None"; + document.getElementById("form_team_settings").style.display = "None"; break; case "change_detection": case "completeness": @@ -79,6 +81,7 @@ function displayProjectTypeForm(projectType) { document.getElementById("form_tile_server_a").style.display = "block"; document.getElementById("form_tile_server_b").style.display = "block"; setTimeout(function(){ ProjectAoiMap.invalidateSize()}, 400); + document.getElementById("form_team_settings").style.display = "None"; break; } } @@ -97,6 +100,16 @@ function addTileServerCredits (tileServerName, which) { document.getElementById("tileServer"+which+"Credits").value = credits[tileServerName] } +function displayTeamSettings (teamId) { + switch (teamId) { + case "public": + document.getElementById("form_team_settings").style.display = "None"; + break; + default: + document.getElementById("form_team_settings").style.display = "block"; + } +} + function displayTileServer (tileServerName, which) { switch (tileServerName) { diff --git a/manager_dashboard/manager_dashboard/js/uploadProjects.js b/manager_dashboard/manager_dashboard/js/uploadProjects.js index dd7099fc7..048ab71d9 100644 --- a/manager_dashboard/manager_dashboard/js/uploadProjects.js +++ b/manager_dashboard/manager_dashboard/js/uploadProjects.js @@ -23,6 +23,10 @@ function getFormInput() { visibility = document.getElementById("visibility").value if (visibility != "public") { form_data.teamId = visibility + maxTasksPerUser = document.getElementById("maxTasksPerUser").value + if (maxTasksPerUser > 0) { + form_data.maxTasksPerUser = maxTasksPerUser + } } // add project type specific attributes From 9cf33caf1af4a3163df0831cde661d5dec480b23 Mon Sep 17 00:00:00 2001 From: h9b Date: Wed, 9 Sep 2020 16:44:19 +0200 Subject: [PATCH 54/69] add max tasks per user to project creation --- mapswipe_workers/mapswipe_workers/project_types/base/project.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/project.py b/mapswipe_workers/mapswipe_workers/project_types/base/project.py index 272ef8622..762173eab 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/project.py @@ -77,6 +77,7 @@ def __init__(self, project_draft): self.status = ( "private_inactive" # private project visible only for team members ) + self.maxTasksPerUser = project_draft.get("maxTasksPerUser", None) # TODO: Implement resultRequiredCounter as property. # Does not work because for some reason project['group'] = vars() From c5490097fc4dd52fe194d61a9d40760629d141c6 Mon Sep 17 00:00:00 2001 From: h9b Date: Wed, 9 Sep 2020 16:49:42 +0200 Subject: [PATCH 55/69] small bugfix duplicate attribute for projectType --- .../project_types/tile_map_service_grid/project.py | 3 +-- .../project_types/tile_map_service_grid/task.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py index b45b554c3..09cb4a37a 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py @@ -17,7 +17,6 @@ class Project(BaseProject): def __init__(self, project_draft: dict): super().__init__(project_draft) - self.project_type = project_draft["projectType"] self.groupSize = project_draft["groupSize"] # Note: this will be overwritten by validate_geometry in mapswipe_workers.py self.geometry = project_draft["geometry"] @@ -25,7 +24,7 @@ def __init__(self, project_draft: dict): self.tileServer = vars(BaseTileServer(project_draft["tileServer"])) # get TileServerB for change detection and completeness type - if self.project_type in [3, 4]: + if self.projectType in [3, 4]: self.tileServerB = vars(BaseTileServer(project_draft["tileServerB"])) def validate_geometries(self): diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/task.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/task.py index 5a3e875fb..4962274bf 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/task.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/task.py @@ -42,7 +42,7 @@ def __init__(self, group: object, project: object, TileX: str, TileY: str): ) # get TileServer B only for change_detection or completeness type - if project.project_type in [3, 4]: + if project.projectType in [3, 4]: self.urlB = t.tile_coords_zoom_and_tileserver_to_url( TileX, TileY, project.zoomLevel, project.tileServerB ) From d9f0a4ee0708ab84fd388146d5db564c32b0efad Mon Sep 17 00:00:00 2001 From: h9b Date: Wed, 9 Sep 2020 16:53:34 +0200 Subject: [PATCH 56/69] maxTasksPerUser as integer --- .../mapswipe_workers/project_types/base/project.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/project.py b/mapswipe_workers/mapswipe_workers/project_types/base/project.py index 762173eab..542f77ca8 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/project.py @@ -77,7 +77,9 @@ def __init__(self, project_draft): self.status = ( "private_inactive" # private project visible only for team members ) - self.maxTasksPerUser = project_draft.get("maxTasksPerUser", None) + max_tasks_per_user = project_draft.get("maxTasksPerUser", None) + if max_tasks_per_user: + self.maxTasksPerUser = int(max_tasks_per_user) # TODO: Implement resultRequiredCounter as property. # Does not work because for some reason project['group'] = vars() From 60577493ad0f0ece3dc7eb04e2bfbe39f9a29181 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 10 Sep 2020 14:26:57 +0200 Subject: [PATCH 57/69] add tutorial and add tutorial Id to project --- .../manager_dashboard/create.html | 6 +++++ .../manager_dashboard/js/forms.js | 26 +++++++++++++++++++ .../manager_dashboard/js/upload-tutorial.js | 5 ++-- .../manager_dashboard/js/uploadProjects.js | 3 ++- .../manager_dashboard/tutorial.html | 4 +-- .../project_types/base/project.py | 2 ++ .../project_types/base/tutorial.py | 6 ++++- .../tile_map_service_grid/tutorial.py | 9 ------- 8 files changed, 45 insertions(+), 16 deletions(-) diff --git a/manager_dashboard/manager_dashboard/create.html b/manager_dashboard/manager_dashboard/create.html index 042696a43..5c07d7b02 100644 --- a/manager_dashboard/manager_dashboard/create.html +++ b/manager_dashboard/manager_dashboard/create.html @@ -164,6 +164,12 @@

    Basic Project Information

    Select the type of your project.
  • +
  • + + + Choose which tutorial should be used for this project. Make sure that this aligns with what you are looking for. +
  • diff --git a/manager_dashboard/manager_dashboard/js/forms.js b/manager_dashboard/manager_dashboard/js/forms.js index 56220df2a..d647a07a5 100644 --- a/manager_dashboard/manager_dashboard/js/forms.js +++ b/manager_dashboard/manager_dashboard/js/forms.js @@ -42,10 +42,33 @@ function initTeams() { } +function initTutorials(projectType) { + // clear all existing options + document.getElementById("tutorial").innerHTML = "" + console.log("init tutorials") + // get teams from firebase + var TutorialsRef = firebase.database().ref("v2/projects").orderByChild("status").equalTo("tutorial"); + TutorialsRef.once('value', function(snapshot){ + if(snapshot.exists()){ + snapshot.forEach(function(data){ + // add teamName to drop down option and set teamId as value + if (data.val().projectType == projectType) { + option = document.createElement('option') + option.innerHTML = data.val().name + option.value = data.key + document.getElementById("tutorial").appendChild(option); + } + }) + } + }) +} + + function displayProjectTypeForm(projectType) { document.getElementById("projectType").value = projectType; switch (projectType) { case "build_area": + initTutorials(1); displayTileServer("bing", "A"); document.getElementById("groupSize").value = 120; document.getElementById("form_project_aoi_geometry").style.display = "block"; @@ -57,6 +80,7 @@ function displayProjectTypeForm(projectType) { document.getElementById("form_team_settings").style.display = "None"; break; case "footprint": + initTutorials(2); displayTileServer("bing", "A"); document.getElementById("groupSize").value = 25; document.getElementById("form_project_aoi_geometry").style.display = "None"; @@ -72,8 +96,10 @@ function displayProjectTypeForm(projectType) { displayTileServer("bing", "B"); if (projectType == "change_detection") { document.getElementById("groupSize").value = 25; + initTutorials(3); } else { document.getElementById("groupSize").value = 80; + initTutorials(4); } document.getElementById("form_project_aoi_geometry").style.display = "block"; document.getElementById("form_project_task_geometry").style.display = "None"; diff --git a/manager_dashboard/manager_dashboard/js/upload-tutorial.js b/manager_dashboard/manager_dashboard/js/upload-tutorial.js index 24d7c7ccf..bb675d23b 100644 --- a/manager_dashboard/manager_dashboard/js/upload-tutorial.js +++ b/manager_dashboard/manager_dashboard/js/upload-tutorial.js @@ -4,7 +4,8 @@ var database = firebase.database(); function getFormInput() { var form_data = { lookFor: document.getElementById("lookFor").value, - createdBy: currentUid + createdBy: currentUid, + name: document.getElementById("name").value } // add project type specific attributes @@ -55,8 +56,6 @@ function getFormInput() { form_data.screens = JSON.parse(screens) form_data.tutorialTasks = JSON.parse(tutorialTasks) - form_data.name = projectType + '_tutorial_' + form_data.lookFor - return form_data } diff --git a/manager_dashboard/manager_dashboard/js/uploadProjects.js b/manager_dashboard/manager_dashboard/js/uploadProjects.js index 048ab71d9..460a62330 100644 --- a/manager_dashboard/manager_dashboard/js/uploadProjects.js +++ b/manager_dashboard/manager_dashboard/js/uploadProjects.js @@ -12,7 +12,8 @@ function getFormInput() { image: image, verificationNumber: parseInt(document.getElementById("verificationNumber").value), groupSize: parseInt(document.getElementById("groupSize").value), - createdBy: currentUid + createdBy: currentUid, + tutorialId: document.getElementById("tutorial").value } form_data.name = form_data.projectTopic + ' - ' + form_data.projectRegion + diff --git a/manager_dashboard/manager_dashboard/tutorial.html b/manager_dashboard/manager_dashboard/tutorial.html index dfab5aa72..0d4480522 100644 --- a/manager_dashboard/manager_dashboard/tutorial.html +++ b/manager_dashboard/manager_dashboard/tutorial.html @@ -134,8 +134,8 @@

    Basic Information

  • -


    [projectType]_[lookFor]

    - We will generate the name or your tutorial based on your inputs above. + + Provide a clear name for your tutorial. You can select tutorials based on their name later during the project creation.
  • diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/project.py b/mapswipe_workers/mapswipe_workers/project_types/base/project.py index 542f77ca8..bf17ef9f5 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/project.py @@ -81,6 +81,8 @@ def __init__(self, project_draft): if max_tasks_per_user: self.maxTasksPerUser = int(max_tasks_per_user) + self.tutorialId = project_draft.get("tutorialId", None) + # TODO: Implement resultRequiredCounter as property. # Does not work because for some reason project['group'] = vars() # and then del project['group'] will delete also project.group. diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py index 4151cb232..3b7c7e499 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py @@ -8,15 +8,19 @@ class BaseTutorial(metaclass=ABCMeta): def __init__(self, tutorial_draft): """The function to initialize a new tutorial.""" + + # the id of the tutorial + self.projectId = f"tutorial_{tutorial_draft['tutorialDraftId']}" self.lookFor = tutorial_draft["lookFor"] self.name = tutorial_draft["name"] - self.projectId = tutorial_draft["name"] self.tutorialDraftId = tutorial_draft["tutorialDraftId"] self.projectDetails = "This is a tutorial" self.progress = 0 self.contributorCount = 0 self.exampleImage1 = tutorial_draft.get("exampleImage1", None) self.exampleImage2 = tutorial_draft.get("exampleImage2", None) + self.status = "tutorial" + self.tutorial = True def save_tutorial(self): """Save the tutorial in Firebase.""" diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py index bfa08ef3d..5ab1e65e4 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py @@ -23,15 +23,6 @@ def __init__(self, tutorial_draft): if self.projectType in [3, 4]: self.tileServerB = vars(BaseTileServer(tutorial_draft["tileServerB"])) - # TODO: make sure that "tutorial" is fine from the app side - # currently it expects "completeness_tutorial" for instance - status_dict = { - 1: "build_area_tutorial", - 3: "change_detection_tutorial", - 4: "completeness_tutorial", - } - self.status = status_dict[self.projectType] - def create_tutorial_groups(self): """Create group for the tutorial based on provided examples in geojson file.""" # load examples/tasks from file From 1412188c9f042bac5624450aab83c093268e05ac Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 10 Sep 2020 18:39:41 +0200 Subject: [PATCH 58/69] remove unused attributes from tutorial --- .../project_types/base/tutorial.py | 2 - .../default_build_area_tutorial_screens.json | 138 ++++++++++++++++++ .../solid_waste_tutorial_screens.json | 132 +++++++++++------ 3 files changed, 224 insertions(+), 48 deletions(-) create mode 100644 mapswipe_workers/sample_data/build_area/default_build_area_tutorial_screens.json diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py index 3b7c7e499..9e87106d2 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py @@ -13,14 +13,12 @@ def __init__(self, tutorial_draft): self.projectId = f"tutorial_{tutorial_draft['tutorialDraftId']}" self.lookFor = tutorial_draft["lookFor"] self.name = tutorial_draft["name"] - self.tutorialDraftId = tutorial_draft["tutorialDraftId"] self.projectDetails = "This is a tutorial" self.progress = 0 self.contributorCount = 0 self.exampleImage1 = tutorial_draft.get("exampleImage1", None) self.exampleImage2 = tutorial_draft.get("exampleImage2", None) self.status = "tutorial" - self.tutorial = True def save_tutorial(self): """Save the tutorial in Firebase.""" diff --git a/mapswipe_workers/sample_data/build_area/default_build_area_tutorial_screens.json b/mapswipe_workers/sample_data/build_area/default_build_area_tutorial_screens.json new file mode 100644 index 000000000..06de9ce9a --- /dev/null +++ b/mapswipe_workers/sample_data/build_area/default_build_area_tutorial_screens.json @@ -0,0 +1,138 @@ +{ + "1": { + "hint": { + "description": "Swipe to learn some more.", + "icon": "swipe-left", + "title": "We've marked the correct square green." + }, + "instructions": { + "description": "Tap once to mark the square with waste green.", + "icon": "tap-1", + "title": "There's some waste in this image" + }, + "success": { + "description": "Swipe to the next screen to look for more.", + "icon": "check", + "title": "You found your first area with waste!" + } + }, + "2": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, + "instructions": { + "description": "Tap the square twice to mark it yellow indicating there might be waste.", + "icon": "tap-2", + "title": "We’re not sure if that’s a pile of waste" + }, + "success": { + "description": "Swipe to the next screen to learn more.", + "icon": "check", + "title": "Nice. Use this whenever you're unsure" + } + }, + "3": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, + "instructions": { + "description": "Tap three times to mark the bad imagery red.", + "icon": "tap-3", + "title": "There’s a square with missing imagery" + }, + "success": { + "description": "Swipe to keep on going", + "icon": "check", + "title": "Great work!" + } + }, + "4": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, + "instructions": { + "description": "No need to tap. Just swipe to the next screen.", + "icon": "swipe-left", + "title": "There’s no waste in this image" + }, + "success": { + "description": "Swipe to keep on going", + "icon": "check", + "title": "Great stuff!" + } + }, + "5": { + "hint": { + "description": "What was missing? Swipe to try some more.", + "icon": "swipe-left", + "title": "We’ve marked the correct answers." + }, + "instructions": { + "description": "For every square, tap once for waste, twice if you’re unsure and three times for bad imagery.", + "icon": "tap", + "title": "Now it’s your turn to try what you’ve learned" + }, + "success": { + "description": "Swipe to practice some more.", + "icon": "check", + "title": "Well done, you found all the waste!" + } + }, + "6": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, + "instructions": { + "description": "Make sure you mark every square with waste.", + "icon": "tap", + "title": "There's lots of waste here!" + }, + "success": { + "description": "Swipe to practice some more.", + "icon": "check", + "title": "Well done, you got it all!" + } + }, + "7": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, + "instructions": { + "description": "Even if waste is just on the edge, still mark it green.", + "icon": "tap", + "title": "Don't miss a square" + }, + "success": { + "description": "Swipe to practice some more.", + "icon": "check", + "title": "Well done, you found all the waste!" + } + }, + "8": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, + "instructions": { + "description": "When every tiles is bad imagery, you can swipe down to mark all tiles red.", + "icon": "swipe-down", + "title": "It's all bad imagery... so many taps" + }, + "success": { + "description": "This could save you a lot of tapping. Swipe to learn more.", + "icon": "check", + "title": "Perfect" + } + } +} diff --git a/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json index 133bf9b8a..06de9ce9a 100644 --- a/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json +++ b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json @@ -1,98 +1,138 @@ { "1": { + "hint": { + "description": "Swipe to learn some more.", + "icon": "swipe-left", + "title": "We've marked the correct square green." + }, "instructions": { - "title": "There's some waste in this image", - "description": "Tap once where you think you can see waste.", - "icon": "tap-1" + "description": "Tap once to mark the square with waste green.", + "icon": "tap-1", + "title": "There's some waste in this image" }, "success": { - "title": "You found your first area with waste!", - "description": "Swipe to the next screen to look for more", - "icon": "check" + "description": "Swipe to the next screen to look for more.", + "icon": "check", + "title": "You found your first area with waste!" } }, "2": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, "instructions": { - "title": "We're not sure about this one", - "description": "Tap Twice to indicate there might be waste.", - "icon": "tap-2" + "description": "Tap the square twice to mark it yellow indicating there might be waste.", + "icon": "tap-2", + "title": "We’re not sure if that’s a pile of waste" }, "success": { - "title": "Nice. Use this whenever you're unsure", "description": "Swipe to the next screen to learn more.", - "icon": "check" + "icon": "check", + "title": "Nice. Use this whenever you're unsure" } }, "3": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, "instructions": { - "title": "Some of the imagery is missing here", - "description": "Tap 3 times to mark the tile red.", - "icon": "tap-3" + "description": "Tap three times to mark the bad imagery red.", + "icon": "tap-3", + "title": "There’s a square with missing imagery" }, "success": { - "title": "Great stuff!", "description": "Swipe to keep on going", - "icon": "check" + "icon": "check", + "title": "Great work!" } }, "4": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, "instructions": { - "title": "Often, there will be no waste on screen.", - "description": "You can just swipe to the next screen.", - "icon": "swipe-left" + "description": "No need to tap. Just swipe to the next screen.", + "icon": "swipe-left", + "title": "There’s no waste in this image" + }, + "success": { + "description": "Swipe to keep on going", + "icon": "check", + "title": "Great stuff!" } }, "5": { + "hint": { + "description": "What was missing? Swipe to try some more.", + "icon": "swipe-left", + "title": "We’ve marked the correct answers." + }, "instructions": { - "title": "Find all the waste", - "description": "Mark all the tiles using what you've learned. You can show answers if you get stuck", - "icon": "tap" + "description": "For every square, tap once for waste, twice if you’re unsure and three times for bad imagery.", + "icon": "tap", + "title": "Now it’s your turn to try what you’ve learned" }, "success": { - "title": "Well done, you found all the waste!", "description": "Swipe to practice some more.", - "icon": "check" + "icon": "check", + "title": "Well done, you found all the waste!" } }, "6": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, "instructions": { - "title": "Let's try another trickier one.", - "description": "Remember, tap once for waste, twice for maybe, three times for poor imagery.", - "icon": "tap" + "description": "Make sure you mark every square with waste.", + "icon": "tap", + "title": "There's lots of waste here!" }, "success": { - "title": "Well done, you found all the waste!", "description": "Swipe to practice some more.", - "icon": "check" - }, - "hint": { - "title": "This is how the tiles should look.", - "description": "Swipe to try another again on a new screen.", - "icon": "swipe-left" + "icon": "check", + "title": "Well done, you got it all!" } }, "7": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, "instructions": { - "title": "It's all bad imagery... so many taps", - "description": "When every tiles is bad imagery, you can swipe down to mark all tiles red.", - "icon": "swipe-down" + "description": "Even if waste is just on the edge, still mark it green.", + "icon": "tap", + "title": "Don't miss a square" }, "success": { - "title": "Perfect", - "description": "This could save you a lot of tapping. Swipe to learn more.", - "icon": "check" + "description": "Swipe to practice some more.", + "icon": "check", + "title": "Well done, you found all the waste!" } }, "8": { + "hint": { + "description": "Swipe to try another again on a new screen.", + "icon": "swipe-left", + "title": "This is how the tiles should look." + }, "instructions": { - "title": "How to reset a screen?", - "description": "You can undo and clear the color of every tile by swiping up.", - "icon": "swipe-up" + "description": "When every tiles is bad imagery, you can swipe down to mark all tiles red.", + "icon": "swipe-down", + "title": "It's all bad imagery... so many taps" }, "success": { - "title": "Cool", "description": "This could save you a lot of tapping. Swipe to learn more.", - "icon": "check" + "icon": "check", + "title": "Perfect" } } -} \ No newline at end of file +} From 237685524b723f54742c92a8d00a6c2920f67c17 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 10 Sep 2020 18:48:34 +0200 Subject: [PATCH 59/69] add tutorial creation workflow to run command --- mapswipe_workers/mapswipe_workers/mapswipe_workers.py | 5 +++-- .../mapswipe_workers/project_types/base/tutorial.py | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/mapswipe_workers.py b/mapswipe_workers/mapswipe_workers/mapswipe_workers.py index d8e4ebe49..559c7a5b4 100644 --- a/mapswipe_workers/mapswipe_workers/mapswipe_workers.py +++ b/mapswipe_workers/mapswipe_workers/mapswipe_workers.py @@ -256,8 +256,8 @@ def run_team_management(team_name, team_id, action) -> None: sentry.capture_exception() -@cli.command("create-tutorial") -def run_create_tutorial() -> None: +@cli.command("create-tutorials") +def run_create_tutorials() -> None: """Create a tutorial project from provided JSON file.""" fb_db = auth.firebaseDB() @@ -374,6 +374,7 @@ def run(context, schedule): def _run(): logger.info("start mapswipe backend workflow.") context.invoke(run_create_projects) + context.invoke(run_create_tutorials) project_ids = context.invoke(run_firebase_to_postgres) context.invoke(run_generate_stats, project_ids=project_ids) diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py index 9e87106d2..d09ff14d2 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py @@ -13,6 +13,7 @@ def __init__(self, tutorial_draft): self.projectId = f"tutorial_{tutorial_draft['tutorialDraftId']}" self.lookFor = tutorial_draft["lookFor"] self.name = tutorial_draft["name"] + self.tutorialDraftId = tutorial_draft["tutorialDraftId"] self.projectDetails = "This is a tutorial" self.progress = 0 self.contributorCount = 0 From 71ce3570e15bb1ec4d718d70c83655dd4cfbb33d Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 10 Sep 2020 19:15:26 +0200 Subject: [PATCH 60/69] add script to add tutorialId to all projects --- .../add_tutorial_id_to_projects.py | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 mapswipe_workers/python_scripts/add_tutorial_id_to_projects.py diff --git a/mapswipe_workers/python_scripts/add_tutorial_id_to_projects.py b/mapswipe_workers/python_scripts/add_tutorial_id_to_projects.py new file mode 100644 index 000000000..36715cba1 --- /dev/null +++ b/mapswipe_workers/python_scripts/add_tutorial_id_to_projects.py @@ -0,0 +1,44 @@ +import sys +from mapswipe_workers.auth import firebaseDB +from mapswipe_workers.definitions import logger + + +def get_all_projects(project_type: int): + """Get the user ids from all users in Firebase DB.""" + + project_id_list = [] + fb_db = firebaseDB() + + status_list = ["active", "inactive"] + + for status in status_list: + logger.info(f"query {status} projects") + projects = ( + fb_db.reference(f"v2/projects/") + .order_by_child("status") + .equal_to(status) + .get() + ) + for project_id, data in projects.items(): + if (data.get("projectType", 1) == project_type) & ( + data.get("tutorialId", None) is None + ): + project_id_list.append(project_id) + + logger.info(f"got {len(project_id_list)} project from firebase.") + return project_id_list + + +def add_tutorial_id_to_projects(project_id_list, tutorial_id): + fb_db = firebaseDB() + for project_id in project_id_list: + fb_db.reference(f"v2/projects/{project_id}/tutorialId").set(tutorial_id) + logger.info(f"added tutorial id '{tutorial_id}' to project '{project_id}'") + + +if __name__ == "__main__": + """python add_tutorial_id_to_projects.py project_type tutorial_id""" + project_type = sys.argv[1] + tutorial_id = sys.argv[2] + project_id_list = get_all_projects(1) + add_tutorial_id_to_projects(project_id_list, tutorial_id) From 4869863e14afe2a7237570e10b60b81ae58082c8 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 10 Sep 2020 21:25:32 +0200 Subject: [PATCH 61/69] work on comments --- firebase/database.rules.json | 2 -- manager_dashboard/manager_dashboard/js/forms.js | 13 +++++++++---- .../manager_dashboard/js/uploadProjects.js | 2 +- .../mapswipe_workers/project_types/base/project.py | 2 +- .../project_types/tile_map_service_grid/project.py | 6 +++++- .../project_types/tile_map_service_grid/task.py | 6 +++++- .../python_scripts/add_tutorial_id_to_projects.py | 14 ++++++++------ 7 files changed, 29 insertions(+), 16 deletions(-) diff --git a/firebase/database.rules.json b/firebase/database.rules.json index 7ed711e95..3f3c41fd7 100644 --- a/firebase/database.rules.json +++ b/firebase/database.rules.json @@ -15,8 +15,6 @@ || (auth != null && query.orderByChild == 'status' && query.equalTo == 'build_area_tutorial' && query.limitToFirst == 1) || - (auth != null && query.orderByChild == 'name' && query.equalTo == 'build_area_tutorial_solid_waste' && query.limitToFirst == 1) - || // only team members can query by their own teamId (auth != null && query.orderByChild == 'teamId' && query.equalTo == root.child('/v2/users/'+auth.uid+'/teamId').val()) diff --git a/manager_dashboard/manager_dashboard/js/forms.js b/manager_dashboard/manager_dashboard/js/forms.js index d647a07a5..4d6ac449c 100644 --- a/manager_dashboard/manager_dashboard/js/forms.js +++ b/manager_dashboard/manager_dashboard/js/forms.js @@ -1,3 +1,8 @@ +const BUILD_AREA_TYPE = 1 +const FOOTPRINT_TYPE = 2 +const CHANGE_DETECTION_TYPE = 3 +const COMPLETENESS_TYPE = 4 + //auto expand textarea function adjust_textarea(h) { h.style.height = "20px"; @@ -68,7 +73,7 @@ function displayProjectTypeForm(projectType) { document.getElementById("projectType").value = projectType; switch (projectType) { case "build_area": - initTutorials(1); + initTutorials(BUILD_AREA_TYPE); displayTileServer("bing", "A"); document.getElementById("groupSize").value = 120; document.getElementById("form_project_aoi_geometry").style.display = "block"; @@ -80,7 +85,7 @@ function displayProjectTypeForm(projectType) { document.getElementById("form_team_settings").style.display = "None"; break; case "footprint": - initTutorials(2); + initTutorials(FOOTPRINT_TYPE); displayTileServer("bing", "A"); document.getElementById("groupSize").value = 25; document.getElementById("form_project_aoi_geometry").style.display = "None"; @@ -96,10 +101,10 @@ function displayProjectTypeForm(projectType) { displayTileServer("bing", "B"); if (projectType == "change_detection") { document.getElementById("groupSize").value = 25; - initTutorials(3); + initTutorials(CHANGE_DETECTION_TYPE); } else { document.getElementById("groupSize").value = 80; - initTutorials(4); + initTutorials(COMPLETENESS_TYPE); } document.getElementById("form_project_aoi_geometry").style.display = "block"; document.getElementById("form_project_task_geometry").style.display = "None"; diff --git a/manager_dashboard/manager_dashboard/js/uploadProjects.js b/manager_dashboard/manager_dashboard/js/uploadProjects.js index 460a62330..9c1e9f14b 100644 --- a/manager_dashboard/manager_dashboard/js/uploadProjects.js +++ b/manager_dashboard/manager_dashboard/js/uploadProjects.js @@ -22,7 +22,7 @@ function getFormInput() { // add teamId if visibility is not set to public visibility = document.getElementById("visibility").value - if (visibility != "public") { + if (visibility !== "public") { form_data.teamId = visibility maxTasksPerUser = document.getElementById("maxTasksPerUser").value if (maxTasksPerUser > 0) { diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/project.py b/mapswipe_workers/mapswipe_workers/project_types/base/project.py index bf17ef9f5..48ee3d16c 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/project.py @@ -78,7 +78,7 @@ def __init__(self, project_draft): "private_inactive" # private project visible only for team members ) max_tasks_per_user = project_draft.get("maxTasksPerUser", None) - if max_tasks_per_user: + if max_tasks_per_user is not None: self.maxTasksPerUser = int(max_tasks_per_user) self.tutorialId = project_draft.get("tutorialId", None) diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py index 09cb4a37a..0848b83a9 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/project.py @@ -7,6 +7,7 @@ CustomError, logger, MAX_INPUT_GEOMETRIES, + ProjectType, ) from mapswipe_workers.project_types.tile_map_service_grid.group import Group from mapswipe_workers.utils import tile_grouping_functions as grouping_functions @@ -24,7 +25,10 @@ def __init__(self, project_draft: dict): self.tileServer = vars(BaseTileServer(project_draft["tileServer"])) # get TileServerB for change detection and completeness type - if self.projectType in [3, 4]: + if self.projectType in [ + ProjectType.COMPLETENESS.value, + ProjectType.CHANGE_DETECTION.value, + ]: self.tileServerB = vars(BaseTileServer(project_draft["tileServerB"])) def validate_geometries(self): diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/task.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/task.py index 4962274bf..d079572fc 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/task.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/task.py @@ -1,5 +1,6 @@ from mapswipe_workers.project_types.base.task import BaseTask from mapswipe_workers.utils import tile_functions as t +from mapswipe_workers.definitions import ProjectType class Task(BaseTask): @@ -42,7 +43,10 @@ def __init__(self, group: object, project: object, TileX: str, TileY: str): ) # get TileServer B only for change_detection or completeness type - if project.projectType in [3, 4]: + if project.projectType in [ + ProjectType.COMPLETENESS.value, + ProjectType.CHANGE_DETECTION.value, + ]: self.urlB = t.tile_coords_zoom_and_tileserver_to_url( TileX, TileY, project.zoomLevel, project.tileServerB ) diff --git a/mapswipe_workers/python_scripts/add_tutorial_id_to_projects.py b/mapswipe_workers/python_scripts/add_tutorial_id_to_projects.py index 36715cba1..07f36528b 100644 --- a/mapswipe_workers/python_scripts/add_tutorial_id_to_projects.py +++ b/mapswipe_workers/python_scripts/add_tutorial_id_to_projects.py @@ -1,14 +1,16 @@ import sys from mapswipe_workers.auth import firebaseDB -from mapswipe_workers.definitions import logger +from mapswipe_workers.definitions import logger, ProjectType -def get_all_projects(project_type: int): - """Get the user ids from all users in Firebase DB.""" +def get_all_projects_of_type(project_type: int): + """Get the project ids for active and inactive projects in Firebase DB.""" project_id_list = [] fb_db = firebaseDB() + # we neglect private projects here + # since there are no projects set up in production yet status_list = ["active", "inactive"] for status in status_list: @@ -37,8 +39,8 @@ def add_tutorial_id_to_projects(project_id_list, tutorial_id): if __name__ == "__main__": - """python add_tutorial_id_to_projects.py project_type tutorial_id""" - project_type = sys.argv[1] + """python add_tutorial_id_to_projects.py BUILD_AREA tutorial_id""" + project_type = ProjectType[sys.argv[1]].value tutorial_id = sys.argv[2] - project_id_list = get_all_projects(1) + project_id_list = get_all_projects_of_type(project_type) add_tutorial_id_to_projects(project_id_list, tutorial_id) From 364fbc0bf8388336dfb5d806d21dbf1c07424006 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 10 Sep 2020 21:53:20 +0200 Subject: [PATCH 62/69] add counters on project level --- firebase/functions/index.js | 25 ++++++++++++++++++++++++- firebase/functions/package.json | 2 +- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/firebase/functions/index.js b/firebase/functions/index.js index e7cd72ed1..42e0de252 100644 --- a/firebase/functions/index.js +++ b/firebase/functions/index.js @@ -47,6 +47,10 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use const endTimeRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/endTime') const timeSpentMappingRef = admin.database().ref('/v2/results/'+context.params.projectId+'/'+context.params.groupId+'/'+context.params.userId+'/timeSpentMappingRef') + // references for project based counters for tasks and groups + const projectTaskContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId+'/taskContributionCount') + const projectGroupContributionCountRef = admin.database().ref('/v2/users/'+context.params.userId+'/contributions/'+context.params.projectId+'/groupContributionCount') + // Counter for groups const groupFinishedCount = groupFinishedCountRef.transaction((currentCount) => { return currentCount + 1 @@ -118,6 +122,25 @@ exports.counter = functions.database.ref('/v2/results/{projectId}/{groupId}/{use }) promises.push(contributions) + // counters for tasks and groups per user and per project + const projectTaskContributionCount = numberOfTasksRef.once('value') + .then((dataSnapshot) => { + const numberOfTasks = dataSnapshot.val() + return numberOfTasks + }) + .then((numberOfTasks) => { + return projectTaskContributionCountRef.transaction((currentCount) => { + return currentCount + numberOfTasks + }) + }) + promises.push(projectTaskContributionCount) + + // Counter for groups + const projectGroupContributionCount = projectGroupContributionCountRef.transaction((currentCount) => { + return currentCount + 1 + }); + promises.push(projectGroupContributionCount) + // // TODO: Does not work // const timeSpentMapping = timeSpentMappingRef.set((timeSpentMapping) => { // const startTime = startTimeRef.once('value') @@ -268,4 +291,4 @@ exports.decProjectProgress = functions.database.ref('/v2/projects/{projectId}/re }) }) return projectProgress -}) +}) \ No newline at end of file diff --git a/firebase/functions/package.json b/firebase/functions/package.json index f14539fed..e5f4bb38e 100644 --- a/firebase/functions/package.json +++ b/firebase/functions/package.json @@ -19,7 +19,7 @@ "eslint-utils": "^1.4.1" }, "engines": { - "node": "8" + "node": "10" }, "private": true } From 31a798cb8442a992e5656019a0142e90e84af86f Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 10 Sep 2020 22:50:00 +0200 Subject: [PATCH 63/69] change word on tutorial creation page --- manager_dashboard/manager_dashboard/tutorial.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manager_dashboard/manager_dashboard/tutorial.html b/manager_dashboard/manager_dashboard/tutorial.html index 0d4480522..d1a3723fe 100644 --- a/manager_dashboard/manager_dashboard/tutorial.html +++ b/manager_dashboard/manager_dashboard/tutorial.html @@ -138,7 +138,7 @@

    Basic Information

    Provide a clear name for your tutorial. You can select tutorials based on their name later during the project creation.
  • - + It should end with .json

    From 524299372f64b234e918c1afa90b6991476a78e1 Mon Sep 17 00:00:00 2001 From: h9b Date: Thu, 10 Sep 2020 23:29:28 +0200 Subject: [PATCH 64/69] add projectType to script --- mapswipe_workers/python_scripts/tasks_to_geojson.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mapswipe_workers/python_scripts/tasks_to_geojson.py b/mapswipe_workers/python_scripts/tasks_to_geojson.py index 1ebb75d63..3348e88d9 100644 --- a/mapswipe_workers/python_scripts/tasks_to_geojson.py +++ b/mapswipe_workers/python_scripts/tasks_to_geojson.py @@ -5,7 +5,7 @@ from mapswipe_workers.project_types.tile_map_service_grid.group import Group from mapswipe_workers.project_types.tile_map_service_grid.task import Task from mapswipe_workers.project_types.tile_map_service_grid.project import Project -from mapswipe_workers.definitions import logger +from mapswipe_workers.definitions import logger, ProjectType from mapswipe_workers.project_types.base.tile_server import BaseTileServer @@ -32,7 +32,7 @@ def tasks_to_geojson(project_extent_file, zoomlevel, outfile): } project = Project - project.project_type = 1 + project.projectType = ProjectType.BUILD_AREA.value project.projectId = "tasks_to_geojson" project.zoomLevel = int(zoomlevel) project.tileServer = vars(BaseTileServer(tile_server_dict)) From 8842551814949ec8ac30da90f5c6842aec440301 Mon Sep 17 00:00:00 2001 From: h9b Date: Fri, 11 Sep 2020 00:08:03 +0200 Subject: [PATCH 65/69] don't change data type of task geometry in postgres --- postgres/initdb.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/postgres/initdb.sql b/postgres/initdb.sql index 7a2db8ec3..c7e0ebe58 100644 --- a/postgres/initdb.sql +++ b/postgres/initdb.sql @@ -43,7 +43,7 @@ CREATE TABLE IF NOT EXISTS tasks ( project_id varchar, group_id varchar, task_id varchar, - geom geometry, + geom geometry(MULTIPOLYGON, 4326), project_type_specifics json, PRIMARY KEY (project_id, group_id, task_id), FOREIGN KEY (project_id) REFERENCES projects (project_id), From 46c05e438c19bf1df4ff79eff14748f89a585a6b Mon Sep 17 00:00:00 2001 From: h9b Date: Fri, 11 Sep 2020 00:46:12 +0200 Subject: [PATCH 66/69] adjust text for build area tutorial --- .../default_build_area_tutorial_screens.json | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/mapswipe_workers/sample_data/build_area/default_build_area_tutorial_screens.json b/mapswipe_workers/sample_data/build_area/default_build_area_tutorial_screens.json index 06de9ce9a..3244635a9 100644 --- a/mapswipe_workers/sample_data/build_area/default_build_area_tutorial_screens.json +++ b/mapswipe_workers/sample_data/build_area/default_build_area_tutorial_screens.json @@ -6,14 +6,14 @@ "title": "We've marked the correct square green." }, "instructions": { - "description": "Tap once to mark the square with waste green.", + "description": "Tap once to mark the squares with buildings green.", "icon": "tap-1", - "title": "There's some waste in this image" + "title": "There are some buildings in this image" }, "success": { "description": "Swipe to the next screen to look for more.", "icon": "check", - "title": "You found your first area with waste!" + "title": "You found your first area with buildings!" } }, "2": { @@ -23,14 +23,14 @@ "title": "This is how the tiles should look." }, "instructions": { - "description": "Tap the square twice to mark it yellow indicating there might be waste.", - "icon": "tap-2", - "title": "We’re not sure if that’s a pile of waste" + "description": "Tap all the squares which contain buildings.", + "icon": "tap-1", + "title": "There are many buildings here." }, "success": { "description": "Swipe to the next screen to learn more.", "icon": "check", - "title": "Nice. Use this whenever you're unsure" + "title": "Nice." } }, "3": { @@ -40,14 +40,14 @@ "title": "This is how the tiles should look." }, "instructions": { - "description": "Tap three times to mark the bad imagery red.", - "icon": "tap-3", - "title": "There’s a square with missing imagery" + "description": "Tap the square twice to mark it yellow indicating there might be a building.", + "icon": "tap-2", + "title": "We’re not sure if that’s a building." }, "success": { - "description": "Swipe to keep on going", + "description": "Swipe to the next screen to learn more.", "icon": "check", - "title": "Great work!" + "title": "Nice. Use this whenever you're unsure" } }, "4": { @@ -59,29 +59,29 @@ "instructions": { "description": "No need to tap. Just swipe to the next screen.", "icon": "swipe-left", - "title": "There’s no waste in this image" + "title": "There’s no building in this image" }, "success": { "description": "Swipe to keep on going", "icon": "check", - "title": "Great stuff!" + "title": "Great." } }, "5": { "hint": { - "description": "What was missing? Swipe to try some more.", + "description": "Swipe to try another again on a new screen.", "icon": "swipe-left", - "title": "We’ve marked the correct answers." + "title": "This is how the tiles should look." }, "instructions": { - "description": "For every square, tap once for waste, twice if you’re unsure and three times for bad imagery.", - "icon": "tap", - "title": "Now it’s your turn to try what you’ve learned" + "description": "No need to tap. Just swipe to the next screen.", + "icon": "swipe-left", + "title": "Again. There are no buildings here" }, "success": { - "description": "Swipe to practice some more.", + "description": "Swipe to keep on going", "icon": "check", - "title": "Well done, you found all the waste!" + "title": "Great." } }, "6": { @@ -91,9 +91,9 @@ "title": "This is how the tiles should look." }, "instructions": { - "description": "Make sure you mark every square with waste.", - "icon": "tap", - "title": "There's lots of waste here!" + "description": "Tap three times to mark all cloudy squares red.", + "icon": "tap-3", + "title": "Clouds are blocking the view" }, "success": { "description": "Swipe to practice some more.", @@ -108,9 +108,9 @@ "title": "This is how the tiles should look." }, "instructions": { - "description": "Even if waste is just on the edge, still mark it green.", - "icon": "tap", - "title": "Don't miss a square" + "description": "Mark all tiles red by tapping three times", + "icon": "tap-3", + "title": "Imagery is not available" }, "success": { "description": "Swipe to practice some more.", From 71dd3427c52513297556ddc0320c6d01960d8821 Mon Sep 17 00:00:00 2001 From: h9b Date: Fri, 11 Sep 2020 01:01:16 +0200 Subject: [PATCH 67/69] fix xMax in tutorial --- .../mapswipe_workers/project_types/base/tutorial.py | 2 ++ .../project_types/tile_map_service_grid/tutorial.py | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py index d09ff14d2..eac29fbcc 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/base/tutorial.py @@ -20,6 +20,8 @@ def __init__(self, tutorial_draft): self.exampleImage1 = tutorial_draft.get("exampleImage1", None) self.exampleImage2 = tutorial_draft.get("exampleImage2", None) self.status = "tutorial" + # need to filter out None values in list due to Firebase + self.screens = list(filter(None, tutorial_draft["screens"])) def save_tutorial(self): """Save the tutorial in Firebase.""" diff --git a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py index 5ab1e65e4..3c8403708 100644 --- a/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py +++ b/mapswipe_workers/mapswipe_workers/project_types/tile_map_service_grid/tutorial.py @@ -2,6 +2,7 @@ from mapswipe_workers.project_types.base.tutorial import BaseTutorial from mapswipe_workers.project_types.base.tile_server import BaseTileServer from mapswipe_workers.utils import tile_functions as t +from mapswipe_workers.definitions import ProjectType class Tutorial(BaseTutorial): @@ -15,7 +16,6 @@ def __init__(self, tutorial_draft): self.zoomLevel = int(tutorial_draft.get("zoomLevel", 18)) self.tileServer = vars(BaseTileServer(tutorial_draft["tileServer"])) self.tutorial_tasks = tutorial_draft["tutorialTasks"] - self.screens = tutorial_draft["screens"] self.groups = dict() self.tasks = dict() @@ -46,7 +46,7 @@ def create_tutorial_groups(self): "progress": 0, # this is not needed from back end perspective } - if self.projectType in [3]: + if self.projectType in [ProjectType.CHANGE_DETECTION.value]: # need to adjust xMax and yMax for Change Detection projects # since they use a different view with only one tile per screen self.groups[101]["xMax"] = str(100 + (number_of_screens - 1)) @@ -111,7 +111,10 @@ def create_tutorial_tasks(self): } # Completeness and Change Detection projects use a second tile image url - if self.projectType in [3, 4]: + if self.projectType in [ + ProjectType.CHANGE_DETECTION.value, + ProjectType.COMPLETENESS.value, + ]: task["urlB"] = t.tile_coords_zoom_and_tileserver_to_url( tile_x, tile_y, self.zoomLevel, self.tileServerB ) From acd9e81ae6ffcebdbd82f949ca29972dea5c7a38 Mon Sep 17 00:00:00 2001 From: h9b Date: Fri, 11 Sep 2020 11:06:07 +0200 Subject: [PATCH 68/69] update tutorial text for solid waste --- .../solid_waste_tutorial_screens.json | 224 +++++++++--------- 1 file changed, 112 insertions(+), 112 deletions(-) diff --git a/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json index 06de9ce9a..9486b605e 100644 --- a/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json +++ b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_screens.json @@ -1,138 +1,138 @@ { "1": { - "hint": { - "description": "Swipe to learn some more.", - "icon": "swipe-left", - "title": "We've marked the correct square green." - }, - "instructions": { - "description": "Tap once to mark the square with waste green.", - "icon": "tap-1", - "title": "There's some waste in this image" - }, - "success": { - "description": "Swipe to the next screen to look for more.", - "icon": "check", - "title": "You found your first area with waste!" + "hint" : { + "description" : "Can you see the waste? Swipe to learn more.", + "icon" : "swipe-left", + "title" : "We've marked the square with waste green" + }, + "instructions" : { + "description" : "Tap once to mark the square with waste green.", + "icon" : "tap-1", + "title" : "There's some waste in this image" + }, + "success" : { + "description" : "Swipe to the next screen to look for more.", + "icon" : "check", + "title" : "You found your first area with waste!" } }, "2": { - "hint": { - "description": "Swipe to try another again on a new screen.", - "icon": "swipe-left", - "title": "This is how the tiles should look." - }, - "instructions": { - "description": "Tap the square twice to mark it yellow indicating there might be waste.", - "icon": "tap-2", - "title": "We’re not sure if that’s a pile of waste" - }, - "success": { - "description": "Swipe to the next screen to learn more.", - "icon": "check", - "title": "Nice. Use this whenever you're unsure" + "hint" : { + "description" : "Tap twice whenever you're not sure. Swipe to learn more.", + "icon" : "swipe-left", + "title" : "Yellow indicates there might be waste" + }, + "instructions" : { + "description" : "Tap the square twice to mark it yellow indicating there might be waste.", + "icon" : "tap-2", + "title" : "We’re not sure if that’s a pile of waste" + }, + "success" : { + "description" : "Swipe to the next screen to learn more.", + "icon" : "check", + "title" : "Nice. Use this whenever you're unsure" } }, "3": { - "hint": { - "description": "Swipe to try another again on a new screen.", - "icon": "swipe-left", - "title": "This is how the tiles should look." - }, - "instructions": { - "description": "Tap three times to mark the bad imagery red.", - "icon": "tap-3", - "title": "There’s a square with missing imagery" - }, - "success": { - "description": "Swipe to keep on going", - "icon": "check", - "title": "Great work!" + "hint" : { + "description" : "Can you see why the imagery is bad? Swipe to learn more.", + "icon" : "swipe-left", + "title" : "We've marked the bad imagery red" + }, + "instructions" : { + "description" : "Tap three times to mark the bad imagery red.", + "icon" : "tap-3", + "title" : "There’s a square with missing imagery" + }, + "success" : { + "description" : "Swipe to keep on going", + "icon" : "check", + "title" : "Great work!" } }, "4": { - "hint": { - "description": "Swipe to try another again on a new screen.", - "icon": "swipe-left", - "title": "This is how the tiles should look." - }, - "instructions": { - "description": "No need to tap. Just swipe to the next screen.", - "icon": "swipe-left", - "title": "There’s no waste in this image" - }, - "success": { - "description": "Swipe to keep on going", - "icon": "check", - "title": "Great stuff!" + "hint" : { + "description" : "There's no waste in this screen so you can just swipe to the next one.", + "icon" : "swipe-left", + "title" : "There was no tapping needed here" + }, + "instructions" : { + "description" : "No need to tap. Just swipe to the next screen.", + "icon" : "swipe-left", + "title" : "There’s no waste in this image" + }, + "success" : { + "description" : "Swipe to keep on going", + "icon" : "check", + "title" : "Great stuff!" } }, "5": { - "hint": { - "description": "What was missing? Swipe to try some more.", - "icon": "swipe-left", - "title": "We’ve marked the correct answers." - }, - "instructions": { - "description": "For every square, tap once for waste, twice if you’re unsure and three times for bad imagery.", - "icon": "tap", - "title": "Now it’s your turn to try what you’ve learned" - }, - "success": { - "description": "Swipe to practice some more.", - "icon": "check", - "title": "Well done, you found all the waste!" + "hint" : { + "description" : "Can you see the waste that we've marked green? Swipe to try some more.", + "icon" : "swipe-left", + "title" : "We’ve marked the correct answers" + }, + "instructions" : { + "description" : "For every square, tap once for waste, twice if you’re unsure and three times for bad imagery.", + "icon" : "tap", + "title" : "Now it’s your turn to try what you’ve learned" + }, + "success" : { + "description" : "Swipe to practice some more.", + "icon" : "check", + "title" : "Well done, you found all the waste!" } }, "6": { - "hint": { - "description": "Swipe to try another again on a new screen.", - "icon": "swipe-left", - "title": "This is how the tiles should look." - }, - "instructions": { - "description": "Make sure you mark every square with waste.", - "icon": "tap", - "title": "There's lots of waste here!" - }, - "success": { - "description": "Swipe to practice some more.", - "icon": "check", - "title": "Well done, you got it all!" + "hint" : { + "description" : "Make sure to mark every square with waste green. Swipe to try some more.", + "icon" : "swipe-left", + "title" : "We've marked the correct answers" + }, + "instructions" : { + "description" : "Make sure you mark every square with waste.", + "icon" : "tap", + "title" : "There's lots of waste here!" + }, + "success" : { + "description" : "Swipe to practice some more.", + "icon" : "check", + "title" : "Well done, you got it all!" } }, "7": { - "hint": { - "description": "Swipe to try another again on a new screen.", - "icon": "swipe-left", - "title": "This is how the tiles should look." - }, - "instructions": { - "description": "Even if waste is just on the edge, still mark it green.", - "icon": "tap", - "title": "Don't miss a square" - }, - "success": { - "description": "Swipe to practice some more.", - "icon": "check", - "title": "Well done, you found all the waste!" + "hint" : { + "description" : "Can you see the waste we've marked green? Did you miss a bit? Swipe to learn more.", + "icon" : "swipe-left", + "title" : "We’ve marked the correct answers" + }, + "instructions" : { + "description" : "Even if waste is just on the edge, still mark it green.", + "icon" : "tap", + "title" : "Don't miss a square" + }, + "success" : { + "description" : "Swipe to practice some more.", + "icon" : "check", + "title" : "Well done, you found all the waste!" } }, "8": { - "hint": { - "description": "Swipe to try another again on a new screen.", - "icon": "swipe-left", - "title": "This is how the tiles should look." - }, - "instructions": { - "description": "When every tiles is bad imagery, you can swipe down to mark all tiles red.", - "icon": "swipe-down", - "title": "It's all bad imagery... so many taps" - }, - "success": { - "description": "This could save you a lot of tapping. Swipe to learn more.", - "icon": "check", - "title": "Perfect" + "hint" : { + "description" : "Swiping down on screens like this can save you a lot of taps! Swipe to keep going.", + "icon" : "swipe-left", + "title" : "All squares are red for bad imagery" + }, + "instructions" : { + "description" : "When every tiles is bad imagery, you can swipe down to mark all tiles red.", + "icon" : "swipe-down", + "title" : "It's all bad imagery... so many taps" + }, + "success" : { + "description" : "This could save you a lot of tapping. Swipe to learn more.", + "icon" : "check", + "title" : "Perfect" } } } From 89d9fa0eb70f64aa8668220c16c34b5b943d7599 Mon Sep 17 00:00:00 2001 From: h9b Date: Fri, 11 Sep 2020 12:13:50 +0200 Subject: [PATCH 69/69] add geojson with solid waste tutorial examples --- .../solid_waste_tutorial_tasks.geojson | 98 +++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_tasks.geojson b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_tasks.geojson index 741be1e4b..192474891 100644 --- a/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_tasks.geojson +++ b/mapswipe_workers/sample_data/build_area/solid_waste_tutorial_tasks.geojson @@ -1,55 +1,55 @@ { "type": "FeatureCollection", -"name": "solid_waste_tutorial_tasks", +"name": "200902_tutorial_update", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features": [ -{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001565-974060", "tile_x": 1001565, "tile_y": 974060, "tile_z": 21, "screen": 3, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.069972991943359, 12.6865643428187 ], [ -8.06980133056641, 12.6865643428187 ], [ -8.06980133056641, 12.6863968723155 ], [ -8.069972991943359, 12.6863968723155 ], [ -8.069972991943359, 12.6865643428187 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001565-974061", "tile_x": 1001565, "tile_y": 974061, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.069972991943359, 12.6863968723155 ], [ -8.06980133056641, 12.6863968723155 ], [ -8.06980133056641, 12.686229401702001 ], [ -8.069972991943359, 12.686229401702001 ], [ -8.069972991943359, 12.6863968723155 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001565-974062", "tile_x": 1001565, "tile_y": 974062, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.069972991943359, 12.686229401702001 ], [ -8.06980133056641, 12.686229401702001 ], [ -8.06980133056641, 12.686061930978401 ], [ -8.069972991943359, 12.686061930978401 ], [ -8.069972991943359, 12.686229401702001 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001566-974060", "tile_x": 1001566, "tile_y": 974060, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06980133056641, 12.6865643428187 ], [ -8.06962966918945, 12.6865643428187 ], [ -8.06962966918945, 12.6863968723155 ], [ -8.06980133056641, 12.6863968723155 ], [ -8.06980133056641, 12.6865643428187 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001566-974061", "tile_x": 1001566, "tile_y": 974061, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06980133056641, 12.6863968723155 ], [ -8.06962966918945, 12.6863968723155 ], [ -8.06962966918945, 12.686229401702001 ], [ -8.06980133056641, 12.686229401702001 ], [ -8.06980133056641, 12.6863968723155 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g103", "taskId": "21-1001566-974062", "tile_x": 1001566, "tile_y": 974062, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06980133056641, 12.686229401702001 ], [ -8.06962966918945, 12.686229401702001 ], [ -8.06962966918945, 12.686061930978401 ], [ -8.06980133056641, 12.686061930978401 ], [ -8.06980133056641, 12.686229401702001 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001548-974078", "tile_x": 1001548, "tile_y": 974078, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072891235351561, 12.6835498569018 ], [ -8.072719573974609, 12.6835498569018 ], [ -8.072719573974609, 12.6833823844153 ], [ -8.072891235351561, 12.6833823844153 ], [ -8.072891235351561, 12.6835498569018 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001548-974079", "tile_x": 1001548, "tile_y": 974079, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072891235351561, 12.6833823844153 ], [ -8.072719573974609, 12.6833823844153 ], [ -8.072719573974609, 12.6832149118187 ], [ -8.072891235351561, 12.6832149118187 ], [ -8.072891235351561, 12.6833823844153 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001548-974080", "tile_x": 1001548, "tile_y": 974080, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072891235351561, 12.6832149118187 ], [ -8.072719573974609, 12.6832149118187 ], [ -8.072719573974609, 12.6830474391118 ], [ -8.072891235351561, 12.6830474391118 ], [ -8.072891235351561, 12.6832149118187 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001549-974078", "tile_x": 1001549, "tile_y": 974078, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072719573974609, 12.6835498569018 ], [ -8.07254791259766, 12.6835498569018 ], [ -8.07254791259766, 12.6833823844153 ], [ -8.072719573974609, 12.6833823844153 ], [ -8.072719573974609, 12.6835498569018 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001549-974079", "tile_x": 1001549, "tile_y": 974079, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072719573974609, 12.6833823844153 ], [ -8.07254791259766, 12.6833823844153 ], [ -8.07254791259766, 12.6832149118187 ], [ -8.072719573974609, 12.6832149118187 ], [ -8.072719573974609, 12.6833823844153 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g109", "taskId": "21-1001549-974080", "tile_x": 1001549, "tile_y": 974080, "tile_z": 21, "screen": 7, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.072719573974609, 12.6832149118187 ], [ -8.07254791259766, 12.6832149118187 ], [ -8.07254791259766, 12.6830474391118 ], [ -8.072719573974609, 12.6830474391118 ], [ -8.072719573974609, 12.6832149118187 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001608-974111", "tile_x": 1001608, "tile_y": 974111, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06259155273438, 12.6780232066862 ], [ -8.06241989135742, 12.6780232066862 ], [ -8.06241989135742, 12.6778557305649 ], [ -8.06259155273438, 12.6778557305649 ], [ -8.06259155273438, 12.6780232066862 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001608-974112", "tile_x": 1001608, "tile_y": 974112, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06259155273438, 12.6778557305649 ], [ -8.06241989135742, 12.6778557305649 ], [ -8.06241989135742, 12.6776882543335 ], [ -8.06259155273438, 12.6776882543335 ], [ -8.06259155273438, 12.6778557305649 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001608-974113", "tile_x": 1001608, "tile_y": 974113, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06259155273438, 12.6776882543335 ], [ -8.06241989135742, 12.6776882543335 ], [ -8.06241989135742, 12.6775207779919 ], [ -8.06259155273438, 12.6775207779919 ], [ -8.06259155273438, 12.6776882543335 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001609-974111", "tile_x": 1001609, "tile_y": 974111, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06241989135742, 12.6780232066862 ], [ -8.062248229980471, 12.6780232066862 ], [ -8.062248229980471, 12.6778557305649 ], [ -8.06241989135742, 12.6778557305649 ], [ -8.06241989135742, 12.6780232066862 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001609-974112", "tile_x": 1001609, "tile_y": 974112, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06241989135742, 12.6778557305649 ], [ -8.062248229980471, 12.6778557305649 ], [ -8.062248229980471, 12.6776882543335 ], [ -8.06241989135742, 12.6776882543335 ], [ -8.06241989135742, 12.6778557305649 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g120", "taskId": "21-1001609-974113", "tile_x": 1001609, "tile_y": 974113, "tile_z": 21, "screen": 8, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.06241989135742, 12.6776882543335 ], [ -8.062248229980471, 12.6776882543335 ], [ -8.062248229980471, 12.6775207779919 ], [ -8.06241989135742, 12.6775207779919 ], [ -8.06241989135742, 12.6776882543335 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g148", "taskId": "21-1001756-974176", "tile_x": 1001756, "tile_y": 974176, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037185668945311, 12.6671370298053 ], [ -8.037014007568359, 12.6671370298053 ], [ -8.037014007568359, 12.6669695465289 ], [ -8.037185668945311, 12.6669695465289 ], [ -8.037185668945311, 12.6671370298053 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g148", "taskId": "21-1001757-974176", "tile_x": 1001757, "tile_y": 974176, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037014007568359, 12.6671370298053 ], [ -8.03684234619141, 12.6671370298053 ], [ -8.03684234619141, 12.6669695465289 ], [ -8.037014007568359, 12.6669695465289 ], [ -8.037014007568359, 12.6671370298053 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001724-974177", "tile_x": 1001724, "tile_y": 974177, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042678833007811, 12.6669695465289 ], [ -8.042507171630859, 12.6669695465289 ], [ -8.042507171630859, 12.6668020631424 ], [ -8.042678833007811, 12.6668020631424 ], [ -8.042678833007811, 12.6669695465289 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001724-974178", "tile_x": 1001724, "tile_y": 974178, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042678833007811, 12.6668020631424 ], [ -8.042507171630859, 12.6668020631424 ], [ -8.042507171630859, 12.666634579645899 ], [ -8.042678833007811, 12.666634579645899 ], [ -8.042678833007811, 12.6668020631424 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001724-974179", "tile_x": 1001724, "tile_y": 974179, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042678833007811, 12.666634579645899 ], [ -8.042507171630859, 12.666634579645899 ], [ -8.042507171630859, 12.6664670960393 ], [ -8.042678833007811, 12.6664670960393 ], [ -8.042678833007811, 12.666634579645899 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001725-974177", "tile_x": 1001725, "tile_y": 974177, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042507171630859, 12.6669695465289 ], [ -8.04233551025391, 12.6669695465289 ], [ -8.04233551025391, 12.6668020631424 ], [ -8.042507171630859, 12.6668020631424 ], [ -8.042507171630859, 12.6669695465289 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001725-974178", "tile_x": 1001725, "tile_y": 974178, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042507171630859, 12.6668020631424 ], [ -8.04233551025391, 12.6668020631424 ], [ -8.04233551025391, 12.666634579645899 ], [ -8.042507171630859, 12.666634579645899 ], [ -8.042507171630859, 12.6668020631424 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001725-974179", "tile_x": 1001725, "tile_y": 974179, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.042507171630859, 12.666634579645899 ], [ -8.04233551025391, 12.666634579645899 ], [ -8.04233551025391, 12.6664670960393 ], [ -8.042507171630859, 12.6664670960393 ], [ -8.042507171630859, 12.666634579645899 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001751-974179", "tile_x": 1001751, "tile_y": 974179, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03804397583008, 12.666634579645899 ], [ -8.03787231445312, 12.666634579645899 ], [ -8.03787231445312, 12.6664670960393 ], [ -8.03804397583008, 12.6664670960393 ], [ -8.03804397583008, 12.666634579645899 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001752-974179", "tile_x": 1001752, "tile_y": 974179, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03787231445312, 12.666634579645899 ], [ -8.03770065307617, 12.666634579645899 ], [ -8.03770065307617, 12.6664670960393 ], [ -8.03787231445312, 12.6664670960393 ], [ -8.03787231445312, 12.666634579645899 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001756-974177", "tile_x": 1001756, "tile_y": 974177, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037185668945311, 12.6669695465289 ], [ -8.037014007568359, 12.6669695465289 ], [ -8.037014007568359, 12.6668020631424 ], [ -8.037185668945311, 12.6668020631424 ], [ -8.037185668945311, 12.6669695465289 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001756-974178", "tile_x": 1001756, "tile_y": 974178, "tile_z": 21, "screen": 2, "reference": 2 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037185668945311, 12.6668020631424 ], [ -8.037014007568359, 12.6668020631424 ], [ -8.037014007568359, 12.666634579645899 ], [ -8.037185668945311, 12.666634579645899 ], [ -8.037185668945311, 12.6668020631424 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001757-974177", "tile_x": 1001757, "tile_y": 974177, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037014007568359, 12.6669695465289 ], [ -8.03684234619141, 12.6669695465289 ], [ -8.03684234619141, 12.6668020631424 ], [ -8.037014007568359, 12.6668020631424 ], [ -8.037014007568359, 12.6669695465289 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g150", "taskId": "21-1001757-974178", "tile_x": 1001757, "tile_y": 974178, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.037014007568359, 12.6668020631424 ], [ -8.03684234619141, 12.6668020631424 ], [ -8.03684234619141, 12.666634579645899 ], [ -8.037014007568359, 12.666634579645899 ], [ -8.037014007568359, 12.6668020631424 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001726-974181", "tile_x": 1001726, "tile_y": 974181, "tile_z": 21, "screen": 6, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04233551025391, 12.6662996123227 ], [ -8.04216384887695, 12.6662996123227 ], [ -8.04216384887695, 12.6661321284961 ], [ -8.04233551025391, 12.6661321284961 ], [ -8.04233551025391, 12.6662996123227 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001726-974182", "tile_x": 1001726, "tile_y": 974182, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04233551025391, 12.6661321284961 ], [ -8.04216384887695, 12.6661321284961 ], [ -8.04216384887695, 12.6659646445595 ], [ -8.04233551025391, 12.6659646445595 ], [ -8.04233551025391, 12.6661321284961 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001727-974181", "tile_x": 1001727, "tile_y": 974181, "tile_z": 21, "screen": 6, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04216384887695, 12.6662996123227 ], [ -8.0419921875, 12.6662996123227 ], [ -8.0419921875, 12.6661321284961 ], [ -8.04216384887695, 12.6661321284961 ], [ -8.04216384887695, 12.6662996123227 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001727-974182", "tile_x": 1001727, "tile_y": 974182, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04216384887695, 12.6661321284961 ], [ -8.0419921875, 12.6661321284961 ], [ -8.0419921875, 12.6659646445595 ], [ -8.04216384887695, 12.6659646445595 ], [ -8.04216384887695, 12.6661321284961 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001735-974180", "tile_x": 1001735, "tile_y": 974180, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04079055786133, 12.6664670960393 ], [ -8.04061889648438, 12.6664670960393 ], [ -8.04061889648438, 12.6662996123227 ], [ -8.04079055786133, 12.6662996123227 ], [ -8.04079055786133, 12.6664670960393 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001735-974181", "tile_x": 1001735, "tile_y": 974181, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04079055786133, 12.6662996123227 ], [ -8.04061889648438, 12.6662996123227 ], [ -8.04061889648438, 12.6661321284961 ], [ -8.04079055786133, 12.6661321284961 ], [ -8.04079055786133, 12.6662996123227 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001735-974182", "tile_x": 1001735, "tile_y": 974182, "tile_z": 21, "screen": 5, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04079055786133, 12.6661321284961 ], [ -8.04061889648438, 12.6661321284961 ], [ -8.04061889648438, 12.6659646445595 ], [ -8.04079055786133, 12.6659646445595 ], [ -8.04079055786133, 12.6661321284961 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001736-974180", "tile_x": 1001736, "tile_y": 974180, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04061889648438, 12.6664670960393 ], [ -8.04044723510742, 12.6664670960393 ], [ -8.04044723510742, 12.6662996123227 ], [ -8.04061889648438, 12.6662996123227 ], [ -8.04061889648438, 12.6664670960393 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001736-974181", "tile_x": 1001736, "tile_y": 974181, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04061889648438, 12.6662996123227 ], [ -8.04044723510742, 12.6662996123227 ], [ -8.04044723510742, 12.6661321284961 ], [ -8.04061889648438, 12.6661321284961 ], [ -8.04061889648438, 12.6662996123227 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001736-974182", "tile_x": 1001736, "tile_y": 974182, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04061889648438, 12.6661321284961 ], [ -8.04044723510742, 12.6661321284961 ], [ -8.04044723510742, 12.6659646445595 ], [ -8.04061889648438, 12.6659646445595 ], [ -8.04061889648438, 12.6661321284961 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001751-974180", "tile_x": 1001751, "tile_y": 974180, "tile_z": 21, "screen": 1, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03804397583008, 12.6664670960393 ], [ -8.03787231445312, 12.6664670960393 ], [ -8.03787231445312, 12.6662996123227 ], [ -8.03804397583008, 12.6662996123227 ], [ -8.03804397583008, 12.6664670960393 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001751-974181", "tile_x": 1001751, "tile_y": 974181, "tile_z": 21, "screen": 1, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03804397583008, 12.6662996123227 ], [ -8.03787231445312, 12.6662996123227 ], [ -8.03787231445312, 12.6661321284961 ], [ -8.03804397583008, 12.6661321284961 ], [ -8.03804397583008, 12.6662996123227 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001752-974180", "tile_x": 1001752, "tile_y": 974180, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03787231445312, 12.6664670960393 ], [ -8.03770065307617, 12.6664670960393 ], [ -8.03770065307617, 12.6662996123227 ], [ -8.03787231445312, 12.6662996123227 ], [ -8.03787231445312, 12.6664670960393 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g152", "taskId": "21-1001752-974181", "tile_x": 1001752, "tile_y": 974181, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03787231445312, 12.6662996123227 ], [ -8.03770065307617, 12.6662996123227 ], [ -8.03770065307617, 12.6661321284961 ], [ -8.03787231445312, 12.6661321284961 ], [ -8.03787231445312, 12.6662996123227 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g154", "taskId": "21-1001726-974183", "tile_x": 1001726, "tile_y": 974183, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04233551025391, 12.6659646445595 ], [ -8.04216384887695, 12.6659646445595 ], [ -8.04216384887695, 12.665797160512801 ], [ -8.04233551025391, 12.665797160512801 ], [ -8.04233551025391, 12.6659646445595 ] ] ] } }, -{ "type": "Feature", "properties": { "groupId": "g154", "taskId": "21-1001727-974183", "tile_x": 1001727, "tile_y": 974183, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04216384887695, 12.6659646445595 ], [ -8.0419921875, 12.6659646445595 ], [ -8.0419921875, 12.665797160512801 ], [ -8.04216384887695, 12.665797160512801 ], [ -8.04216384887695, 12.6659646445595 ] ] ] } } +{ "type": "Feature", "properties": { "groupId": "g118", "taskId": "21-1001656-974163", "tile_x": 1001656, "tile_y": 974163, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.05435180664062, 12.6693143023855, 0.0 ], [ -8.05418014526367, 12.6693143023855, 0.0 ], [ -8.05418014526367, 12.6691468205396, 0.0 ], [ -8.05435180664062, 12.6691468205396, 0.0 ], [ -8.05435180664062, 12.6693143023855, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g118", "taskId": "21-1001656-974164", "tile_x": 1001656, "tile_y": 974164, "tile_z": 21, "screen": 5, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.05435180664062, 12.6691468205396, 0.0 ], [ -8.05418014526367, 12.6691468205396, 0.0 ], [ -8.05418014526367, 12.6689793385837, 0.0 ], [ -8.05435180664062, 12.6689793385837, 0.0 ], [ -8.05435180664062, 12.6691468205396, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g118", "taskId": "21-1001656-974165", "tile_x": 1001656, "tile_y": 974165, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.05435180664062, 12.6689793385837, 0.0 ], [ -8.05418014526367, 12.6689793385837, 0.0 ], [ -8.05418014526367, 12.668811856517699, 0.0 ], [ -8.05435180664062, 12.668811856517699, 0.0 ], [ -8.05435180664062, 12.6689793385837, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g118", "taskId": "21-1001657-974163", "tile_x": 1001657, "tile_y": 974163, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.05418014526367, 12.6693143023855, 0.0 ], [ -8.054008483886721, 12.6693143023855, 0.0 ], [ -8.054008483886721, 12.6691468205396, 0.0 ], [ -8.05418014526367, 12.6691468205396, 0.0 ], [ -8.05418014526367, 12.6693143023855, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g118", "taskId": "21-1001657-974164", "tile_x": 1001657, "tile_y": 974164, "tile_z": 21, "screen": 5, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.05418014526367, 12.6691468205396, 0.0 ], [ -8.054008483886721, 12.6691468205396, 0.0 ], [ -8.054008483886721, 12.6689793385837, 0.0 ], [ -8.05418014526367, 12.6689793385837, 0.0 ], [ -8.05418014526367, 12.6691468205396, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g118", "taskId": "21-1001657-974165", "tile_x": 1001657, "tile_y": 974165, "tile_z": 21, "screen": 5, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.05418014526367, 12.6689793385837, 0.0 ], [ -8.054008483886721, 12.6689793385837, 0.0 ], [ -8.054008483886721, 12.668811856517699, 0.0 ], [ -8.05418014526367, 12.668811856517699, 0.0 ], [ -8.05418014526367, 12.6689793385837, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g119", "taskId": "21-1001742-974164", "tile_x": 1001742, "tile_y": 974164, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03958892822266, 12.6691468205396, 0.0 ], [ -8.0394172668457, 12.6691468205396, 0.0 ], [ -8.0394172668457, 12.6689793385837, 0.0 ], [ -8.03958892822266, 12.6689793385837, 0.0 ], [ -8.03958892822266, 12.6691468205396, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g119", "taskId": "21-1001742-974165", "tile_x": 1001742, "tile_y": 974165, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03958892822266, 12.6689793385837, 0.0 ], [ -8.0394172668457, 12.6689793385837, 0.0 ], [ -8.0394172668457, 12.668811856517699, 0.0 ], [ -8.03958892822266, 12.668811856517699, 0.0 ], [ -8.03958892822266, 12.6689793385837, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g119", "taskId": "21-1001743-974164", "tile_x": 1001743, "tile_y": 974164, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.0394172668457, 12.6691468205396, 0.0 ], [ -8.03924560546875, 12.6691468205396, 0.0 ], [ -8.03924560546875, 12.6689793385837, 0.0 ], [ -8.0394172668457, 12.6689793385837, 0.0 ], [ -8.0394172668457, 12.6691468205396, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g119", "taskId": "21-1001743-974165", "tile_x": 1001743, "tile_y": 974165, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.0394172668457, 12.6689793385837, 0.0 ], [ -8.03924560546875, 12.6689793385837, 0.0 ], [ -8.03924560546875, 12.668811856517699, 0.0 ], [ -8.0394172668457, 12.668811856517699, 0.0 ], [ -8.0394172668457, 12.6689793385837, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g121", "taskId": "21-1001742-974166", "tile_x": 1001742, "tile_y": 974166, "tile_z": 21, "screen": 1, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03958892822266, 12.668811856517699, 0.0 ], [ -8.0394172668457, 12.668811856517699, 0.0 ], [ -8.0394172668457, 12.668644374341699, 0.0 ], [ -8.03958892822266, 12.668644374341699, 0.0 ], [ -8.03958892822266, 12.668811856517699, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g121", "taskId": "21-1001743-974166", "tile_x": 1001743, "tile_y": 974166, "tile_z": 21, "screen": 1, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.0394172668457, 12.668811856517699, 0.0 ], [ -8.03924560546875, 12.668811856517699, 0.0 ], [ -8.03924560546875, 12.668644374341699, 0.0 ], [ -8.0394172668457, 12.668644374341699, 0.0 ], [ -8.0394172668457, 12.668811856517699, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g122", "taskId": "21-1001664-974171", "tile_x": 1001664, "tile_y": 974171, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.052978515625, 12.6679744445371, 0.0 ], [ -8.05280685424805, 12.6679744445371, 0.0 ], [ -8.05280685424805, 12.6678069618108, 0.0 ], [ -8.052978515625, 12.6678069618108, 0.0 ], [ -8.052978515625, 12.6679744445371, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g122", "taskId": "21-1001665-974171", "tile_x": 1001665, "tile_y": 974171, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.05280685424805, 12.6679744445371, 0.0 ], [ -8.05263519287109, 12.6679744445371, 0.0 ], [ -8.05263519287109, 12.6678069618108, 0.0 ], [ -8.05280685424805, 12.6678069618108, 0.0 ], [ -8.05280685424805, 12.6679744445371, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g124", "taskId": "21-1001664-974172", "tile_x": 1001664, "tile_y": 974172, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.052978515625, 12.6678069618108, 0.0 ], [ -8.05280685424805, 12.6678069618108, 0.0 ], [ -8.05280685424805, 12.6676394789745, 0.0 ], [ -8.052978515625, 12.6676394789745, 0.0 ], [ -8.052978515625, 12.6678069618108, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g124", "taskId": "21-1001664-974173", "tile_x": 1001664, "tile_y": 974173, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.052978515625, 12.6676394789745, 0.0 ], [ -8.05280685424805, 12.6676394789745, 0.0 ], [ -8.05280685424805, 12.6674719960281, 0.0 ], [ -8.052978515625, 12.6674719960281, 0.0 ], [ -8.052978515625, 12.6676394789745, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g124", "taskId": "21-1001665-974172", "tile_x": 1001665, "tile_y": 974172, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.05280685424805, 12.6678069618108, 0.0 ], [ -8.05263519287109, 12.6678069618108, 0.0 ], [ -8.05263519287109, 12.6676394789745, 0.0 ], [ -8.05280685424805, 12.6676394789745, 0.0 ], [ -8.05280685424805, 12.6678069618108, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g124", "taskId": "21-1001665-974173", "tile_x": 1001665, "tile_y": 974173, "tile_z": 21, "screen": 4, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.05280685424805, 12.6676394789745, 0.0 ], [ -8.05263519287109, 12.6676394789745, 0.0 ], [ -8.05263519287109, 12.6674719960281, 0.0 ], [ -8.05280685424805, 12.6674719960281, 0.0 ], [ -8.05280685424805, 12.6676394789745, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g174", "taskId": "21-1001782-974218", "tile_x": 1001782, "tile_y": 974218, "tile_z": 21, "screen": 7, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.032722473144529, 12.660102637470301, 0.0 ], [ -8.03255081176758, 12.660102637470301, 0.0 ], [ -8.03255081176758, 12.659935149573601, 0.0 ], [ -8.032722473144529, 12.659935149573601, 0.0 ], [ -8.032722473144529, 12.660102637470301, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g174", "taskId": "21-1001782-974219", "tile_x": 1001782, "tile_y": 974219, "tile_z": 21, "screen": 7, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.032722473144529, 12.659935149573601, 0.0 ], [ -8.03255081176758, 12.659935149573601, 0.0 ], [ -8.03255081176758, 12.659767661566899, 0.0 ], [ -8.032722473144529, 12.659767661566899, 0.0 ], [ -8.032722473144529, 12.659935149573601, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g174", "taskId": "21-1001783-974218", "tile_x": 1001783, "tile_y": 974218, "tile_z": 21, "screen": 7, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03255081176758, 12.660102637470301, 0.0 ], [ -8.03237915039062, 12.660102637470301, 0.0 ], [ -8.03237915039062, 12.659935149573601, 0.0 ], [ -8.03255081176758, 12.659935149573601, 0.0 ], [ -8.03255081176758, 12.660102637470301, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g174", "taskId": "21-1001783-974219", "tile_x": 1001783, "tile_y": 974219, "tile_z": 21, "screen": 7, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03255081176758, 12.659935149573601, 0.0 ], [ -8.03237915039062, 12.659935149573601, 0.0 ], [ -8.03237915039062, 12.659767661566899, 0.0 ], [ -8.03255081176758, 12.659767661566899, 0.0 ], [ -8.03255081176758, 12.659935149573601, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g178", "taskId": "21-1001782-974220", "tile_x": 1001782, "tile_y": 974220, "tile_z": 21, "screen": 7, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.032722473144529, 12.659767661566899, 0.0 ], [ -8.03255081176758, 12.659767661566899, 0.0 ], [ -8.03255081176758, 12.659600173450199, 0.0 ], [ -8.032722473144529, 12.659600173450199, 0.0 ], [ -8.032722473144529, 12.659767661566899, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g178", "taskId": "21-1001783-974220", "tile_x": 1001783, "tile_y": 974220, "tile_z": 21, "screen": 7, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.03255081176758, 12.659767661566899, 0.0 ], [ -8.03237915039062, 12.659767661566899, 0.0 ], [ -8.03237915039062, 12.659600173450199, 0.0 ], [ -8.03255081176758, 12.659600173450199, 0.0 ], [ -8.03255081176758, 12.659767661566899, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g182", "taskId": "21-1001801-974225", "tile_x": 1001801, "tile_y": 974225, "tile_z": 21, "screen": 6, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.02946090698242, 12.6589302198838, 0.0 ], [ -8.029289245605471, 12.6589302198838, 0.0 ], [ -8.029289245605471, 12.6587627312172, 0.0 ], [ -8.02946090698242, 12.6587627312172, 0.0 ], [ -8.02946090698242, 12.6589302198838, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g182", "taskId": "21-1001802-974225", "tile_x": 1001802, "tile_y": 974225, "tile_z": 21, "screen": 6, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.029289245605471, 12.6589302198838, 0.0 ], [ -8.029117584228519, 12.6589302198838, 0.0 ], [ -8.029117584228519, 12.6587627312172, 0.0 ], [ -8.029289245605471, 12.6587627312172, 0.0 ], [ -8.029289245605471, 12.6589302198838, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g186", "taskId": "21-1001801-974226", "tile_x": 1001801, "tile_y": 974226, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.02946090698242, 12.6587627312172, 0.0 ], [ -8.029289245605471, 12.6587627312172, 0.0 ], [ -8.029289245605471, 12.6585952424407, 0.0 ], [ -8.02946090698242, 12.6585952424407, 0.0 ], [ -8.02946090698242, 12.6587627312172, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g186", "taskId": "21-1001801-974227", "tile_x": 1001801, "tile_y": 974227, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.02946090698242, 12.6585952424407, 0.0 ], [ -8.029289245605471, 12.6585952424407, 0.0 ], [ -8.029289245605471, 12.6584277535542, 0.0 ], [ -8.02946090698242, 12.6584277535542, 0.0 ], [ -8.02946090698242, 12.6585952424407, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g186", "taskId": "21-1001802-974226", "tile_x": 1001802, "tile_y": 974226, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.029289245605471, 12.6587627312172, 0.0 ], [ -8.029117584228519, 12.6587627312172, 0.0 ], [ -8.029117584228519, 12.6585952424407, 0.0 ], [ -8.029289245605471, 12.6585952424407, 0.0 ], [ -8.029289245605471, 12.6587627312172, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g186", "taskId": "21-1001802-974227", "tile_x": 1001802, "tile_y": 974227, "tile_z": 21, "screen": 6, "reference": 1 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.029289245605471, 12.6585952424407, 0.0 ], [ -8.029117584228519, 12.6585952424407, 0.0 ], [ -8.029117584228519, 12.6584277535542, 0.0 ], [ -8.029289245605471, 12.6584277535542, 0.0 ], [ -8.029289245605471, 12.6585952424407, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g193", "taskId": "21-1001719-974232", "tile_x": 1001719, "tile_y": 974232, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04353713989258, 12.657757796908699, 0.0 ], [ -8.04336547851562, 12.657757796908699, 0.0 ], [ -8.04336547851562, 12.6575903074724, 0.0 ], [ -8.04353713989258, 12.6575903074724, 0.0 ], [ -8.04353713989258, 12.657757796908699, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g193", "taskId": "21-1001719-974233", "tile_x": 1001719, "tile_y": 974233, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04353713989258, 12.6575903074724, 0.0 ], [ -8.04336547851562, 12.6575903074724, 0.0 ], [ -8.04336547851562, 12.6574228179262, 0.0 ], [ -8.04353713989258, 12.6574228179262, 0.0 ], [ -8.04353713989258, 12.6575903074724, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g193", "taskId": "21-1001719-974234", "tile_x": 1001719, "tile_y": 974234, "tile_z": 21, "screen": 2, "reference": 2 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04353713989258, 12.6574228179262, 0.0 ], [ -8.04336547851562, 12.6574228179262, 0.0 ], [ -8.04336547851562, 12.657255328270001, 0.0 ], [ -8.04353713989258, 12.657255328270001, 0.0 ], [ -8.04353713989258, 12.6574228179262, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g193", "taskId": "21-1001720-974232", "tile_x": 1001720, "tile_y": 974232, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04336547851562, 12.657757796908699, 0.0 ], [ -8.04319381713867, 12.657757796908699, 0.0 ], [ -8.04319381713867, 12.6575903074724, 0.0 ], [ -8.04336547851562, 12.6575903074724, 0.0 ], [ -8.04336547851562, 12.657757796908699, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g193", "taskId": "21-1001720-974233", "tile_x": 1001720, "tile_y": 974233, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04336547851562, 12.6575903074724, 0.0 ], [ -8.04319381713867, 12.6575903074724, 0.0 ], [ -8.04319381713867, 12.6574228179262, 0.0 ], [ -8.04336547851562, 12.6574228179262, 0.0 ], [ -8.04336547851562, 12.6575903074724, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g193", "taskId": "21-1001720-974234", "tile_x": 1001720, "tile_y": 974234, "tile_z": 21, "screen": 2, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.04336547851562, 12.6574228179262, 0.0 ], [ -8.04319381713867, 12.6574228179262, 0.0 ], [ -8.04319381713867, 12.657255328270001, 0.0 ], [ -8.04336547851562, 12.657255328270001, 0.0 ], [ -8.04336547851562, 12.6574228179262, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g433", "taskId": "21-1001415-974776", "tile_x": 1001415, "tile_y": 974776, "tile_z": 21, "screen": 8, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.09572219848633, 12.5666273394675, 0.0 ], [ -8.09555053710938, 12.5666273394675, 0.0 ], [ -8.09555053710938, 12.5664597904149, 0.0 ], [ -8.09572219848633, 12.5664597904149, 0.0 ], [ -8.09572219848633, 12.5666273394675, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g433", "taskId": "21-1001415-974777", "tile_x": 1001415, "tile_y": 974777, "tile_z": 21, "screen": 8, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.09572219848633, 12.5664597904149, 0.0 ], [ -8.09555053710938, 12.5664597904149, 0.0 ], [ -8.09555053710938, 12.566292241253, 0.0 ], [ -8.09572219848633, 12.566292241253, 0.0 ], [ -8.09572219848633, 12.5664597904149, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g433", "taskId": "21-1001416-974776", "tile_x": 1001416, "tile_y": 974776, "tile_z": 21, "screen": 8, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.09555053710938, 12.5666273394675, 0.0 ], [ -8.09537887573242, 12.5666273394675, 0.0 ], [ -8.09537887573242, 12.5664597904149, 0.0 ], [ -8.09555053710938, 12.5664597904149, 0.0 ], [ -8.09555053710938, 12.5666273394675, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g433", "taskId": "21-1001416-974777", "tile_x": 1001416, "tile_y": 974777, "tile_z": 21, "screen": 8, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.09555053710938, 12.5664597904149, 0.0 ], [ -8.09537887573242, 12.5664597904149, 0.0 ], [ -8.09537887573242, 12.566292241253, 0.0 ], [ -8.09555053710938, 12.566292241253, 0.0 ], [ -8.09555053710938, 12.5664597904149, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g434", "taskId": "21-1001415-974778", "tile_x": 1001415, "tile_y": 974778, "tile_z": 21, "screen": 8, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.09572219848633, 12.566292241253, 0.0 ], [ -8.09555053710938, 12.566292241253, 0.0 ], [ -8.09555053710938, 12.5661246919818, 0.0 ], [ -8.09572219848633, 12.5661246919818, 0.0 ], [ -8.09572219848633, 12.566292241253, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g434", "taskId": "21-1001416-974778", "tile_x": 1001416, "tile_y": 974778, "tile_z": 21, "screen": 8, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.09555053710938, 12.566292241253, 0.0 ], [ -8.09537887573242, 12.566292241253, 0.0 ], [ -8.09537887573242, 12.5661246919818, 0.0 ], [ -8.09555053710938, 12.5661246919818, 0.0 ], [ -8.09555053710938, 12.566292241253, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g440", "taskId": "21-1001444-974798", "tile_x": 1001444, "tile_y": 974798, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.090744018554689, 12.5629412350811, 0.0 ], [ -8.090572357177731, 12.5629412350811, 0.0 ], [ -8.090572357177731, 12.562773683626, 0.0 ], [ -8.090744018554689, 12.562773683626, 0.0 ], [ -8.090744018554689, 12.5629412350811, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g440", "taskId": "21-1001445-974798", "tile_x": 1001445, "tile_y": 974798, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.090572357177731, 12.5629412350811, 0.0 ], [ -8.090400695800779, 12.5629412350811, 0.0 ], [ -8.090400695800779, 12.562773683626, 0.0 ], [ -8.090572357177731, 12.562773683626, 0.0 ], [ -8.090572357177731, 12.5629412350811, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g441", "taskId": "21-1001444-974799", "tile_x": 1001444, "tile_y": 974799, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.090744018554689, 12.562773683626, 0.0 ], [ -8.090572357177731, 12.562773683626, 0.0 ], [ -8.090572357177731, 12.5626061320616, 0.0 ], [ -8.090744018554689, 12.5626061320616, 0.0 ], [ -8.090744018554689, 12.562773683626, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g441", "taskId": "21-1001444-974800", "tile_x": 1001444, "tile_y": 974800, "tile_z": 21, "screen": 3, "reference": 3 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.090744018554689, 12.5626061320616, 0.0 ], [ -8.090572357177731, 12.5626061320616, 0.0 ], [ -8.090572357177731, 12.562438580387999, 0.0 ], [ -8.090744018554689, 12.562438580387999, 0.0 ], [ -8.090744018554689, 12.5626061320616, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g441", "taskId": "21-1001445-974799", "tile_x": 1001445, "tile_y": 974799, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.090572357177731, 12.562773683626, 0.0 ], [ -8.090400695800779, 12.562773683626, 0.0 ], [ -8.090400695800779, 12.5626061320616, 0.0 ], [ -8.090572357177731, 12.5626061320616, 0.0 ], [ -8.090572357177731, 12.562773683626, 0.0 ] ] ] } }, +{ "type": "Feature", "properties": { "groupId": "g441", "taskId": "21-1001445-974800", "tile_x": 1001445, "tile_y": 974800, "tile_z": 21, "screen": 3, "reference": 0 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -8.090572357177731, 12.5626061320616, 0.0 ], [ -8.090400695800779, 12.5626061320616, 0.0 ], [ -8.090400695800779, 12.562438580387999, 0.0 ], [ -8.090572357177731, 12.562438580387999, 0.0 ], [ -8.090572357177731, 12.5626061320616, 0.0 ] ] ] } } ] }