Функция не нужен замкнутый многоугольник. Если вы дадите ему закрытый полигон, он удалит последнюю строку. Вы можете использовать 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
Так что следует по пути и находит длину кривой? Мне нужна длина трассировки, а не замкнутый многоугольник. Благодарю. –