什么是网络营销?网络营销的常用方法有哪些?,嘉兴优化网站排名,什么是网络营销?它的内涵包括哪几个层次?,网谱网络科技图源#xff1a;WL
为什么空间索引很有用?
在处理地理空间数据时#xff0c;空间索引是一个至关重要的功能#xff0c;它决定了我们如何高效地从海量的地理数据中检索出所需的信息。想象一下#xff0c;如果你正在处理一个包含数千万乃至数亿条记录的数据库#xff0c;… 图源WL
为什么空间索引很有用?
在处理地理空间数据时空间索引是一个至关重要的功能它决定了我们如何高效地从海量的地理数据中检索出所需的信息。想象一下如果你正在处理一个包含数千万乃至数亿条记录的数据库这些记录可能涵盖全球各城市、街道和建筑物的详细信息。在没有合适的索引的情况在每次查询都可能不得不扫描整个数据集这将是非常低效的。空间索引的引入正是为了优化这一过程确保查询操作既迅速又高效。在这篇文章中我将讨论空间索引是如何实现的以及它的优点和局限性。
什么是空间索引?
首先让我们重温下普通索引普通索引就像我们经常会在书的末尾看到的一个包含名词及其出现位置的列表。它可以帮助我们快速查找感兴趣的名词在特定内容中的引用。如果没有它我们就不得不手动翻阅书中的每一页进行寻找。
在数据库中查询和搜索一直都是十分常见且重要的功能。索引的引入通常使查找数据比遍历整个数据库更快并且我们可以根据关注的列创建索引。而在对地理空间数据的处理中通常需要执行诸如“交叉路口”或“在…附近”之类的操作。怎样才能建立一个空间索引使这些操作尽可能快呢接下来让我们看一下数据库中的地理空间数据 两个不相交的湖泊 图源WL 由Mapmost平台制作
假设我们想要通过查询来确定这两个湖泊是否相交。通过构造空间数据库将根据包含几何图形的边界框创建索引 两个湖泊的边界框 图源WL 由Mapmost平台制作
为了判断这两个湖泊是否相交数据库将比较两个边界框是否有任何共同区域正如图所显示的。然而这可能直接导致错误的结论。为了解决这个问题像PostGIS这样的空间数据库通常会将这些大的边界框分割成越来越小的边界框。 划分了小边界框的两个湖泊 图源WL 由Mapmost平台制作
这种分区策略采用了一种叫做 R 树的结构进行存储。R树是一种具有层级特性的数据组织形式它记录了一个较大的父级边界框父级边界框下包含其所有子级边界框以及子级边界框的子级依次类推形成了一个层级嵌套的体系。在这个结构中每个父级边界框都完整地覆盖了其所有子级边界框的位置。 R-树结构示例 图源WL
得益于R-树结构的优势判断“相交”与否将十分迅速在执行相交查询时数据库会遍历这棵树检查每个节点的边界框询问“当前的边界框是否与我们感兴趣的地理特征相交”如果是它将继续检查该边界框内的所有子框并重复相同的相交检验。在这个过程中数据库能够迅速地遍历整个树形结构同时忽略那些显然不相交的分支显著提高了查询效率。最终系统会根据查询要求返回所有与查询条件相交的数据。
空间索引到底有多快
GeoPandas库同时提供了判断两个几何特征是否相交的普通方法以及通过建立R-Tree空间索引后求解两个几何特征交集的方法让我们采用GeoPandas库进行一个简单的对比测试吧步骤如下。
第一步数据准备这里我们使用纽约市公共设施的数据集(通过开放数据下载有需要的同学关注公众号获取)。
第二步环境安装通过anaconda官网下载安装包一键安装conda接着通过conda搭建python环境并安装GeoPandas及其依赖。
conda create -n geo_env
conda activate geo_env
conda config --env --add channels conda-forge
conda config --env --set channel_priority strict
conda install python3 geopandas
第三步编写测试用例我们主要使用geopandas.GeoSeries.intersects()方法进行普通交集运算通过调用geopandas.GeoSeries.sindex属性生成指定数据集的R-Tree空间索引使用geopandas.sindex.SpatialIndex.query()方法利用建立的索引进行两个几何体的交集查询。
第四步运行程序结果 从测试结果中可以看出通过依次将34171条数据与固定的某个几何图形做“交集”运算在不采用R-Tree空间索引的情况下耗时3.4秒而使用了R-Tree空间索引之后耗时则是其十分之一不到。
R-Tree空间索引一定好用吗
是否存在使用了R-Tree索引后没有任何好处的情况是的。其中之一便是由R-Tree空间索引存储数据的方式造成的。事实证明原始数据的分布会影响边界框放入R-Tree中的位置。具体来说如果大量数据集中在同一个地理空间中它们往往会拥有相同的父节点因此会被分组到相同的分支中。这将会导致树结构的倾斜从而在查询时无法达到预期的优化。
Mapmost平台作为智能地图的工厂在空间数据处理的API背后自研并使用了多种结合特定场景的空间索引算法致力于为用户提供极致性能体验赶快扫码体验吧。