diff --git a/scripts/render_detection_false_negative_review_contact_sheets.py b/scripts/render_detection_false_negative_review_contact_sheets.py index 7e815518..2caf6890 100644 --- a/scripts/render_detection_false_negative_review_contact_sheets.py +++ b/scripts/render_detection_false_negative_review_contact_sheets.py @@ -116,6 +116,8 @@ def load_tiles( manifest = load_json(manifest_path) rasterio = dependencies["rasterio"] box = dependencies["box"] + Transformer = dependencies["Transformer"] + transform_geometry = dependencies["transform"] raw_paths = [ str(tile.get("path") or "").strip() for tile in manifest.get("tiles") or [] @@ -130,11 +132,15 @@ def load_tiles( with rasterio.open(tile_path) as source: if not source.crs: raise SystemExit(f"Source tile has no CRS: {tile_path}") + source_geometry = box(*source.bounds) + to_wgs84 = Transformer.from_crs(source.crs, "EPSG:4326", always_xy=True) tiles.append( { "path": str(tile_path), "crs": source.crs, - "geometry": box(*source.bounds), + "geometry_wgs84": transform_geometry( + to_wgs84.transform, source_geometry + ), } ) return tiles @@ -143,21 +149,16 @@ def load_tiles( def choose_source_tile( geometry: Any, tiles: list[dict[str, Any]], - dependencies: dict[str, Any], ) -> str | None: - Transformer = dependencies["Transformer"] - transform_geometry = dependencies["transform"] candidates: list[tuple[float, float, str]] = [] for tile in tiles: - transformer = Transformer.from_crs("EPSG:4326", tile["crs"], always_xy=True) - projected = transform_geometry(transformer.transform, geometry) - intersection = projected.intersection(tile["geometry"]) + intersection = geometry.intersection(tile["geometry_wgs84"]) if intersection.is_empty: continue candidates.append( ( float(intersection.area), - -float(projected.centroid.distance(tile["geometry"].centroid)), + -float(geometry.centroid.distance(tile["geometry_wgs84"].centroid)), tile["path"], ) ) @@ -264,7 +265,7 @@ def read_population( or feature.get("id") ) area_m2 = abs(float(geod.geometry_area_perimeter(geometry)[0])) - source_tile_path = choose_source_tile(geometry, tiles, dependencies) + source_tile_path = choose_source_tile(geometry, tiles) if source_tile_path is None: outside_tile_coverage.append( {