如何用Python直接生成.pbf文件?解决OSM文件存储占用过大问题
直接用Python写入OSM PBF文件的解决方案
可以使用pyosmium(libosmium的Python绑定)实现直接读取源OSM数据(支持.osm或.pbf格式)、编辑元素后直接写入.pbf文件,完全跳过中间体积庞大的.osm文件,既节省硬盘空间,处理效率也更高。
实现步骤
- 安装pyosmium
pip install osmium
- 示例代码(读取+编辑+直接写入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
相关产品推荐
相关产品推荐

