使用OSMnx提取曼哈顿多边形路网信息时触发ValueError问题咨询
报错根因判定
该报错并非由生成的city对象为MultiPolygon类型导致,核心触发原因是传入ox.graph_from_polygon()的参数类型不匹配。
具体原因拆解
ox.geocode_to_gdf()传入地名列表['Manhattan, New York, USA']时,返回值是一个结构化的GeoDataFrame表格,而非ox.graph_from_polygon()所要求的单个Polygon/MultiPolygon几何对象。- OSMnx在校验传入的范围参数时,会尝试对入参做布尔值判断;由于入参是包含pandas Series结构的GeoDataFrame,直接触发了pandas库“Series真值判断不明确”的内置报错逻辑,即提示中的
ValueError。 - 补充说明:OSMnx当前版本完全支持将MultiPolygon作为路网提取的范围参数,即便提取出的曼哈顿边界是MultiPolygon类型,也不会触发该类报错。
代码修正方案
- 从返回的GeoDataFrame中提取单值几何对象作为入参,修改示例:
import osmnx as ox import networkx as nx # 补充缺失的networkx导入 # 传入列表查询得到GeoDataFrame city = ox.geocode_to_gdf(['Manhattan, New York, USA']) # 从GeoDataFrame中提取对应几何对象 city_poly = city.geometry.iloc[0] # 传入几何对象提取路网 G = ox.graph_from_polygon(city_poly, network_type='drive', simplify=True) G_nx = nx.relabel.convert_node_labels_to_integers(G) nodes, edges = ox.graph_to_gdfs(G_nx, nodes=True, edges=True)
- 额外排查项:原代码缺失
import networkx as nx的导入步骤,运行到图重标号环节时会触发名称未定义的报错,需补上对应导入。
内容的提问来源于stack exchange,提问作者DPM
相关产品推荐
相关产品推荐

