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

如何在Python中从.osm.pbf文件提取所有节点的经纬度数据

解决方案

该需求完全可以实现,且可直接输出为Python原生列表、Pandas DataFrame等常用格式,方便后续处理。

推荐方案:使用Python pyosmium 库实现

这是目前处理OSM PBF格式最高效的Python工具之一,具体实现步骤如下:

1. 安装依赖

pip install osmium pandas

2. 提取经纬度的示例代码

import osmium
import pandas as pd

# 自定义OSM节点处理器
class NodeCoordExtractor(osmium.SimpleHandler):
    def __init__(self):
        super().__init__()
        # 存储所有节点经纬度的列表,属于Python原生格式可直接使用
        self.coord_list = []

    # 重写节点处理方法,每扫描到一个节点就自动触发
    def node(self, node):
        self.coord_list.append((node.location.lat, node.location.lon))

if __name__ == "__main__":
    # 替换为你本地存储的.osm.pbf文件路径
    pbf_file_path = "britain-latest.osm.pbf"
    extractor = NodeCoordExtractor()
    # 开始扫描解析PBF文件
    extractor.apply_file(pbf_file_path)

    print(f"成功提取{len(extractor.coord_list)}个节点的经纬度")
    
    # 可选:转换为Pandas DataFrame格式,适配数据分析场景,支持直接导出为csv、parquet等文件
    coords_df = pd.DataFrame(extractor.coord_list, columns=["lat", "lon"])
    # 如需保存到本地可取消注释下一行
    # coords_df.to_csv("uk_osm_node_coords.csv", index=False)

注意事项

  • 英国全量OSM PBF文件的节点数量极大,全量提取会占用数GB内存,若无需全量数据可提前对PBF文件做区域裁剪后再处理
  • 内存不足时可修改代码逻辑,边扫描节点边写入本地文件,无需将所有坐标暂存在内存中
  • 无需代码处理的场景下,也可直接使用osmium命令行工具导出坐标csv后再用Python读取,命令示例:osmium export 你的文件路径.osm.pbf -o coords.csv --output-format csv --add-field lat --add-field lon -f nodes

内容的提问来源于stack exchange,提问作者DRobins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 17:09:01