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

如何用Python直接生成.pbf文件?解决OSM文件存储占用过大问题

直接用Python写入OSM PBF文件的解决方案

可以使用pyosmium(libosmium的Python绑定)实现直接读取源OSM数据(支持.osm或.pbf格式)、编辑元素后直接写入.pbf文件,完全跳过中间体积庞大的.osm文件,既节省硬盘空间,处理效率也更高。

实现步骤

  1. 安装pyosmium
pip install osmium
  1. 示例代码(读取+编辑+直接写入PBF)
import osmium as o

class DataHandler(o.SimpleHandler):
    def __init__(self, writer):
        super().__init__()
        self.writer = writer

    def node(self, node):
        # 在这里编写你的节点编辑逻辑,比如修改/添加标签
        modified_node = o.Node(node)
        modified_node.tags.add("processed", "true")
        self.writer.add_node(modified_node)

    def way(self, way):
        # 编写你的道路编辑逻辑
        modified_way = o.Way(way)
        modified_way.tags.add("processed", "true")
        self.writer.add_way(modified_way)

    def relation(self, rel):
        # 编写你的关系编辑逻辑
        modified_rel = o.Relation(rel)
        modified_rel.tags.add("processed", "true")
        self.writer.add_relation(modified_rel)

if __name__ == "__main__":
    # 初始化PBF写入器,指定输出文件路径
    with o.SimpleWriter("output.osm.pbf") as writer:
        handler = DataHandler(writer)
        # 读取源数据文件(支持.pbf或.osm格式)
        handler.apply_file("input.osm.pbf")

关键说明

  • SimpleWriter 是pyosmium专门用于写入OSM数据的类,默认支持PBF格式(文件后缀为.osm.pbf时自动识别)。
  • 处理过程采用流式操作,不会将整个OSM文件加载到内存,内存占用可控,适合处理大型数据集。
  • 所有编辑操作在内存中完成后直接写入PBF,完全避免生成中间.osm文件,解决硬盘空间不足的问题。

内容的提问来源于stack exchange,提问作者M.Dara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:31:09