knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.width = 6, fig.asp = 0.618, out.width = "70%", fig.align = "center" ) load(system.file("vignettes/example_niveaux_nappes_api.RData", package = "hubeau"))
This vignette shows how to use the hubeau
R package in order to retrieve data from the French piezometric monitoring network (portail national d'Accès aux Données sur les Eaux Souterraines, ADES) from the API "piézométrie" (or "niveaux nappes") of the Hub'eau portal.
We illustrate the use of this API for the geological layer "Calcaires et marnes du Dogger du bassin versant du Clain libres" (code=GG063
) with an example of map and chart useful for the interpretation of these data.
my_water_table_code <- "GG063"
First, we need to load the packages used in this vignette for processing data and display results on charts and map:
library(hubeau) library(dplyr) library(sf) library(mapview) library(ggplot2) library(purrr)
"niveaux_nappes" is one of the r length(hubeau::list_apis())
APIs that can be queried with the {hubeau}
R package.
The list of the API endpoints is provided by the function list_endpoints
.
list_endpoints(api = "niveaux_nappes")
chroniques
long-term time serieschroniques_tr
real time observationsstations
lists the monitoring stationsThe tables can be joined at least by the field code_bss
(i.e. the site Id).
For each endpoint, the function list_params()
gives the different parameters that can be retrieved.
list_params(api = "niveaux_nappes", endpoint = "stations")
Download the data.
stations <- get_niveaux_nappes_stations( codes_masse_eau_edl = my_water_table_code )
The aim here is to retrieve the time series of water levels measures in the piezometers.
param_chroniques <- paste( list_params(api = "niveaux_nappes", endpoint = "chroniques"), collapse = "," )
No field allows to select a departement, so it is necessary to iterate through stations.
water_table_level <- map_df( .x = stations$code_bss, .f = function(x) get_niveaux_nappes_chroniques(code_bss = x, date_debut_mesure = "2015-01-01") )
The dataframe is processed to get a 'year' and a 'month' variables, then averaged by year for each site.
water_table_level <- water_table_level %>% mutate(date_mesure = lubridate::ymd(date_mesure), year = lubridate::year(date_mesure), month = lubridate::month(date_mesure))
Selection, for each of the stations, of the years with 12 months of data. This is done to prevent incomplete time periods to influence the yearly mean water level excessively.
yearly_mean_water_table_level <- water_table_level %>% group_by(code_bss, year) %>% summarise(n_months = n_distinct(month)) %>% filter(n_months == 12) # complete years yearly_mean_water_table_level <- yearly_mean_water_table_level %>% select(-n_months) %>% left_join(water_table_level) %>% # filtering join group_by(code_bss, year, month) %>% summarise(monthly_mean_water_table_level = mean(niveau_nappe_eau, na.rm = TRUE)) %>% group_by(code_bss, year) %>% summarise(yearly_mean_water_table_level = mean(monthly_mean_water_table_level, na.rm = TRUE)) %>% ungroup()
ggplot(data = yearly_mean_water_table_level, aes(x = year, y = yearly_mean_water_table_level)) + geom_line() + facet_wrap(~code_bss, scales = "free_y")
The stations
data.frame is transformed into a sf
geographical object.
stations_geo <- stations %>% st_as_sf(coords = c("x", "y"), crs = 4626)
We create a plot for each station ready to be displayed as map "pop-up".
p <- lapply(unique(yearly_mean_water_table_level$code_bss), function(x) { ggplot(data = yearly_mean_water_table_level %>% filter(code_bss == x), aes(x = year, y = yearly_mean_water_table_level)) + geom_line() + labs(title = x) })
Then they are mapped using the mapview
R package. Click on a spot to popup the
plot.
mapview( stations_geo, map.types = c("OpenStreetMap", "Esri.WorldShadedRelief", "OpenTopoMap"), popup = leafpop::popupGraph(p) )
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.