2015-02-17 3 views
1

Я хочу дать набор координат функции периметра функции в пакете геосферы в R, а координаты не образуют замкнутый многоугольник. Будет ли функция давать мне длину отрезков линии или закрыть сам полигон и дать периметр?Функция периметра в пакете геосферы

Данные следующим образом:

 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 

ответ

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 
+0

Так что следует по пути и находит длину кривой? Мне нужна длина трассировки, а не замкнутый многоугольник. Благодарю. –

 Смежные вопросы

  • Нет связанных вопросов^_^