Skip to main content

将 OSM 数据从 Protobuf 格式解析为 GeoDataFrame 的 Python 工具。

项目描述

热解

康达版 PyPI 版本 构建状态 文件状态 覆盖状态 PyPI - 下载 DOI 执照

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 读取任何其他数据
  • 基于边界框过滤数据
  • 将网络作为有向图导出到igraphnetworkxpandana

路线图

  • 添加优化内存使用的可能性(参见#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 个特征)。结果看起来像:

赫尔辛基_POI

联系+投稿

如果您从该工具中发现错误、有疑问或想向它提出新功能建议,您可以在此处提出新问题

我们热忱欢迎您的贡献,pyrosm使其变得更好。如果您有兴趣为图书馆做出贡献,请查看贡献指南

发展

您可以通过 1) 使用 conda 安装必要的软件包和 2) 从源代码构建 pyrosm 来安装该工具的本地开发版本:

  1. 通过以下方式为 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
  2. 从 master 构建 pyrosm 开发版本(先激活环境):

    • pip install -e .

您可以通过执行以下命令来运行测试pytest

$ pytest -v

许可和版权

Pyrosm 在 MIT 下获得许可(请参阅许可证)。

OSM 数据从两个来源下载:

网站 网站

数据 © Geofabrik GmbHBBBikeOpenStreetMap 贡献者

OpenStreetMap 中的所有数据均根据OpenStreetMap许可获得许可

注意事项

通过边界框过滤大文件

尽管pyrosm提供了基于边界框过滤更大数据文件的可能性,但由于解析数据时需要进行查找,此过程可能会显着减慢读取过程(1.5-3 倍)。对于较小的文件(最大 ~100MB),这可能不是问题,但对于较大的数据转储,这可能需要比必要的时间更长的时间。

因此,对于大型数据文件,推荐的方法是首先使用 可用于所有操作系统的名为Osmosis的专用开源 Java 工具,将基于边界框的 protobuf 文件过滤为较小的子集。详细的安装说明在这里,关于如何根据边界框过滤数据的说明在这里

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

pyrosm-0.6.1.tar.gz (2.1 MB 查看哈希

已上传 source