La precipitación es uno de los factores más importantes dentro del ciclo hidrológico y en la mayor parte de los casos, constituye la principal entrada a los sistemas hidrológicos.
La precipitación incluye la lluvia, la nieve y otros procesos mediante los cuales el agua cae a la superficie terrestre, tales como granizo y nevisca. La formación de la precipitación requiere de la elevación de una masa de agua en la atmósfera de tal manera que se enfríe y parte de la humedad se condense (Chow et al., 1994).
La precipitación es típicamente recolectada a través de pluviométros y/o pluviógrafos que permiten la cuantificación de dicho parámetro en un área determinada, sin embargo, estos representan un punto en el dominio o espacio y que muchas veces, no se cuenta con registros continuos en el tiempo debido a diferentes circunstancias. En Nicaragua y en muchos países de la región, la falta de datos de precipitación constituye una limitante importante para realizar un correcto análisis hidrológico.
Es por ello que, una alternativa viable lo constituyen los datos grillados o cuadrículados (gridded), dentro del cual se encuentran las imágenes ERA5-Land.
Según Copernicus (2019), ERA5-Land es un re-análisis de datos que provee un marco consistente en la evolución de las variables de muchas décadas y con mejor resolución comparada con ERA5. El re-análisis combina datos de modelos con observaciones de todo el mundo en un conjunto de datos coherente y completo a nivel mundial que utiliza las leyes de la física.
Una forma de descargar y convertir estas imágenes en datos es a través del uso de Google Earth Engine (GEE) usando el paquete rgee creado por Aybar et al. (2020), el cual, según los anteriores autores, posee muchas funciones tanto para descargar como subir objetos espaciales.
Para empezar es necesario llamar los paquetes que se utilizarán e inicializar a partir de una cuenta de gmail que se ha habilitado para trabajar con Google Earth Engine. Además, se configura R para que el separador de decimales sea la coma.
require(rgee)
## Loading required package: rgee
require(googledrive)
## Loading required package: googledrive
require(geojsonio)
## Loading required package: geojsonio
## Registered S3 method overwritten by 'geojsonsf':
## method from
## print.geojson geojson
##
## Attaching package: 'geojsonio'
## The following object is masked from 'package:base':
##
## pretty
require(sf)
## Loading required package: sf
## Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1
require(tidyverse)
## Loading required package: tidyverse
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3 v purrr 0.3.4
## v tibble 3.0.6 v dplyr 1.0.3
## v tidyr 1.1.2 v stringr 1.4.0
## v readr 1.4.0 v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
require(writexl)
## Loading required package: writexl
ee_Initialize(email = correo, drive = T)
options(OutDec = ",")
En primera instancia se necesita fijar el punto de donde se extraerá los valores de precipitación, que para el presente ejemplo se trata de coordenadas UTM WGS 84, zona 16. En este sentido, GEE trabaja por defecto el sistema de referencia de coordenadas 4326, por lo que se realiza una transformación de un sistema a otro.
punto <- st_point(c(617175,1428076), dim="XY")
puntoUTM <- st_sfc(punto,crs=32616)
puntoGeo <- st_transform(puntoUTM,4326)
punto_ee <- sf_as_ee(puntoGeo)
Una vez definido el punto de interés es necesario indicar a GEE el proveedor (provider), la variable (en este caso la precipitación) y el periodo evaluado. A continuación, utilizar la función ee_extract para obtener los datos.
gee1 <- ee$ImageCollection("ECMWF/ERA5/MONTHLY")$select("total_precipitation")$
filterDate("2005-01-01", "2020-01-01")
datos_gee1 <- ee_extract(x=gee1,y=punto_ee,scale = 250,sf=T)
st_geometry(datos_gee1) <- NULL
Si bien ya se logró descargar los datos de precipitación, estos se encuentran alojados en una estructura poco “amigable,” compuesta por una única fila y 180 columnas. Por tanto, se debe trasponer en primera instancia el resultado previo, indicar la secuencia de fecha que seguirá el nuevo data frame, convertir los valores de metros a milímetros (las colecciones de imágenes se encuentran por defecto en metros) y posteriormente, aglutinarlos por mes, para ello se consigue de la siguiente manera:
datos_t1 <- as.data.frame(t(datos_gee1[,-1]))
head(datos_t1)
## 1
## total_precipitation 0,0116278
## total_precipitation.1 0,0029145
## total_precipitation.2 0,0158447
## total_precipitation.3 0,0500956
## total_precipitation.4 0,1628986
## total_precipitation.5 0,2862051
sal <- rownames_to_column(datos_t1, var="fecha_apilada")
colnames(sal) <- c("Fecha_apilada","Valores")
Fecha <- seq.Date(from = as.Date("01-01-2005", format="%d-%m-%Y", sep="-"),
to=as.Date("01-12-2019", format="%d-%m-%Y",sep="-"),
by="month")
sal$Fecha <- Fecha
sal$Valores_mm <- sal$Valores*1000
mensual <- as.data.frame(matrix(sal$Valores_mm, ncol = 12, byrow = T))
colnames(mensual) <- c("Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic")
mensual$Anio <- seq.int(from=2005, to=2019,by=1)
head(mensual)
## Ene Feb Mar Abr May Jun Jul Ago Sep
## 1 11,6278 2,9145 15,8447 50,0956 162,8986 286,2051 158,7650 156,5607 130,7581
## 2 22,9142 14,5964 7,5814 17,5079 92,0442 180,7454 95,7995 77,7299 99,9864
## 3 16,9111 5,1926 17,1376 55,7835 193,5994 126,5605 97,5545 176,3386 203,9109
## 4 18,9402 13,0933 9,3654 16,8935 255,3760 156,1875 162,6278 152,4938 219,4597
## 5 10,3437 9,9886 7,9723 12,8181 257,8217 223,0067 73,8023 82,5352 109,9282
## 6 9,9737 24,8376 17,5173 131,0137 431,3926 170,1693 179,8437 423,4943 269,9235
## Oct Nov Dic Anio
## 1 195,7654 101,2689 23,9303 2005
## 2 155,8129 43,0326 46,5991 2006
## 3 321,9736 49,9877 18,0156 2007
## 4 287,7165 33,1901 15,6414 2008
## 5 108,7499 42,6289 16,7708 2009
## 6 117,7062 61,2735 5,1110 2010
Finalmente, una vez que se obtuvo el data frame con los resultados deseados, es posible exportarlos a través del paquete writexl, sí y solo sí, previamente se ha elegido el directorio de trabajo, tal y como se detalla a continuación:
write_xlsx(list("Pcp"=mensual),"ERA5-Land_Pcp.xlsx")