Este proyecto se distribuye bajo un modelo de Licencia Dual:
- Uso de Código Abierto (GNU GPLv3): Puedes usar, estudiar, modificar y redistribuir este software de forma gratuita, siempre y cuando cualquier versión modificada o distribución derivada también sea 100% de código abierto bajo la licencia GNU GPLv3.
- Uso Comercial / Privado (Licencia Comercial): Si deseas integrar este código en software propietario, cerrado o comercial (sin la obligación de abrir tu propio código fuente bajo la GPLv3), debes adquirir una licencia comercial exclusiva. Por favor, ponte en contacto con el autor para acordar los términos.
Para más detalles, consulta el archivo LICENSE.
Esta carpeta contiene dos scripts reutilizables para descargar mosaicos e índices desde Google Earth Engine usando cualquier shapefile como área de trabajo.
Los scripts aplican el mismo flujo depurado:
- Leer el shapefile.
- Reproyectar la geometría a WGS84.
- Crear una grilla de teselas de 0.2 grados.
- Descargar cada tesela como GeoTIFF local.
- Detectar teselas que no se descargan por error de Earth Engine o timeout.
- Partir cada tesela fallida en 4 subpartes.
- Descargar esas 4 subpartes.
- Unir las 4 subpartes en un GeoTIFF final Float32.
- Validar CRS, número de bandas y tipo de dato.
- Guardar un resumen técnico en summary.json.
- Opcionalmente unir todas las teselas de cada sensor en un mosaico único.
download_landsat_shapefile.py
Descarga Landsat 8 y Landsat 9 Collection 2 Level 2 Surface Reflectance.
Bandas finales:
- SR_B2 azul
- SR_B3 verde
- SR_B4 rojo
- SR_B5 NIR
- SR_B6 SWIR1
- SR_B7 SWIR2
- iron_oxide_red_blue
- clay_hydroxyl_swir1_swir2
- ferrous_silicate_swir1_nir
- ndvi
- ndwi
download_aster_shapefile.py
Descarga ASTER AST_L1T_003 para el periodo anterior a abril de 2008.
Bandas finales:
- B01
- B02
- B3N
- B04
- B05
- B06
- B07
- B08
- B09
- ferric_iron_b2_b1
- aloh_proxy_b5_b7_b6
- mgoh_carbonate_proxy_b7_b9_b8
- clay_relative_absorption_b6
merge_tiles_by_sensor.py
Une teselas GeoTIFF ya descargadas por carpeta de sensor. Detecta automáticamente carpetas con archivos x000_y000.tif, crea un mosaico Float32 y guarda el resultado en la misma carpeta.
Instalar dependencias:
pip install -r requirements.txt
Autenticarse en Google Earth Engine:
earthengine authenticate
Si se usa un proyecto específico de Google Cloud, pasar el identificador con --project-id.
Ejemplo:
python descarga_por_shapefile/download_landsat_shapefile.py --shapefile data/area.shp --name study_area --project-id your-project-id
Ejemplo para Landsat:
python descarga_por_shapefile/download_landsat_shapefile.py --shapefile data/area.shp --name study_area
Ejemplo para ASTER:
python descarga_por_shapefile/download_aster_shapefile.py --shapefile data/area.shp --name study_area
Prueba sin descargar:
python descarga_por_shapefile/download_landsat_shapefile.py --shapefile data/area.shp --name study_area --dry-run
python descarga_por_shapefile/download_aster_shapefile.py --shapefile data/area.shp --name study_area --dry-run
Descargar solo pocas teselas para prueba:
python descarga_por_shapefile/download_landsat_shapefile.py --shapefile data/area.shp --name study_area --limit-tiles 2
python descarga_por_shapefile/download_aster_shapefile.py --shapefile data/area.shp --name study_area --limit-tiles 2
Unir teselas por sensor:
python descarga_por_shapefile/merge_tiles_by_sensor.py --root outputs/by_shapefile
Revisar qué carpetas se unirían sin crear mosaicos:
python descarga_por_shapefile/merge_tiles_by_sensor.py --root outputs/by_shapefile --dry-run
Regenerar mosaicos existentes:
python descarga_por_shapefile/merge_tiles_by_sensor.py --root outputs/by_shapefile --overwrite
--shapefile
Ruta del shapefile que define el área de descarga.
--name
Nombre normalizado para carpetas y archivos de salida. Si no se indica, se usa el nombre del shapefile.
--output-dir
Carpeta base de salida. Por defecto usa outputs/by_shapefile.
--tile-degrees
Tamaño de la tesela en grados. El valor por defecto es 0.2.
--split
Número de divisiones por lado para teselas fallidas. El valor por defecto es 2, lo que produce 4 subpartes.
--scale
Resolución de descarga en metros. El valor por defecto es 30.
--dry-run
Muestra el plan de descarga sin descargar archivos.
--limit-tiles
Limita la cantidad de teselas procesadas. Sirve para probar antes de lanzar una descarga grande.
--overwrite
En merge_tiles_by_sensor.py, permite reemplazar un mosaico existente.
--show-gdal-warnings
En merge_tiles_by_sensor.py, muestra advertencias detalladas de GDAL. Por defecto se silencian para evitar ruido en consola.
outputs/by_shapefile/NOMBRE/PRODUCTO/final_tiles
Contiene los GeoTIFF finales listos para cargar en QGIS.
outputs/by_shapefile/NOMBRE/PRODUCTO/split_parts
Contiene las subpartes usadas para reconstruir teselas que fallaron en descarga directa.
outputs/by_shapefile/NOMBRE/PRODUCTO/logs
Contiene summary.json con el resumen de ejecución.
outputs/by_shapefile/NOMBRE/PRODUCTO/final_tiles/NOMBRE_PRODUCTO_mosaic.tif
Mosaico final generado por merge_tiles_by_sensor.py.
Landsat:
NOMBRE_landsat_oli_sr_indices_x000_y000.tif
ASTER:
NOMBRE_aster_x000_y000.tif
Subpartes de reintento:
NOMBRE_producto_x000_y000_p00_00.tif
Las subpartes no son el producto final. El producto final siempre queda en final_tiles con el nombre normalizado sin sufijo de subparte.
Los scripts son reanudables. Si una tesela final ya existe y pesa más de cero bytes, se salta automáticamente.
Esto permite detener y volver a ejecutar sin perder lo ya descargado.
Al final se valida:
CRS igual a EPSG:4326.
Tipo de dato igual a Float32.
Número de bandas correcto.
Landsat debe tener 11 bandas.
ASTER debe tener 13 bandas.
Si hay problemas, el script se detiene con error y deja el detalle en summary.json.
Para procesos que duren más de 5 minutos, avisar antes de iniciar y monitorear cada 5 minutos. Las descargas completas de shapefiles grandes pueden tardar varios minutos u horas según Earth Engine, la red y el tamaño del área.
Si usas este repositorio en un proyecto académico o técnico, cita el software usando el archivo CITATION.cff incluido en el repositorio.
Este proyecto está sujeto a los términos de la licencia GNU GPLv3 y el acuerdo de Licencia Dual descrito anteriormente. Ver el archivo LICENSE para más detalles.