OpenEO data

Author

Alix Biton

Published

January 29, 2026

OpenEO

OpenEO est un package R qui permet d’obtenir les données Earth Observation. Afin d’accéder à ces données, il est nécéssaire de se connecter. Ici il faut donc avoir un compte Copernicus. Le lien de documentation d’utilisation : https://documentation.dataspace.copernicus.eu/APIs/openEO/R_Client/R.html

library(openeo)
# connect to the backend and authenticate
connection = connect(host = "https://openeofed.dataspace.copernicus.eu")
login()

# get the process collection to use the predefined processes of the back-end
p = processes()

Données DEM30

Pour récupérer les données d’élévation Copernicus DEM30, il faut délimiter notre loi. Afin de récupérer le bounding box de Mayotte, j’ai récupérer les coordonnées ici : http://bboxfinder.com/#0.000000,0.000000,0.000000,0.000000

data = p$load_collection(id = 'COPERNICUS_30',
                         spatial_extent = list(west=44.98, 
                                               south=-13.01,
                                               east=45.30,
                                               north=-12.61),
                         bands = c("DEM"))

Ensuite, on peut sauver nos données dans le format souhaité et l’enregistrer en local.

result = p$save_result(data = data, format = "GTiff")

# save the tif file
compute_result(graph = result, output_file = "/home/abiton/Documents/dem_data/dem_mayotte.tif")

Données Sentinel

Pour récupérer les données de végétation, on utilise le même principe mais avec une dimension temporelle en plus. Les données à utiliser pour calculer le NDVI sont les bandes 8 et 4 des données Sentinel L2A. Dans mon cas, je cherche à avoir le NDVI avant le cyclone CHIDO et le NDVI après le cyclone donc je dois récupérer à deux temporalités différentes.

bbox = list(west=44.98, south=-13.01, east=45.30, north=-12.61)
dossier_out = "/home/abiton/Documents/dem_data" 

# function to compute ndvi
get_ndvi_period = function(start_date, end_date, filename) {
  
  # charge data
  data = p$load_collection(
    id = "SENTINEL2_L2A",
    spatial_extent = bbox,
    temporal_extent = list(start_date, end_date),
    bands = c("B08","B04"),
    properties = list("eo:cloud_cover" = function(x) x <= 30) 
    # gerer les nuages avec cloud_cover, garde que moins de 30% nuages
  )
  
  # compute ndvi
  # ndvi_cube = p$ndvi(data = data, nir = "B08", red = "B04")
  
  #manually compute ndvi
  spectral_reduce = p$reduce_dimension(data = data, dimension = "bands",reducer = function(data,context) {
    b8 = data[1] #nir
    b4 = data[2] #red
    
    return((b8-b4)/(b8+b4))
  })
  
  temporal_reduce = p$reduce_dimension(data=spectral_reduce,dimension = "t", reducer = function(x,y){
    p$median(x)
  })
  
  # save data
  result = p$save_result(data = temporal_reduce, format = "GTiff")
  compute_result(graph = result, output_file = file.path(dossier_out, filename))
}

# for chido, need to find dates without to much clouds

# before chido
get_ndvi_period("2024-10-22", "2024-12-10", "ndvi_avant_chido.tif")

# after chido
get_ndvi_period("2025-01-01", "2025-03-15", "ndvi_apres_chido.tif")

Afin de gérer les nuages, il y a l’option cloud_cover, définit ici à 30%. Seules les données avec 30% ou moins de nuages sont gardées. On obtient donc des données de végétation avant-après Chido.

Tests métriques

Dans la fonction utilisée, j’ai utilisé la métrique mediane, mais il y a d’autres métriques tel que le max, le min, le median et le mean.

Voici les différences de visualisations du NDVI pour le même intervalle de temps pour chaque métrique. L’intervalle de temps ici est pour la période :

  • avant CHIDO : 2024-10-22 2024-12-10
  • après CHIDO : 2025-01-01, 2025-03-15

Au vu de ces résultats pour ces intervalles de temps, le moins pertinent serait de prendre la valeur minimale pour visualiser la végétation car c’est surement la valeur capté au travers d’un nuage et est non représentative ed la réelle végétation de Mayotte. Les valeurs les plus pertinentes seraient la valeur max pour estimer correctement la végétation réelle captée par Sentinel. C’est la visualisation avec le moins l’effet des nuages. Cependant, on voit les démarcations des tuiles ici.

Les valeurs médianes et moyennes sont pertinentes mais peuvent être impactées par la présence de nuages et ainsi retranscrire une mauvaise détection du réel indice NDVI en tout points.