Normalize touching footprints as visible roof instances
This commit is contained in:
@@ -132,3 +132,50 @@ def test_normalizer_rejects_features_created_after_dated_imagery(tmp_path: Path)
|
||||
)
|
||||
assert len(normalized["features"]) == 1
|
||||
assert audit["decision_counts"] == {"accepted": 1, "created_after_imagery_period": 1}
|
||||
|
||||
|
||||
def test_normalizer_merges_only_touching_visible_roof_instances(tmp_path: Path) -> None:
|
||||
raster_path = tmp_path / "image.tif"
|
||||
with rasterio.open(
|
||||
raster_path,
|
||||
"w",
|
||||
driver="GTiff",
|
||||
width=100,
|
||||
height=100,
|
||||
count=3,
|
||||
dtype="uint8",
|
||||
crs="EPSG:4326",
|
||||
transform=from_origin(4.0, 51.0, 0.001, 0.001),
|
||||
) as dataset:
|
||||
dataset.write(np.zeros((3, 100, 100), dtype="uint8"))
|
||||
polygons = [
|
||||
[[[4.01, 50.99], [4.02, 50.99], [4.02, 50.98], [4.01, 50.98], [4.01, 50.99]]],
|
||||
[[[4.02, 50.99], [4.03, 50.99], [4.03, 50.98], [4.02, 50.98], [4.02, 50.99]]],
|
||||
[[[4.04, 50.99], [4.05, 50.99], [4.05, 50.98], [4.04, 50.98], [4.04, 50.99]]],
|
||||
]
|
||||
reference_path = tmp_path / "reference.geojson"
|
||||
reference_path.write_text(
|
||||
json.dumps(
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{"type": "Feature", "id": str(index), "properties": {}, "geometry": {"type": "Polygon", "coordinates": coordinates}}
|
||||
for index, coordinates in enumerate(polygons)
|
||||
],
|
||||
}
|
||||
),
|
||||
encoding="utf-8",
|
||||
)
|
||||
normalized, audit = module.normalize(
|
||||
reference_path=reference_path,
|
||||
raster_path=raster_path,
|
||||
source_name="urbis",
|
||||
min_label_px=3,
|
||||
imagery_observed_at=None,
|
||||
reference_observed_at=None,
|
||||
merge_touching_roofs=True,
|
||||
)
|
||||
assert len(normalized["features"]) == 2
|
||||
assert sorted(item["properties"]["source_feature_count"] for item in normalized["features"]) == [1, 2]
|
||||
assert audit["accepted_source_feature_count"] == 3
|
||||
assert audit["accepted_feature_count"] == 2
|
||||
|
||||
Reference in New Issue
Block a user