В зависимости от навигационной задачи такие термины, как «угол», «направление», «направление» и / или «направление», могут означать разные вещи.
Документация по функции подшипника () говорит о
начальный азимут (направление; азимут) для перехода из точки 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