时空索引技术分享

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

时空索引技术分享

各位前辈、朋友们大家好!我叫王德浩,目前是武汉大学测绘遥感信息工程国家重点实验室的硕士一枚,也是咱们攻城狮群里普通的一员。由于我的研究方向比较偏空间信息处理,所以可能大家平时了解不多,那我在这里就跟大家分享一些关于我目前的研究内容——时空索引技术的相关知识,由于是研究内容,所以更偏学术一些。欢迎大家指正、讨论。我的微信号是:w262730936.

本文介绍的内容的顺序为:背景介绍、空间索引、时空轨迹数据索引技术以及我自己的研究。其中背景介绍简单说明了一下索引、空间数据、空间数据库和空间查询的概念。空间索引简单介绍了一下两种常用的空间索引技术:R-tree和四叉树。然后介绍了最近兴起的时空轨迹索引技术,最后介绍了一下自己的研究内容。

1.背景介绍

首先简单介绍一下背景吧,我们知道目前所有主流的数据库为了提高数据查询的速度,都提供了索引功能,常见的有B/B+tree索引、位图索引等。索引通常通过建立冗余的数据结构,以快速定位数据来加快查询过程。但与此同时为了维护索引,用户插入和更新数据的时间肯定会延长。显然对于体量非常大的数据,建立索引是很有必要的。

接下来简单介绍一下空间数据,空间数据分为两种:栅格数据和矢量数据。栅格数据本质上就是影像,通俗的理解就是分辨率特别高的照片(可见光、红外、微波等波段),这些影像可以通过遥感卫星、航空航天摄影测量,甚至无人机上加个单反(或其它传感器)都可以拍摄。栅格数据一般是以文件的形式保存,不在我们的讨论范围,我来重点介绍一下矢量数据。矢量数据说白了就是坐标信息,二维矢量数据基本分为点、线、面以及它们的组合,几乎所有的空间地物都能被抽象为这几种类型之一,如公路可以抽象为线,建筑物可以抽象为面。后文提到的空间数据,均默认为矢量数据。以一个简单的线和面为例,它们计算机上是以坐标序列存储的:

一般的数据库只为一维数据提供索引,数据库但也有好几家提供了二维甚至更高维空间数据的存储与索引,我们也称之为空间数据库,其中功能最强大的莫过于Oracle,其能够为空间数据提供R-tree和Quad-tree(四叉树)索引,并支持大量的空间查询与分析。其它一些数据库如PostgreSQL、MySQL、MongoDB均或多或少支持空间数据存储与查询。

空间索引建立的目的是加快空间查询,空间查询主要包括范围查询、邻近查询等。范围查询是给定空间范围(矩形、圆形或任意多边形),查询落在此范围的地物,如:查询北京范围(多边形)内一共有多少条公路。邻近查询则给定一个点,查询其附近n米内的地物,如我们用大众点评搜索附近1km内的美食店。

2.空间索引简介

在空间数据存储领域,R-tree可以说是应用最为广泛的空间索引,可以说它是B-tree的二维版。在介绍它之前,必须先介绍一个重要的概念:最小外包矩形(MBR,Minimum Bounding Rectangle),又称包围图元,是包围地物的,且平行于x,y轴的最小外接矩形。如下图所示:

介绍它的原因在于R-tree均是针对空间数据的MBR建立索引的,下面给出一个R-tree 的例子,图中的Rn均为MBR。

根据上层的划分,其树形结构如下图,一般来讲叶子节点的的MBR均对应一个地物。

R-tree能够动态的维护高度平衡,具有较高的查询效率,目前应用及其广泛,其具体的构建、维护平衡的算法在网上有很多开源的代码,有兴趣的同志可以搜一下。那么R-tree 索引是如何加快查询的呢?我仍以上面的图为例进行解释。给出查询范围为图中的蓝色矩形。

从根节点开始,蓝色框与R1、R2均相交。到树的第二层,计算可知蓝色框与R1中的R5相交,与R2的R7相交。到树的第三层,蓝色框与R5的R13、R14相交,与R7的R17相交。最后再判断蓝色框与R13、R14、R17所包含的地物是否相交,将相交的地物返回给用户。这个过程避免了数据遍历,大大加快了查询速度。

另外,在空间数据领域,四叉树也是常用的索引结构,但它比R-tree简单多了,这里就不过过多解释了,给个图大家应该就明白了:

3.时空轨迹数据索引技术

随着空间信息获取技术和通信技术的快速发展,GPS功能已经集成到诸多移动设备上(如手机、汽车),基于位置的服务也因此蓬勃发展(如社交、导航、团购)。移动对象的轨迹很容易被大量记录下来,这些轨迹数据往往包含空间、时间、甚至语义信息,这些轨迹数据在交通管理、数据挖掘等领域都有广泛的用途,因此如何高效的存储和管理这些数据成为了一个新的热点。大量的查询需求需要高效的索引支持,例如:今天10点-11点长安街有多少量汽车经过?东湖路上每天有多少人跑步?跑步高峰路线和时间是什么?目前,时空数据索引技术(也有称为移动对象索引技术)的研究还处于起步阶段。

之前的空间索引技术如R-tree等并不适合随时间频繁更新的轨迹数据,原因在于:(1)R-tree的特点是对于更新不那么多的数据建立索引有较好的效果,但频繁的轨迹数据更新引

起的索引更新会占用大量的CPU资源;(2)轨迹数据是线段,用MBR包围线段会产生大量的“死空间”,会影响查询效率。

目前已经有一些学者提出了一些时空轨迹数据的索引方法,我会选取一些进行简单介绍。由于这些算法的细节解释起来均比较复杂,我只在这里介绍一下它们的大致思想,各位如果对某一种方法感兴趣,我们可以再讨论,也可以联系我将相关的论文发给你。

时空轨迹数据索引可以分为两种:针对轨迹对象的时空索引和针对轨迹点的时空索引。分别表示索引的对象是轨迹本身(即轨迹线段)和轨迹的点。由于轨迹随时间变化频繁等特点,对其进行索引比对单纯的三维数据进行索引复杂的多。

3.1针对轨迹对象的时空索引

3.1.13DR-tree

使用传统的R-tree索引轨迹数据,索引对应的时间和空间范围已知,3DR-tree索引时空数据的方式是将时间当做传统的空间的另一个坐标。这种方法比较简单、直观。在二维空间中,空间对象用最小外包矩形(MBR)表示,相应的时空对象则可用三维空间中的最小外包矩形来表示,其中三维MBR的底为二维空间的MBR,高为时空对象的生命期。如果对下图所示的轨迹做MBR,MBR中的大部分空间为“死空间”,索引结构中就会有大量的重叠,查询效率势受影响。

3.1.2SETI

Scalable and Efficient Trajectory Index将空间区域分割成静态且不重叠的分区,在每个分区下对移动对象的轨迹线段利用R-tree进行索引。

其考虑是,相对于无限连续变化的时间维而言,移动对象轨迹受空间范围所限,那么可以把受限的空间区域利用某种规则静态划分以分而治之。使用良好的划分函数应尽量把同一移动对象不同轨迹线段聚类在同一个分区中。若一条轨迹线段穿过多个分区,那么必须将此线段裁剪并分别存储在不同分区R-tree树中,这样会导致查询结果的重复,在查询处理后必须对重复结果去重。其过程如下所示:

相关文档
最新文档