Add visualization picker to zone generation and unify tile colors
- Web map: multi-select picker in the generation bar (aspect, slope, positive openness, anisotropic openness, wavelet) passed to the API; the layer panel is restricted to the same shortlist (PANEL_VIZ) and a refresh button rebuilds the index when new layers appear on disk; jobs started outside the UI are now adopted into the visible queue - Uniform colors across tiles: openness/anisotropic/sailore now store local z-scores, and all renderers use fixed ranges (0-3 sigma, SVF 0-1 physical, slope 0-30 deg) instead of per-tile percentile stretches - Ray-tracing falls back to CPU when VRAM is exhausted so openness and SVF no longer fail silently on shared GPUs - build_index merges visualizations available at only one resolution into the displayed tile so in-progress layers stay visible - 11 new tests (142 passing)
This commit is contained in:
@ -215,3 +215,43 @@ class TestNodataPreserved:
|
||||
with rasterio.open(out) as src:
|
||||
data = src.read(1)
|
||||
assert np.isnan(data[80:120, 80:120]).any(), f"{out.name} : trou disparu"
|
||||
|
||||
|
||||
def test_ray_trace_horizons_cpu_fallback_on_oom(monkeypatch):
|
||||
"""Sur OOM GPU, le ray-tracing désactive le GPU puis recommence sur CPU."""
|
||||
import lidar_pipeline.visualizations as viz
|
||||
import lidar_pipeline.gpu as gpu_mod
|
||||
|
||||
calls = {"n": 0}
|
||||
disabled = []
|
||||
|
||||
def fake_core(dem, rows, cols, res, n_dirs, max_dist, radii_m=None):
|
||||
calls["n"] += 1
|
||||
if calls["n"] == 1:
|
||||
raise RuntimeError("Out of memory allocating 600,000,000 bytes")
|
||||
return ("pos", "neg")
|
||||
|
||||
monkeypatch.setattr(viz, "_ray_trace_horizons_core", fake_core)
|
||||
monkeypatch.setattr(gpu_mod, "is_gpu_active", lambda: True)
|
||||
monkeypatch.setattr(gpu_mod, "disable_gpu", lambda: disabled.append(True))
|
||||
result = viz._ray_trace_horizons(None, 4, 4, 0.5, 8, 10)
|
||||
assert result == ("pos", "neg")
|
||||
assert calls["n"] == 2
|
||||
assert disabled == [True]
|
||||
|
||||
|
||||
def test_ray_trace_horizons_reraises_non_oom(monkeypatch):
|
||||
"""Une erreur non-OOM n'est pas masquée par le repli CPU."""
|
||||
import lidar_pipeline.visualizations as viz
|
||||
import lidar_pipeline.gpu as gpu_mod
|
||||
|
||||
def fake_core(dem, rows, cols, res, n_dirs, max_dist, radii_m=None):
|
||||
raise ValueError("autre erreur")
|
||||
|
||||
monkeypatch.setattr(viz, "_ray_trace_horizons_core", fake_core)
|
||||
monkeypatch.setattr(gpu_mod, "is_gpu_active", lambda: True)
|
||||
try:
|
||||
viz._ray_trace_horizons(None, 4, 4, 0.5, 8, 10)
|
||||
assert False, "ValueError attendue"
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user