Ce tutoriel accompagne la séquence 4 de la section Cartographie de la biodiversité par imagerie satellite du module de formation COPERNICUS et biodiversité de la Copernicus Academy.

Il permet de télécharger puis prétraiter les données Sentinel-2 utilisées dans la suite de la formation.

Séquence 4.1: télécharger les données Sentinel-2

Le script suivant permet de télécharger les données Sentinel-2 correspondant à l’image identifiée lors de la séquence précédente. La requête nécessite de définir l’emprise de la zone d’étude à l’aide du fichier T18MZB_PeruAmazon_Subset.kml, ainsi que la date d’acquisition. L’identifiant de la tuile 18MZB est aussi fourni afin d’éviter de télécharger les tuiles voisines, dans le cas où l’emprise de la zone d’étude soit à cheval sur plusieurs tuiles.

En raison de l’arrêt des services Copernicus hub qui permettait le téléchargement automatique des données Sentinel-2 par sen2r, ce téléchargement est obligatoirement effectue via google cloud SDK (cf. documentation sen2r pour assurer le parametrage du service).

##____________________________________________________________________##
##      Download Sentinel-2 image corresponding to the study area     ##
##--------------------------------------------------------------------##
# load preprocS2 package
library(preprocS2)
# define date of S2 acquisition
dateAcq <- '2022-09-14'
# define path for vector file defining the study area and corresponding tile
path_vector <- '../01_DATA/T18MZB_PeruAmazon_Subset.kml'
tile <- '18MZB'
# define output directory where SAFE file is stored
DirWrite <- '../01_DATA/S2_Images'
dir.create(DirWrite,showWarnings = F, recursive = T)

Path_S2 <- preprocS2::get_S2_L2A_Image(l2a_path = DirWrite, 
                                       spatial_extent = path_vector, 
                                       tile = tile, 
                                       dateAcq = dateAcq)

Une fois ces lignes exécutées, les données Sentinel-2 sont écrites dans le répertoire 01_DATA\S2_Images.

Les données Sentinel-2 sont produites par l’ESA sous forme d’un répertoire .SAFE, qui contient l’ensemble des données et métadonnées associées à la tuile.

Séquence 4.2: prétraiter les données Sentinel-2

Le prétraitement des données Sentinel-2 consiste à extraire l’ensemble des données de reflectance du répertoire SAFE, ainsi qu’un certain nombre de métadonnées, puis à effectuer les opérations suivantes :

  • Découpage de la tuile pour ne conserver que la zone d’étude

  • Harmonisation de la résolution spatiale : les bandes acquises avec une résolution spatiale de 20 m sont échantillonnées à 10 m à l’aide d’une interpolation (bilinéaire par défaut).

  • Empilement des bandes spectrales : un stack est préparé afin de produire un fichier raster unique contenant les 10 bandes spectrales Sentinel-2

##____________________________________________________________________##
##                  Extract, resample & stack data                    ##
##--------------------------------------------------------------------##
# define resolution
resolution <- 10
# define source of data
S2source <- 'SAFE'
S2obj <- preprocS2::extract_from_S2_L2A(Path_dir_S2 = Path_S2,
                                        path_vector = path_vector,
                                        S2source = S2source,
                                        resolution = resolution)

L’exécution du script ci-dessus fournit un objet stars_proxy, qui contient l’ensemble des informations nécessaires à la production d’un fichier correspondant aux données Sentinel-2 prétraitées, ainsi que le masque nuage associé.

L’intérêt d’utiliser un tel objet stars_proxy est que l’emplacement des données sources sur le disque ainsi que l’ensemble des prétraitements à réaliser sont enregistrés dans cet objet, mais les données ne sont pas lues. Les ressources nécessaires en terme de mémoire sont réduites: l’application des prétraitements après lecture des données, leur enchainement avec d’autres traitements et l’écriture des résultats obtenus sur un espace de stockage local peuvent alors être réalisées de manière séquentielle en découpant les données initiales en un ensemble d’éléments de taille individuelle réduite.

Séquence 4.3: Ecrire les données d’imagerie Sentinel-2 dans des fichiers dédiés.

Les données contenues dans l’objet stars_proxy peuvent alors être écrites sur disque dur sous forme de fichiers raster.

Ici, par défaut les données sont enregistrées au format ‘ENVI BIL’, mais d’autres formats pris en charge par GDAL sont possibles.

A l’issue du script ci-dessous,

  • un fichier raster correspondant au stack des 10 bandes spectrales Sentinel-2 est écrit à l’emplacement suivant :

03_RESULTS/L2A_T18MZB_A028851_20220914T150957/Reflectance/L2A_T18MZB_A028851_20220914T150957_Refl

  • le masque nuage correspondant est écrit à l’emplacement suivant :

03_RESULTS/L2A_T18MZB_A028851_20220914T150957/CloudMask/CloudMask_Binary


##____________________________________________________________________##
##                Write reflectance and cloudmask files               ##
##--------------------------------------------------------------------##
# create result directory corresponding to Sentinel-2 acquisition
result_path <- '../03_RESULTS'
results_site_path <- file.path(result_path,basename(S2obj$S2_Bands$GRANULE))
dir.create(path = results_site_path,showWarnings = FALSE,recursive = TRUE)

# directory for Reflectance
Refl_dir <- file.path(results_site_path,'Reflectance')
dir.create(path = Refl_dir,showWarnings = FALSE,recursive = TRUE)
# filename for Reflectance
Refl_path <- file.path(Refl_dir,paste(basename(S2obj$S2_Bands$GRANULE),'_Refl',sep = ''))
# Save Reflectance file and corresponding metadata files
preprocS2::save_reflectance_s2(S2_stars = S2obj$S2_Stack, 
                               Refl_path = Refl_path,
                               MTD = S2obj$S2_Bands$metadata, 
                               MTD_MSI = S2obj$S2_Bands$metadata_MSI)

# directory for cloud mask
Cloud_path <- file.path(results_site_path,'CloudMask')
dir.create(path = Cloud_path,showWarnings = FALSE,recursive = TRUE)
# Save cloud mask
cloudmasks <- preprocS2::save_cloud_s2(S2_stars = S2obj$S2_Stack,
                                       Cloud_path = Cloud_path,
                                       S2source = S2source, SaveRaw = T)