Я работаю с некоторыми растровыми данными в R, используя пакет raster
.Я хочу рассчитать и извлечь некоторую географическую информацию (например, уклон, аспект) из растра, но только в определенных точках (у меня также есть некоторые данные в виде SpatialPointsDataFrame
, по которым я хочу вычислить уклон / аспект / и т. Д.).Я делаю это для нескольких растров с высоким разрешением, и кажется неэффективным использование ресурсов для вычисления этого для каждой растровой ячейки, когда мне нужно всего лишь 5-10% из них.
Я подумал, что, возможно, функция raster::stackApply
могла бы работать, но, похоже, она выполняет вычисления на подмножествах растрового кирпича, а не вычисления на подмножествах одного растра на основе точечных местоположений (пожалуйста, исправьте меня, если я ошибаюсь).Я также подумал, что мог бы сделать цикл for, где я извлекаю окружающие ячейки, ближайшие к каждой точке интереса, и таким образом итеративно вычисляю наклон / аспект.Это кажется неуклюжим, и я надеялся на более элегантное или встроенное решение, но оно должно работать.
Это мои мысли о цикле for, но я не уверен, как лучше это сделать.
# Attach packages
library(rgdal)
library(raster)
# Generate example raster data
r = raster()
set.seed(0)
values(r) = runif(ncell(r), min = 0, max = 1000)
# Generate example point data
df.sp = SpatialPoints(
coords = cbind(runif(25, min = -100, max = 100),
runif(25, min = -50, max = 50)),
proj4string = crs(r))
# Iterate on each row of SpatialPoints
for (i in 1:nrow(df.sp)) {
# Find cell index of current SpatialPoint
cell.idx = raster::extract(r, df.sp[i,], cellnumbers = TRUE)[1]
# Find indices of cells surrounding point of interest
neighbors.idx = raster::adjacent(r, cell.idx, directions = 16)
# Get DEM values for cell and surrounding cells
vals.local = r[c(cell.idx, neighbors.idx[,2])]
# Somehow convert this back to an appropriate georeferenced matrix
#r.local = ...
# Perform geometric calculations on local raster
#r.stack = terrain(r.local, opt = c('slope', 'aspect'))
# Remaining data extraction, etc. (I can take it from here...)
}
Итак, мне нужен метод для вычисления наклона и аспекта из растра DEM только в определенных точках, заданных объектом SpatialPoints.Если вы знаете о готовом или более элегантном решении, то отлично!Если нет, то некоторая помощь в завершении цикла for (как наилучшим образом извлечь окрестность окружающих ячеек и выполнить вычисления на этом уровне) также была бы наиболее ценной.