Commit Graph

45 Commits

Author SHA1 Message Date
ab9d694dd4 List all processed LAZ files with status in pipeline summary
Show each file with ✓/✗ before the success/fail counts, so the user
can see at a glance which files succeeded and which failed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 20:49:30 +02:00
c6c804749e Skip SharedDEM computation when all visualizations already exist
Two optimizations to avoid ~2min wasted per file on re-runs:

1. pipeline.py: Check which visualizations need regeneration before
   computing SharedDEM. If all WebP outputs exist, skip SharedDEM
   entirely. If only IGN overlays need updating, also skip SharedDEM.

2. visualizations.py: Make SharedDEM attributes lazy (filled, gradient,
   lrm_15) so only the data actually needed is computed. For example,
   if only hillshade is regenerated, LRM at 15m is never calculated.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 20:40:51 +02:00
cf3e680b02 Add download script for IGN LiDAR HD LAZ files
Supports tile download by coordinates, zone-based bulk download,
integrity checking, and auto-search across zones with resume support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 20:34:50 +02:00
02218b2cfc Upgrade PDAL to 2.10 via conda-forge, add COPC v1.1 support
- Dockerfile: install PDAL 2.10.1 from conda-forge (was 2.3 from apt)
  Ubuntu 22.04's PDAL 2.3 cannot read COPC v1.1 files from IGN LiDAR HD
- dtm.py: add _read_with_pdal() fallback for COPC files that laspy can't read
- dtm.py: validate_laz() now tries PDAL when laspy fails
- dtm.py: create_dtm_fast() and detect_ground_method() use PDAL fallback
- ign.py: auto-retry at lower zoom on 404 errors
- pipeline.py: check DTM resolution mismatch and regenerate if needed
- pipeline.py: propagate actual DTM resolution to visualizations
- pipeline.py: add --init to docker run for proper Ctrl+C signal handling
- Remove RRIM and Multi-Hillshade RGB visualizations

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v1.0.1
2026-05-14 19:01:05 +02:00
7ac08f75dc Add LAZ integrity check to skip corrupted files early
Validate file readability before PDAL classification. Corrupted/truncated
files are detected instantly via laspy header read and skipped with a clear
error message pointing to re-download, instead of wasting time on PDAL
and repair attempts that will fail anyway.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 17:59:32 +02:00
f988ddb76d Auto-retry IGN tiles at lower zoom on 404
When zoom 20 tiles are unavailable (rural areas), fall back to zoom 19, 18,
etc. down to 15. Breaks out immediately on first-tile 404 to avoid wasting
requests at unsupported zoom levels.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 02:21:47 +02:00
e2bd6b2536 Remove RRIM and Multi-Hillshade RGB, fix DTM resolution reuse bug, add --init to docker run
- Remove generate_rrim, generate_multi_hillshade, _compute_openness_both
- Remove corresponding VIZ_STEPS entries, COLORMAPS, RGB_LEGENDS, and tests
- Fix DTM resolution mismatch: existing DTM at different resolution is now
  regenerated instead of silently reused
- Propagate actual DTM resolution to visualizations and rendering
- Add --init to docker run commands for proper signal handling on Ctrl+C
- Add .playwright-mcp/ to .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 02:19:42 +02:00
bf17ca4662 Remove ETA display from visualization progress logs 2026-05-14 01:18:52 +02:00
08dbc73869 Fix lambda signatures for rrim and multi_hillshade to accept shared kwarg
Same issue as pos_open/neg_open — lambdas in VIZ_STEPS need shared=None
parameter since the pipeline passes shared=shared to all visualization functions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 01:07:48 +02:00
8c2065801b Add unit tests for RRIM, Multi-Hillshade RGB, and Local Dominance
TestRRIM: TIF generation, 3-band RGB output, uint8 range, no NaN
TestMultiHillshade: TIF generation, 3-band RGB output, uint8 range
TestLocalDominance: TIF generation, values in [0,1], NaN mask preservation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 01:05:55 +02:00
7f6b816ed6 Add RRIM, Multi-Hillshade RGB, and Local Dominance visualizations
Three new visualizations complementing existing SVF/openness/LRM/MSRM:

- RRIM (Red Relief Image Map): RGB composite combining positive openness
  (R), inverted slope (G), negative openness (B). Uses ray-tracing
  to compute both openness values in a single pass.

- Multi-Hillshade RGB: 3 azimuths (315°, 135°, 45°) mapped to R/G/B
  channels with slope blending. Color reveals structure orientation.

