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

Python为OSM图指定路径边着色时返回空列表的问题求解

问题排查

你的代码存在3个核心逻辑错误,直接导致ec列表为空:

  • 循环内每次执行ec = ['r' for ...]时,会直接用仅包含当前节点对匹配边的新列表,完全覆盖之前初始化的全白边颜色列表,根本没有保留非路径边的颜色配置。
  • 路径序列node_route里存在多段连续重复节点,这类节点对对应的自环边在常规OSM路网中不存在,最后一轮循环匹配不到任何边时,会直接把ec赋值为空列表。
  • 额外兼容问题:如果是无向路网,你只判断了u为前序节点、v为后序节点的单向匹配,会漏匹配存储方向和路径方向相反的边。
修正代码
# 第一步:清洗路径,移除连续重复的无效节点
clean_route = []
for n in node_route:
    if not clean_route or n != clean_route[-1]:
        clean_route.append(n)

# 第二步:生成待高亮的边集合,默认兼容无向图双向匹配
target_edges = set()
for i in range(len(clean_route) - 1):
    u, v = clean_route[i], clean_route[i+1]
    target_edges.add((u, v))
    target_edges.add((v, u))  # 有向图不需要高亮反向边可删除此行

# 第三步:按边顺序生成颜色列表,不再整体覆盖
ec = []
for u, v, k in G_map.edges(keys=True):
    ec.append('r' if (u, v) in target_edges else 'w')

# 绘图
fig, ax = ox.plot_graph(
    G_map,
    node_color='r',
    node_edgecolor='k',
    node_size=40,
    node_zorder=3,
    edge_color=ec,
    edge_linewidth=1
)

注意:如果使用的是单向通行的有向路网,删除代码中添加反向边到target_edges的行即可,避免高亮错误的逆行边。

内容的提问来源于stack exchange,提问作者Beatriz Santos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.10 16:15:45