Voici ma question : j'effectue des calcules sur des RasterStack par maille et j'aimerais savoir qu'elle est la façon la plus rapide (temps CPU) d'y procéder.
Dans le détail : j'ai 1250 couches rasters sous forme de GeoTif qui correspondent à des images satellites de données chlorophylle journalière sur 6 ans. J'aimerais calculer des statistiques de base (médiane, moyenne ou quartile) synthétisant ses 1250 couches par maille sachant qu'il y a de ~250 mailles (250 carrés de 1/20 de degré de coté). Ces mailles sont stocké dans un shapefile.
Voici mon code :
Code : Tout sélectionner
studyarea <- readShapePoly("c://**.shp", proj4string=sp::CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"))
raster.stack <- stack(fich.tif) #stockage des rasters en "liste", fich.tif contient les chemins des 1250 GeoTif
val <- extract(raster.stack, studyarea) #extrait les données de chaque raster contenu dans raster.stack en fonction du studyarea : on obtient une liste de liste (nombre de raster * nombre de maille * nombre de données par maille)
val <- lapply(val, function(x) {ifelse((x<=0)=="FALSE", x, x<-NA)}) # on remplace les valeurs négative (nuage et continent) pour qu'elles ne soient pas prise en compt dans les calcules
climato_maille <- lapply(val, function(x){ quantile(x, probs=c(0.9), na.rm=T) } ) #calcul la fonction par liste de données
data.cimato.maille <- as.numeric(unlist(climato_maille))
FID_SG_gri <- as.numeric(studyarea$FID_SG_gri)
data.ref.climato.maille <- data.frame(FID_SG_gri,data.cimato.maille)
Evaluation_MMN_Chla <- merge(studyarea,data.ref.climato.maille , by="FID_SG_gri") # on rajoute les statistiques calculés au shapefile
writeSpatialShape(Evaluation_MMN_Chla, fn=paste0("**.shp"))
Le passage "val <- extract(raster.stack, studyarea)" prend énormément de temps, pensez-vous qu'il existe une méthode plus rapide pour extraire les données par maille et les traiter ?