Exemple de téléchargement de données par l’API EDR

#chargement des librairies
library(rjson)
library(ggplot2)
library(httr)
#Récupération des informations
url_service='https://api.geosas.fr/edr/collections/safran-isba/'
data_info = fromJSON(file=url_service)

for (parametre in data_info$parameter_names) {
  name=names(parametre)
  print(name)
  print(parametre[[name]]$description)
}
## [1] "DRAINC_Q"
## [1] "Drainage (cumul quotidien 06-06 UTC)"
## [1] "ETP_Q"
## [1] "Evapotranspiration potentielle (formule de Penman-Monteith)"
## [1] "FF_Q"
## [1] "Vent (moyenne quotidienne)"
## [1] "PRELIQ_Q"
## [1] "Précipitations liquides (cumul quotidien 06-06 UTC)"
## [1] "PRENEI_Q"
## [1] "Précipitations solide (cumul quotidien 06-06 UTC)"
## [1] "SSI_Q"
## [1] "Rayonnement atmosphérique (cumul quotidien)"
## [1] "TINF_H_Q"
## [1] "Température minimale des 24 températures horaires"
## [1] "TSUP_H_Q"
## [1] "Température maximale des 24 températures horaires"
## [1] "T_Q"
## [1] "Température (moyenne quotidienne)"

Exemple pour une coordonnées xy

On veut télécharger les températures moyennes du mois de juillet 2022 au point de coordonnées X=349598 Y=6798263 en projection Lambert 93 (EPSG:2154) au format CoverageJson

param_name='T_Q'
# Pour coord nécessite de remplacer l'espace par %20  
# sinon la librairie rjson plante
#'POINT(349598 6798263)' devient :
coord='POINT(349598%206798263)' 
projection='EPSG:2154'
formatage='CoverageJSON'
date='2022-07-01/2022-07-31'
requete=sprintf('%sposition?coords=%s&crs=%s&parameter-name=%s&f=%s&datetime=%s',
                url_service,coord,projection,param_name,formatage,date)
print(requete)
## [1] "https://api.geosas.fr/edr/collections/safran-isba/position?coords=POINT(349598%206798263)&crs=EPSG:2154&parameter-name=T_Q&f=CoverageJSON&datetime=2022-07-01/2022-07-31"
data = fromJSON(file=requete)
# Mise dans une dataFrame
date_value <- data$domain$axes$t$values
values <- data$ranges[[param_name]]$values

cat("Exemple de date pour définir le format:", date_value[1], "\n")
## Exemple de date pour définir le format: 2022-07-01T00-00-00Z
df=data.frame(date=date_value,parametre=values)
df$date <- as.POSIXct(df$date , format='%Y-%m-%dT%H-%M-%SZ')
colnames(df)[2] <- param_name
print(df)
##          date  T_Q
## 1  2022-07-01 15.4
## 2  2022-07-02 17.1
## 3  2022-07-03 16.1
## 4  2022-07-04 16.1
## 5  2022-07-05 16.8
## 6  2022-07-06 18.7
## 7  2022-07-07 18.4
## 8  2022-07-08 20.1
## 9  2022-07-09 22.0
## 10 2022-07-10 22.7
## 11 2022-07-11 24.8
## 12 2022-07-12 26.7
## 13 2022-07-13 25.6
## 14 2022-07-14 20.7
## 15 2022-07-15 20.9
## 16 2022-07-16 23.1
## 17 2022-07-17 26.3
## 18 2022-07-18 30.9
## 19 2022-07-19 24.1
## 20 2022-07-20 21.0
## 21 2022-07-21 20.0
## 22 2022-07-22 18.1
## 23 2022-07-23 20.4
## 24 2022-07-24 23.4
## 25 2022-07-25 20.3
## 26 2022-07-26 18.9
## 27 2022-07-27 17.7
## 28 2022-07-28 20.5
## 29 2022-07-29 22.5
## 30 2022-07-30 21.7
## 31 2022-07-31 22.2
for (parametre in data_info$parameter_names) {
  name <- names(parametre)
  if (name == param_name) {
    unit <- parametre[[name]]$unit$label
    description <- parametre[[name]]$description
    break
  }
}

ggplot(df, aes(x = date, y = .data[[param_name]])) +
  geom_line() +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(title = description, y = unit)

Exemple pour récupérer un cube de données sur une zone

Je veux télécharger l’évapotranspiration potentielle, les précipitations liquides et la température de 2020 à 2023 pour l’ensemble de la Bretagne définie géographiquement par son coin inférieur gauche (X=90000,Y=6693915) et son coin supérieur droit (X=410874,Y=6902748) en projection Lambert 93 (EPSG:2154), au format CSV :

param_name='ETP_Q,PRELIQ_Q,T_Q'
box='90000,6693915,410874,6902748'
projection='EPSG:2154'
formatage='CSV'
date='2020-01-01/2023-12-31'
requete=sprintf('https://api.geosas.fr/edr/collections/safran-isba/cube?bbox=%s&crs=%s&parameter-name=%s&f=%s&datetime=%s',
                box,projection,param_name,formatage,date)
print(requete)
## [1] "https://api.geosas.fr/edr/collections/safran-isba/cube?bbox=90000,6693915,410874,6902748&crs=EPSG:2154&parameter-name=ETP_Q,PRELIQ_Q,T_Q&f=CSV&datetime=2020-01-01/2023-12-31"
tmp <- tempfile()
GET(requete, write_disk(tmp))
## Response [https://api.geosas.fr/edr/collections/safran-isba/cube?bbox=90000,6693915,410874,6902748&crs=EPSG:2154&parameter-name=ETP_Q,PRELIQ_Q,T_Q&f=CSV&datetime=2020-01-01/2023-12-31]
##   Date: 2024-01-31 16:25
##   Status: 200
##   Content-Type: text/csv; charset=utf-8
##   Size: 60.3 MB
## <ON DISK>  /tmp/RtmpZYUYsP/file666f450fe578
data <- read.csv(tmp)