- Local Dominance: (dem - local_min) / (local_max - local_min) using
  min/max filters. Measures local height position — complements openness.

Also adds:
- _compute_openness_both() helper for shared ray-tracing (used by RRIM)
- xp_maximum_filter() in gpu.py (GPU/CPU abstraction)
- Entries in COLORMAPS, RGB_LEGENDS, VIZ_STEPS, and is_rgb detection
- All NaN handling follows existing patterns (nan_mask restoration)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 01:03:47 +02:00
1cf8e1752f Remove PMF, fix NaN in gradient visualizations, fix pos_open/neg_open shared param
- Remove PMF from ground classification options (PDAL recommends SMRF over PMF)
- Auto-detection now uses CSF for urban/complex terrain instead of PMF
- Add z_std > 30m heuristic to auto-select CSF for complex terrain
- Fix pos_open/neg_open lambda missing 'shared' parameter (NameError in workers)
- Fix NaN mask not restored in hillshade, slope, aspect, curvature
  (gradient-based products computed on filled DEM lost NaN transparency)
- Add nan_mask parameter to _save_tif for centralized NaN restoration
- DTM TIF kept by default (no longer deleted after WebP conversion)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 00:50:45 +02:00
eac482874d Fix bugs and improve pipeline flexibility
- Fix gpu_cleanup import missing in visualizations.py (NameError in workers)
- Fix t_pdf referenced before assignment when PDF is skipped
- Skip classification+DTM when DTM exists regardless of --force
- --force now only regenerates WebP/PDF, not classification/DTM
- --force-classification forces reclassification when needed
- Add laspy repair fallback for corrupt LAZ files (EVLR errors)
- Keep DTM TIF by default for reuse (--no-keep-tif to delete)
- Increase space between image and bottom cartouche (0.12→0.19)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-14 00:08:25 +02:00
5b74322077 Skip ground classification when DTM already exists
If the DTM .tif exists and --force is not set, skip both ground
classification and DTM generation entirely. Previously, the pipeline
would spend 3+ minutes reclassifying ground even when the DTM was
already present and would be reused anyway.

Also includes: SharedDEM cache, enhanced WebP cartouche (compass rose,
adaptive scale bar, enriched info bar), removed COG/viewer, UTF-8
fix for parallel workers, skip logic for DTM and PDF.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-13 23:41:21 +02:00
f01683819c Interface web cartographique: COG + TiTiler + viewer MapLibre
- Ajout de convert_to_cog() et generate_cog_metadata() dans rendering.py
- Nouveau module viewer.py: génération HTML MapLibre GL JS avec couches et opacité
- Nouveau module server.py: serveur FastAPI avec TiTiler pour tuiles COG
- Pipeline: étapes 5 (COGs) et 6 (viewer web) après le rapport PDF
- CLI: flag --no-viewer pour désactiver la génération du viewer
- run.sh: commande 'serve' pour démarrer le serveur sur port 8000
- Dockerfile: ajout de rio-cogeo, titiler.core, fastapi, uvicorn, piexif
- setup.py: point d'entrée lidar-server

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ok1
2026-05-10 17:15:37 +02:00
2986400a0a 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>
2026-05-10 14:46:31 +02:00
e31d3f0e2b Audit: corrections de bugs identifiés
- rendering.py: colorbar cassée quand NaN mask actif — créer un
  ScalarMappable avec le cmap sauvegardé au lieu de rely sur
  l'image RGBA qui n'a plus de cmap
- rendering.py: nettoyage du PNG temporaire avec try/finally et
  missing_ok=True pour éviter les fichiers orphelins
- gpu.py: to_gpu() convertit en float32 au lieu de float64 pour
  réduire la consommation mémoire GPU
- dtm.py: utiliser _file_basename() de pipeline.py au lieu de
  dupliquer la logique d'extraction du basename
- pipeline.py: docstring corrigé (18 visualisations, pas 19)
- cli.py: --file supporte aussi les noms sans .copc
  (recherche .copc.laz et .copc.las en plus de .laz et .las)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 12:11:13 +02:00
