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



给定 2 个开始和停止 GPS 坐标(即点 #1:39.5210981,-76.6194347,点 #2:39.6206699,-76.554627(,我使用 OpenStreetMap 拥有这 2 个起点和终点 GPS 坐标之间的最短路线的所有 GPS 坐标点。

问题是我如何以每 30 秒间隔(即 45 英里/小时(从给定路线迭代一组新的 GPS 坐标(即 1 英里/小时(?

我试图使用另一个堆栈溢出用户给出的以下代码计算两点之间的距离:

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

但是对于某些点来说,它看起来很不合时宜,此外,如果某些点非常接近,那么我也偏离了目标。

我建议为此使用外部库,如果您关心在远距离上准确地做到这一点,则很难获得正确的数学运算。 我以前使用过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)

这在短距离上给出了一条大部分直线,但在较长的距离上曲线会很明显

最新更新