首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何加快从光栅中提取缓冲区中土地覆盖类型的比例?

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

Stack Overflow用户
提问于 2015-12-07 21:12:35
回答 1查看 1.1K关注 0票数 6

我想提取10公里的空间数据,大约30000个SpatialLines类物体,并计算缓冲线周围每种土地覆盖类型的比例。第一次,我使用函数crop来裁剪我的光栅。然后,利用extract (package )函数计算了10种土地覆盖类型的比例。这是我的代码:

代码语言:javascript
复制
lapply(1:nrow(tab_lines), FUN=function(k){

第一步:在线路周围建立一个10公里的缓冲区。

代码语言:javascript
复制
buf_line <- gBuffer(seg_line[k], width=10000) ## seg_line =  Lines objects

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

代码语言:javascript
复制
ha <-extract(x=data_raster,y=buf_line)

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

每一种土地覆被类型的比例必须在列中(一栏=一种土地覆盖类型)。

代码语言:javascript
复制
    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))  
    })

如何加快30000条空间线的处理时间?在R中是否有其他包可以为这种类型的提取提供更快的处理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-07 22:17:02

这里有一个更简洁的表述

代码语言:javascript
复制
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

根据您的计算机,第一次运行可能会加快速度。

代码语言:javascript
复制
beginCluster()
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34143320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档