Suite

Empiler des rasters avec une étendue et une résolution différentes dans une boucle avec le raster de package R

Empiler des rasters avec une étendue et une résolution différentes dans une boucle avec le raster de package R


Je voudrais empiler des rasters avec le package R "raster". Les calques sont au format ascii. Je veux les recadrer pour avoir la même étendue et les projeter pour avoir la même résolution. Mon code donne des couches raster avec des valeurs vides.

#Les couches doivent avoir une étendue et une projection similaires. Nous allons d'abord les recadrer tous dans la même mesure. #Lire les fichiers trouvés dans le répertoire de travail contenant *.asc raster_data <- list.files(pattern='*.asc', full.names=TRUE) #obtenir l'étendue souhaitée (la plus petite étendue raster) e <- extent(-12, 112, 23, 72) #get modèle de couche avec l'étendue et la résolution souhaitées. Transformer la couche modèle ascii au format raster d <- raster("WC_BIO1.asc", ext = e, crs="+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0", ncol=15120 , nrow=6000) w <- writeRaster(d, "WC_BIO1_template.grd", format = "raster") #charger les couches ascii, transformer au format raster avec l'étendue et la résolution obtenues à partir de la couche modèle pour (i en 1: longueur(raster_data )){ r <- raster(raster_data[i], crs="+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0") rc <- crop(r, e) rp <- projectRaster(from = rc, to = w, crs="+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0", filename = file.path ("./crop", raster_data[i ]), method = "bilinéaire", format = "raster", overwrite = TRUE) rw <- writeRaster(rp, filename = file.path ("./crop", raster_data[i]), crs="+proj= longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0", overwrite = TRUE, format = "raster", na.value=-9999) }

Voici quelques conseils. Il est difficile de répondre sans en savoir plus sur vos données. Veuillez nous montrer le résultat de :

raster(raster_data[1])
  • Vous passez des arguments aurasterfonction qui sont ignorées lorsque vous créez un objet à partir d'un fichier. Vous n'avez pas besoin d'utiliserrecadrersur cette couche. Certainement pas avant que vous projetez les données sur lon/lat.

  • Vous n'avez jamais besoin de projectRaster ET de rééchantillonner. Si vos couches sont en effet lon/lat utilisezrééchantillonnerou, si possible, justerecadreret(dés)agréger.

  • Mon impression est qu'ils ne sont pas lon/lat. Cela peut être le problème et la raison pour laquelle vos calques sont vides. Dans ce cas, vous devez leur attribuer le SCR actuel correct avant d'utiliser projectRaster. Dans projectRaster, n'utilisez pas l'argument crs (il est ignoré de toute façon, car le CRS de w est utilisé).

  • N'utilisez pas writeRaster, car vous enregistrez déjà le fichier avec projectRaster (ou vous pourriez le faire avec resample). WriteRaster n'a pas non plus d'arguments crs et na.value, ils sont donc ignorés.

Voici le code fixe :

raster_data <- list.files(pattern='.asc$', full.names=TRUE) w <- raster("WC_BIO1.asc", crs="+proj=longlat +datum=WGS84 +ellps=WGS84" ) for (i in 1:length(raster_data)){ r <- raster(raster_data[i], crs="???????") rp <- projectRaster(from = rc, to = w, filename = file.path ("./crop", raster_data[i]), method = "bilinéaire", format = "raster", overwrite = TRUE) }

Voir la vidéo: Ärrältä lähetät ja vastaanotat paketin helposti