当我使用bearing
包中的geosphere
函数计算点之间的方位时,所得的方位跨度为-180-180度。但是,基于geosphere
软件包documentation,我希望轴承跨度为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]
答案 0 :(得分:0)
根据导航任务,“角度”,“方向”,“航向”和/或“轴承”等术语可能具有不同的含义。
bearing()函数的文档讲述了
从点p1到点的初始方位(方向;方位角) p2。
因此,函数geosphere::bearing()
传递的方向是方位角(角度)。显然,这些值以-180 ... 180度表示。这是您面向向北时所要转向的相对方向。这一点很重要,因为它假设您正在向北看,因此可以通过初始的左/右转弯到达目的地(或点p2),即,负方位角表示向左转,正方位角表示您的目的地在您的右侧。
当您谈论标准化初始航向(北:= 000或360度)时,参考不是您观察的方式,而是您所沿的航向跟随。 例如,船舶或飞机在必须修正风偏的同时飞行特定路线。在此,我不再详细介绍航向和航向(船或飞机机头指向的方向)之间的区别。 但是,为了确定航向,需要从“北向360”中减去左转弯(负方位角),而将正向方位角添加到“北向360”。
要在数学上解决此问题,您可以采用长角数学方法(参见this atan-based solution)。
我们可以通过添加“完整圆圈”(360度)来强制使用正号,然后使用取模运算符检查我们是否已超出北标(360)。 例如。 90 + 360 = 450,其中450%modulo-360%= 1 * 360 + 90 =90。对于负方位角,得出-90 + 360 = 270或表示为360的模数:270 = 0 * 360 + 270。 模始终是加号后的 rest 。请注意,您也可以添加2个或更多完整的圈子。这不会影响休息。
要在R中执行此操作,只需使用模运算符(即%%)来确定超过360的余量:
course <- (b + 360) %% 360 # add full circle, i.e. +360, and determine modulo for 360
pts$BEARING <- b
pts$COURSE <- course
pts