在给定两点的某个时间找到一个GPS位置?

时间:2016-07-27 17:43:07

标签: python python-2.7 gps geolocation coordinate-systems

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

例如,给定:

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点,我怎么知道我是否到达目的地,或者我是否应继续前进?它不需要准确地在目的地上被认为是到达。也许距离目的地半径为.5公里的任何一点都会被认为是#39;

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))

1 个答案:

答案 0 :(得分:0)

好的,我想我会回到这个问题并给出我最好的机会,因为它没有看到任何其他解决方案。不幸的是我现在无法测试代码,但我相信使用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。对不起,如果这不完全正确,但就像我说的那样,因为我没有收到回应,因为我想我也可以投入我所知道的。