47c20a319a Fix SyntaxError: supprimer la définition dupliquée de main()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 12:04:52 +02:00
beb88684cb Fix basename: retirer .copc.laz au lieu de .laz seul
Les fichiers LiDAR HD IGN ont l'extension .copc.laz (double extension).
Path.stem ne retire que .laz, laissant .copc dans le basename.
Ajout de _file_basename() qui retire les extensions connues
dans l'ordre: .copc.laz, .copc.las, .laz, .las.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 12:02:32 +02:00
0904592fa2 Nettoyage des processus PDAL orphelins à l'interruption
Ajout de signal handlers (SIGINT/SIGTERM) et atexit pour tuer
les processus pdal orphelins quand le pipeline est interrompu
ou se termine. Utilise pkill -f pdal pour nettoyer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 11:58:30 +02:00
fd965e512c Rendu: zones NaN transparentes au lieu d'interpolation DTM
L'interpolation fillnodata du DTM générait des artefacts visuels
(zones lissées artificielles). Revenu au DTM avec NaN conservés.

Nouvelle approche pour le rendu:
- NaN remplacés par la médiane des valeurs valides (valeur neutre)
- Après application de la colormap, un masque alpha rend les zones
  NaN transparentes au lieu de les afficher
- interpolation='bilinear' sur imshow pour un rendu lisse
- Figure adaptative: 20-40 pouces selon la taille des données
- DPI 200 pour les images > 3000px

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 11:56:11 +02:00
8e4b4bb10b Fix crash quand valid_data est vide dans _apply_colormap
np.percentile crash avec IndexError quand valid_data est vide
(TIF entièrement NaN). Ajout d'un guard qui retourne une
colormap par défaut si aucune donnée valide n'existe.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 11:42:21 +02:00
458d67cbd9 Nettoyage des répertoires temporaires après traitement
- _process_file_standalone: supprime temp_{basename} après chaque fichier
- process_all: supprime aussi les répertoires temp_* orphelins des workers
- 18 Go de fichiers .las orphelins supprimés manuellement

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 11:41:03 +02:00
c3a8fe7b79 Amélioration du rendu: interpolation DTM et affichage haute résolution
- DTM: interpolation des NaN avec rasterio.fill.fillnodata après
  binned_statistic_2d — comble les trous entre les cellules sans données
- Rendering: interpolation='bilinear' sur imshow pour lisser le
  sous-échantillonnage des données haute résolution
- Rendering: fig_width adaptatif (20-40 pouces) selon la taille des données
- Rendering: DPI 200 pour les images > 3000px de large

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 11:34:41 +02:00
f03b3873bd Suppression de la visualisation Texture GLCM
- Suppression de generate_texture() de visualizations.py
- Suppression de l'entrée 'texture' de VIZ_STEPS et COLORMAPS
- Suppression du test TestTexture
- Mise à jour README (19 → 18 visualisations)
- Mise à jour CLAUDE.md (17 → 16 fonctions generate_*)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 03:30:07 +02:00
bc92689acc Orthophoto IGN: zoom adaptatif pour résolution optimale
- Zoom WMTS calculé automatiquement à partir de la résolution DTM
  (0.5m/px → zoom 19, 0.2m/px → zoom 20) au lieu de zoom 15 fixe
- Orthophoto: zoom max 20 (~0.15m/px), carte topo: zoom max 19
- Limite image 10000x10000px (au lieu de 5000x5000)
- Log du nombre de tuiles et de la taille avant téléchargement

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 03:22:08 +02:00
f41cb00ef0 Mise à jour du README: classification sol, options CLI, structure complète
- Section classification du sol (SMRF/PMF/CSF + auto-détection)
- Pré-traitement ELM + outlier dans le workflow
- Options --ground-classification et --force-classification
- Paramètres GPU et classification dans la table des options
- Structure des dossiers avec temp/ et tests/
- Section tests unitaires
- Aucun lien externe

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 03:06:03 +02:00
569f2e680c Fix numpy warnings: MaskedArray partition et Mean of empty slice
- Convert MaskedArray to ndarray avant np.percentile() via
  np.asarray(data.compressed()) et np.ma.filled(data, np.nan)
- Supprimer RuntimeWarning "Mean of empty slice" dans MSRM et
  ondelette avec warnings.catch_warnings()
- Ajout import warnings dans visualizations.py

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 03:02:36 +02:00
e2845b9e6d Pipeline LiDAR: classification sol auto + pré-traitement ELM + fix warnings
- Ajout classification automatique du sol (SMRF/PMF/CSF) avec détection
  heuristique (ratio retours uniques > 0.6 → PMF urbain, sinon SMRF)
- Pré-traitement PDAL recommandé avant classification: ELM + outlier
  removal (cell=5.0, threshold=2.0 adapté au calcaire rocailleux)
