在道路导航中,我们有了街道网络地图。轨迹/GPS 数据必须与街道相匹配才能进行导航,因为 GPS 读数提供纯粹的纬度和经度坐标,但我们想知道车辆行驶的具体道路。
我首先尝试了一种简单的方法来匹配点,将每个点独立地匹配到最近的路段。如果没有道路,只需扩大缓冲距离范围即可。它不准确,因为 GPS 数据本身就有噪声,而且道路可能很复杂。,你很快就能找到这篇 StackOverflow 帖子,它指向一个名为LeuvenMapMatching的 Python 包。
1. 如何使用库
(1)轨迹数据
我目前正在使用Pneuma,从中可以提取大量的轨迹。数据应包含表示位置的元组列表。这里我以2018年10月30日1区的数据为例。
基本整理后的数据如下所示:
选择一个进行演示,您可以复制本文末尾的数组。
gps_data= [group[['lat', 'lon', ]].to_numpy() for _, group in df.groupby('track_id')]
traj= gps_data[30]
(2) 图(街道网络)
您需要图表或街道网络进行匹配;我在这篇文章中写了如何获取它。在这里,我使用边界框来创建图形。
import osmnx as ox
points = [[37.976879,23.735855],
[37.982292,23.731264],
[37.984309,23.734908],
[37.978052,23.739889]
]
lats = [point[0] for point in points]
lons = [point[1] for point in points]
north, south = max(lats), min(lats)
east, west = max(lons), min(lons)
import osmnx