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>
This commit is contained in:
@ -218,7 +218,14 @@ def classify_ground(laz_file, temp_dir, method='auto', force=False):
|
||||
else:
|
||||
logger.info(f" Classification sol: {method.upper()} (forcé)")
|
||||
|
||||
output_las = temp_dir / f"{laz_file.stem}_ground_{method}.las"
|
||||
# Strip all known LiDAR extensions (.copc.laz, .laz, .las)
|
||||
laz_base = laz_file.name
|
||||
for ext in ['.copc.laz', '.copc.las', '.laz', '.las']:
|
||||
if laz_base.lower().endswith(ext):
|
||||
laz_base = laz_base[:-len(ext)]
|
||||
break
|
||||
|
||||
output_las = temp_dir / f"{laz_base}_ground_{method}.las"
|
||||
|
||||
if output_las.exists() and not force:
|
||||
logger.info(f" Classification {method.upper()} déjà effectuée — fichier existant réutilisé")
|
||||
|
||||
@ -24,6 +24,20 @@ except RuntimeError:
|
||||
logger = logging.getLogger("lidar")
|
||||
|
||||
|
||||
def _file_basename(path):
|
||||
"""Extract base name from a LAZ/LAS file, removing all known extensions.
|
||||
|
||||
Handles double extensions like .copc.laz correctly:
|
||||
'file.copc.laz' -> 'file', not 'file.copc'
|
||||
"""
|
||||
name = Path(path).name
|
||||
# Remove known LiDAR extensions (order matters: longest first)
|
||||
for ext in ['.copc.laz', '.copc.las', '.laz', '.las']:
|
||||
if name.lower().endswith(ext):
|
||||
return name[:-len(ext)]
|
||||
return Path(path).stem
|
||||
|
||||
|
||||
class FilePrefixFilter(logging.Filter):
|
||||
"""Adds a file prefix to log messages when processing a specific file."""
|
||||
def __init__(self):
|
||||
@ -208,7 +222,7 @@ class LidarArchaeoPipeline:
|
||||
|
||||
def process_file(self, laz_file):
|
||||
"""Process a single LAZ file through the full pipeline."""
|
||||
basename = laz_file.stem
|
||||
basename = _file_basename(laz_file)
|
||||
_file_filter.basename = basename
|
||||
t_start = time.time()
|
||||
|
||||
@ -358,7 +372,7 @@ def _process_file_standalone(laz_file_str, input_dir, output_dir, resolution, fo
|
||||
worker_logger.addFilter(_file_filter)
|
||||
|
||||
pipeline = LidarArchaeoPipeline(input_dir, output_dir, resolution=resolution, workers=1, force=force, ground_method=ground_method, force_classify=force_classify)
|
||||
basename = Path(laz_file_str).stem
|
||||
basename = _file_basename(laz_file_str)
|
||||
pipeline.temp_dir = pipeline.output_dir / f"temp_{basename}"
|
||||
pipeline.temp_dir.mkdir(exist_ok=True)
|
||||
laz_file = Path(laz_file_str)
|
||||
|
||||
Reference in New Issue
Block a user