微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R 函数类似于 distanceFromPoints() 但成本最低距离

如何解决R 函数类似于 distanceFromPoints() 但成本最低距离

我在 R 中有一个运动模型,我想对其进行调整以将景观阻力与运动结合起来。我正在寻找一种方法来制作类似于 distanceFromPoints() 的最小成本值的栅格表面,但使用从用户提供的成本栅格或过渡对象中导出的最小成本距离而不是欧几里德距离,因此输出将是栅格或矩阵,像元值是到一组点的最小成本距离。使用电路景观电阻也可以接受,但我从未使用过电路景观,据我所知,我需要限制背景栅格范围以排除不相关的单元格,这听起来很棘手。

我查看了 R 中的 movecost 和 leastcostpath 包,但都没有我正在寻找的选项。这些软件包似乎主要针对跨各向异性斜率/dem 表面的人类运动(使用诸如 Tobler 的运动算法),这不是我感兴趣的(gdistance 算法对我来说是最好的)。这可以使用栅格到网格来获取每个单元格中心到每个点的值,但是栅格到网格非常慢。如果有更简单、更快捷的方法,我会很感兴趣的。

Manifold 似乎提供了一个合适的 option,但我没有那个软件,如果可能的话,我想用 R 做所有的事情。

当前项目中感兴趣的景观范围约为 6 平方公里,像素分辨率为 3000 万,成本值范围从 1(渗透性最高)到 10(渗透性最低),但我希望能够使用该功能在更大的区域内,无需等待时间。

编辑:我找到了解决方案!这有点粗糙,但我会在这里描述,以防其他人想做类似的事情。

#transition object was made using gdistance transition() and then geoCorrection()
#points is a SpatialPoints object showing locations of multiple traps 
#point_names is a vector of names of these traps

cell_coords<-matrix(NA,ncell(transitionobject,2) #make a matrix object in which to store coordinates of all cells in the transitionobject
landscape_costdist_to_traps<-matrix(NA,length(point_names),ncell(transitionobject),dimnames=list(points,NULL))#make a matrix object to store distances from each point to each cell of the transition object

for (i in 1:ncell(transitionobject))
{
  cell_coords[i,]<-xyFromCell(transitionobject,i)
}

for(i in 1:length(point_names))
{
  costdistance_to_trap<-costdistance(transitionobject,cell_coords,points[i,])
  landscape_costdist_to_traps[i,]<-costdistance_to_trap[]
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。