[英]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.