You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:27:03