You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为OSMnx地图添加交互式Folium背景及多路径可视化问题

解决OSMnx绘制k条最短路径到Folium地图的问题

核心问题分析

  1. ox.k_shortest_paths返回的是生成器对象,直接转列表需正确迭代;若转后为空,大概率是起点/终点无连通路径,或k值超过实际存在的路径数。
  2. ox.plot_route_folium仅支持单条路径输入,直接传入多条路径列表会触发TypeError,需循环叠加每条路径到同一地图。

分步解决方案

1. 确保生成有效路径列表

先验证节点连通性,再生成并转换k条路径为列表:

import osmnx as ox
import folium

# 加载路网数据
G = ox.graph_from_place("Shanghai, China", network_type="drive")
# 定义起点、终点节点(替换为你的实际节点ID)
orig = 123456789
dest = 987654321

# 先检查节点是否连通
if not ox.has_path(G, orig, dest):
    raise ValueError("起点和终点无连通路径")

# 生成3条最短路径,转换为列表(weight可选length/time等)
k_routes = list(ox.k_shortest_paths(G, orig, dest, k=3, weight="length"))

# 检查路径数量,避免索引越界
if len(k_routes) < 3:
    print(f"仅找到{len(k_routes)}条路径,已自动调整k值")

2. 叠加多条路径到同一Folium地图

初始化基础地图后,循环调用plot_route_folium并指定route_map参数实现叠加,同时设置不同颜色区分路径:

# 用第一条路径创建基础交互式地图
route_map = ox.plot_route_folium(G, k_routes[0], route_color="#1f77b4", route_width=6)

# 叠加第二条路径
ox.plot_route_folium(G, k_routes[1], route_map=route_map, route_color="#ff7f0e", route_width=6)

# 叠加第三条路径
ox.plot_route_folium(G, k_routes[2], route_map=route_map, route_color="#2ca02c", route_width=6)

# 保存地图到本地HTML文件
route_map.save("3_shortest_routes.html")

常见问题排查

  • 路径列表为空:检查orig/dest是否为图中有效节点ID,或调用ox.get_nearest_node()将经纬度转换为节点ID;同时确认路网类型(如步行/驾车)是否符合需求。
  • TypeError:禁止直接将多条路径列表传入plot_route_folium,必须单条路径迭代处理。
  • 地图样式问题:可通过plot_route_folium的route_opacity、tiles参数调整背景底图(如tiles="Stamen Terrain")和路径透明度。

内容的提问来源于stack exchange,提问作者mg g

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 20:54:30