Как объединить растровые плитки, которые имеют незначительные отличия в происхождении после уменьшения разрешения с помощью 'агрегирования'
У меня 29 растровых плиток со следующими свойствами:
class : SpatRaster
dimensions : 45000, 45000, 1 (nrow, ncol, nlyr)
resolution : 0.0008888889, 0.0008888889 (x, y)
extent : 20, 60, -40, 0 (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs
data source : N00E020_agb.tif
names : N00E020_agb
Я хочу объединить все 29 плиток в один растр, однако при таком высоком разрешении это занимает много времени. Поэтому я сначала уменьшил разрешение этих растров, используя агрегат. Я суммирую в 113 раз (примерно дает разрешение 0,1):
pathz <- "C:/Users/rastertiles/" # directory where raster tiles are located
filez <- list.files(path = paste(pathz, sep = ""), pattern = ".tif") # list all files in directory
r.list_113 <- list() # make an empty list
for(i in 1:length(filez)){
tmp1 <- rast(paste(pathz, filez[i], sep = ""))
tmp1 <- terra::aggregate(tmp1,fact=113, fun="mean", na.rm=TRUE) # aggregate by a factor 113.
r.list_113[[i]] = tmp1
}
Однако, хотя все исходные тайлы имеют одинаковое происхождение ([0,0]), после использования «агрегирования» новые растры имеют незначительные отличия в происхождении:
> lapply(r.list_113, origin)
[[1]]
[1] 0.01155556 0.00000000
[[2]]
[1] 0.03466667 0.00000000
[[3]]
[1] -0.04266667 0.00000000
[[4]]
[1] -0.01955556 0.00000000
(...)
Когда я затем пытаюсь объединить новые растры с помощью «слияния», я получаю сообщение об ошибке:
> m_113X <- do.call(terra::merge, r.list_113X)
Error: [merge] origin of SpatRaster 2 does not match the previous SpatRaster(s)
Любые предложения, что мне делать, приветствуются.
1 ответ
Какая версия
terra
ты используешь? Я спрашиваю, потому что считаю, что текущая версия будет предупреждать, но продолжайте. Кроме того, вы, конечно, можете агрегировать со 100 вместо 113, чтобы не изменить происхождение.
Самый простой способ - создать такой виртуальный растр:
v <- vrt(files, "my.vrt")
а затем продолжить
r <- rast("my.vrt")
и, возможно
a <- aggregate(r, 100)
Или чем бы вы ни хотели заниматься.