- Options CLI: --ground-classification {auto,smrf,pmf,csf} et
  --force-classification pour forcer la reclassification
- Fix double logging (logger.propagate = False)
- Fix --force non transmis dans run.sh (réécriture parsing arguments)
- Fix warning numpy 'partition will ignore mask': conversion MaskedArray
  en ndarray avant np.percentile()
- Ajout liblaszip8 + lazrs pour support LAZ dans Docker et laspy
- Tests unitaires pour PMF, CSF et auto-détection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 03:00:33 +02:00
f3026f41c9 Préfixer les logs par le nom du fichier LAZ en cours
Ajout d'un FilePrefixFilter qui préfixe chaque message avec [basename]
quand un fichier est en cours de traitement. Les workers paralleles
affichent ainsi clairement quel fichier produit chaque log.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 01:32:19 +02:00
df6545460b Logging multiprocessing: configure logger dans les workers spawn + compteur de progression
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 01:30:01 +02:00
bf4e42d571 Supprimer les RuntimeWarnings: NaN dans nanmean et cast uint8
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 01:29:03 +02:00
a654ff5964 Préserver les zones sans données: NaN-aware filtering dans les visualisations
- DTM: plus d'interpolation, les zones sans LiDAR restent NaN
- Ajout _fill_nans() et _filter_nanaware(): remplissent les NaN par
  nearest-neighbor avant filtrage, puis restaurent le masque NaN
- Toutes les visualisations avec filtres (LRM, MSLRM, TPI, SAILORE,
  roughness, anomalies, wavelet) utilisent _filter_nanaware pour
  éviter l'érosion des bords de données
- _save_tif() écrit nodata=float('nan') quand le tableau contient des NaN
- Les zones sans données restent vides dans les visualisations
- Les calculs ne sont pas faussés par des valeurs interpolées

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 01:24:36 +02:00
52409a6510 Pas d'interpolation dans le DTM: les zones sans données restent NaN
- Suppression de l'interpolation NearestNDInterpolator dans create_dtm_fast
- Les pixels sans données LiDAR restent NaN dans le DTM et les
  visualisations — pas de valeurs fictives qui faussent les calculs
- nodata=float('nan') dans le GeoTIFF de sortie pour identifier les vides
- _save_tif() détecte automatiquement les NaN et écrit le flag nodata

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 01:17:48 +02:00
72b1437c1e Fix PDF report: lire WebP via PIL au lieu de matplotlib.imread
matplotlib ne supporte pas WebP. Remplace plt.imread() par
PILImage.open().convert('RGB') dans generate_pdf_report.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 01:06:21 +02:00
c891c6b23a Fix CUDA fork: spawn multiprocessing + graceful GPU fallback
- multiprocessing.set_start_method('spawn') pour éviter la corruption
  du contexte CUDA dans les processus forkés
- to_gpu() et xp_*_filter() attrapent les erreurs CUDA et tombent
  sur CPU au lieu de crasher
- _gpu_available() vérifie que le GPU est utilisable avant chaque opération
- gpu_cleanup() attrape les exceptions au cas où le GPU serait indisponible

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 01:04:02 +02:00
ad762e682d Suppression éclairage solaire, GPU accéléré, --file multi, tests unitaires
- Suppression de generate_solar (éclairage solaire) des visualisations
- Accélération GPU de hillshade, slope, aspect, curvature, depressions,
  anomalies, roughness, texture GLCM, flow (sink filling)
- Nettoyage mémoire GPU entre visualisations (gpu_cleanup)
- Correction OOM texture GLCM: calcul entropie bin par bin au lieu d'un
  tableau 3D massif sur GPU
