gpt4 book ai didi

r - 在 R 中的 geosphere 包中,为什么方位角不是 0-360 度?

转载 作者:行者123 更新时间:2023-12-05 04:05:28 31 4
gpt4 key购买 nike

当我使用 geosphere 包中的 bearing 函数计算点之间的方位角时,生成的方位角跨越 -180 - 180 度。但是,基于 geospheredocumentation ,我希望轴承跨越 0-360 度。这是文档中的引述:

Directions are expressed in degrees (North = 0 and 360, East = 90, Sout = 180, and West = 270 degrees).

我错过了什么?

这是一个小例子:

# 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]

最佳答案

根据导航任务的不同,“角度”、“方向”、“航向”和/或“方位”等术语可能有不同的含义。

bearing() 函数的文档谈到了

the initial bearing (direction; azimuth) to go from point p1 to point p2.

因此,geosphere::bearing() 函数传递的方向是方位角(角度)。显然,这些以度数 -180 ... 180 表示。这是您在面向 北方时转向的相对方向。这很重要,因为它假设您正在向北,因此您的目的地(或点 p2)可以通过初始左转/右转到达,即负方位角反射(reflect)左转,正方位角显示您的目的地在您的右手边。

当您谈论标准化初始航向(北:= 000 或 360 度)时,您的引用不是您的方向,而是您的航向跟随。例如,船舶或飞机飞行特定航线时必须校正风偏移。我不会在这里详细介绍航向和航向( scapy 或飞机指向的方向)之间的区别。但是,为了确定航向,需要从“北向 360”中减去左转(负方位角),同时将正方位角添加到(北向解释为 0)。

要从数学上解决这个问题,您可以采用长角度数学方法(参见 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

关于r - 在 R 中的 geosphere 包中,为什么方位角不是 0-360 度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51030060/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com