У меня есть три частично перекрывающихся растра ЦМР с разным происхождением, разрешением (лишь немного отличающимся) и экстентом. Я знаю, что мне нужно использовать функцию передискретизации terra, а не объединять или агрегировать из-за разных источников и т. д., но я не уверен, как инициировать пустой растр для повторной выборки, который имеет соответствующее происхождение, разрешение и экстент, или что делать с перекрывающимися областями.
Существуют ли рекомендуемые подходы к выбору исходной точки и разрешения для использования существующих растров (например, медианные значения в сравнении с минимальными/максимальными значениями)? Как лучше всего обрабатывать перекрывающиеся данные? Есть ли эффективный способ создать такой растр?
Вот способы, которые показывают как, что вы можете это сделать.
Пример данных
library(terra)
x <- rast(xmin=0, xmax=10, ymin=0, ymax=10, res=1, vals=1)
y <- rast(xmin=9, xmax=19, ymin=0, ymax=10, res=0.9, vals=2)
z <- rast(xmin=0, xmax=10, ymin=8.1, ymax=18.1, res=1, vals=3)
Вы можете использовать один из входных растров в качестве шаблона. Допустим, вам нравится y
. В таком случае:
a <- list(x, z)
b <- lapply(a, \(i) {
x <- extend(rast(y), i)
resample(i, crop(x, i, "out"))
})
b <- sprc(c(b, y))
m <- merge(b)
Или создайте новый шаблон растра. В этом случае сначала узнайте общую протяженность
a <- list(x, y, z)
b <- sapply(a, \(i) ext(i) |> as.vector())
e <- ext(min(b[1,]), max(b[2,]), min(b[3,]), max(b[4,]))
# use the extent to create a raster with the desired spatial resolution
r <- rast(e, res=1)
А теперь как указано выше:
gg <- lapply(a, \(i) resample(i, crop(r, i, "out")))
g <- merge(sprc(gg))
Или вот так
src <- sprc(a)
ss <- impose(src, r)
s <- max(ss, na.rm=TRUE)
Я предполагаю, что часть этого может быть обернута в метод terra.
Также см. mosaic
как альтернативу merge
.
Что касается выбора наилучшего разрешения и т. д., то здесь все зависит от ваших потребностей и того, что ваши данные могут разумно поддерживать. Но одно важное общее соображение заключается в том, что вы должны избегать повторной выборки, насколько это возможно, поскольку это ухудшает качество данных.
Спасибо за два альтернативных подхода. Я рассматривал возможность использования одного растра в качестве шаблона, поэтому сначала попробую этот метод. Ожидаете ли вы каких-либо проблем с памятью/обработкой, реализующих любой из этих методов на больших растрах (25–50 ГБ)? Как правило, Terra отлично работает с большими файлами (так что спасибо за эту функцию!), но мне любопытно, применимо ли это к передискретизации или слиянию растров.
Вы могли бы, как минимум, поделиться информацией о своих демонстрациях,
vol <- rast(volcano)
,origin(vol)
> vol class : SpatRaster dimensions : 87, 61, 1 (nrow, ncol, nlyr) resolution : 1, 1 (x, y) extent : 0, 61, 0, 87 (xmin, xmax, ymin, ymax) coord. ref. : source : memory name : lyr.1 min value : 94 max value : 195
, для каждой из них, чтобы помочь людям обдумать предложения. И билинейный.