В пакете геосферы в R, почему подшипники не находятся в 0-360 градусов? - PullRequest
0 голосов
/ 25 июня 2018

Когда я вычислял подшипники между точками, используя функцию bearing в пакете geosphere, полученные подшипники составляли -180 - 180 градусов.Тем не менее, исходя из geosphere пакета документации , я ожидал, что опоры повернутся на 0-360 градусов.Вот цитата из документации:

Направления выражены в градусах (север = 0 и 360, восток = 90, юг = 180 и запад = 270 градусов).

Чего мне не хватает?

Вот небольшой пример:

# set up
library(geosphere)
library(ggplot2)

# create data frame of long/lat
long <- c(-55.25, -55.25, -55.25, -55, -55, -55, -54.75, -54.75, -54.75)
lat <- c(-13.5, -13.25, -13, -13.5, -13.25, -13, -13.5, -13.25, -13)
id <- c("a", "b", "c", "d", "e", "f", "g", "h", "i")
pts <- data.frame(id=id, long=long, lat=lat)

# plot
ggplot(pts, aes(x=long, y=lat, colour=id)) + 
  geom_point()

# calculate bearings from point e to all other points
pts <- pts[,c(2:3)]
b <- bearing(pts[5,], pts)

# I expected this:
# b[1] = 225
# b[2] = 270
# b[3] = 315
# but instead, found this:
b[1]
b[2]
b[3]

1 Ответ

0 голосов
/ 04 января 2019

В зависимости от навигационной задачи такие термины, как «угол», «направление», «направление» и / или «направление», могут означать разные вещи.

Документация по функции подшипника () говорит о

начальный азимут (направление; азимут) для перехода из точки p1 в точку p2.

Таким образом, направления, которые доставляет функция geosphere::bearing(), являются азимутами (углами)).Очевидно, они выражены в градусах -180 ... 180. Это относительное направление, которое вы бы повернули, когда обращен к к северу.Это важно, поскольку предполагается, что вы смотрите на север и, таким образом, ваш пункт назначения (или точка p2) может быть достигнут с начальным поворотом влево / вправо, т.е. отрицательные азимуты отражают левый поворот, положительные азимуты показывают вашпункт назначения на правой стороне.

Когда вы говорите о стандартизированном начальном направлении курса (север: = 000 или 360 градусов), вы ориентируетесь не на то, как вы смотрите , а на то, какое направление курсаВы выполните.Например, корабли или самолеты летят определенным курсом, в то время как они должны корректировать смещения ветра.Я не буду вдаваться в подробности о разнице между курсом и курсом (направление на носовой части корабля или самолета).Однако, чтобы определить курс, левый поворот (отрицательный азимут) необходимо вычесть из «северного направления 360», в то время как положительные азимуты добавляются к (северное направление, интерпретируемое как 0).

Комуисправить это математически, вы можете пойти по длинному математике (см. это решение на основе atan ).

Мы можем форсировать положительный знак, добавив «полный круг» (360 градусов)), а затем проверьте, как далеко мы продвинулись за северную отметку (360), используя оператор по модулю.Например, 90 + 360 = 450 с 450% по модулю-360% = 1 * 360 + 90 = 90. Для отрицательных азимутов это дает -90 + 360 = 270 или выражается по модулю 360: 270 = 0 * 360 + 270.по модулю всегда отдых после плюса.Обратите внимание, что вы также можете добавить 2 или более полных кругов.Это не повлияет на rest .

Чтобы сделать это в R, просто используйте оператор по модулю, то есть %%, чтобы определить rest за 360 :

course <- (b + 360) %% 360 # add full circle, i.e. +360, and determine modulo for 360
pts$BEARING <- b
pts$COURSE  <- course
pts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...