使用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
相关产品推荐
相关产品推荐

