Convertir plusieurs SpatialPointsDataFrames en raster


9

Il y a 100 SpatialPointsDataFrames dans mon espace de travail. Je les ai chargés de cette façon:

filenames <- list.files(path="",
                        pattern="XYhectareTravelTimes_ez+.*shp")

for(i in filenames){
              filepath <- file.path("/",i)
              assign(i, readShapePoints(filepath))

Ils sont appelés comme ceci:

XYhectareTravelTimes_ez10.*shp 
XYhectareTravelTimes_ez11.*shp 
XYhectareTravelTimes_ez12.*shp 

etc.

Comment puis-je les convertir en rasters en boucle dans l'espace de travail?

Je suis un nouvel utilisateur de R et j'espère trouver de l'aide. Merci beaucoup.


1
Modifiez votre message pour spécifier si vos points sont sur une grille régulière ou si vous avez besoin d'une interpolation
Etienne Racine

Réponses:


9

Si vos données contiennent des données xyz (où z est la valeur raster) et vos points sont sur une grille régulière (pas besoin d'interpolation).

library("raster")
r <- rasterFromXYZ(as.data.frame(travel)[, c("x", "y", "z")])

Si vous avez besoin d'une interpolation, vous pouvez utiliser la bibliothèque akima:

library("raster")
library("akima")

steps <- 100
isu <- with(travel@data, interp(x, y, z, 
    xo=seq(min(x), max(x), length = steps),
    yo=seq(min(y), max(y), length = steps)
))

r <- raster(isu)

Maintenant, pour faire cela séquentiellement, il vous suffit de l'enrouler en forboucle (j'ai essayé de rester aussi proche que possible des informations que vous avez fournies dans votre question):

library("raster")

filenames <- list.files(path="", pattern="XYhectareTravelTimes_ez+.*shp")

# create a container for all the rasters
raster_cat <- list()

for (i in filenames) { 
  travel <- readShapePoints(i)
  r <- rasterFromXYZ(as.data.frame(travel)[, c("x", "y", "z")])
  raster_cat[[i]] <- r
}

Je déconseille d'utiliser travel@data(ou d'utiliser @du tout), car cela dépend des noms internes de a SpatialPointsDataFrame, qui pourraient changer. Je suggère d'utiliser as.data.frame, qui ne repose pas sur ces noms internes.
Paul Hiemstra

Bon point. Je l'ai changé. J'aime l'utilisation de la fente parce qu'elle est plus compacte, mais vous avez raison.
Etienne Racine

5

En plus de la réponse de @ Etiennebr, j'opterais pour une boucle de style d'application (qui est plus R-ish et utilise moins de code pour la même chose):

library("raster")

filenames <- list.files(path="", pattern="XYhectareTravelTimes_ez+.*shp")

raster_cat = lapply(filenames, function(x) {
  travel <- as.data.frame(readShapePoints(x))
  r <- rasterFromXYZ(travel[, c("x", "y", "z")])
})

Hoi Paul, merci beaucoup pour la réponse !! Votre méthode est beaucoup plus simple que celle que j'ai imaginée. Si vous êtes intéressé par ma méthode, faites le moi savoir. Cordialement, Livia
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.