Mercurial > repos > ecology > srs_spectral_indices
diff preprocess_S2.r @ 0:a8dabbf47e15 draft
planemo upload for repository https://github.com/Marie59/Sentinel_2A/srs_tools commit b32737c1642aa02cc672534e42c5cb4abe0cd3e7
author | ecology |
---|---|
date | Mon, 09 Jan 2023 13:39:08 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/preprocess_S2.r Mon Jan 09 13:39:08 2023 +0000 @@ -0,0 +1,121 @@ +#Rscript + +########################################### +## Preprocessing Sentinel 2 data ## +########################################### + +#####Packages : sen2r, +# jqr, +# protolite, +# raster, +# sf, +# rgeos, +# sp, +# raster, +# stars, +# stringr, +# progress, +# rgdal, +# R.utils, +# gdalUtils, +# fasterize, +# XML, +# XML2 + +#####Load arguments + +args <- commandArgs(trailingOnly = TRUE) + +if (length(args) < 1) { + stop("This tool needs at least 1 argument") +}else { + data <- args[1] + source(args[2]) + data_source <- as.character(args[3]) + sat_type <- as.character(args[4]) +} + +##____________________________________________________________________## +## Define where data is stored and where to write results ## +##--------------------------------------------------------------------## + +#Create a directory where to unzip your folder of data +dir.create("data_dir") +unzip(data, exdir = "data_dir") + +# Result directory +result_path <- "results" +dir.create(path = result_path, showWarnings = FALSE, recursive = TRUE) + +#Csv file for output useless but needed for linter +write.csv(data_source, "Mission.csv") + +# define raster path +if (data_source == "SAFE") { + path_s2 <- file.path("data_dir", list.files("data_dir", pattern = ".SAFE")) + #To define the level and know if a correction is needed (convert not ready yet) + level_info <- get_s2_level(path_s2) + if (level_info == "L1C") { + stop("! This tool works for data of L2A level and NOT for the L1C level which is currently a work in progress !") + } +}else { + path_s2 <- file.path("data_dir") +} + +##____________________________________________________________________## +## Extract, resample & stack data ## +##--------------------------------------------------------------------## +# define resolution +resolution <- 10 +# define source of data +s2source <- data_source + +s2obj <- extract_from_s2_l2a(path_dir_s2 = path_s2, + path_vector = NULL, + s2source = s2source, + resolution = resolution) + +##____________________________________________________________________## +## Write CLOUD MASK ## +##--------------------------------------------------------------------## + +# directory for cloud mask +cloud_path <- file.path(result_path, "CloudMask") +dir.create(path = cloud_path, showWarnings = FALSE, recursive = TRUE) +# Filename for cloud mask +cloudmasks <- save_cloud_s2(s2_stars = s2obj$s2_stack, + cloud_path = cloud_path, + s2source = s2source, saveraw = TRUE) + +zip_cloud <- file.path("Cloud.zip") +zip::zip(zip_cloud, cloud_path) +##____________________________________________________________________## +## Write REFLECTANCE ## +##--------------------------------------------------------------------## + +# directory for Reflectance +refl_dir <- file.path(result_path, "Reflectance") +dir.create(path = refl_dir, showWarnings = FALSE, recursive = TRUE) + +if (data_source == "SAFE") { + # filename for Reflectance + refl_path <- file.path(refl_dir, paste(basename(s2obj$s2_bands$GRANULE), "_Refl", sep = "")) + + # Save Reflectance file as ENVI image with BIL interleaves + tile_s2 <- substring(strsplit(basename(s2obj$s2_bands$GRANULE), "_")[[1]][2], 2) + dateacq_s2 <- as.Date(substring(strsplit(basename(s2obj$s2_bands$GRANULE), "_")[[1]][4], 1, 8), format = "%Y%m%d") +}else { + # filename for Reflectance + refl_path <- file.path(refl_dir, paste(basename(s2obj$s2_bands$path_tile_s2), "_Refl", sep = "")) + + # Save Reflectance file as ENVI image with BIL interleaves + tile_s2 <- substring(strsplit(basename(s2obj$s2_bands$path_tile_s2), "_")[[1]][2], 2) + dateacq_s2 <- as.Date(substring(strsplit(basename(s2obj$s2_bands$path_tile_s2), "_")[[1]][4], 1, 8), format = "%Y%m%d") +} + +save_data <- save_reflectance_s2(s2_stars = s2obj$s2_stack, refl_path = refl_path, + s2sat = sat_type, tile_s2 = tile_s2, dateacq_s2 = dateacq_s2, + format = "ENVI", datatype = "Int16", mtd = s2obj$s2_bands$metadata, mtd_msi = s2obj$s2_bands$metadata_MSI) + +zip_files <- file.path("Refl.zip") +zip::zip(zip_files, refl_dir)