R - 在一段时间后计算地理位置

时间:2016-10-22 20:33:07

标签: r geosphere

我有两个A点和B点,它们各自的纬度和经度。我也有一段时间从A点到达B点。假设需要1小时,从A开始假设驾驶员直奔B点并在行程中保持相同的速度。 0.6小时后,我想知道司机的当前位置(按纬度和经度)。包geosphere或任何其他允许我这样做的包中是否有任何功能?感谢

1 个答案:

答案 0 :(得分:2)

我认为你的问题更好,更简洁地表达为"如何找到两个位置之间的大圆路线(定义为纬度/经度坐标),然后以任意百分比找到该点的坐标那条路上的路?"。

首先让我们创建一对任意位置,称为a和b:

df <- data.frame(locations = c("a","b"),
                 lon =runif(2,min = -180, max = 180),
                 lat = runif(2,min = -90, max = 90))

现在,我们来看看它们之间的大圆路线。我们不需要路线本身,只需要整条路线的距离和初始方向。

require(geosphere)

# get the distance of a great circle route between these points
track.dist = distHaversine(p1 = df[1,c("lon","lat")],
                                   p2 = df[2,c("lon","lat")])

然后得到初始方位,我们将稍后使用:

track.init.bearing = bearing(p1 = df[1,c("lon","lat")],
                         p2 = df[2,c("lon","lat")])

下一步是弄清楚我们在经过路线的任意部分的位置:

# figure out where we are at an arbitrary time
current.location.fraction = runif(1,min = 0, max = 1)
# get the distance
current.location.dist = current.location.fraction * track.dist

current.location = as.data.frame(destPoint(p = df[1,c("lon","lat")],
                                           b = track.init.bearing,
                                           d = current.location.dist))

最后一步是检查我们是沿路线距离的正确分数:

check.dist = distHaversine(p1 = df[1,c("lon","lat")],
                           p2 = c(current.location$lon,
                                  current.location$lat))

print(current.location.fraction)
print(check.dist / track.dist)

在我的测试中,最后两个数字通常在1%之内,这表明这并不太糟糕。

因此,您可以从current.location数据框中提取结果。