En este tutorial compartire como descargar datos de temperatura minima, maxima, humedad relativa y radiacion solar globales, esto a una resolucion de 5km. Para la descarga de datos de precipitacion se utiliza otra fuente de datos que de igual manera se puede hacer mediante esta funcion cambiando algunos parametros. Estas descargas se realizan en formato tipo raster (.tif) y con ayuda de esta funcion que comparto se puede hacer de manera automatizada.
Inicialmente se instalaran las librerias necesarias para la ejecucion del codigo. La informacion se encuentra disponible en el siguiente enlace:
http://data.chc.ucsb.edu/products/CHIRTSdaily/v1.0/global_tifs_p05/
# R options
g <- gc(reset = T); rm(list = ls())
options(warn = -1, scipen = 999)
suppressMessages(library(pacman))
suppressMessages(pacman::p_load(dplyr, raster, geodata, terra, lubridate))
Inicialmente se plantea definir el vector de fechas para las cuales se desea realizar la descarga de la informacion.
# Serie de tiempo a descargar
ini <- as.Date('1995-01-01')
end <- as.Date('1995-01-02')
dts <- seq(from = ini, to = end, by = 'day'); rm(ini, end)
head(dts)
## [1] "1995-01-01" "1995-01-02"
Una vez definido este periodo de tiempo, en este caso de ejemplo sera para el perdiodo de tiempo desde 01 de enero de 1995 hasta el 31 de diciembre del mismo año. Es importante aclarar que la informacion de clima disponible en esta plataforma se encuentra disponible unicamente hasta el año 2016. Si buscas tener informacion mas reciente recomiendo usar otras fuentes de datos como pueden ser AgERA5 de Copernicus, la cual se puede descargar en un proceso similar al que mostrare a continuation y del cual en otro tutorial compartire el codigo optimizado para multiples variables climaticas.
# Variable
var <- 'Tmin' #'Tmin', 'Tmax', 'Rh'
# Directorio de salida de los datos
Out <- paste0('Chirts/',var)
if(!dir.exists(Out)){dir.create(Out,F,T)}
Para la descarga de los datos, usaremos el link que esta en la primera seccion. La funcion que comparto para descargar se encarga de tomar como ruta el link y lo que hacemos es variar esa direccion web para capturar los datos que nos interesan.
El enlace de descarga para un archivo de temperatura minimia tiene la siguiente direccion:
http://data.chc.ucsb.edu/products/CHIRTSdaily/v1.0/global_tifs_p05/Tmin/2016/Tmin.2016.01.01.tif
De esa direccion, nuestra funcion se va encargar de variar el nombre de la variable y año para ingresar a la carpeta donde se encuentra el archivo obejtivo. Posterior a esto dentro de la carpeta del archivo objetivo usaremos el vector de fechas generado al inicio para capturar nuestro dato de interes.
Por lo tanto esa direccion web es necesario transformarla para captar el archivo objetivo de esta forma
URL base http://data.chc.ucsb.edu/products/CHIRTSdaily/v1.0/global_tifs_p05/ + /Variable de interes/ + /año/ + /variable de interes + fecha.tif
de esta forma inicializar la descarga.
# Funcion de descarga
chirts <- function(date = dts[1], var = var){
# CHIRTS URL base
chrts <- paste0('http://data.chc.ucsb.edu/products/CHIRTSdaily/v1.0/global_tifs_p05/Tmin/')
# Extraer dia y año
Day <- date
Year <- lubridate::year(Day)
# Archivo objetivo
tfile <- paste0(chrts,Year,'/Tmin.',gsub('-','.',Day,fixed=T),'.tif')
# Archivo destino
dfile <- paste0(Out,'/',basename(tfile))
# Raster
rfile <- gsub('.tif','',dfile,fixed = T)
if(!file.exists(rfile)){
tryCatch(expr = {
# utils::download.file(url = tfile, destfile = dfile)
utils::download.file(url = tfile,destfile = dfile,method ='curl')
},
error = function(e){
cat(paste0(basename(tfile),' failed.\n'))
})
}
}
La funcion se encarga de establecer la URL base, posterior a esto de realizar los ajsutes necesarios para llegar al archivo objetivo, estos ajustes dependen de dos variables, el vector de fechas (dts) y la variable de interes a descargar, para este caso Tmin. Importante destacar que mediante el uso de la funcion “tryCatch” es posible verificar la existencia previa de archivos para evitar la descarga duplicada en caso de que el proceso se corte y toque retomarlo despues.
Una vez definidas estas dos variables es posible mediante un loop iterar, el vector de fechas y la variable de interes a descargar, como se muestra en la siguiente linea de codigo
# ejecucion de la funcion para vector de fechas
dts %>% purrr::map(.f = chirts)
## [[1]]
## [1] 0
##
## [[2]]
## [1] 0
Finalmente al terminar la descarga de los archivos, podemos verificarlos de la siguiente forma
Tmin <- terra::rast("Chirts/Tmin/Tmin.1995.01.01.tif")
Tmin
## class : SpatRaster
## dimensions : 2600, 7200, 1 (nrow, ncol, nlyr)
## resolution : 0.05, 0.05 (x, y)
## extent : -180, 180, -60, 70 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : Tmin.1995.01.01.tif
## name : Tmin.1995.01.01
Donde se observa que la resolucion del raster es a 5km, el extent nos indica que es un raster con informacion global y que se cuenta con una sola capa o layer, correspondiente al 01-Enero-1995.
Este seria el resultado, el cual aun debe ser pre procesado para eliminar valores que no corresponden a la temperatura minima y que deben ser clasificados como NA, esto es posible hacerlo mediante operaciones aplicadas directamente al raster como para obtener el resultado que se muestra a continuacion.
En donde se observa la temperatura minima para todo el mundo registrada el 01 de enero de 1995.