From 7ff268877a88eb2804861e40dd2129733a9a9969 Mon Sep 17 00:00:00 2001 From: Levi Szamek Date: Tue, 28 Jan 2025 18:17:25 +0100 Subject: [PATCH] fix: requesting the same tile multiple times for multipolygon --- .../mapswipe_workers/utils/process_mapillary.py | 4 ++-- .../tests/unittests/test_process_mapillary.py | 15 +++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/mapswipe_workers/mapswipe_workers/utils/process_mapillary.py b/mapswipe_workers/mapswipe_workers/utils/process_mapillary.py index 1faf0b23b..aaad7a508 100644 --- a/mapswipe_workers/mapswipe_workers/utils/process_mapillary.py +++ b/mapswipe_workers/mapswipe_workers/utils/process_mapillary.py @@ -26,9 +26,9 @@ def create_tiles(polygon, level): if isinstance(polygon, Polygon): polygon = MultiPolygon([polygon]) - tiles = [] + tiles = set() for i, poly in enumerate(polygon.geoms): - tiles.extend(list(mercantile.tiles(*poly.bounds, level))) + tiles.update(list(mercantile.tiles(*poly.bounds, level))) bbox_list = [mercantile.bounds(tile.x, tile.y, tile.z) for tile in tiles] bbox_polygons = [box(*bbox) for bbox in bbox_list] diff --git a/mapswipe_workers/tests/unittests/test_process_mapillary.py b/mapswipe_workers/tests/unittests/test_process_mapillary.py index 32c1bad46..6438ac96c 100644 --- a/mapswipe_workers/tests/unittests/test_process_mapillary.py +++ b/mapswipe_workers/tests/unittests/test_process_mapillary.py @@ -48,9 +48,6 @@ def setUpClass(cls): def setUp(self): self.level = 14 self.test_polygon = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)]) - self.test_multipolygon = MultiPolygon( - [self.test_polygon, Polygon([(2, 2), (3, 2), (3, 3), (2, 3)])] - ) self.empty_polygon = Polygon() self.empty_geometry = GeometryCollection() @@ -60,9 +57,19 @@ def test_create_tiles_with_valid_polygon(self): self.assertFalse(tiles.empty) def test_create_tiles_with_multipolygon(self): - tiles = create_tiles(self.test_multipolygon, self.level) + polygon = Polygon( + [ + (0.00000000, 0.00000000), + (0.000000001, 0.00000000), + (0.00000000, 0.000000001), + (0.00000000, 0.000000001), + ] + ) + multipolygon = MultiPolygon([polygon, polygon]) + tiles = create_tiles(multipolygon, self.level) self.assertIsInstance(tiles, pd.DataFrame) self.assertFalse(tiles.empty) + self.assertEqual(len(tiles), 1) def test_create_tiles_with_empty_polygon(self): tiles = create_tiles(self.empty_polygon, self.level)