Может быть, вы можете немного ускорить это, используя полигоны, не агрегируя (растворяя) буферы
library(raster)
swe <- getData("GADM", country="SWE", level=0)
set.seed(0)
pts <- spsample(swe, 100, "regular")
r <- raster(swe, nrow = 15000, ncol=7000)
values(r) <- rep(sample(1:10, 77, replace = T), length.out = ncell(r))
b1 <- buffer(pts, 5000, dissolve=FALSE)
b2 <- buffer(pts, 5000, dissolve=TRUE)
system.time(e1 <- extract(r, pts, buffer=5000))
# user system elapsed
# 1.39 0.02 1.40
system.time(e2 <- extract(r, b1))
# user system elapsed
# 0.88 0.00 0.88
system.time(e3 <- extract(r, b2))
# user system elapsed
# 26.34 25.02 51.52
Очевидно, b1
работает намного лучше, чем b2
;но не намного быстрее, чем при первом подходе.
Вы говорите, что не можете сделать RasterStack, потому что растры имеют разные экстенты.Если (и только если!), Однако, они имеют одинаковое происхождение и разрешение, вы можете сначала перевести все области в координаты xy, а затем использовать их.
Примерно так:
z <- rasterize(b, r)
pts <- rasterToPoints(z, xy=TRUE)
Вышеуказанное требует времени, но после этого
system.time(a <- extract(r, zz[,1:2]))
user system elapsed
0.04 0.00 0.04
Может быть быстрее сделать это параллельно для каждой точки и использовать crop(raster(r), polygon)
перед растеризацией.