- Correction bug: xp_minimum_filter manquant dans imports visualizations
- Option --file accepte plusieurs noms complets sans extension
- run.sh affiche l'aide si appelé sans arguments
- Option --test pour exécuter les tests unitaires dans Docker
- Filtre ReturnNumber>=1 intégré dans le pipeline PDAL (plus d'erreur SMRF)
- 60 tests unitaires: GPU, visualisations, rendering, DTM, pipeline, CLI
- Ajout pytest au Dockerfile

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 00:57:39 +02:00
f07e915f6d Refactor pipeline en modules + logging verbose/debug + options CLI
- Découpage du monolithe process_lidar.py (~2750 lignes) en package
  lidar_pipeline/ avec 9 modules (gpu, dtm, visualizations, ign,
  rendering, pipeline, cli, __init__, __main__)
- Logging configurable: -v (verbose avec timestamps) et --debug
  (détails internes fichier:ligne)
- Option --force pour régénérer tous les fichiers (par défaut skip
  les WebP existants)
- Option --file NOM pour traiter un seul fichier LAZ (tests rapides)
- ProcessPoolExecutor avec répertoires temporaires uniques par worker
- Suppression du code mort (geomorphons, hillshade_ne, nodata_mask)
- Aucun fichier TIFF résiduel après conversion WebP
- setup.py pour installation pip, stub process_lidar.py compatible

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-10 00:15:29 +02:00
54800cb516 Pipeline LiDAR: accélération GPU (CuPy), sortie WebP, script run.sh
- Accélération GPU via CuPy pour SVF, Openness, LRM, MSRM, SAILORE, TPI, wavelet
- Fallback automatique vers numpy si GPU non disponible
- Sortie WebP sans perte (remplace PNG, fichiers plus petits)
- Script run.sh avec options -g (GPU), -w (workers), -r (résolution)
- Docker basé sur nvidia/cuda:12.4.0-devel pour support CuPy
- Docker tourne en uid/gid 1000:1000
- Légendes explicites différenciant LRM vs MSRM vs SAILORE
- Correction bug ordre elif (mslrm avant lrm)
- Retrait de geomorphons et VAT (demande utilisateur)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-09 22:22:28 +02:00
d8502ff26e Pipeline LiDAR: 19 visualisations archéologiques, corrections SVF/Openness, légendes explicites
- Corriger SVF: ray-tracing 16 azimuts (inversion DEM remplacée)
- Corriger Openness: angle zénith/nadir sur 8 directions (min/max filter remplacé)
- Ajouter MSRM (LRM multi-échelle 5/10/25/50/100m)
- Ajouter TPI multi-échelle (5m + 100m)
- Ajouter détection dépressions (remplissage hydrologique)
- Ajouter SAILORE (LRM adaptatif f(pente))
- Ajouter rugosité de surface (écart-type local 5m)
- Ajouter anomalies statistiques (z-score + Moran's I)
- Ajouter ondelette Mexican Hat (CWT 5 échelles)
- Ajouter texture GLCM (contraste + entropie - homogénéité)
- Ajouter accumulation de flux (D8)
- Retirer geomorphons et VAT composite
- Répertoire par fichier LAZ dans visualisations/
- Support multi-CPU (-w/--workers)
- Légendes explicites avec différenciation entre techniques similaires
- Docker: uid/gid 1000:1000

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-09 21:13:20 +02:00
7c609d0c24 Remove debug script
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-09 01:21:36 +02:00
96cd62bc79 Correction orientation nord + filtrage ReturnNumber=0 pour fichiers corrompus
- Inversion axe Y du DTM pour orientation nord correcte
- Fallback filters.range pour fichiers LAZ avec ReturnNumber=0
- Flèche nord vectorielle noire au-dessus de la légende
- 9/9 fichiers traités avec succès

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-09 01:21:28 +02:00
57b3b78593 Pipeline LiDAR optimisé: suppression classification sémantique, ajout flèche nord vectorielle
- Suppression module classification sémantique (non fonctionnel)
- Suppression section rapports (vue synthétique)
- Ajout flèche du nord vectorielle noire (coin supérieur droit, au-dessus légende)
- Pipeline simplifié à 3 étapes: classification sol, génération DTM, visualisations
- Prétraitement ReturnNumber pour fichiers LAZ corrompus
- Orientation nord garantie sur toutes les cartes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-09 00:46:50 +02:00
e642cde7bc Pipeline LiDAR complet: 9 visualisations + classification sémantique automatique
- Correction bug geojson dans process_lidar.py
- Semantic classifier fonctionnel avec K-Means
- 9 visualisations JPEG selon état de l'art 2024-2025
- Statistiques de classification sémantique exportées en JSON
- Nettoyage automatique des fichiers temporaires

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-08 23:37:14 +02:00
2cc5b2a5f3 Initial commit: Pipeline LiDAR archéologique Docker
- Dockerfile avec PDAL, GDAL, Python
- Script Python de traitement avec visualisations archéologiques
- Configuration docker-compose avec UID 1000:1000
- Support des fichiers LAZ/LAS pour détection de cavités et structures
- Génération de 6 visualisations JPEG (Hillshade, Slope, SVF, LRM, Openness)
- Légendes explicites avec unités et descriptions
- Nettoyage automatique des fichiers temporaires

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-08 22:58:36 +02:00