加速光栅::使用r中的权重提取
我想从r中多边形定义的面积范围中提取光栅值的精确平均值。这可以使用加速光栅::使用r中的权重提取,r,vector,parallel-processing,extract,raster,R,Vector,Parallel Processing,Extract,Raster,我想从r中多边形定义的面积范围中提取光栅值的精确平均值。这可以使用graster::extract和weights=TRUE选项来实现。但是,使用大光栅时,此操作会变得非常缓慢,而且函数似乎没有并行化,因此begclulater()。。。endCluster()不会加快进程。 我需要提取一系列光栅的值,例如r、r10和r100。在r中有没有一种加速的方法,或者在GDAL中有没有另一种加速的方法 r <- raster(nrow=1000, ncol=1000, vals=sample(se
graster::extract
和weights=TRUE
选项来实现。但是,使用大光栅时,此操作会变得非常缓慢,而且函数似乎没有并行化,因此begclulater()。。。endCluster()
不会加快进程。
我需要提取一系列光栅的值,例如r、r10和r100。在r中有没有一种加速的方法,或者在GDAL中有没有另一种加速的方法
r <- raster(nrow=1000, ncol=1000, vals=sample(seq(0,0.8,0.01),1000000,replace=TRUE))
r10 <- aggregate(r, fact=10)
r100 <- aggregate(r, fact=100)
v = Polygons(list(Polygon(cbind(c(-100,100,80,-120), c(-70,0,70,0)))), ID = "a")
v = SpatialPolygons(list(v))
plot(r)
plot(r10)
plot(r100)
plot(v, add=T)
system.time({
precise.mean <- raster::extract(r100, v, method="simple",weights=T, normalizeWeights=T, fun=mean)
})
user system elapsed
0.251 0.000 0.253
> precise.mean
[,1]
[1,] 0.3994278
system.time({
precise.mean <- raster::extract(r10, v, method="simple",weights=T, normalizeWeights=T, fun=mean)
})
user system elapsed
7.447 0.000 7.446
precise.mean
[,1]
[1,] 0.3995429
r如果您首先调用beginluster
(然后该函数处理并行化),它实际上应该运行得更快。更好的办法是使用2.7-14版,它的实现速度要快得多。CRAN目前正在对其进行审查,但您也可以在这里找到它:最后,我使用直接在硬盘上工作的gdalUtils解决了这个问题
我使用命令gdalwarp()
将光栅分辨率降低到R10100。
然后gdalwarp()
将结果光栅的分辨率提高到原始分辨率r。
然后gdalwarp()
使用cutline=“v.shp”,将光栅裁剪到切线=T
以将光栅遮罩到矢量v
。
然后gdalinfo()
结合子集(x(grep(“Mean=,x))
提取平均值。
所有这些都打包在foreach()%dopar%
循环中,以处理大量光栅和分辨率
虽然它很复杂,可能不如extract::graster
精确,但它完成了这项工作 谢谢。我已经试过了。它检测到8个核并提供了7个可用核,但只使用了1个节点(由系统监视器确认)。它对每个多边形使用一个节点,我想您只有一个多边形。是的,我只有一个多边形。