如何无需生成绘图简便计算两个GPS坐标点之间的通行时间
OSMnx通行时间计算及性能、替代方案解答
两点通行时间的极简计算方案
OSMnx本身支持无绘图的纯数值通行时间计算,不需要用到示例笔记本里的绘图相关逻辑,核心流程如下:
- 调用
osmnx.graph_from_*系列函数加载目标区域路网,指定你需要的通行模式(比如network_type='drive'对应机动车通行),默认开启simplify=True参数精简路网冗余节点即可,全程不会触发任何绘图渲染。 - 加载路网后依次调用
osmnx.add_edge_speeds()补全路段默认限速、osmnx.add_edge_travel_times()计算单条路段的通行时间,两个函数均为纯数值计算,无额外渲染开销。 - 用
osmnx.nearest_nodes()将你手头的GPS坐标匹配到路网最近节点,再调用osmnx.shortest_path()并指定weight='travel_time',将返回路径的所有路段通行时间求和即可得到总行程耗时。
国家尺度1万点计算的性能瓶颈说明
直接加载全量国家级别路网会存在明显性能问题:
- 完整国家路网加载到内存后占用极高,以欧洲尺度为例,全量路网加载后内存占用可达20G以上,单路径计算耗时会比城市尺度高1-2个数量级,1万次计算很容易出现内存溢出或耗时过长的问题。
- 你实际的计算场景最远路径仅100km,完全不需要加载全量国家路网:可以每次以「当前待计算点+目标指定点」的外包矩形为范围加载路网,计算完成后释放内存再处理下一个点,内存占用可降至百兆级别,计算效率提升非常明显。
- 如果需要批量处理,可先裁剪出所有待计算点覆盖的最大区域路网,再调用networkx/igraph的批量最短路径接口,普通16G内存的消费级机器可在数小时内完成1万次计算。
本地国家级别pbf的替代使用方案
你手头的本地pbf文件完全可以用于其他更轻量化的路径计算方案:
- 用
routingpy库可直接读取本地pbf文件执行批量路径计算,内存占用比OSMnx低40%以上,不需要额外搭建服务。 - 本地预处理pbf为OSRM路网文件,搭建轻量化的本地OSRM后端,通过Python发送请求获取通行时间,1万次计算仅需十几分钟即可完成,性能远高于纯Python库实现。
- 用
pandana库将pbf路网转换为压缩网络结构,批量计算多点到单点的通行时间效率比OSMnx高2-3倍。
内容的提问来源于stack exchange,提问作者Trag0
相关产品推荐
相关产品推荐

