当我使用bearing函数在geosphere软件包中计算各点之间的方位时,得到的轴承跨度为-180度- 180度。然而,基于geosphere软件包文档,我预计轴承的跨度为0-360度.这里引用了文档中的一句话:
方向以度表示(北=0和360,东= 90,Sout = 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]发布于 2019-01-04 01:16:55
根据导航任务的不同,诸如“角度”、“方向”、“航向”和/或“方位”这样的术语可能意味着不同的东西。
轴承()函数的文档说明了
从点p1到点p2的初始方位(方向;方位)。
因此,函数geosphere::bearing()传递的方向是方位角(角度)。很明显,它们是以- 180 . 180度表示的。这是当面向北时你会转向的相对方向。这一点很重要,因为它假设您正在向北看,因此您的目的地(或点p2)可以通过初始的左/右转弯到达,即负方位角反射左转,正方位角显示您的目的地在您的右手边。
当你谈到标准化的初始航向(北:= 000度或360度)时,你的参考不是你看上去的方向,而是你遵循的方向。例如,船舶或飞机飞行一个特定的航向,而他们必须纠正风向偏移。在这里,我没有更详细地讨论航向和航向(船头或飞机点的方向)之间的区别。然而,为了确定航向,需要从“北向360”减去一个左转(负方位角),而将正方位角加到(北方向解释为0)。
要从数学上解决这个问题,你可以用长角度的数学方法(c.f )。这个基于atan的解决方案)。
我们可以通过添加一个“全圆”(360度)来强制一个正向符号,然后使用模运算符检查我们已经超过了北标记(360)的距离。例如90 + 360 = 450,450 %模块化- 360 %=1*360+ 90 = 90。对于负方位角,这会产生-90 + 360 = 270或表示为360: 270 =0* 360 + 270。模块始终是加号之后的rest。请注意,您也可以添加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
ptshttps://stackoverflow.com/questions/51030060
复制相似问题