该函数不需要闭合多边形。如果你给它一个封闭的多边形,它会删除最后一行。您可以使用getMethod("perimeter","matrix")
查看源代码。
if (isTRUE(all.equal(x[1, ], x[nrow(x), ]))) {
x <- x[-nrow(x), ]
这是检查最后一行是否等于第一行。在这种情况下,它会删除最后一行。
myPoly<-matrix(c(78.53346,78.53476,78.53018,78.52730,78.52597,78.52527,78.52189,78.51889,
17.36927,17.36927,17.36844,17.36850,17.36853,17.36854,17.36862,17.36885),
nrow=8,ncol=2)
perimeter(myPoly)
结果:
[1] 3382.831
要查找两点之间的长度,可以distHaversine()
直接使用。
distHaversine(myPoly[1,],myPoly[8,],r = 6378137)
结果:
1548.674
可以通过取差来找到没有最后一行的长度。
perimeter(myPoly) - distHaversine(myPoly[1,],myPoly[8,],r = 6378137)
[1] 1834.157
或者
sum(distHaversine(myPoly[c(1:nrow(myPoly)-1),],myPoly[-1,]))
[1] 1834.157