一种面向周期性检索的时空轨迹索引与检索方法与流程

文档序号:16134784发布日期:2018-12-01 00:48阅读:172来源:国知局

本发明涉及一种面向周期性检索的时空轨迹索引与检索方法,属于计算机应用技术领域,更准确的说本发明用于时空轨迹的索引与检索,时空轨迹的索引与检索是时空数据库的核心技术,具有重要的研究意义和应用价值。

背景技术

当今处于信息技术高速发展的时代,随着卫星定位技术、无线通信技术、跟踪监测设备以及电子技术的快速发展,人们对持续移动对象所处空间位置的跟踪能力不断加强,每天都有大量的时空数据在不断产生。随着时空数据挖掘研究的不断深入和时空数据规模的飞速增长,对时空数据管理和检索效率提出了更高的要求。

目前存在的时空数据索引可以分为三类,分别是基于r-tree的改进方法、基于版本的索引方法和空间划分方法。第一类包括rt-tree、str-tree、2+3r-tree等,这类索引的主要思想是使用mbr(minimalboundingrectangle)方法,根据时空数据动态调整索引结构,以优化检索效率,但此类索引都存在插入、删除时空数据时效率低的问题。第二类在固定的一段时间间隔中构建r-tree等索引结构,并为时间维度构建相应的索引,比如:mr-tree、hr-tree和mv3r-tree等,这类索引首先处理时间维度,再处理空间维度,在时间范围查询任务上有很好的查询效率,但索引维护成本很高。第三类采用了空间划分的方法,使用四叉树、网格等索引结构将时空数据划分到相应的分区,然后为各分区中的时空数据构建时空索引,比较经典的有seti和seb-tree,由于空间层次的区域划分固定,这类索引不存在节点的分裂、合并操作,因此构建索引和检索的性能很高。

城市居民的出行具有极强的周期性,如:工作日早上一般在上班路上,而周末早上很大可能去商场、公园等休闲娱乐场所;夏天去游泳馆的人数比冬天多等等。但是,现有的时空数据索引和检索方法只支持精确时间点或一段时间范围检索,而缺少对周期性时间检索的支持。为提高轨迹数据的周期性检索效率,本发明公开了一种面向周期性检索的时空轨迹索引与检索方法。

经初步检索,暂未发现有与本

技术实现要素:
相关的专利条目。

发明内容

发明目的:了提高轨迹数据的索引构建效率及周期性检索效率,同时为了满足广泛的检索需求,实现轨迹数据的周期性区域检索和周期性k近邻检索。本发明公开了一种基于周期和网格的时空数据索引方法和检索方法。

技术方案:一种面向周期性检索的时空轨迹索引与检索方法,主要包括索引构建、周期性区域检索和周期性k近邻检索三个主要步骤。

(1)本发明公开的索引构建方法在结构上分为时间索引和空间索引,在时间维度,维护基于日期周期性的时间索引;在空间维度,利用geohash编码将空间划分为网格结构。数据插入主要分为两步,首先获得时间索引每层中轨迹对应的空间索引,然后将轨迹数据插入空间索引中相应的网格单元集合。

(2)周期性区域检索的目的是检索满足周期性时间约束和区域约束的所有轨迹数据。其检索过程为:

步骤1:检索出时间索引中满足周期性时间约束的空间索引集合。

步骤2:利用空间索引中的网格结构,筛选步骤1的结果中满足区域约束的轨迹数据,由于基于网格结构,故此步骤仅为粗略检索。

步骤3:遍历步骤2结果中所有的轨迹,筛选出其中满足区域约束的轨迹,对于部分满足的轨迹,则截取其中满足区域约束的轨迹片段。

(3)周期性k近邻检索的目的是,获取与检索轨迹最近的k个满足周期性时间约束的轨迹数据。其检索过程为:

步骤1:检索出时间索引中满足周期性时间约束约束的空间索引集合。

步骤2:利用空间索引中的网格结构获取候选轨迹数据,以提高检索效率。

步骤3:计算检索轨迹与所有候选轨迹的距离,并结合大小为k的小顶堆选取出与检索轨迹距离最小的前k个轨迹。

附图说明

图1为本发明公开的时间索引结构示意图;

图2为本发明公开的时间索引与空间索引层次结构示意图;

图3为本发明开的子轨迹段空间索引中哈希值计算示意图;

图4为本发明开的外扩网格单元示意图。

