我有一套纬度和经度,所以这是动物及时移动的数据。我想要做的是计算转弯角度,即它在每次运动之间转动的角度。所以说我有点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
它们是十进制度
答案 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
编辑:我必须从函数中移除第一个/最后一个角度,这是我在其他地方使用此函数后所做的事情。应该是现在。 :)
此外,包adehabitatLT
和argosfilter
包含计算曲目方向和角度的函数。
答案 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的足够语法来举例。