OSMnx无法提取智利普罗维登西亚河流,报错无节点,求解决方法
解决OSMnx提取智利普罗维登西亚河流数据的问题
核心问题:用错了提取函数
你当前使用的ox.graph_from_place()是专门用于提取路网图的函数,它只会识别带highway标签的道路要素,并构建包含节点和边的路网结构。而河流属于OSM中的线性地理要素,不属于路网范畴,所以这个函数找不到对应的节点,才会报错Found no graph nodes within the requested polygon。
正确的解决方案:使用地理要素提取函数
改用ox.geometries_from_place()来提取河流这类地理要素,代码示例:
import osmnx as ox import matplotlib.pyplot as plt # 提取普罗维登西亚地区waterway类型为river/stream的要素 river_gdf = ox.geometries_from_place('Providencia, Chile', tags={'waterway': ['river', 'stream']}) # 绘制结果 fig, ax = plt.subplots() river_gdf.plot(ax=ax, color='blue') plt.show()
针对你的问题的具体解答
- 过滤器调整:先确认目标河流在OSM中的实际标签。部分中小型河流会被标记为
stream而非river,你可以查看该河流的OSM详情,确认其waterway属性值后调整过滤器。 - 提取区域可用的过滤器值:可以先提取该区域所有带
waterway标签的要素,查看所有可能的取值:
import osmnx as ox # 提取所有waterway相关要素 all_waterway = ox.geometries_from_place('Providencia, Chile', tags={'waterway': True}) # 打印所有唯一的waterway取值 print(all_waterway['waterway'].unique())
运行后就能得到该区域所有可用的waterway类型,根据结果调整过滤器即可。
内容的提问来源于stack exchange,提问作者PerroNoob
相关产品推荐
相关产品推荐

