Converta vários SpatialPointsDataFrames em raster


9

Existem 100 SpatialPointsDataFrames no meu Espaço de Trabalho. Carreguei-os desta maneira:

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

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

Eles são chamados assim:

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

etc.

Como posso convertê-los em rasters que percorrem o espaço de trabalho?

Eu sou um usuário R muito novo e espero encontrar alguma ajuda. Muito obrigado.


11
Editar seu post para especificar se os seus pontos estão em uma grade regular ou se precisar de interpolação
Etienne Racine

Respostas:


9

Se seus dados contiverem dados xyz (onde z é o valor de varredura) e seus pontos estiverem em uma grade regular (sem necessidade de interpolação).

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

Se você precisar de interpolação, poderá usar a biblioteca do 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)

Agora, para fazer isso sequencialmente, você só precisa envolvê-lo em um forloop (tentei ficar o mais próximo possível das informações que você forneceu na sua pergunta):

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
}

Eu aconselho a não usar travel@data(ou usar @), pois isso depende dos nomes internos de a SpatialPointsDataFrame, que podem mudar. Sugiro usar as.data.frame, que não depende desses nomes internos.
Paul Hiemstra 15/10/12

Bom ponto. Eu mudei isso. Gosto do uso do slot porque é mais compacto, mas você está certo.
Etienne Racine

5

Além da resposta de @ Etiennebr, eu usaria um loop de estilo apply (que é mais R-ish e usa menos código para a mesma coisa):

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, muito obrigado pela resposta !! Seu método é muito mais fácil do que o que eu descobri. Se você estiver interessado no meu método, deixe-me saber. Atenciosamente, Livia
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.