在 R 的地圈包中,为什么轴承不是 0-360 度?

  • 本文关键字:0-360 包中 r geosphere
  • 更新时间 :
  • 英文 :


当我使用geosphere包中的bearing函数计算点之间的轴承时,得到的轴承跨度为 -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]

根据导航任务的不同,"角度"、"方向"、"航向"和/或"方位角"等术语可能意味着不同的东西。

轴承(( 函数的文档谈到了

从点 P1 到点的初始方位角(方向;方位角( 第 2 页。

因此,函数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 个或更多完整的圆圈。这不会影响其余部分

要在 R 中执行此操作,只需使用模运算符(即 %%(来确定360 以外的其余部分

course <- (b + 360) %% 360 # add full circle, i.e. +360, and determine modulo for 360
pts$BEARING <- b
pts$COURSE  <- course
pts

相关内容

  • 没有找到相关文章

最新更新