Promouvoir une dalle voisine déjà téléchargée au lieu de la retélécharger, nettoyer les doublons existants
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@ -496,6 +496,7 @@ class LidarArchaeoPipeline:
|
||||
from .dtm import _tile_coords, _NEIGHBOR_OFFSETS, EDGE_NEIGHBORS_DIRNAME
|
||||
from .fetch_ign import fetch_tiles, tile_filename
|
||||
edge_dir = self.input_dir / EDGE_NEIGHBORS_DIRNAME
|
||||
self._cleanup_edge_neighbor_duplicates(edge_dir)
|
||||
wanted = set()
|
||||
for laz_file in files:
|
||||
coords = _tile_coords(Path(laz_file).name)
|
||||
@ -523,6 +524,38 @@ class LidarArchaeoPipeline:
|
||||
logger.info(f"Raccord des bords : {len(fetched)}/{len(missing)} dalle(s) "
|
||||
f"voisine(s) téléchargée(s) ({time.time() - t0:.0f} s)")
|
||||
|
||||
def _cleanup_edge_neighbor_duplicates(self, edge_dir):
|
||||
"""Supprime de edge_neighbors/ les dalles déjà présentes dans input/.
|
||||
|
||||
Une dalle téléchargée comme voisine avant d'être requise comme tuile
|
||||
principale (ou l'inverse) peut se retrouver dupliquée aux deux
|
||||
emplacements (avant que fetch_tiles ne promeuve les nouvelles
|
||||
voisines) ; l'exemplaire d'input/ fait foi (_neighbor_laz_files
|
||||
cherche dans input/ avant edge_neighbors/), le doublon ne sert donc
|
||||
à rien et peut peser plusieurs centaines de Mo. Les fichiers ".part"
|
||||
(téléchargement en cours) ne sont jamais touchés.
|
||||
"""
|
||||
from .dtm import EDGE_NEIGHBORS_DIRNAME
|
||||
if not edge_dir.is_dir():
|
||||
return
|
||||
removed = 0
|
||||
freed = 0
|
||||
for path in edge_dir.iterdir():
|
||||
if not path.is_file() or path.suffix == ".part" or path.name.endswith(".part"):
|
||||
continue
|
||||
twin = self.input_dir / path.name
|
||||
if twin.exists():
|
||||
try:
|
||||
freed += path.stat().st_size
|
||||
path.unlink()
|
||||
removed += 1
|
||||
except OSError:
|
||||
pass
|
||||
if removed:
|
||||
logger.info(f"Raccord des bords : {removed} doublon(s) supprimé(s) de "
|
||||
f"{EDGE_NEIGHBORS_DIRNAME}/ (déjà dans input/, "
|
||||
f"{freed / 1e6:.0f} Mo libérés)")
|
||||
|
||||
def _report(self, basename, phase, state, detail=None, res=None):
|
||||
"""Émet un événement de progression (file de génération, best-effort)."""
|
||||
report_event(self.output_dir, basename, phase, state, detail=detail, res=res)
|
||||
|
||||
Reference in New Issue
Block a user