【发布时间】: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