Python 如何以给定速度在2个gps坐标之间迭代gps点

Python 如何以给定速度在2个gps坐标之间迭代gps点,python,gps,Python,Gps,给定两个启动和停止gps坐标(即点#1:39.5210981,-76.6194347,点#2:39.620669,-76.554627),我使用OpenStreetMap获得了这两个启动和停止gps坐标之间最短路线的所有gps坐标点 问题是,我如何以给定路线每1秒的速度(即30英里/小时或45公里/小时)迭代一组新的gps坐标 我尝试使用另一个stackoverflow用户给出的代码计算两点之间的距离: def midpoint(lat1, long1, lat2, long2, per):

给定两个启动和停止gps坐标(即点#1:39.5210981,-76.6194347,点#2:39.620669,-76.554627),我使用OpenStreetMap获得了这两个启动和停止gps坐标之间最短路线的所有gps坐标点

问题是,我如何以给定路线每1秒的速度(即30英里/小时或45公里/小时)迭代一组新的gps坐标

我尝试使用另一个stackoverflow用户给出的代码计算两点之间的距离:

def midpoint(lat1, long1, lat2, long2, per):
     return lat1 + (lat2 - lat1) * per, long1 + (long2 - long1) * per

但是对于某些点来说,它看起来非常不正确,而且,如果某些点非常接近,那么我也不正确。

我建议使用外部库来实现这一点,如果你关心在大距离上精确地完成这一点,那么很难获得正确的数学。我以前使用过
pyproj
,它公开了一个方法,其中说:

返回前后方位角,加上起始点(由lons1,lats1指定)和终点(由lons2,lats2指定)之间的距离

“方位角”是你头部到达该点的角度,距离以米为单位

它还公开了返回坐标的方法:

返回给定初始点经度(LON)和纬度(LAT)的端点的经度、纬度和后方位角,加上前方位角(az)和距离(dist)

我想你会想把这些放在一起是这样的:

import pyproj

# WGS-84 is the coordinate system used by GPS
wgs84_geod = pyproj.CRS('WGS 84').get_geod()

# I think I'm pulling these apart in the right order, but you'd want to check
src_lat, src_lon = 39.5210981,-76.6194347
dst_lat, dst_lon = 39.6206699,-76.554627

# how many meters between each point
delta = 45 * 1000 / 3600

# keep track of where we currently are
lat, lon = src_lat, src_lon
result = []

while True:
    # figure out which direction to go and how far away we are
    az, _, dist = wgs84_geod.inv(lon, lat, dst_lon, dst_lat)

    # are we done yet?
    if dist < delta:
        break

    result.append((lon, lat))

    # move at our speed towards our target
    lon, lat, _ = wgs84_geod.fwd(lon, lat, az, delta)
导入pyproj
#WGS-84是GPS使用的坐标系
wgs84_geod=pyproj.CRS('WGS 84')。get_geod()
#我想我把它们按正确的顺序分开了,但你要检查一下
src_lat,src_lon=39.5210981,-76.6194347
dst_lat,dst_lon=39.6206699,-76.554627
#每个点之间有多少米
增量=45*1000/3600
#跟踪我们目前的状况
lat,lon=src_lat,src_lon
结果=[]
尽管如此:
#找出我们要去的方向和距离
az,u,dist=wgs84_大地坐标inv(长、宽、深、深)
#我们做完了吗?
如果距离<增量:
打破
结果。追加((lon,lat))
#以我们的速度向我们的目标前进
lon,lat,u=wgs84_geod.fwd(lon,lat,az,delta)
这在短距离内给出了一条基本上是直线的曲线,但在较长距离内曲线会很明显