Borner le comblement du MNT à l'enveloppe des points, ajouter la couche précision et un affichage relief/précision, encoder les sous-tuiles une seule fois en q75
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@ -553,3 +553,30 @@ class TestPriorityFlood:
|
||||
|
||||
result = _priority_flood(dem, nodata)
|
||||
assert result[2, 2] == 999.0
|
||||
|
||||
|
||||
class TestDensiteSol:
|
||||
def test_density_levels_log_scale(self):
|
||||
from lidar_pipeline.visualizations import density_levels
|
||||
d = np.array([0.0, np.nan, 0.25, 0.36, 0.5, 1.0, 45.0, 45.3, 1000.0])
|
||||
assert density_levels(d).tolist() == [0, 0, 0, 1, 2, 4, 14, 15, 15]
|
||||
|
||||
def test_generate_reads_density_sidecar(self, tmp_path):
|
||||
import rasterio
|
||||
from rasterio.transform import from_bounds
|
||||
from lidar_pipeline.dtm import density_path
|
||||
from lidar_pipeline.visualizations import generate_densite_sol
|
||||
dem = tmp_path / "T_dtm_r0p2.tif"
|
||||
dem.touch()
|
||||
with rasterio.open(density_path(dem), 'w', driver='GTiff', width=4, height=1,
|
||||
count=1, dtype='float32', crs='EPSG:2154',
|
||||
transform=from_bounds(0, 0, 4, 1, 4, 1)) as dst:
|
||||
dst.write(np.array([[0.0, 1.0, 4.0, 64.0]], dtype='float32'), 1)
|
||||
out = generate_densite_sol(dem, "T", tmp_path, 0.2)
|
||||
with rasterio.open(out) as src:
|
||||
assert src.read(1).tolist() == [[0, 4, 8, 15]]
|
||||
assert src.width == 4 # grille de 1 m conservée
|
||||
|
||||
def test_missing_sidecar_returns_none(self, tmp_path):
|
||||
from lidar_pipeline.visualizations import generate_densite_sol
|
||||
assert generate_densite_sol(tmp_path / "X_dtm.tif", "X", tmp_path, 0.2) is None
|
||||
|
||||
Reference in New Issue
Block a user