我有两个点 A 和 B,它们各自的纬度和经度。我也有时间从 A 点到 B 点。假设需要 1 小时,从 A 假设司机直接到 B 点并在旅途中保持相同的速度。0.6 小时后,我想知道司机的当前位置(按经纬度)。包中是否有任何功能geosphere
或允许我这样做的任何其他包?谢谢
问问题
112 次
1 回答
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
数据框中提取结果。
于 2016-10-22T21:59:39.730 回答