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
我想给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