diff --git a/lidar_pipeline/visualizations.py b/lidar_pipeline/visualizations.py index 0b16e2c..596a0e9 100644 --- a/lidar_pipeline/visualizations.py +++ b/lidar_pipeline/visualizations.py @@ -470,7 +470,8 @@ def generate_hillshade(dem_file, basename, vis_dir, resolution, shared=None): else: dem_np, transform, crs = _read_dem(dem_file) dem = to_gpu(dem_np) - dy, dx = xp.gradient(dem) + # Espacement = résolution (m/px) : sans lui la pente est fausse + dy, dx = xp.gradient(dem, float(resolution) if resolution else 1.0) slope = xp.arctan(xp.sqrt(dx**2 + dy**2)) aspect = xp.arctan2(dy, dx) sin_slope = xp.sin(slope) @@ -532,7 +533,8 @@ def generate_slope(dem_file, basename, vis_dir, resolution, shared=None): else: dem_np, transform, crs = _read_dem(dem_file) dem = to_gpu(dem_np) - dy, dx = xp.gradient(dem) + # Espacement = résolution (m/px) : sans lui la pente est fausse + dy, dx = xp.gradient(dem, float(resolution) if resolution else 1.0) slope = xp.arctan(xp.sqrt(dx**2 + dy**2)) * 180 / xp.pi nan_mask = np.isnan(dem_np) _save_tif(output, to_cpu(slope) if _gpu_mod.HAS_GPU else slope, transform, crs, nan_mask=nan_mask) @@ -567,7 +569,8 @@ def generate_aspect(dem_file, basename, vis_dir, resolution, shared=None): else: dem_np, transform, crs = _read_dem(dem_file) dem = to_gpu(dem_np) - dy, dx = xp.gradient(dem) + # Espacement = résolution (m/px) : sans lui la pente est fausse + dy, dx = xp.gradient(dem, float(resolution) if resolution else 1.0) nan_mask = np.isnan(dem_np) aspect = xp.arctan2(dy, dx) * 180 / xp.pi aspect = xp.mod(aspect, 360)