PyrOSM:使用Open Street Map数据
PyrOSM:使用Open Street Map数据的创新应用
高效处理OSM地图数据的地理空间操作
如果你以前曾经处理过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数据的包。该软件包允许用户访问多种类型的功能:
- Python for Data Engineers’ 的翻译结果是:
- 在树莓派上使用Apache Airflow收集数据
- SalesForce AI推出CodeChain:一种通过一系列自我修订具有代表性子模块的模块化代码生成的创新人工智能框架
- 建筑物、兴趣点(Points of Interest)、土地利用
- 街道网络
- 自定义过滤
- 导出网络
- 等等!
BBBike目前支持全球235个城市,您只需调用“sources.cities.available”方法就可以轻松获取完整列表。开始使用很简单,您只需初始化一个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 数据集与您可以通过它回答的工程或分析问题之间的鸿沟。
感谢阅读!