Layout uniforme WebP: axes fixes + aspect='equal' pour superposition géolocalisée

- Positions d'axes fixes (data_left/bottom/width/height_frac) pour alignement
  pixel-parfait entre terrain et ortho/topo
- aspect='equal' au lieu de 'auto' pour conserver les proportions géographiques
- Colorbar descriptive pour les visualisations RGB (ortho/topo)
- Comblage des petits trous DTM (< 1m) via rasterio.fill.fillnodata
- Suppression de la visualisation "dépressions"
- Hillshade composite: 0.7*hillshade + 0.3*cos(slope)
- D8 flow accumulation accéléré par numba JIT (fallback Python)
- Flag --keep-tif pour conserver les TIFF intermédiaires
- --force supprime aussi les TIF existants avant régénération
- ETA affiché pendant la génération des visualisations
- Répertoires temp dans temp/ pour traitement parallèle

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jacquin Antoine
2026-05-10 14:46:31 +02:00
parent e31d3f0e2b
commit 2986400a0a
12 changed files with 243 additions and 151 deletions

View File

@ -17,6 +17,7 @@ class TestCLIParsing:
parser.add_argument("-w", "--workers", type=int, default=1)
parser.add_argument("-f", "--force", action="store_true")
parser.add_argument("--file", nargs="+", type=str, default=None)
parser.add_argument("--keep-tif", action="store_true")
args = parser.parse_args(["./input"])
assert args.input == "./input"
@ -25,6 +26,7 @@ class TestCLIParsing:
assert args.workers == 1
assert args.force is False
assert args.file is None
assert args.keep_tif is False
def test_file_flag_single(self):
import argparse
@ -65,7 +67,7 @@ class TestSetupLogging:
assert len(logger.handlers) == 1
# Format should not include timestamps
fmt = logger.handlers[0].formatter._fmt
assert "%(asctime)" not in fmt
assert "%(asctime)s" not in fmt
def test_verbose_logging(self):
"""Verbose logging includes timestamps."""
@ -73,7 +75,7 @@ class TestSetupLogging:
from lidar_pipeline.cli import setup_logging
logger = setup_logging(verbose=True, debug=False)
fmt = logger.handlers[0].formatter._fmt
assert "%(asctime)" in fmt
assert "%(asctime)s" in fmt
def test_debug_logging(self):
"""Debug logging includes file:line info."""
@ -82,5 +84,5 @@ class TestSetupLogging:
logger = setup_logging(verbose=False, debug=True)
assert logger.level == logging.DEBUG
fmt = logger.handlers[0].formatter._fmt
assert "%(filename)" in fmt
assert "%(lineno)" in fmt
assert "%(filename)s" in fmt
assert "%(lineno)d" in fmt