如何在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
相关产品推荐
相关产品推荐

