0

我正在使用光栅包从光栅中提取一些坐标的值。我打算使用 1 公里的缓冲区进行提取。但是在 terra pakcage 中使用提取功能似乎是不可能的。

如果您能帮助我,将不胜感激。

4

1 回答 1

2

只需将坐标转换为点,然后在它们周围创建一个缓冲区这里是具有不同包的基准:

library(terra)
library(raster)
library(exactextractr)
library(sf)
#create example raster
r <- raster(ncol=36, nrow=18, vals=1:(18*36))

# extract values with coordinates (converted to points)
#create some coordinates
xy <- cbind(-50, seq(-80, 80, by=20))
#convert to points
sp <- SpatialPoints(xy)
#create a buffer around the points
sp_buffer <-st_buffer(st_as_sf(sp),20) 


#extract ----------------------------------------------------------------
#raster
raster::extract(r, sp_buffer)
#terra
terra::extract(r, sp_buffer)
#exactextract
exactextractr::exact_extract(r,sp_buffer)

library(microbenchmark)
microbenchmark(raster=raster::extract(r, sp_buffer),
               terra=terra::extract(r, sp_buffer),
               exactextract=exactextractr::exact_extract(r,sp_buffer)
)

Unit: milliseconds
         expr     min       lq      mean   median       uq      max neval cld
       raster 56.0899 59.19100 65.547358 60.64650 62.12665 300.6713   100   b
        terra 56.3695 58.90810 65.549521 60.47245 62.22330 179.3679   100   b
 exactextract  8.0596  8.53215  9.447963  8.71500  8.91085  81.8115   100  a 

如您所见exact_extract,这是从多边形中提取值的最快函数(快 7 倍)

于 2021-09-23T11:50:33.627 回答