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

71 lines
2 KiB
Python

#!/usr/bin/env python3
import os
import sys
import mercantile
from rio_tiler.io import COGReader
from rio_tiler.utils import render
# ---------------------------------------------------------
# USO:
# python3 make_tiles_rio_tiler.py input_rgb.tif tiles_out/
#
# Genera tile PNG Terrain-RGB senza alterare i pixel.
# Corretto per evitare buchi tra quadranti Copernicus.
# ---------------------------------------------------------
ZOOM_MIN = 5
ZOOM_MAX = 14
BUFFER = 0.001 # espansione per evitare tile mancanti ai bordi
def generate_tiles(input_tif, output_dir):
os.makedirs(output_dir, exist_ok=True)
with COGReader(input_tif) as cog:
for z in range(ZOOM_MIN, ZOOM_MAX + 1):
print(f"== Zoom {z} ==")
# Bounds originali del TIFF
bounds = cog.bounds
# Espansione per evitare buchi tra quadranti
minx = bounds[0] - BUFFER
miny = bounds[1] - BUFFER
maxx = bounds[2] + BUFFER
maxy = bounds[3] + BUFFER
# Tile da generare
tiles = list(mercantile.tiles(minx, miny, maxx, maxy, z))
for t in tiles:
out_dir_zxy = os.path.join(output_dir, str(z), str(t.x))
os.makedirs(out_dir_zxy, exist_ok=True)
out_path = os.path.join(out_dir_zxy, f"{t.y}.png")
# Estrazione tile
tile, mask = cog.tile(t.x, t.y, z, resampling_method="nearest")
# Render PNG
img = render(tile, mask=mask, img_format="PNG")
with open(out_path, "wb") as f:
f.write(img)
print(f"Tile {z}/{t.x}/{t.y} generata")
print("Completato.")
if __name__ == "__main__":
if len(sys.argv) != 3:
print("Uso: python3 make_tiles_rio_tiler.py <input_rgb.tif> <output_dir>")
sys.exit(1)
INPUT_TIF = sys.argv[1]
OUTPUT_DIR = sys.argv[2]
if not os.path.isfile(INPUT_TIF):
print(f"Errore: file non trovato: {INPUT_TIF}")
sys.exit(1)
generate_tiles(INPUT_TIF, OUTPUT_DIR)