将 OSM 数据从 Protobuf 格式解析为 GeoDataFrame 的 Python 工具。
项目描述
热解
Pyrosm是一个 Python 库,用于将 OpenStreetMap 数据从 Protocolbuffer 二进制格式 -files ( *.osm.pbf
) 读取到 Geopandas GeoDataFrames 中。Pyrosm 可以轻松地从 OpenStreetMap pbf 转储中提取各种数据集,包括例如道路网络、建筑物、兴趣点 (POI)、土地利用和自然元素。还支持完全自定义的查询,这使得可以使用更具体的过滤器解析来自 OSM 的数据。
Pyrosm易于使用,它提供了与OSMnx有点相似的用户界面。pyrosm 和 OSMnx 之间的主要区别在于,OSMnx 使用 OverPass API 通过 Internet 读取数据,而 pyrosm 从本地 OSM 数据转储中读取数据,这些数据可以从GeoFabrik 的网站下载。这使得更快地读取数据成为可能,从而允许例如相当有效地解析整个国家的街道网络(但是,请参阅警告)。
该库是通过牢记性能来开发的,因此,它主要是用 Cython(具有类似 C 性能的 Python)编写的,这使得它可能比解析 OpenStreetMap 数据的任何其他 Python 替代方案更快。Pyrosm 建立在另一个名为Pyrobuf的 Cython 库之上,它是 Google 的 Protobuf 库的更快的 Cython 替代品:与 Google 的带有 C++ 后端的版本相比,它在反序列化协议缓冲区消息方面提供了 2-4 倍的性能提升。Google 的 Protocol Buffers 是一种常用且高效的结构化数据序列化和压缩方法,OpenStreetMap 贡献者也使用该方法以 PBF 格式(Protocolbuffer Binary Format)分发 OSM 数据。
文档可在https://pyrosm.readthedocs.io获得。
当前功能
- 从全球数百个地点轻松下载 PBF 数据
- 读取街道网络(分别用于驾驶、骑自行车、步行和综合)
- 从 PBF 读取建筑物
- 从 PBF 读取兴趣点 (POI)
- 从 PBF 读取土地利用
- 从 PBF 读取“自然”
- 从 PBF 读取边界(+ 允许按名称搜索)
- 使用自定义的用户定义过滤器从 PBF 读取任何其他数据
- 基于边界框过滤数据
- 将网络作为有向图导出到
igraph
和networkx
pandana
路线图
- 添加优化内存使用的可能性(参见#87)
- 添加简化图形的可能性(参见#89)
- 添加裁剪 PBF 并将子集保存到新 PBF 的可能性。
- 添加 Cython 特定测试
安装
Pyrosm 通过 PyPi 和 conda-forge 分发。
安装 pyrosm 的推荐方法是使用conda
包管理器:
$ conda install -c conda-forge pyrosm
您还可以使用 pip 安装该软件包:
$ pip install pyrosm
故障排除
请注意,这pyrosm
需要 geopandas 才能工作。在 Linux 和 Mac 上安装 geopandaspip
应该没有问题,安装 pyrosm 时会自动处理。
但是,在 Windows 上使用 pip 安装 geopandas 可能会导致问题,因此,建议在安装之前安装 Geopandas
pyrosm
。请参阅Geopandas 网站的说明。
我什么时候应该使用 Pyrosm?
当您需要将数据从 OSM 解析为 geopandas GeoDataFrames 时,当然可以使用 Pyrosm。但是,pyrosm
更适合您想要获取整个城市或更大区域(甚至整个国家)的数据的情况。
如果您有兴趣获取较小区域(例如社区)的 OSM 数据,或搜索特定位置/地址周围的数据,我们建议使用OSMnx,它在指定感兴趣区域方面更灵活。话虽如此,也可以使用 pyrosm 提取邻域级别信息并基于边界框过滤数据(请参阅文档)。
如何使用?
使用pyrosm
很简单。
有关如何使用该库的说明,请参阅文档。
表现
有关更全面的基准测试,请参阅文档。读取赫尔辛基地区的所有可行驶道路(约 85,000 条道路)大约需要12 秒(笔记本电脑配备 16GB 内存、SSD 驱动器和 Intel Core i5-8250U CPU 1.6 GHZ)。结果看起来像:
解析来自同一区域(约 180,000)的所有建筑物大约需要17 秒。结果看起来像:
使用默认元素(设施、商店和旅游)解析所有兴趣点 (POI) 大约需要14 秒(大约 32,000 个特征)。结果看起来像:
联系+投稿
如果您从该工具中发现错误、有疑问或想向它提出新功能建议,您可以在此处提出新问题。
我们热忱欢迎您的贡献,pyrosm
使其变得更好。如果您有兴趣为图书馆做出贡献,请查看贡献指南。
发展
您可以通过 1) 使用 conda 安装必要的软件包和 2) 从源代码构建 pyrosm 来安装该工具的本地开发版本:
-
通过以下方式为 Python 3.7 或 3.8 安装 conda-environment:
- Python 3.7(您可能想要修改
test
默认的环境名称):$ conda env create -f ci/37-conda.yaml
- 蟒蛇 3.8:
$ conda env create -f ci/38-conda.yaml
- Python 3.7(您可能想要修改
-
从 master 构建 pyrosm 开发版本(先激活环境):
pip install -e .
您可以通过执行以下命令来运行测试pytest
:
$ pytest -v
许可和版权
Pyrosm 在 MIT 下获得许可(请参阅许可证)。
OSM 数据从两个来源下载:
数据 © Geofabrik GmbH、BBBike和OpenStreetMap 贡献者
OpenStreetMap 中的所有数据均根据OpenStreetMap许可获得许可。
注意事项
通过边界框过滤大文件
尽管pyrosm
提供了基于边界框过滤更大数据文件的可能性,但由于解析数据时需要进行查找,此过程可能会显着减慢读取过程(1.5-3 倍)。对于较小的文件(最大 ~100MB),这可能不是问题,但对于较大的数据转储,这可能需要比必要的时间更长的时间。
因此,对于大型数据文件,推荐的方法是首先使用 可用于所有操作系统的名为Osmosis的专用开源 Java 工具,将基于边界框的 protobuf 文件过滤为较小的子集。详细的安装说明在这里,关于如何根据边界框过滤数据的说明在这里。