vignettes/biodivMapR_17.Rmd
biodivMapR_17.Rmd
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.
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.
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.
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,
03_RESULTS/L2A_T18MZB_A028851_20220914T150957/Reflectance/L2A_T18MZB_A028851_20220914T150957_Refl
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)