1

我想为 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
4

1 回答 1

1

该函数不需要闭合多边形。如果你给它一个封闭的多边形,它会删除最后一行。您可以使用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
于 2015-02-17T16:39:32.770 回答