terrain2/w.py
Fabio Micheluz 9603735519 first commit
2026-02-12 17:21:04 +01:00

68 lines
1.7 KiB
Python

import boto3
import os
import logging
from botocore import UNSIGNED
from botocore.config import Config
BUCKET = "copernicus-dem-30m"
OUTPUT_DIR = "./glo30_world"
LOG_FILE = "download_world.log"
logging.basicConfig(
filename=LOG_FILE,
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
)
console = logging.getLogger("console")
console.setLevel(logging.INFO)
console.addHandler(logging.StreamHandler())
def log(msg):
logging.info(msg)
console.info(msg)
os.makedirs(OUTPUT_DIR, exist_ok=True)
s3 = boto3.client("s3", config=Config(signature_version=UNSIGNED))
log("Inizio scansione di tutte le cartelle globali...")
folders = []
paginator = s3.get_paginator("list_objects_v2")
# Legge SOLO le directory top-level
for page in paginator.paginate(Bucket=BUCKET, Delimiter="/"):
for prefix in page.get("CommonPrefixes", []):
folder = prefix["Prefix"]
# Filtra solo i tile DEM
if folder.startswith("Copernicus_DSM_COG_10_") and
folder.endswith("_DEM/"):
folders.append(folder)
log(f"[FOUND] {folder}")
log(f"Trovate {len(folders)} cartelle globali")
# -----------------------------
# DOWNLOAD SOLO IL DEM PRINCIPALE
# -----------------------------
for folder in folders:
tif_name = folder[:-1] + ".tif" # rimuove "/" e aggiunge .tif
key = folder + tif_name.split("/")[-1]
out_path = os.path.join(OUTPUT_DIR, tif_name.split("/")[-1])
if os.path.exists(out_path):
log(f"[SKIP] {out_path} già presente")
continue
log(f"[DOWNLOAD] {key}")
try:
s3.download_file(BUCKET, key, out_path)
log(f"[OK] {key} scaricato")
except Exception as e:
log(f"[ERROR] {key}{e}")
log("Completato.")