Converti diversi SpatialPointsDataFrames in raster


9

Ci sono 100 SpatialPointsDataFrames nel mio spazio di lavoro. Li ho caricati in questo modo:

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

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

Si chiamano così:

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

eccetera.

Come posso convertirli in raster in loop attraverso l'area di lavoro?

Sono un utente R molto nuovo e spero di trovare aiuto. molte grazie.


1
Modifica il tuo post per specificare se i tuoi punti sono su una griglia regolare o se hai bisogno di interpolazione
Etienne Racine

Risposte:


9

Se i tuoi dati contengono dati xyz (dove z è il valore raster) e i tuoi punti sono su una griglia regolare (non è necessaria l'interpolazione).

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

Se hai bisogno di interpolazione, puoi usare la libreria 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)

Ora, per fare questo in sequenza devi solo avvolgerlo in un forciclo (ho cercato di stare il più vicino possibile alle informazioni che hai fornito nella tua domanda):

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
}

Vorrei sconsigliare l'utilizzo travel@data(o l'utilizzo @), poiché ciò si basa sui nomi interni di a SpatialPointsDataFrame, che potrebbero cambiare. Suggerisco di usare as.data.frame, che non si basa su questi nomi interni.
Paul Hiemstra,

Buon punto. L'ho cambiato. Mi piace l'utilizzo delle slot perché è più compatto, ma hai ragione.
Etienne Racine,

5

Oltre alla risposta di @Etiennebr, sceglierei un ciclo di stile apply (che è più R-ish e usa meno codice per la stessa cosa):

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, grazie mille per la risposta !! Il tuo metodo è molto più semplice di quello che ho capito. Se sei interessato al mio metodo, fammelo sapere. Cordiali saluti, Livia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.