【发布时间】:2014-05-21 18:19:53
【问题描述】:
我试图找到两点之间的欧式距离,由不规则多边形限制。 (即,必须将距离计算为通过给定窗口的路线)
这是一个可重现的例子:
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")来查看它)应该会给你一个好的开始。
标签: r polygon euclidean-distance spatstat