我正在尝试计算两个点之间的欧几里德距离,但这两个点被一个不规则多边形所限制(也就是说,距离必须按照给定窗口的路径计算)。
以下是一个可重现的示例:
library(spatstat)
#Simple example of a polygon and points.
ex.poly <- data.frame(x=c(0,5,5,2.5,0), y=c(0,0,5,2.5,5))
points <- data.frame(x=c(0.5, 2.5, 4.5), y=c(4,1,4))
bound <- owin(poly=data.frame(x=ex.poly$x, y=ex.poly$y))
test.ppp <- ppp(x=points$x, y=points$y, window=bound)
pairdist.ppp(test.ppp)#distance between every point
#The distance result from this function between point 1 and point 3, is given as 4.0
然而,仅从绘制这些点来看,我们就能知道
plot(test.ppp)
如果路径限制在多边形内,则距离应更大(在这种情况下为5.00)。
是否有我不知道的 {spatstat} 中的另一个函数可以做到这一点?或者有没有其他建议可以使用另一个软件包来完成这个问题?
我正在尝试找到水体中两点之间的距离,因此我的实际数据中的不规则多边形更加复杂。
非常感谢任何帮助!
谢谢!
bound
转换为 RasterLayer 对象(可能首先使用 maptools 提供as(bound, "SpatialPolygons")
和as(test.ppp, "SpatialPoints")
),然后使用 gdistance 包计算点之间的“最小成本距离”,其中bound
外所有网格点的摩擦或成本设置为无穷大。gdistance 附带了一个很好的文档(运行vignette("gdistance")
查看),这应该会给你一个良好的开端。 - Josh O'Brien