具体实施方式

下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。

轨迹由一系列按时间顺序排列的时空轨迹点组成,一个轨迹tr可以表示为tr={p1,p2,…,pn},其中n表示轨迹中时空轨迹点的个数,时空轨迹点p={lat,lon,t},其中lat为p的纬度、lon为p的经度、t为p的时间信息。轨迹还可以用子轨迹段表示,子轨迹段为两个相邻的离散轨迹点pi与pi+1相连形成一个轨迹段,记为tsi,轨迹使用子轨迹段表示为tr={ts1,ts2,…,tsn-1}。

本发明公开的索引方法在结构上分为时间索引和空间索引,时间索引结构如图1所示,其从上到下一共分为五层,第一层为root层,为入口节点;第二层为year层,每个节点代表一个年份;第三层为month层,每个节点代表一个月份;第四层为week-day层,包括week和day两种节点,且week节点还会指向其对应的day节点,例如:若3号为周一,则周一节点(week节点)会指向3号节点(day节点);第五层为hour层。空间索引结构使用geohash编码将空间划分为多个网格单元(以下称为cell),geohash是一种地理位置编码,可把二维的经纬度转换成字符串,每个字符串代表一个矩形区域,且该区域中所有经纬度坐标的geohash编码相同。cell的数据格式为{dataid_set,abjoin_cell_let},其中,dataid_set表示该cell包含的轨迹数据在存储文件中的位置,abjoin_cell_set表示与该cell相邻的cell集合,geohash编码中位于cell边界两侧的两点,虽十分接近,但编码却不同,需要同时搜索与当前cell相邻的8个cell,计算相邻cell需要消耗一定时间,本发明采用空间换时间的策略,以较少的内存消耗为代价大幅度降低计算相邻cell的消耗。为满足较大尺度(年、月)的检索需求,从整体上提升检索效率,时间索引中每个节点的数据结构如图2所示,除指向其子节点的指针外,还包括索引该时间范围数据的空间索引。

为了提高索引性能,本发明公开的索引方法中两处应用了哈希表结构,其中包括:时间索引中每个节点的子节点使用哈希表存储;空间索引中cell的管理使用哈希表。以上哈希表都采用基于可扩展链表结构,并使用拉链法解决哈希碰撞的问题。

对于轨迹tr={p1,p2,p3,p4,p5},本发明公开的面向周期性检索的时空轨迹索引构建方法包括以下步骤:

s101:获得时间索引中每层对应的空间索引。时间索引中的哈希算法记作hasht,使用hasht(tr)获取时间索引每层中轨迹对应的空间索引。hasht(tr)的具体计算过程为:首先计算轨迹中首尾两个轨迹点的哈希值hasht(p1)和hasht(p5),对于轨迹点p,hasht(p)的值取轨迹点对应层所属日期,以year层为例,记year(p)为p的发生年,则year层的hasht(p)=year(p)。对于轨迹tr={p1,p2,p3,p4,p5},hasht(tr)的取值为区间[hour(p1),hour(p5)]中的所有数值的集合。

s102:将轨迹数据插入空间索引中相应的cell中。空间索引中的哈希算法记作hashs,使用hashs(tr)获取轨迹经过的cell(可能为多个),并把数据插入其中,由于轨迹与cell多对多的关系,因此hashs(tr)为多个哈希值的集合。hashs(tr)的具体计算过程为:

(1)依次遍历轨迹的所有子轨迹段,对于每个子轨迹段ts,设其首尾轨迹点为ps和pe,然后计算ps和pe的geohash编码,令celltmp为ps所在cell,初始化存储结果的集合sethash,并将celltmp的哈希值放入sethash。

(2)取celltmp经度方向靠近pe(即经度增大的方向)的cell,若该cell和celltmp的公共边与ts交叉(如图3中虚线部分),则令celltmp为该cell,跳至步骤(4)。

(3)取celltmp纬度方向靠近pe(即纬度增大的方向)的cell,若该cell和celltmp的公共边与ts交叉,则令celltmp为该cell。

(4)将celltmp的哈希值放入sethash,若celltmp为pe所在cell,则sethash中的哈希值为该子轨迹段的哈希值集合,否则继续步骤(2)。

(5)hashs(tr)的结果为其所有子轨迹段哈希值的并集。

本发明以周期性时间检索需求为基础,给定约束条件和检索条件的格式定义。

