Suite

Importer plusieurs fichiers GeoTiff dans R ?

Importer plusieurs fichiers GeoTiff dans R ?


Je pense que cela doit être un moyen "simple" d'importer plusieurs fichiers Geotiff dans R au lieu de copier-coller m fois Rfd<-readGDAL(), puis enregistrez-les en tant qu'objets individuels.

J'ai trouvé le code suivant dans un article sur la façon d'importer plusieurs fichiers de formes…

obtenir tous les fichiers avec l'extension .shp à partir du répertoire de travail setwd("D:/GIS_DataBase/GIS_Tirol/Tirol_Verbreitungskarten/Verbreitungs_Daten") shps <- dir(getwd(), ".shp") la fonction assign prendra la chaîne représentant shp et la transformera en une variable contenant les données de points spatiaux pour (shp dans shp) assign(shp, readShapePoints(shp)) plot(get(shp[1])) # c'est-à-dire… terminé*

Mais il ne se traduit pas en fichiers raster avec la fonction readGDAL {rgdal}.

Un autre post a suggéré l'utilisation de pour ou et une fonction, lors de l'importation de plusieurs fichiers *.csv dans R. Cependant, j'ai également échoué à le faire fonctionner.


Une simple boucle for suffira. Vous pouvez utiliser readGDAL dans le package rgdal mais je recommanderais raster dans le package raster. Vous devez être un peu délicat et utiliser strsplit dans la fonction assign pour supprimer l'extension de fichier ".tif".

setwd("C:/rasters") rlist=list.files(getwd(), pattern="tif$", full.names=FALSE) for(i in rlist) { assign(unlist(strsplit(i, "[. ]"))[1], raster(i)) }

Si vos données s'alignent (même résolution, coordonnées d'origine, étendue, nombre de lignes et de colonnes), il suffit de passer l'objet rlist à la pile raster ou à la fonction de brique. Il en résulte un objet unique contenant tous les rasters. Même si vos rasters ne sont pas alignés, vous pouvez utiliser l'argument "quick=TRUE", qui ignorera les vérifications de cohérence. L'objet de pile résultant contiendra tous les rasters désignés et vous pouvez les diviser en objets de classe raster individuels.

Les fonctions de pile et de brique ont une boucle interne et accepteront une liste de rasters et les rasters peuvent être à une ou plusieurs bandes.


Ce code créera une brique raster qui nécessite que tous les rasters aient la même étendue. Vous pouvez le modifier pour créer une pile raster. Je suppose que vos fichiers dans le répertoire de travail sont nommés Band*.tif

library(raster) # charge le paquetage raster brk <- do.call(brick, lapply(list.files(path = "./", pattern = "Band*.*tif"), raster))

Cela dépend vraiment de la façon dont vos fichiers sont structurés, à savoir s'ils ont plusieurs bandes. En supposant que vous n'ayez qu'une seule bande dans chaque fichier, vous pouvez utiliser le code suivant pour créer une pile raster. L'utilisation de la bibliothèque 'raster' facilite les choses.

library(raster) datafiles <- Sys.glob("*.tif") #Ou tout ce qui identifie vos fichiers resultStack <- stack() for(i in 1:NROW(datafiles)){ tempraster <- raster(datafiles[i] ) resultStack <- stack(resultingStack,tempraster) }

Cela va itérer sur tous les rasters et les empiler dans un grand rasterStack qui peut être utilisé pour le traitement.


Voir la vidéo: GeoTiff Files in R: Import, Export, Visualize, Terrain Attributes