From 08730bf794a42eda33fa68e87da5b07a37c4280d Mon Sep 17 00:00:00 2001 From: Dmytro Lukash Date: Thu, 19 Jan 2023 15:40:17 +0200 Subject: [PATCH 1/2] 21618/added overlap_with_geometry method to use in components --- sentinel2download/overlap.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/sentinel2download/overlap.py b/sentinel2download/overlap.py index 5fb74ec..3882fe6 100644 --- a/sentinel2download/overlap.py +++ b/sentinel2download/overlap.py @@ -120,3 +120,33 @@ def _zone_number(lat, lon): return 32600 + zone else: return 32700 + zone + + def overlap_with_geometry(self, *, limit: float = 0.001) -> Optional[gp.GeoDataFrame]: + """ + Find unique tiles that intersects given aoi, area. + The same as overlap, but with geometry. + :param limit: float, min intersection area in km2 + :return: GeoDataFrame: Tile names and it's geometry in epsg:4326 + """ + + logger.info(f"Start finding overlapping tiles") + + grid, epsg = self._intersect(limit) + + aoi = self.aoi + overlap_tiles = list() + for row in grid.itertuples(): + start_area = aoi.geometry[0].area + aoi.geometry[0] = aoi.geometry[0].difference(row.geometry) + if start_area != aoi.geometry[0].area: + overlap_tiles.append(dict(Name=row.Name, geometry=row.geometry)) + + if not overlap_tiles: + return + + tiles = gp.GeoDataFrame(overlap_tiles, crs=epsg) + tiles = tiles.to_crs(self.crs) + + logger.info(f"Found {len(tiles)} tiles: {', '.join(sorted(tiles.Name))}") + return tiles + \ No newline at end of file From bca7ff06c72411a4ada3886131f1b030cbd94e0b Mon Sep 17 00:00:00 2001 From: Dmytro Lukash Date: Thu, 19 Jan 2023 15:55:09 +0200 Subject: [PATCH 2/2] 21618/method annotation small fix --- sentinel2download/overlap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sentinel2download/overlap.py b/sentinel2download/overlap.py index 3882fe6..f851098 100644 --- a/sentinel2download/overlap.py +++ b/sentinel2download/overlap.py @@ -126,7 +126,7 @@ def overlap_with_geometry(self, *, limit: float = 0.001) -> Optional[gp.GeoDataF Find unique tiles that intersects given aoi, area. The same as overlap, but with geometry. :param limit: float, min intersection area in km2 - :return: GeoDataFrame: Tile names and it's geometry in epsg:4326 + :return: GeoDataFrame: Tile names (Name column) and it's geometry in epsg:4326 """ logger.info(f"Start finding overlapping tiles")