给定两点在特定时间找到gps位置?

Posted

技术标签:

【中文标题】给定两点在特定时间找到gps位置?【英文标题】:Finding a gps location at a certain time given two points? 【发布时间】:2016-07-27 17:43:07 【问题描述】:

如果我有两个已知位置和一个已知速度,我如何计算距离 d(以公里为单位)的当前位置?

例如,给定:

ES4236 中的两个 gps 位置:

37.783333, -122.416667   # San Francisco
32.715, -117.1625        # San Diego

1km/min直线行驶(忽略高度)

如何在一定距离找到gps坐标?类似的SO question使用geopy中的VincentyDistance根据方位和距离计算下一个点。

我猜,更具体地说:

如何使用geopy 计算两个gps 点之间的方位角?

使用 VincentyDistance 通过方位和距离获取下一个 gps 点,我如何知道我是否已到达目的地,或者是否应该继续前进?它不需要完全在目的地上才能被视为到达。也许任何距离目的地 0.5 公里半径的点都被认为是“到达”。

即,

import geopy

POS1 = (37.783333, -122.416667)     # origin
POS2 = (32.715, -117.1625)          # dest

def get_current_position(d):
    # use geopy to calculate bearing between POS1 and POS2
    # then use VincentyDistance to get next coord

    return gps_coord_at_distance_d

# If current position is within .5 km of destination, consider it 'arrived'
def has_arrived(curr_pos):
    return True/False

d = 50     # 50 km
print get_current_position(d)
print has_arrived(get_current_position(d))

【问题讨论】:

重复***.com/questions/24427828/… @James 啊,谢谢,但这计算的是向北 1 公里(按方位)而不是向第二点的距离。此外,我在 geopy 中找不到任何关于 VincentyDistance 的文档,所以我很难确定它是否可以基于两点进行计算。 【参考方案1】:

好的,我想我会回到这个问题,并尽我所能,因为它还没有看到任何其他解决方案。不幸的是,我现在无法测试代码,但我相信使用 geopy 和geographiclib 可以解决您的问题。来了。

从终端(可能使用 sudo)

pip install geographiclib
pip install geopy

现在使用 Python

获取当前位置

import geographiclib
from geopy import geopy.distance

# Get the first azimuth, which should be the bearing
bearing = geographiclib.WGS84.Inverse(37.783333, -122.416667, 32.715, -117.1625)[2]


# Now we use geopy to calculate the distance over time
dist = geopy.distance.VincentyDistance(kilometers = 1)
san_fran = geopy.Point(37.783333, -122.416667)

print dist.destination(point=san_fran, bearing=bearing)

到货了

def has_arrived(d):
    return geopy.distance.vincenty(curr_pos, (32.715, -117.1625)).kilometers < .5

就像我说的,很遗憾我无法对此进行测试,但我相信这是正确的。轴承计算可能会有一些单位差异:it calculates bearing off of North as seen here。抱歉,如果这不完全正确,但就像我说的那样,因为我想我不妨把我知道的东西扔掉,所以还没有收到回复。

【讨论】:

谢谢!代码中有一些小错误,但总的来说你是正确的。你认为你可以帮助has_arrived()吗?给定一个距离(即 km=100),我如何确定它是否在目标半径范围内?另外,我可以使用 VicentyDistance 指定米而不是公里吗? 很遗憾,您无法指定仪表。我会将 has_arrived 添加到答案中 出了点问题。 dist.destination(point=san_fran, bearing=bearing) 给了我下一个 gps 指向错误的方向。如果我把它改成des.destination(point=san_diego, bearing=bearing),那么它会立即跳转到目的地。 抱歉,原来我的方位不对。 s12 不是我想的那样。

以上是关于给定两点在特定时间找到gps位置?的主要内容,如果未能解决你的问题,请参考以下文章

通过 GPS 位置获取城市的 WikiData 标识符

给定一条路线,我们如何找到它的开始和结束 GPS 位置?

Scintilla:如何在给定特定字符位置的情况下找到字节位置

如何将像素位置转换为 GPS 点?

GPS 追踪 - 点太远

使用 GPS Provider 在地图上使用设备的当前位置绘制路线