地理空间数据工程:空间索引化
地理空间数据工程:空间索引化
优化查询,提高运行时间和地理空间数据科学应用
介绍:什么是空间索引的用途?
在进行地理空间数据科学工作时,思考优化所编写的代码非常重要。如何使包含数亿行的数据集更快地进行聚合或连接?这就是空间索引等概念发挥作用的地方。在本文中,我将讨论空间索引的实现方式、其优势和局限性,并介绍Uber的开源H3索引库,展示一些酷炫的地理空间数据科学应用。让我们开始吧!
🗺 什么是空间索引?
常规索引就像是你在书的末尾找到的那种东西:一个单词列表和它们在文本中的出现位置。它可以帮助你快速查找你感兴趣的单词在特定文本中的任何引用。如果没有这个方便的工具,你需要手动查阅书的每一页,寻找你想要阅读的那个地方。
在现代数据库中,查询和搜索问题也非常重要。索引通常比过滤查找数据更快,你可以基于感兴趣的列创建索引。对于地理空间数据而言,工程师们经常需要处理“交叉”或“附近”的操作。我们如何创建一个空间索引,使这些操作尽可能快速?首先,让我们来看看一些地理空间数据:
假设我们想运行一个查询来确定这两个形状是否相交。按照构造方式,空间数据库会使用一个包含几何形状的边界框来创建索引:
为了回答这两个特征是否相交,数据库将比较这两个边界框是否有任何共同的区域。正如你所看到的,这可能很快导致误报。为了解决这个问题,类似PostGIS的空间数据库通常将这些大边界框划分为越来越小的边界框:
这些划分存储在R树中。R树是一种层次化的数据结构:它跟踪大的“父”边界框、它的子边界框、子边界框的子边界框等等。每个父边界框都包含其子边界框:
“交叉”操作是从这个结构中受益的关键操作之一。在查询交叉时,数据库沿着树向下询问“当前边界框是否与感兴趣的特征相交?”如果是,它会查看该边界框的子边界框,并问同样的问题。通过这样做,它能够快速遍历树,跳过没有交叉的分支,从而提高查询的性能。最后,它会按照预期返回相交的几何形状。
🧰 实践中:使用GeoPandas尝试空间索引
现在让我们具体看一下使用常规的逐行过程与使用空间索引的区别。我将使用两个数据集,分别代表纽约市的人口普查区和城市设施(均通过开放数据许可,可在这里和这里获取)。首先,让我们在GeoPandas上尝试“交集”操作,对其中一个人口普查区几何图形进行操作。在GeoPandas中,“交集”是一种逐行函数,它检查感兴趣列的每一行是否与我们的几何图形相交。
GeoPandas还提供了一种使用R树的空间索引操作,允许我们执行交集操作。下面是这两种方法在100次交集操作中的运行时间比较(注意:由于默认的交集函数速度较慢,我只选择了原始数据集中的大约100个几何图形):
从上图可以看出,空间索引方法的性能明显优于普通的交集方法。事实上,下面是每种方法运行时间的95%置信区间:
太棒了!那么,为什么我们有时不想使用空间索引呢?它是否存在无法带来好处的情况?是的,有一些限制是由于空间索引存储叶子节点的方式。事实证明,原始数据的分布方式会影响边界框如何放置到R树中。具体来说,如果大量数据集中在同一地理空间中,它们往往会共享相同的父节点,因此会在同一分支中分组。这可能导致树的倾斜,查询时无法提供太多的优化。
💻 其他空间索引是什么样的?
其他公司也开发了自己的空间索引。Uber使用H3,这是一种将世界划分为等面积六边形的分层索引系统。六边形在模拟人们在城市中的移动或计算半径等问题时具有许多优势。地理空间数据被分桶到这些六边形中,它们成为公司的主要分析单元。该网格通过将122个六边形单元覆盖在一个二十面体地图投影上构建,并支持广泛的聚合、连接和机器学习应用。
该系统以及它的许多功能都是开源的,可在GitHub上进行分析。H3 API的一个功能是将纬度和经度点转换为表示唯一六边形的字符串,根据指定的分辨率进行转换。让我们对整个设施数据库执行此操作,并将六边形字符串转换为多边形:
在这些空间数据分析项目中,经常会出现一个问题:在六边形中,有多少项目按某一列(如“机构”)进行分类?幸运的是,现在我们将数据分桶到H3六边形后,这个问题非常容易计算和可视化:
从上图可以看出,DCAS(市政服务部)和PARKS(公园和娱乐部)是每个六边形中设施最多的两个机构。这很有道理,因为这两个机构会拥有更多的实体设施(比如行政大楼或公园等)。
结论
空间索引,正如你所看到的,是地理空间数据科学和分析非常有用的优化工具。在简单的交集查询的情况下,使用空间索引与标准的GeoPandas交集函数相比,显著提高了查询的性能。这个索引的实现有很多微妙之处,以及其影响,比如具有大量聚集数据的分支。正如我们所见,公司已经开发了自己的解决方案:一个例子是Uber的H3开源索引,它允许我们回答各种空间分析问题。虽然我演示了一个基于机构的设施计数操作,但H3为其他更复杂的机器学习应用提供了基线。
如果你喜欢这种内容,但想更广泛地了解城市规划技术,我还写了一份名为“被排除在外的编年史”的新闻通讯。我鼓励你去看看!
感谢阅读!