Translate the whole project to English and fix outdated comments and help

Comments, docstrings, logs, CLI help, map UI, legends, PDF sheet, scripts,
compose files and AGENTS.md are now English. Data keys stay unchanged
(relief_oriente, densite_sol, visualisations/, API JSON keys, link params).
Wrong comments and help defaults found along the way are corrected.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Antoine
2026-09-27 23:16:45 +02:00
parent cc1c22d2b8
commit fb892ea9f2
52 changed files with 4356 additions and 4323 deletions

View File

@ -50,7 +50,7 @@ def _optimal_zoom_level(resolution, lat, layer):
elif 'PLAN' in layer:
zoom = min(zoom, 19)
logger.debug(f" Zoom WMTS: {zoom} (résolution cible: {resolution}m/px)")
logger.debug(f" WMTS zoom: {zoom} (target resolution: {resolution} m/px)")
return zoom
@ -58,7 +58,7 @@ def _lat_lon_to_tile(lat, lon, zoom):
"""Convert lat/lon to Web Mercator tile coordinates."""
n = 2 ** zoom
col = int((lon + 180) / 360 * n)
lat = max(-85.0511, min(85.0511, lat)) # borne Mercator : évite log/cos invalides
lat = max(-85.0511, min(85.0511, lat)) # Mercator bound: avoids invalid log/cos
lat_rad = math.radians(lat)
row = int((1 - math.log(math.tan(lat_rad) + 1 / math.cos(lat_rad)) / math.pi) / 2 * n)
return col, row
@ -95,7 +95,7 @@ def download_ign_tiles(min_x, max_x, min_y, max_y, layer, zoom_level=15, min_zoo
from PIL import Image as PILImage
if not HAS_WARP:
logger.error(" ✗ rasterio.warp non disponible pour conversion de coordonnées")
logger.error(" ✗ rasterio.warp unavailable for coordinate conversion")
return None
try:
@ -105,7 +105,7 @@ def download_ign_tiles(min_x, max_x, min_y, max_y, layer, zoom_level=15, min_zoo
nw_lat, nw_lon = lats[0], lons[0]
se_lat, se_lon = lats[1], lons[1]
except Exception:
logger.error(" ✗ Impossible de convertir les coordonnées")
logger.error(" ✗ Could not convert coordinates")
return None
wmts_url = "https://data.geopf.fr/wmts"
@ -124,14 +124,14 @@ def download_ign_tiles(min_x, max_x, min_y, max_y, layer, zoom_level=15, min_zoo
out_height = int(se_px_y - nw_px_y)
if out_width <= 0 or out_height <= 0 or out_width > 10000 or out_height > 10000:
logger.warning(f" Image IGN trop grande: {out_width}x{out_height}px — zoom {zoom} abandon")
logger.warning(f" IGN image too large: {out_width}x{out_height} px — skipping zoom {zoom}")
continue
total_tiles = (col_max - col_min + 1) * (row_max - row_min + 1)
if zoom < zoom_level:
logger.info(f" ↓ Retry zoom {zoom_level}→{zoom}: {total_tiles} tuiles ({out_width}x{out_height}px)")
logger.info(f" ↓ Retrying zoom {zoom_level}→{zoom}: {total_tiles} tiles ({out_width}x{out_height} px)")
else:
logger.info(f" Zoom {zoom}: {total_tiles} tuiles à télécharger ({out_width}x{out_height}px)")
logger.info(f" Zoom {zoom}: {total_tiles} tiles to download ({out_width}x{out_height} px)")
composite = np.full((out_height, out_width, 3), 255, dtype=np.uint8)
@ -151,8 +151,8 @@ def download_ign_tiles(min_x, max_x, min_y, max_y, layer, zoom_level=15, min_zoo
})
url = f"{wmts_url}?{params}"
# 2 tentatives : un accident réseau (reset, timeout) ne doit
# pas laisser un trou blanc définitif dans la dalle.
# 2 attempts: a network glitch (reset, timeout) must not
# leave a permanent white hole in the tile.
tile_arr = None
first_tile_404 = False
for attempt in range(2):
@ -170,11 +170,11 @@ def download_ign_tiles(min_x, max_x, min_y, max_y, layer, zoom_level=15, min_zoo
tiles_404 += 1
# If the very first tile is 404, this zoom is unavailable
if col == col_min and row == row_min:
logger.info(f" Zoom {zoom} non disponible (404) — essai zoom inférieur")
logger.info(f" Zoom {zoom} unavailable (404) — trying a lower zoom")
first_tile_404 = True
else:
tiles_failed += 1
break # erreur HTTP : inutile de réessayer
break # HTTP error: no point retrying
except Exception:
tiles_failed += 1
if attempt == 0:
@ -216,14 +216,14 @@ def download_ign_tiles(min_x, max_x, min_y, max_y, layer, zoom_level=15, min_zoo
continue
if tiles_failed > 0:
logger.warning(f" {tiles_failed} tuile(s) IGN en échec réseau ({layer}) "
f"— la dalle peut avoir des trous")
logger.info(f" → {tiles_downloaded} tuiles IGN téléchargées ({layer})")
logger.warning(f" {tiles_failed} IGN tile(s) failed over the network ({layer}) "
f"— the tile may have holes")
logger.info(f" → {tiles_downloaded} IGN tiles downloaded ({layer})")
if tiles_downloaded == 0:
continue
return composite
logger.error(" ✗ Aucun zoom disponible pour cette zone")
logger.error(" ✗ No zoom level available for this area")
return None
@ -280,7 +280,7 @@ def generate_ign_overlay(dem_file, basename, vis_dir, resolution, layer, title,
result = download_ign_tiles(min_x, max_x, min_y, max_y, layer, zoom)
if result is None:
logger.error(" ✗ Impossible de télécharger les tuiles IGN")
logger.error(" ✗ Could not download IGN tiles")
return None
from PIL import Image as PILImage
@ -297,9 +297,9 @@ def generate_ign_overlay(dem_file, basename, vis_dir, resolution, layer, title,
for i in range(3):
dst.write(ign_arr[:, :, i], i + 1)
logger.info(f" ✓ {title} terminé ({time.time()-t0:.1f}s)")
logger.info(f" ✓ {title} done ({time.time()-t0:.1f}s)")
return output
except Exception as e:
logger.error(f" ✗ Erreur IGN overlay: {e}", exc_info=True)
logger.error(f" ✗ IGN overlay error: {e}", exc_info=True)
return None