Перетворіть декілька SpatialPointsDataFrames в растр


9

У моїй робочій області є 100 SpatialPointsDataFrames. Я завантажив їх так:

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

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

Їх називають так:

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

тощо.

Як я можу конвертувати їх у растровий цикл через робочу область?

Я дуже новий користувач R і сподіваюся знайти допомогу. дуже дякую.


1
Відредагуйте свою публікацію, щоб вказати, чи є ваші бали на звичайній сітці чи вам потрібна інтерполяція
Етьєн Расін

Відповіді:


9

Якщо ваші дані містять дані xyz (де z - растрове значення), а ваші точки знаходяться на звичайній сітці (не потрібно інтерполяції).

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

Якщо вам потрібна інтерполяція, ви можете використовувати бібліотеку акіма:

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)

Тепер, щоб зробити це послідовно, вам просто потрібно загорнути його в forцикл (я намагався якомога ближче до інформації, яку ви дали у своєму запитанні):

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
}

Я б радив не використовувати travel@data(або @взагалі використовувати), оскільки це покладається на внутрішні назви файлу SpatialPointsDataFrame, які можуть змінитися. Я пропоную використовувати as.data.frame, що не покладається на ці внутрішні назви.
Пол Хіемстра

Гарна думка. Я це змінив. Мені подобається використання слота, тому що він більш компактний, але ти маєш рацію.
Етьєн Расін

5

На додаток до відповіді @ Etiennebr, я б хотів отримати цикл стилів застосувати (який більше R-ish і використовує менше коду для тієї ж речі):

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")])
})

Хой Пол, велике спасибі за відповідь !! Ваш метод набагато легший, ніж той, який я з'ясував. Якщо вас цікавить мій метод, просто дайте мені знати. З найкращими побажаннями, Лівія
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.