68 lines
1.7 KiB
Python
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.")
|
|
|