当前位置:  开发笔记 > 编程语言 > 正文

如何加速从栅格中提取缓冲区中土地覆盖类型的比例?

如何解决《如何加速从栅格中提取缓冲区中土地覆盖类型的比例?》经验,为你挑选了1个好方法。

我想在10万个类似SpatialLines对象的10 km缓冲区中提取空间数据,并计算缓冲线周围每种土地覆盖类型的比例.在第一次,我使用该功能crop来裁剪我的栅格.然后,我使用函数extract(包栅格)来计算10种土地覆盖类型的比例.这是我的代码:

lapply(1:nrow(tab_lines), FUN=function(k){

第一步:建立一条10公里左右的缓冲区

buf_line <- gBuffer(seg_line[k], width=10000) ## seg_line =  Lines objects

第二步:从栅格中提取缓冲区中的土地覆盖类型

ha <-extract(x=data_raster,y=buf_line)

第三步:计算10种土地覆盖类型的比例

每种土地覆盖类型的比例必须是列(一列=一个土地覆盖类型)

    ha_1 <-length(ha[[1]][ha[[1]]==1])/length(ha[[1]])
    ha_2 <-length(ha[[1]][ha[[1]]==2])/length(ha[[1]])
    ha_3 <-length(ha[[1]][ha[[1]]==3])/length(ha[[1]])
    ha_4 <-length(ha[[1]][ha[[1]]==4])/length(ha[[1]])
    ha_5 <-length(ha[[1]][ha[[1]]==5])/length(ha[[1]])
    ha_6 <-length(ha[[1]][ha[[1]]==6])/length(ha[[1]])
    ha_7 <-length(ha[[1]][ha[[1]]==7])/length(ha[[1]])
    ha_8 <-length(ha[[1]][ha[[1]]==8])/length(ha[[1]])
    ha_9 <-length(ha[[1]][ha[[1]]==9])/length(ha[[1]])
    ha_10 <-length(ha[[1]][ha[[1]]==10])/length(ha[[1]])

     return(cbind(ha_1, ha_2, ha_3, ha_4, ha_5, ha_6, ha_7, ha_8, ha_9, ha_10))  
    })

如何加快30 000个空间线的处理时间?R中是否还有其他软件包可以为这种类型的提取提供更快的处理?



1> Robert Hijma..:

这是一个更简洁的表述

library(raster)
library(rgeos)

buf_line <- gBuffer(seg_line, width=10000, byid=TRUE)
ha <- extract(x=data_raster, y=buf_line)
h <- sapply(ha, function(x) tabulate(x, 10))
h <- h / colSums(h)

但我不认为这会快得多.你可以试试而不是提取物sp::over

根据您的计算机,首先运行可能会加快速度

beginCluster()

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有