首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R的地球圈封装中,为什么没有0-360度的方位?

在R的地球圈封装中,为什么没有0-360度的方位?
EN

Stack Overflow用户
提问于 2018-06-25 18:47:51
回答 1查看 1.2K关注 0票数 3

当我使用bearing函数在geosphere软件包中计算各点之间的方位时,得到的轴承跨度为-180度- 180度。然而,基于geosphere软件包文档,我预计轴承的跨度为0-360度.这里引用了文档中的一句话:

方向以度表示(北=0和360,东= 90,Sout = 180,西= 270度)。

我遗漏了什么?

下面是一个小例子:

代码语言:javascript
复制
# 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]
EN

回答 1

Stack Overflow用户

发布于 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

代码语言:javascript
复制
course <- (b + 360) %% 360 # add full circle, i.e. +360, and determine modulo for 360
pts$BEARING <- b
pts$COURSE  <- course
pts
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51030060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档