如何通过OSMnx获取城市污水管网数据?解决momepy连接异常问题
污水管网数据获取与图构建问题的实用解法
一、OSM里找污水管网数据的正确姿势
你之前用的ox.graph_from_place是针对道路网的接口,要获取污水管网得换用OSM基础设施标签查询:
- 用OSMnx的
ox.geometries_from_place函数,指定污水管网专属标签,代码示例:tags = {'man_made': 'sewer'} # 可扩展添加'pipe'(管道)、'manhole'(检查井)等细分标签 sewer_gdf = ox.geometries_from_place("目标城市名", tags) - 查询有可用数据的城市:
- 去OSM Taginfo搜索
man_made=sewer,切换到「地区」标签页查看各区域的数据覆盖率; - 优先选择欧洲、北美、东亚的大城市(如柏林、阿姆斯特丹、纽约),这类区域的OSM基础设施数据完善度更高。
- 去OSM Taginfo搜索
二、修复momepy管网连接还原错误
momepy默认的转图逻辑对非道路类管线的连接判断容易出错,试试这些优化步骤:
- 预处理SHP数据:
- 先确保相邻管线的端点坐标完全重合,用GeoPandas做容差匹配:
import geopandas as gpd # 容差设为0.5米(可根据数据精度调整) cdmx_canal['geometry'] = cdmx_canal.buffer(0.5).unary_union.boundary
- 先确保相邻管线的端点坐标完全重合,用GeoPandas做容差匹配:
- 调整momepy转换参数:
- 启用
check_snap强制匹配端点,或改用对偶图模式(更适配管网拓扑):graph = momepy.gdf_to_nx(cdmx_canal, approach='primal', check_snap=True, snap_tolerance=0.5)
- 启用
- 手动修正拓扑:
- 若仍有错误,用NetworkX的
add_edge/remove_edge手动调整连接;也可先在QGIS中完成拓扑检查与修复,导出干净的SHP后再转换。
- 若仍有错误,用NetworkX的
三、OSM数据不足时的替代来源
如果目标城市OSM数据缺失,可尝试这些渠道:
- 官方开放数据平台:如美国EPA的流域数据库、欧盟INSPIRE门户;
- 学术数据集:例如ResearchGate上的Global Sewer Database,包含多个城市的管网数据;
- 当地政府平台:不少城市会在官方开放数据网站发布污水处理系统的GIS数据,注意确认学术使用许可。

内容的提问来源于stack exchange,提问作者DJ Boltzmann
相关产品推荐
相关产品推荐

