3

我有一组 latitudes 和 longitudes ,所以这是动物随时间移动的数据。我想做的是计算转动角度,即每次运动之间转动的角度。所以说我有点 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

它们是十进制度

4

2 回答 2

12

使用中的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包含计算轨道方向和角度的函数。

于 2012-06-25T07:51:33.863 回答
0

您的数据点仅在很小的范围内变化。我们可以看一小块地球表面,并假装它是平面的二维的。您必须计算出多少公里、米、英里,无论您最喜欢的单位是多少,对应于一个纬度和一个经度。后者取决于纬度——它与赤道附近的纬度比例相同,但如果你站在离北极一臂远的地方,一步将带你穿过 50 度。设置 x,y 坐标,其中 x=0 为经度 36.88000,y=0 为纬度 0.29000。

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

R 拥有执行此操作的所有工具,但我对 R 的语法了解不多,无法举出例子。

于 2012-06-25T06:54:10.590 回答