From d857b98578eb377da7cc36f653455fc5f916a9cd Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 18 Aug 2026 17:25:06 +0800
Subject: [PATCH] feat:变化检测优化
---
capabilities/00-change-detection/tests/test_change_detection.py | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 54 insertions(+), 0 deletions(-)
diff --git a/capabilities/00-change-detection/tests/test_change_detection.py b/capabilities/00-change-detection/tests/test_change_detection.py
index 0ff63b4..5d53b60 100644
--- a/capabilities/00-change-detection/tests/test_change_detection.py
+++ b/capabilities/00-change-detection/tests/test_change_detection.py
@@ -3,6 +3,8 @@
import unittest
from pathlib import Path
import numpy as np
+import rasterio
+from rasterio.transform import from_origin
import importlib.util
@@ -27,6 +29,47 @@
self.assertEqual(details["original_width"], 200)
self.assertEqual(details["original_height"], 100)
+ def test_geotiff_mode_reads_crs_and_native_resolution(self):
+ module = load_module()
+ with tempfile.TemporaryDirectory() as directory:
+ root = Path(directory)
+ transform = from_origin(100, 200, 0.5, 0.5)
+ for name in ("before.tif", "after.tif"):
+ with rasterio.open(root / name, "w", driver="GTiff", width=96, height=64, count=3, dtype="uint8", crs="EPSG:3857", transform=transform) as dataset:
+ dataset.write(np.zeros((3, 64, 96), dtype=np.uint8))
+ image, info = module._read_rgb(root / "before.tif", "geotiff")
+ self.assertEqual(image.shape, (64, 96, 3))
+ self.assertEqual(info["crs"], "EPSG:3857")
+ before = np.zeros((64, 96, 3), dtype=np.uint8)
+ valid = np.ones((64, 96), dtype=bool)
+ _, _, _, details = module._resize_pair(before, before, valid, 0, native_resolution=True)
+ self.assertEqual((details["processed_width"], details["processed_height"]), (96, 64))
+
+ def test_geotiff_mode_rejects_missing_spatial_reference(self):
+ module = load_module()
+ with tempfile.TemporaryDirectory() as directory:
+ root = Path(directory)
+ with rasterio.open(root / "plain.tif", "w", driver="GTiff", width=32, height=32, count=3, dtype="uint8") as dataset:
+ dataset.write(np.zeros((3, 32, 32), dtype=np.uint8))
+ with self.assertRaisesRegex(ValueError, "no valid CRS"):
+ module._read_rgb(root / "plain.tif", "geotiff")
+
+ def test_geotiff_grid_alignment_resamples_only_processing_copy(self):
+ module = load_module()
+ with tempfile.TemporaryDirectory() as directory:
+ root = Path(directory)
+ before_transform = from_origin(100, 200, 1, 1)
+ after_transform = from_origin(100.25, 200.25, 1.01, 1.01)
+ for name, transform, width, height in (("before.tif", before_transform, 8, 6), ("after.tif", after_transform, 9, 7)):
+ with rasterio.open(root / name, "w", driver="GTiff", width=width, height=height, count=3, dtype="uint8", crs="EPSG:3857", transform=transform) as dataset:
+ dataset.write(np.full((3, height, width), 128, dtype=np.uint8))
+ before, before_info = module._read_rgb(root / "before.tif", "geotiff")
+ aligned = module._reproject_rgb_to_grid(root / "after.tif", before.shape[:2], before_info["transform"], before_info["crs"])
+ self.assertEqual(aligned.shape, before.shape)
+ with rasterio.open(root / "after.tif") as source:
+ self.assertEqual(source.width, 9)
+ self.assertEqual(source.height, 7)
+
def test_mismatched_inputs_fail_before_creating_outputs(self):
module = load_module()
with tempfile.TemporaryDirectory() as directory:
@@ -49,6 +92,17 @@
module.run_change_detection(root / "before.jpg", root / "after.jpg", root / "out", threshold=1.0)
self.assertFalse((root / "out").exists())
+ def test_max_dimension_is_bounded_before_creating_outputs(self):
+ module = load_module()
+ with tempfile.TemporaryDirectory() as directory:
+ root = Path(directory)
+ from PIL import Image
+ Image.new("RGB", (32, 32), "black").save(root / "before.jpg")
+ Image.new("RGB", (32, 32), "black").save(root / "after.jpg")
+ with self.assertRaises(ValueError):
+ module.run_change_detection(root / "before.jpg", root / "after.jpg", root / "out", max_dimension=256)
+ self.assertFalse((root / "out").exists())
+
def test_empty_vector_is_written_as_feature_collection(self):
module = load_module()
with tempfile.TemporaryDirectory() as directory:
--
Gitblit v1.9.3