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

使用OSMnx的graph_to_gdfs函数报错,简单示例也无法运行

问题解决:OSMnx调用graph_to_gdfs时出现TypeError: OutEdgeView.__call__() got an unexpected keyword argument 'keys'

问题原因

该错误是NetworkX版本与OSMnx版本不兼容导致的:

  • NetworkX 3.0及以上版本重构了图边的API,不再支持keys=True这个关键字参数,但你当前使用的OSMnx版本仍在沿用旧版NetworkX的调用语法。

解决方案

方案1:降级NetworkX到2.x系列

这是最直接的修复方式,安装适配旧版OSMnx的NetworkX稳定版本:

pip install networkx==2.8.8

方案2:升级OSMnx到最新版本

新版OSMnx已经适配了NetworkX 3.x的API,升级后即可解决该问题:

pip install --upgrade osmnx

方案3:手动修改OSMnx源码(不推荐)

若不想改动版本,可以修改osmnx/convert.py文件中的对应代码:
找到第65行的代码:

u, v, k, data = zip(*G.edges(keys=True, data=True))

替换为适配NetworkX 3.x的写法:

# 适配NetworkX 3.x的边数据获取逻辑
edge_tuples = []
for (u, v, k), data in G.edges.items(data=True):
    edge_tuples.append((u, v, k, data))
u, v, k, data = zip(*edge_tuples)

修改后保存文件,重新运行代码即可。

验证测试

用你提供的示例代码测试,修复后应该能正常输出节点和边的GeoDataFrame:

import networkx as nx
import osmnx as ox

# 示例图
G = nx.DiGraph()
G.add_node(1, y=37.77, x=-122.42)  # 旧金山坐标
G.add_node(2, y=37.76, x=-122.43)
G.add_edge(1, 2, weight=0.5)
G.graph['crs']='WGS84'

# 转换为GeoDataFrame
gdf_nodes, gdf_edges = ox.utils_graph.graph_to_gdfs(G, nodes=True, edges=True)

print(gdf_nodes)
print(gdf_edges)

内容的提问来源于stack exchange,提问作者Pablo Lotito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:33:15