簡體   English   中英

在R中的地球包裝中,為什么軸承不處於0-360度?

[英]In geosphere package in R, why aren't bearings in 0-360 degrees?

當我使用geosphere軟件包中的bearing函數計算點之間的bearing ,所得的方位跨度為-180-180度。 但是,根據geosphere包裝文檔 ,我希望軸承跨度為0-360度。 這是文檔中的報價:

方向以度數表示(北= 0和360,東= 90,南距= 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]

根據導航任務,諸如“角度”,“方向”,“航向”和/或“軸承”之類的術語可能具有不同的含義。

bearing()函數的文檔講述了

從點p1到點p2的初始方位(方向;方位角)。

因此,函數geosphere::bearing()傳遞的方向是方位角(角度)。 顯然,這些都是在度-180 ... 180.也就是說朝北當你打開相對方向來表示。 這一點很重要,因為它假定你正在尋找北,因此您的目的地(或點P2)可以與初始左/右轉即可到達,即負方位反映左轉,正方位顯示你在你的右手目的地側。

當您談論標准化的初始航向(北:= 000或360度)時,參考不是​​您看的樣子 ,而是您遵循的航向。 例如,船舶或飛機在必須修正風偏的同時飛行特定路線。 在此,我不再詳細介紹航向和航向(船或飛機機頭指向的方向)之間的區別。 但是,為了確定航向,需要從“北向360”減去左轉彎(負方位角),同時將正向方位角添加到“北向360”。

要用數學方法解決此問題,可以采用長角法(請參閱此基於atan的解決方案 )。

我們可以通過添加一個“完整的圓”(360度)來強制一個正號,然后使用取模運算符來檢查我們已經超出北標(360)了多少。 例如90 + 360 = 450,其中450%modulo-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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM