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

从OSMnx图中移除的边在绘图或导出时仍显示,原因何在?

问题

使用OSMnx移除图中指定边后,G[u][v]触发KeyError确认边已删除,但绘图或导出GeoPackage时该边仍可见。已尝试以下操作:

  • 移除前绘图高亮目标边,确认选中的是预期删除的边
  • 将图转为GeoDataFrame删除对应行后转回图,问题依旧

相关代码:

import osmnx as ox
import utm

# 用于下载图的点
point = {'lat':48.1540155043, 'lon':11.5623458228}

# 将点的经纬度转换为UTM米制坐标
point_utm = utm.from_latlon(point['lat'], point['lon'])

# 下载以该点为起点的路网
G = ox.graph_from_point((point['lat'], point['lon']), dist = 1000, network_type = 'walk')

# 将路网投影到UTM坐标系
G_projected = ox.project_graph(G)

# 识别距离该点最近的边
nearest_edge = ox.nearest_edges(G_projected, point_utm[0], point_utm[1])

# 最近边的u和v值
u = nearest_edge[0]
v = nearest_edge[1]

# 根据u和v值移除最近边
G_projected.remove_edge(u, v)
解决方案

问题根源在于OSMnx的步行路网默认是无向结构,每条边会以u->v和v->u两个方向双向存储。你仅删除了其中一个方向的边,反向边仍存在,因此绘图或导出时该边会被继续渲染。

两种解决方式:

  1. 使用OSMnx内置的双向删除函数,一次性移除两个方向的边:
# 替换原有的remove_edge调用
ox.utils_graph.remove_edge_bidirectional(G_projected, u, v)
  1. 手动删除两个方向的边:
G_projected.remove_edge(u, v)
G_projected.remove_edge(v, u)

验证方法:执行删除后,检查G_projected.has_edge(u, v)和G_projected.has_edge(v, u)均返回False,此时再绘图或导出,目标边就不会显示了。

内容的提问来源于stack exchange,提问作者Howdy Stargazer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:42:11