geosphere 包中的周界函数

Perimeter function in geosphere package

我想给R中的geosphere包中的perimeter函数提供一组坐标,这些坐标不构成闭合多边形。该函数会给我线段的长度还是关闭多边形本身并给出周长?

数据如下:

     lon      lat
78.53346 17.36927
78.53476 17.36833
78.53018 17.36844
78.52730 17.36850
78.52597 17.36853
78.52527 17.36854
78.52189 17.36862
78.51889 17.36885

该函数不需要闭合多边形。如果你给它一个封闭的多边形,它会删除最后一行。可以使用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