added land
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
from pathlib import Path
|
||||
|
||||
import numpy as np
|
||||
import rasterio
|
||||
from rasterio.transform import from_origin
|
||||
|
||||
from app.core.geo import PathPoint
|
||||
from app.core.landcover import landcover_path, worldcover_class
|
||||
|
||||
|
||||
def write_raster(path: Path, data: np.ndarray, nodata: float = -9999.0) -> None:
|
||||
transform = from_origin(30.0, 60.0, 0.01, 0.01)
|
||||
with rasterio.open(
|
||||
path,
|
||||
"w",
|
||||
driver="GTiff",
|
||||
height=data.shape[0],
|
||||
width=data.shape[1],
|
||||
count=1,
|
||||
dtype=data.dtype,
|
||||
crs="EPSG:4326",
|
||||
transform=transform,
|
||||
nodata=nodata,
|
||||
) as dataset:
|
||||
dataset.write(data, 1)
|
||||
|
||||
|
||||
def test_worldcover_class_mapping() -> None:
|
||||
assert worldcover_class(10) == "tree_cover"
|
||||
assert worldcover_class(50) == "built_up"
|
||||
assert worldcover_class(255) == "unknown"
|
||||
|
||||
|
||||
def test_landcover_path_segments_and_vegetation_depth(tmp_path: Path) -> None:
|
||||
landcover_dir = tmp_path / "landcover"
|
||||
canopy_dir = tmp_path / "canopy"
|
||||
landcover_dir.mkdir()
|
||||
canopy_dir.mkdir()
|
||||
write_raster(
|
||||
landcover_dir / "worldcover.tif",
|
||||
np.array([[10, 10, 50, 50]], dtype="uint8"),
|
||||
nodata=0,
|
||||
)
|
||||
write_raster(
|
||||
canopy_dir / "canopy.tif",
|
||||
np.array([[12.0, 14.0, 0.0, 0.0]], dtype="float32"),
|
||||
)
|
||||
points = [
|
||||
PathPoint(lat=59.995, lon=30.005, distance_m=0),
|
||||
PathPoint(lat=59.995, lon=30.015, distance_m=10),
|
||||
PathPoint(lat=59.995, lon=30.025, distance_m=20),
|
||||
PathPoint(lat=59.995, lon=30.035, distance_m=30),
|
||||
]
|
||||
|
||||
result = landcover_path(points, landcover_dir, canopy_dir)
|
||||
|
||||
assert result.vegetation_depth_m == 20
|
||||
assert len(result.segments) == 2
|
||||
assert result.segments[0].class_name == "tree_cover"
|
||||
assert result.segments[0].forest_type == "unknown"
|
||||
assert result.segments[0].canopy_height_m == 13.0
|
||||
assert result.segments[1].class_name == "built_up"
|
||||
Reference in New Issue
Block a user