给出2个起点和终点gps坐标(即点#1:39.5210981,-76.6194347,点#2:39.6206699,-76.554627),我拥有所有2个起点和终点gps坐标之间最短路径的gps坐标点使用OpenStreetMap。
问题是如何从给定路线每1秒间隔以一组速度(即30 mph或45 km / h)迭代一组新的gps坐标?
我试图使用另一个stackoverflow用户给出的代码来计算两点之间的距离:
def midpoint(lat1, long1, lat2, long2, per):
return lat1 + (lat2 - lat1) * per, long1 + (long2 - long1) * per
但是对于某些要点,它看起来似乎很不合标准,此外,如果某些要点非常接近,那么我也没有要求。
答案 0 :(得分:0)
我建议为此使用外部库,如果您想在长距离上准确地进行数学计算,则很难正确地进行数学计算。我以前使用过pyproj
,它公开了一个Geod.inv
方法,内容为:
返回前后方位角,以及初始点(由lons1,lats1指定)和终点(由lons2,lats2指定)之间的距离。
“方位角”是您要达到该点的头的角度,距离以米为单位。
它还公开了Geod.fwd
用于返回坐标:
在给定初始点的经度(lons)和纬度(lats)以及正向方位角(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)
这会在短距离内产生大部分直线,但在长距离内会出现明显的曲线