Конвертировать несколько пространственных точек данных в растр

9

В моей рабочей области 100 пространственных точек данных. Я загрузил их таким образом:

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

Если вам нужна интерполяция, вы можете использовать библиотеку 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)

Теперь, чтобы сделать это последовательно, вам просто нужно обернуть его в 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(или использовать @вообще), так как это зависит от внутренних имен a 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")])
})
Пол Химстра
источник
Хой Пол, большое спасибо за ответ !! Ваш метод намного проще, чем тот, который я понял. Если вы заинтересованы в моем методе, просто дайте мне знать. С наилучшими пожеланиями, Ливия