【问题标题】:Fast Extraction from Raster Datasets using Points - How to speed up the raster::extract() function使用点从栅格数据集中快速提取 - 如何加速 raster::extract() 函数
【发布时间】:2021-10-19 07:08:13
【问题描述】:

我需要使用 XY 坐标从大型 RasterLayer(数字地形模型或 DTM)中提取值。坐标在另一个大数据表中。

> DTM
class      : RasterLayer 
dimensions : 93690, 74840, 7011759600  (nrow, ncol, ncell)
resolution : 16, 16  (x, y)
extent     : -80000, 1117440, 6448080, 7947120  (xmin, xmax, ymin, ymax)
crs        : +proj=utm +zone=33 +ellps=GRS80 +units=m +no_defs 
source     : dtm_16x16_utm33.tif 
names      : dtm_16x16_utm33 
values     : -6.648066, 2273.72  (min, max)

> XY
                x       y
        1: 986488 7930296
        2: 986504 7930296
        3: 986536 7930296
        4: 986552 7930296
        5: 986488 7930280
       ---               
454986003:  61832 6451208
454986004:  61848 6451208
454986005:  61864 6451208
454986006:  61912 6451208
454986007:  61928 6451208
raster r 包中的

extract() 函数可以完成该任务。根据包装手册,代码为:

Altitude <- extract(DTM, XY)

不过,这需要很长时间!!


我尝试使用以下代码行并行运行该函数。

beginCluster(30)
Altitude <- extract(DTM, XY)
endCluster()

但是,我可以看到,在 64 个可用内核中,只有 1 个被 R 使用,代码没有并行运行,函数继续需要很长时间。

有什么办法可以加快速度吗?


注意1:我已经成功使用了类似于这个的代码行...

beginCluster(20)
raster3 <- projectRaster(raster1, crs=crs(raster2))
endCluster()

...服务器同时使用多个内核。

【问题讨论】:

  • 看看exactextractr 包。它会更快。
  • Billy34,包描述说“使用多边形从栅格数据集中快速提取标题”...我对使用点进行提取感兴趣。
  • 好点。您的数据有点庞大,我努力构建一个等效的测试对象。然后我建议你看看terra 包,它是包raster 的一种重写。调整代码相当简单(使用 rast() 为 raster() 加载 DTM 和提取函数是相同的)

标签: r parallel-processing extract raster


【解决方案1】:

最快的解决方案之一是使用 velox 包。 https://www.rdocumentation.org/packages/velox/versions/0.2.0

library("velox")
library("raster")
library("sp")
library("rgeos")

## convert XY data to SpatialPoints
XY <- SpatialPoints(coords = XY)

## create a velox object from the original raster
DTMV <- velox(DTM)

## fast extraction of altitude data
Altitude <- DTM1V$extract_points(sp = XY)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-18
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多