使用pyrosm加载OSM网络节点与边时提示输入需为有效几何对象错误
问题原因
你遇到的报错是因为OSM原始PBF数据中存在零长度的无效几何对象,报错中的MULTILINESTRING所有线段的起止坐标完全一致,不符合Shapely几何对象的校验规则,属于pyrosm旧版本未做内置过滤的已知问题。
解决方案
- 方案1:指定网络类型过滤无效数据
调用get_network方法时明确传入network_type参数,过滤掉非目标路网的无效微型几何,示例代码如下:
import pyrosm # 获取测试数据集路径 fp = pyrosm.get_data("wisconsin") # 初始化OSM对象 osm = pyrosm.OSM(fp) # 指定拉取机动车路网,自动过滤无效几何 nodes, edges = osm.get_network(nodes=True, network_type="driving") print(f"Nodes {nodes} and edges {edges}")
常用的network_type可选值包括driving(机动车)、walking(步行)、cycling(骑行)、driving+service(含服务道路的机动车路网)。
- 方案2:手动校验过滤几何
如果需要拉取全量路网,可手动过滤无效几何后再关联节点:
import pyrosm fp = pyrosm.get_data("wisconsin") osm = pyrosm.OSM(fp) # 先拉取边数据 edges = osm.get_network(nodes=False) # 仅保留有效且长度大于0的几何 edges = edges[edges.geometry.is_valid & (edges.geometry.length > 0)] # 再根据边的起止点ID拉取对应节点 nodes = osm.get_nodes(node_ids=list(edges["u"].unique()) + list(edges["v"].unique()))
- 方案3:升级依赖库版本
该兼容性问题在pyrosm 0.6.1及以上版本中已经修复,可直接升级pyrosm和对应的Shapely依赖:
pip install --upgrade pyrosm shapely
内容的提问来源于stack exchange,提问作者Circonflexe
相关产品推荐
相关产品推荐

