PyrOSM:使用Open Street Map数据

PyrOSM:使用Open Street Map数据的创新应用

高效处理OSM地图数据的地理空间操作

Taba Schimpf于Unsplash上的照片

如果你以前曾经处理过OSM数据,你就会知道它并不是最容易提取的。OSM数据可能非常庞大,找到用于分析所需内容的高性能解决方案常常是一项挑战。PyrOSM是一个使得读取和处理OSM数据更高效的软件包。它是如何做到的呢?嗯,PyrOSM是建立在Cython(C Python)上的,它使用更快的库来反序列化OSM数据,并通过诸如numpy数组的小优化来加快数据处理速度。特别是如果您之前使用过OSMnx(用于非常相似的用例),则会了解到加载大型数据集到内存中需要很长时间,而PyrOSM可以帮助您处理这些数据。让我们来看看这个库能做什么!

🌎 PBF 数据

我们来谈谈OSM数据的具体文件格式。PBF代表“Protocolbuffer Binary Format”,它非常适合处理存储的OSM数据。OSM数据以“文件块”(fileblock)的形式组织,这些文件块可以独立进行编码或解码。文件块包含“原语组”(PrimitiveGroups),这些原语组又包含成千上万个OSM实体,如节点、路径和关系。

数据可以根据用户所需的粒度级别进行缩放。例如,当前的OSM数据库分辨率约为1厘米。实际上,如果您愿意,您可以将全部OpenStreetMap数据下载到一个文件中,这个文件称为Planet(大约1000GB的数据)!

👩‍💻 PyrOSM基础知识:读取数据集

PyrOSM是一个基于两个主要数据供应商(Geofabrik和BBBike)的OpenStreetMap PBF数据的包。该软件包允许用户访问多种类型的功能:

  • 建筑物、兴趣点(Points of Interest)、土地利用
  • 街道网络
  • 自定义过滤
  • 导出网络
  • 等等!

BBBike目前支持全球235个城市,您只需调用“sources.cities.available”方法就可以轻松获取完整列表。开始使用很简单,您只需初始化一个OSM读取器对象并加载想要的数据:

从这个点开始,您需要使用OSM对象与伯克利数据进行交互。现在让我们获取伯克利的车辆道路网络:

伯克利OSM街道网络的数据框

将实际的street_network对象打印出来后,可以看到它存储在一个包含所有OSM属性的GeoPandas GeoDataFrame中,如长度、公路、最高速度等,这对进一步分析非常有用。

顺便说一句:BBBike(该数据的数据提供商)还有许多不同大小的数据格式,包括Organic Maps OSM、Garmin OSM或SVG Mapnik,具体取决于您的用例。

🔍 更好的筛选

上述数据加载的结果包括了伯克利的全部数据,甚至还包括了周边城市的数据,这并不理想。如果您想要一个更小或更特定的区域,您可以使用边界框。创建边界框的方法有两种:

  • 手动指定一个由4个坐标组成的列表,格式为[minx,miny,maxx,maxy]
  • 传入Shapely几何对象(例如LineString或Multipolygon)

要找到边界框坐标,我通常使用这个边界框查找器网站,它可以让您绘制矩形然后复制坐标。下面是如何绘制 UC Berkeley 校园周围的区域并获取其步行网络:

使用边界框的街道网络

🎯 导出和处理图形

PyrOSM 的另一个好处是它可以进行网络处理并连接到其他网络分析库。除了将街道网络保存为地理数据帧之外,PyrOSM 还可以通过将节点和边缘存储在两个单独的数据帧中来提取它们。以下是节点数据帧的示例:

街道网络中的节点数据帧

如果您拥有这些图形表示,那么将它们保存为各种格式(如 OSMnx、igraph 和 Pandana)并在其中使用它们就非常简单了。

💭 结语

这是关于 pyrosm 在地理空间工作中对您有什么使用的简短摘要!我提到了一些非常有用的方法,例如从某个区域下载特定数据集,或者通过限定感兴趣区域的边界来获取数据,并且还介绍了与其他库的关系。我认为 pyrosm 最好的地方就是它填补了巨大的 OSM 数据集与您可以通过它回答的工程或分析问题之间的鸿沟。

感谢阅读!