本发明中周期性时间约束条件的格式定义为cdate=<cyear,cmonth,cweek,cday,chour>,cyear,cmonth,cweek,cday,chour分别对应year层、month层、week层、day层和hour层的约束条件。以cyear为例说明其具体约束条件格式,“*”表示任意year层任意节点(即任意年份);[n-m]表示节点n至节点m的所有节点(即n年~m年);[n,m]表示节点n和节点m(即n年和m年),“,”可用于多个值(2个及以上)的并列;“^”为结束符号,代表后续层次的检索要求全部为“*”。“,”和“-”可结合使用,如[a,n-m]表示节点a和节点n至节点m的所有节点。

本发明中区域约束条件的格式定义为carea=<latmax,lonmax,latmin,lonmin>,其中latmax、lonmax表示区域的最大经纬度约束;latmin、lonmin表示区域的最小经纬度约束。

基于以上约束条件可以给出检索条件格式,本发明公开的检索方法分为周期性区域检索和周期性k近邻检索。

本发明公开的周期性区域检索sarea=<cdate,carea>,其含义是检索满足cdate和carea约束的所有轨迹数据。其检索过程为:

s201:检索出时间索引中满足cdate约束的空间索引集合,其具体步骤为:

(1)初始化保存时间索引节点的队列qt和保存空间索引的集合sets。

(2)采用广度优先的方法遍历时间索引,将root节点放入队列qt。

(3)从qt中取出一个节点,判断该节点是否满足cdate约束,具体方法为假设该节点处于时间索引的x层,则取出cdate中x层的约束条件cdat-x,判断该节点是否满足cdate-x。

(4)对于满足步骤3的节点,若cdate中该节点所在层的约束中有结束符号“^”,则将该节点中的空间索引放入sets,否则将该节点放入队列qt,然后重复步骤(3)直至队列qt中无节点。

(5)集合sets即为cdate约束筛选后的结果。

s202:粗略检索sets中满足carea约束的轨迹数据,其具体步骤为:

(1)将(latmax,lonmax)、(latmin,lonmin)、(latmin,lonmax)和(latmax,lonmin)分别进行geohash编码,得到cell1、cell2、cell3和cell4,初始化存放无重复数据集合setdata和setcell,需要注意的是,无重复数据集合采用哈希方法使插入数据和删除数据的算法复杂度为o(1)。

(2)从集合sets中的取出一个空间索引,集合sets为空,则跳转至步骤(5),否则初始化无重复数据集合setcell,初始化栈stackcell,将cell1、cell2、cell3和cell4放入setcell,将cell1单独放入stackcell,记celltmp为cell3。

(3)从stackcell中取出一个cell,然后将该cell经度减小方向的cell和纬度减小方向的cell依次放入stackcell中。

(4)从stackcell中取出一个cell,将该cell放入setcell,若该cell为celltmp,则记celltmp为其经度减小方向的cell,并跳转至步骤3;若该cell为cell2,则跳转至步骤2,将其纬度减小方向的cell放入stackcell。

(5)将setcell中所有轨迹数据放入setdata,setdata即为最终结果。

s203:精筛sets中满足carea约束的轨迹数据,具体步骤为:遍历setdata中所有轨迹数据,对于每个轨迹数据,截取其中处于carea范围的轨迹片段。

本发明公开的周期性k近邻检索sknn(tr1)=<cdate,k,dtw(tr1,tr2)>,其中,dtw(tr1,tr2)为使用dtw算法计算tr1和tr2间的距离。sknn(tr1)含义为获取满足cdate的与被检索轨迹tr1最近的k个轨迹数据。其检索过程为:

s301:检索出时间索引中满足cdate约束的空间索引集合,具体步骤与s201相同。

s302:获取候选轨迹数据,为提高检索效率,sknn检索过程中候选轨迹应尽可能少。如图4为轨迹的外扩cell集合示意图,l0层cell集合即为tr1所经过的cell集合,l0层中每个cell周围8个cell所组成的cell集合为l1层cell集合,同理可得ln层cell集合,其中n为外扩层数。候选轨迹即为l0层和l1层cell集合中的轨迹数据,如其数目少于k,则以步长为1外扩cell层数,直至候选轨迹大于或等于k。

s303:使用dtw(tr1,tr2)计算检索轨迹与所有候选轨迹的距离,并利用大小为k的小顶堆选取出与检索轨迹距离最小的前k个轨迹。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1