En este tutorial te explico cómo descargar y procesar datos climáticos del dataset TerraClimate directamente desde R, automatizando la descarga de múltiples años, recortando por país y exportando los resultados en formato GeoTIFF listo para análisis espacial.
El flujo que implementamos es completamente reproducible y escalable, ideal para proyectos de modelación climática, análisis de sequías o estudios de cambio climático.
🌎 ¿Qué es TerraClimate?
TerraClimate es un conjunto de datos climáticos mensuales de alta resolución (~4 km) que combina información de estaciones, reanálisis y climatologías históricas. Es ampliamente utilizado para estudios de:
- Balance hídrico
- Índices de sequía (como PDSI)
- Temperatura y precipitación
- Modelación ecológica
- Agricultura y seguridad alimentaria
En este ejemplo trabajamos con el Palmer Drought Severity Index (PDSI).
🧠 Objetivo del flujo en R
El script realiza cuatro procesos clave:
- Genera automáticamente las URLs para múltiples años.
- Descarga archivos NetCDF (.nc) desde el servidor THREDDS.
- Recorta y enmascara los datos usando el límite oficial de Colombia.
- Exporta cada resultado como archivo GeoTIFF.
Todo esto se ejecuta con una función aplicada iterativamente.
📦 Librerías utilizadas
Trabajamos con un stack moderno y eficiente
require(pacman)p_load(terra, fs, sf, tidyverse, gtools, glue)
🔗 Construcción automática de URLs
Generamos las rutas directamente hacia el servidor:
urls <- glue('http://thredds.northwestknowledge.net:8080/thredds/fileServer/TERRACLIMATE_ALL/data/TerraClimateV1.1_PDSI_{1995:2020}.nc')
Esto evita descargar manualmente año por año y permite escalar fácilmente el rango temporal.
🗺 Descarga del límite oficial de Colombia
Utilizamos geodata::gadm() para obtener el shapefile del país:
col0 <- geodata::gadm(country = 'COL', level = 0, path = './tmpr')
Este objeto se usa posteriormente como máscara espacial.
⚙️ Función principal de descarga y procesamiento
La función ejecuta tres operaciones:
- Descarga del archivo
.nc - Recorte espacial (
crop) - Enmascaramiento (
mask) - Exportación a
.tif
make.down <- function(urle){ wrtn <- glue('{dout}/{basename(urle)}') download.file( url = urle, destfile = wrtn, mode = 'wb' ) rstr <- rast(wrtn) rstr <- terra::crop(rstr, col0) rstr <- terra::mask(rstr, col0) wrtn <- glue('{dirname(wrtn)}/COL_{basename(wrtn)}') wrtn <- gsub('.nc', '.tif', wrtn) terra::writeRaster(x = rstr, filename = wrtn, overwrite = TRUE)}
Luego simplemente:
map(urls, make.down)
📁 Resultado final
Obtendrás una carpeta con archivos como:

🚀 Ventajas del enfoque
✔ Automatización completa
✔ Flujo reproducible
✔ Uso de terra (más eficiente que raster)
✔ Escalable a cualquier variable de TerraClimate
✔ Compatible con flujos avanzados (SPEI, modelación de especies, análisis agrícola)
🎥 Mira el video completo
En el video del canal Un Geógrafo en YouTube explico cada paso con detalle
Deja un comentario