Konvertieren Sie mehrere SpatialPointsDataFrames in Raster

9

In meinem Arbeitsbereich befinden sich 100 SpatialPointsDataFrames. Ich habe sie auf diese Weise geladen:

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

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

Sie heißen so:

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

etc.

Wie kann ich sie in Raster konvertieren, die den Arbeitsbereich durchlaufen?

Ich bin ein sehr neuer R-Benutzer und hoffe, Hilfe zu finden. Danke vielmals.

Dreizack
quelle
1
Bearbeiten Sie Ihren Beitrag, um anzugeben, ob sich Ihre Punkte in einem regulären Raster befinden oder ob Sie eine Interpolation benötigen
Etienne Racine

Antworten:

9

Wenn Ihre Daten xyz-Daten enthalten (wobei z der Rasterwert ist) und sich Ihre Punkte in einem regulären Raster befinden (keine Interpolation erforderlich).

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

Wenn Sie eine Interpolation benötigen, können Sie die akima-Bibliothek verwenden:

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)

Um dies nacheinander zu tun, müssen Sie es nur in eine forSchleife einwickeln (ich habe versucht, so nah wie möglich an den Informationen zu bleiben, die Sie in Ihrer Frage angegeben haben):

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
}
Etienne Racine
quelle
Ich würde davon abraten, etwas zu verwenden travel@data(oder @überhaupt zu verwenden), da dies von den internen Namen von a SpatialPointsDataFrameabhängt, die sich möglicherweise ändern. Ich schlage vor, zu verwenden as.data.frame, was nicht auf diesen internen Namen beruht.
Paul Hiemstra
Guter Punkt. Ich habe es geändert. Ich mag die Slot-Nutzung, weil sie kompakter ist, aber Sie haben Recht.
Etienne Racine
5

Zusätzlich zu der Antwort von @ Etiennebr würde ich mich für eine Apply-Style-Schleife entscheiden (die mehr R-ish ist und weniger Code für dieselbe Sache verwendet):

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")])
})
Paul Hiemstra
quelle
Hoi Paul, vielen Dank für die Antwort !! Ihre Methode ist viel einfacher als die, die ich herausgefunden habe. Wenn Sie an meiner Methode interessiert sind, lassen Sie es mich einfach wissen.