从纬度和经度计算角度

时间:2012-06-25 06:30:19

标签: r latitude-longitude angle

我有一套纬度和经度,所以这是动物及时移动的数据。我想要做的是计算转弯角度,即它在每次运动之间转动的角度。所以说我有点1,点2和点3,纬度和经度值对应每个点(动物从点1移动到点2到点3,依此类推),我想计算这3点之间的角度,点2是中间点。我该怎么办?我的操作系统是Windows,我使用R进行分析。

所以这是我的样本数据:

longitude                       latitude
36.89379547                0.290166977
36.89384037                0.290194109
36.88999724                0.286821044
36.88708721                0.288339411
36.88650313                0.29010232
36.88563203                0.289939416
36.88545224                0.290924863

它们是十进制度

2 个答案:

答案 0 :(得分:9)

使用trackAzimuth中的maptools功能:

library(maptools)

trackAngle <- function(xy) {
    angles <- abs(c(trackAzimuth(xy), 0) -
                  c(0, rev(trackAzimuth(xy[nrow(xy):1, ]))))
    angles <- ifelse(angles > 180, 360 - angles, angles)
    angles[is.na(angles)] <- 180
    angles[-c(1, length(angles))]
}

trackAzimuth函数是gzAzimuth周围的简单循环包装器。有关计算球体方向的参考,请参阅?gzAzimuth

使用您的数据:

x <- read.table(text = "longitude                       latitude
36.89379547                0.290166977
36.89384037                0.290194109
36.88999724                0.286821044
36.88708721                0.288339411
36.88650313                0.29010232
36.88563203                0.289939416
36.88545224                0.290924863", header = TRUE)

trackAngle(as.matrix(x))
[1]  10.12946 111.17211 135.88514  97.73801  89.74684
编辑:我必须从函数中移除第一个/最后一个角度,这是我在其他地方使用此函数后所做的事情。应该是现在。 :)

此外,包adehabitatLTargosfilter包含计算曲目方向和角度的函数。

答案 1 :(得分:0)

您的数据点只在很小的范围内变化。我们可以看一下地球表面的一小片,并假装它是平面的,二维的。您必须弄清楚多少公里,米,英里,无论您最喜欢的单位是多少,对应于一个纬度,以及一个经度。后者取决于纬度 - 它与赤道附近的纬度尺度相同,但是如果你站在北极臂的长度范围内,一步将带你走过五十度。设置x,y坐标,其中x = 0表示经度36.88000,y = 0表示纬度0.29000。

所以,现在你有一系列(x,y)点。取每个点到下一个点的差异:P2-P1,P3-P2等。这些可称为“位移​​矢量”,但其他术语可用于其他领域而不是我来自的位置。称它们为V1,V2等。使用点积和范数:点(V1,V2)=幅度(V1)*幅度(V2)* cos(a)其中a是V2偏离V1方向的角度。重复V3和V2,依此类推。

R拥有完成此操作的所有工具,但我不知道R的足够语法来举例。