Konwertuj kilka SpatialPointsDataFrames na raster


9

W moim obszarze roboczym jest 100 SpatialPointsDataFrames. Załadowałem je w ten sposób:

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

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

Nazywa się je tak:

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

itp.

Jak przekonwertować je na rastry zapętlające się w przestrzeni roboczej?

Jestem bardzo nowym użytkownikiem R i mam nadzieję znaleźć pomoc. wielkie dzięki.


1
Edytuj swój post, aby określić, czy punkty są na regularnej siatce, czy potrzebujesz interpolacji
Etienne Racine,

Odpowiedzi:


9

Jeśli twoje dane zawierają dane xyz (gdzie z jest wartością rastrową), a twoje punkty są na regularnej siatce (nie ma potrzeby interpolacji).

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

Jeśli potrzebujesz interpolacji, możesz użyć biblioteki 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)

Teraz, aby zrobić to sekwencyjnie, wystarczy owinąć go w forpętlę (starałem się trzymać jak najbliżej informacji podanych w pytaniu):

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
}

Odradzałbym używanie travel@data(lub używanie @w ogóle), ponieważ zależy to od wewnętrznych nazw a SpatialPointsDataFrame, które mogą ulec zmianie. Sugeruję używanie as.data.frame, które nie opiera się na tych wewnętrznych nazwach.
Paul Hiemstra

Słuszna uwaga. Zmieniłem to. Lubię korzystanie z automatu, ponieważ jest bardziej kompaktowy, ale masz rację.
Etienne Racine

5

Oprócz odpowiedzi @ Etiennebr wybrałbym pętlę stylów zastosuj (która jest bardziej R-iz i używa mniej kodu do tego samego):

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, dziękuję bardzo za odpowiedź !! Twoja metoda jest znacznie łatwiejsza niż ta, którą wymyśliłem. Jeśli jesteś zainteresowany moją metodą, daj mi znać. Z pozdrowieniami, Livia
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.