CN110119408A - 地理空间实时流数据下移动对象连续查询方法 - Google Patents
地理空间实时流数据下移动对象连续查询方法 Download PDFInfo
- Publication number
- CN110119408A CN110119408A CN201910220988.5A CN201910220988A CN110119408A CN 110119408 A CN110119408 A CN 110119408A CN 201910220988 A CN201910220988 A CN 201910220988A CN 110119408 A CN110119408 A CN 110119408A
- Authority
- CN
- China
- Prior art keywords
- real
- data
- rectangle
- time
- streaming data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/29—Geographical information databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Remote Sensing (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种地理空间实时流数据下移动对象连续查询方法,包括以下步骤:S1、地理空间实时流数据获取;S2、构造实时更新的地理空间实时流数据索引;S3、根据索引以及上一时刻查询结果,得到当前时刻查询结果;S4、更新结果集以待下一次查询使用。本发明提高了连续查询效率;解决了短时间内多次同一查询产生大量重复无效计算问题,使得实时流数据处理能力极大提高;高度符合地理空间实时流数据处理需要,提出的连续查询方法有效解决了查询移动对象过程中系统资源占用率过高问题。
Description
技术领域
本发明涉及地理空间实时流处理与应用技术领域,具体涉及一种地理空间实时流数据下移动对象连续查询方法。
背景技术
近年来,随着互联网、物联网的发展,数据采集和传输技术的进步,大规模的数据在短时间内持续地产生,这些数据具有高速、无限、不确定性等特征,是大量、连续、快速、随时间变化的数据流序列。面对这些流数据,处理系统需要实时地处理接收的数据,并及时输出分析结果。
传统的分析方法是把数据库或者文件存储中的数据加载到内存中,对数据计算后得到分析结果,但是这种批处理方式在流数据中难以实现。
流数据是持续产生的,并具有无限数量,而传统分析方法需要把流数据都加载到内存中才能进行分析。在数据量大和内存限制的情况下,传统分析方法无法执行。
传统的批处理方式在处理流数据时,一旦接收到数据,就对数据采用一次批处理任务。对于源源不断产生的流数据,如此频繁的批处理任务对系统开销将非常大。
传统方法根据需求可以对数据循环扫描,但是在流数据中,分析方法一般采用单遍扫描,即每个数据只被处理一次。
在流数据中,数据具有时效性,持续查询(Continuous Queries) 会对最近某个窗口的数据进行分析,而传统方法无法支持这种滑动窗口式查询。
流数据处理在现实生活中应用广泛,例如金融业应用、互联网、物联网等,通过对采集到的数据进行实时数据计算和分析,然后动态生成用户需要的信息;再如及时更新交易统计,实时展现用户的点击率以及生成实时的热门话题等。由此可见,如何快速地处理和分析大规模流数据是目前计算系统面对的挑战。
发明内容
本发明的目的是提供一种地理空间实时流数据下移动对象连续查询方法,克服现有技术中对实时流数据进行连续查询过多重复冗余计算导致实时性能不佳的缺陷。
本发明所采用的技术方案为:
地理空间实时流数据下移动对象连续查询方法,其特征在于:
包括以下步骤:
S1、采集移动对象实时反馈的实时流数据,将实时流数据存储于消息中间件中,根据集群并发处理能力从消息中间件中进行消费,做实时流数据处理;
S2、根据获取到的数据构建或实时更新四叉树网格索引;
S3、对四叉树网格索引进行概念划分,确定连续查询时区域访问顺序;
S4、根据历史查询结果以及新数据更新列表做当前时刻查询操作,更新查询结果并反馈到用户。
步骤S1中将实时流数据存储于消息中间件中的具体方法为:
Kafka设计中包含有一个Topic,其中含有多个Partition,每个Partition有两个Consumer Group,每个Consumer Group中只有一个consumer;
Topic被分成n个Partition分布到n个broker上,每个 Partition是一个有序的队列;Partition中的每条消息都会被分配一个有序的id;
Kafka只保证按照一个Partition中的顺序将消息发送给 Consumer,不保证Topic整体的顺序。
步骤S2中根据获取到的数据构建或实时更新四叉树网格索引的具体方法为:
S21、对所有轨迹点进行MapReduce处理,Map中统计各个Region 中的轨迹点数量,Map中统计完毕后,会将二维数组传入到Reduce 中进行统计信息的合并处理;
S22、根据实时到来的轨迹数据对四叉树网格索引进行实时更新操作,包括四叉树的分裂和合并。
步骤S21中Map中统计各个Region中的轨迹点数量的方法具体为:
初始化一个n*n的整型二维数组,其中n的大小取2height-1, height为设置的四叉树最大树高,height为设置的四叉树最大树高,该二维数组用于统计其代表的区域内轨迹点的数量;处理当前Region 的所有轨迹点,判断Region中是否仍有数据待处理,若数据未处理完毕,读取Region中下一条未被处理的行数据进行数据处理,直至 Region中所有数据处理完毕。
步骤S22中根据实时到来的轨迹数据对四叉树网格索引进行实时更新操作的方法具体为:
对空间矩形在长度和宽度上分别进行二等分,从而将空间矩形均匀划分成四个等大的子空间,若子空间内的数据量小于设定的阈值,则停止对其进行划分;否则,对数据量“超载”的子空间继续进行四等分;如此递归运行直至每个网格内的数据量都不超过设定阈值。
步骤S3中对四叉树网格索引进行概念划分的方法具体为:
每个矩形由方向和级别编号,方向包括U、D、L和R,分别表示上、下、左和右,由关于q的相对方位决定;级别编号表示矩形和 cq之间矩形数目,同一方向上的矩形之间的访问顺序是,对于相同方向上的矩形DIRj和DIRj+1,他们之间的关系是: mindist(DIRj+1,q)=mindist(DIRj,q)+δ;基于公式,CPM以mindist(c,q)的升序方式访问,因此保证了网格最小集合列表;
特别地,CPM初始化空堆H并插入网格cq以及最小距离 mindist(cq,q)=0且每个方向上第0号矩形以及最小距离mindist(DIRo,q),然后,迭代地开始访问每个节点,如果堆节点是网格,则迭代内部的移动对象并相应的更新best_NN,如果堆节点是矩形DIR|v|,则将DIR|v|中每个网格c以及最小距离mindist(c,q)且下一级矩形DIR|v+1|以及最小距离mindist(DIR|v|+1,q)=mindist(DIR|v|,q)+δ插入H中;当H中被访问网格或者矩形满足mindist(DIR|v|,q)或mindist(c,q)大于best_dist时算法终止;
其中mindist(DIRj,q)表示查询点q到矩形DIRj的最小距离,best_dist查询最大距离范围,δ表示每个网格宽度。
步骤S3中确定连续查询时区域访问顺序方法具体为:
根据概念划分结果,首先确定查询点q所在的四叉树矩形区域,若该区域范围小于best_dist,则获取该单元最小近邻矩形,按照最小近邻矩形将搜索区域扩张,计算得到新搜索区域,若新搜索区域范围小于best_dist,则计算新搜索区域的最小近邻矩形,计算得到新搜索区域,并如此迭代扩展直至搜索区域范围大于best_dist。
步骤S4中根据历史查询结果以及新数据更新列表做当前时刻查询操作的方法具体为:
S41、对于连续KNN查询,使用连续KNN查询算法计算KNN集合;
S42、如果是连续范围查询,使用连续范围查询算法得到范围内所有移动对象。
步骤S41中使用连续KNN查询算法计算KNN集合的方法具体为:
令O表示移出的NN的集合,即移动到距离q比best_dist更远的位置,I表示移入的NN的集合,即移动到距离q比比best_dist更近的位置;以q为圆心,best_dist为半径的圆的集合为I∪best_NN -O;如果|I|≥|O|,其中|I|和|O|分别是I和O集合中包含元素的个数,该圆包括至少k个对象;在I∪best_NN-O中选择k个最佳对象形成新的NN集合,而无需调用重新计算模块,在CPM算法中进行了这种增强;在处理Up前,记录q的当前best_dist;在更新处理期间,维护k个最佳传入对象的in_list;在程序结束时,如果in_list包含多余|O|,将best_NN-O与in_list合并,并在其中选择k个最佳对象形成q的KNN集合新的结果;如果in_list包含少于|O|个对象,这时只需调用重新计算模块。
步骤S42中使用连续范围查询算法得到范围内所有移动对象的方法具体为:
对移动对象更新表Up中对象数量|Up|进行判断,K表示系统设定的阈值,如果|Up|≤K,则直接对更新表Up中对象计算dist(p,q),如果 dist(p,q)≤R则将q插入结果集,否则忽略;如果|Up|>K则调用重新计算模块。
本发明具有以下优点:
本发明的地理空间实时流数据下移动对象连续查询方法,提出了一种基于用户在实时流数据应用与处理时具有高效性与实时性特征,采用实时可变的四叉树网格索引,实现自适应可变的索引结构并减少复杂索引结构更新带来的系统开销;进而基于四叉树网格索引进行概念划分,确定区域访问顺序,合理利用历史查询结果集以及更新数据集有效地提高查询移动对象效率。
附图说明
图1是本发明实施例的流程图。
图2是本发明实施例的四叉树网格索引示意图。
图3是本发明实施例的概念划分示意图。
图4是本发明实施例的连续查询区域扩张示意图。
图5是本发明实施例的多点更新连续查询示意图。
具体实施方式
下面结合具体实施方式对本发明进行详细的说明。
如图一所示,本发明实施例的一种地理空间实时流数据下移动对象连续查询方法,包括以下步骤:
S1、采集移动对象实时反馈的实时流数据,将实时流数据存储于消息中间件中,根据集群并发处理能力从消息中间件中进行订阅,做实时流数据处理;
S2、根据获取到的数据构建或实时更新四叉树网格索引;
S3、对四叉树网格索引进行概念划分,确定连续查询时区域访问顺序;
S4、根据历史查询结果以及新数据更新列表做当前时刻查询操作,更新查询结果并反馈到用户。
步骤S1中将实时流数据存储于消息中间件中的具体方法为:
Kafka设计中包含有一个Topic,其中含有多个Partition,每个 Partition有两个Consumer Group(CG),每个Consumer Group(CG) 中只有一个consumer。
只有一个Topic,保证每条消息发布到Kafka集群时被指定的消息类别是统一的。
为了实现扩展性,Topic被分成n个Partition分布到n个broker 上,每个Partition是一个有序的队列。Partition中的每条消息都会被分配一个有序的id(offset)。Kafka只保证按照一个Partition中的顺序将消息发送给Consumer,不保证Topic整体(多个Partition之间) 的顺序。
CG是Kafka用来实现一个Topic消息广播(发给所有consumer) 和单播(发给任意一个Consumer)的手段。Topic的消息会复制(不是真的复制,是概念上的)到所有CG。所以本文设有两个CG,目的是同时提供实时流数据的压缩和索引构建的多元化处理。
由于每一条消息只会被同一个CG里的一个Consumer实例消费,不同的CG可以同时消费同一条消息,所以在每一个CG中只包含一个Consumer。
步骤S2中根据获取到的数据构建或实时更新四叉树网格索引的具体方法为:
S21、对所有轨迹点进行MapReduce处理,Map中统计各个Region 中的轨迹点数量,Map中统计完毕后,会将二维数组传入到Reduce 中进行统计信息的合并处理。;
S22、根据实时到来的轨迹数据对四叉树网格索引进行实时更新操作,包括四叉树的分裂和合并。
步骤S21中Map中统计各个Region中的轨迹点数量的方法具体为:
初始化一个n*n的整型二维数组,其中n的大小取2height-1,height 为设置的四叉树最大树高,该二维数组用于统计其代表的区域内轨迹点的数量。处理当前Region的所有轨迹点,判断Region中是否仍有数据待处理,若数据未处理完毕,读取Region中下一条未被处理的行数据进行数据处理,直至Region中所有数据处理完毕。
步骤S22中根据实时到来的轨迹数据对四叉树网格索引进行实时更新操作的方法具体为:
对空间矩形在长度和宽度上分别进行二等分,从而将空间矩形均匀划分成四个等大的子空间,若子空间内的数据量小于设定的阈值,则停止对其进行划分;否则,对数据量“超载”的子空间继续进行四等分。如此递归运行直至每个网格内的数据量都不超过设定阈值。而在实际操作中,为了防止递归层次太深,通常会对四叉树的树高进行约束,比如设置树高的最大值,当递归操作使得树高将超过设定的最大值时,则停止递归划分。设定阈值大小时,需综合考虑实际情况,包括数据源大小、数据分布情况和集群设备的硬件条件。若数据源过大而阈值过小,则会导致四叉树的深度和量级过大,对设备内存资源的要求越高。或者,若同时限制了四叉树的树高,则会导致网格划分提前结束,达不到数据平衡的效果。若数据源过小而阈值过大,则会导致四叉树过“矮”,从而达不到好的数据筛选和过滤的效果,影响检索性能。因此,实际设置阈值时,需综合考虑数据源和集群硬件资源等因素,合理控制四叉树的高度和量级。
步骤S3中对四叉树网格索引进行概念划分的方法具体为:
每个矩形由方向和级别编号,方向包括U、D、L和R(分别表示上、下、左和右),由关于q的相对方位决定。级别编号表示矩形和cq之间矩形数目,同一方向上的矩形之间的访问顺序是,对于相同方向上的矩形DIRj和DIRj+1,他们之间的关系是: mindist(DIRj+1,q)=mindist(DIRj,q)+δ。基于公式,CPM以mindist(c,q)的升序方式访问,因此保证了网格最小集合列表。特别地,CPM初始化空堆H并插入网格cq以及最小距离mindist(Cq,q)=0且每个方向上第0号矩形以及最小距离mindist(DIRo,q)。然后,迭代地开始访问每个节点,如果堆节点是网格,则迭代内部的移动对象并相应的更新best_NN,如果堆节点是矩形DIR|v|,则将DIR|v|中每个网格c以及最小距离mindist(c,q)且下一级矩形DIR|v+1|以及最小距离mindist(DIR|v|+1,q)=mindist(DIR|v|,q)+δ插入H中。当H中被访问网格或者矩形满足mindist(DIR|v|,q)或mindist(c,q)大于best_dist时算法终止。
其中mmdist(DIRj,q)表示查询点q到矩形DIRj的最小距离,best_dist查询最大距离范围,δ表示每个网格宽度。
步骤S3中确定连续查询时区域访问顺序方法具体为:
根据概念划分结果,首先确定查询点q所在的四叉树矩形区域,若该区域范围小于best_dist,则获取该单元最小近邻矩形,按照最小近邻矩形将搜索区域扩张,计算得到新搜索区域,若新搜索区域范围小于best_dist,则计算新搜索区域的最小近邻矩形,计算得到新搜索区域,并如此迭代扩展直至搜索区域范围大于best_dist。
步骤S4中根据历史查询结果以及新数据更新列表做当前时刻查询操作的方法具体为:
S41、对于连续KNN查询,使用连续KNN查询算法计算KNN 集合。
S42、如果是连续范围查询,使用连续范围查询算法得到范围内所有移动对象。
步骤S41中使用连续KNN查询算法计算KNN集合的方法具体为:
令O表示移出的NN的集合(即移动到距离q比best_dist更远的位置),I表示移入的NN的集合(即移动到距离q比比best_dist 更近的位置)。以q为圆心,best_dist为半径的圆的集合为I∪ best_NN-O。如果|I|≥|O|(其中|I|和|O|分别是I和O集合中包含元素的个数),该圆包括至少k个对象。因此,我们可以在I∪best_NN- O中选择k个最佳对象形成新的NN集合,而无需调用重新计算模块。如下所述,在CPM算法中进行了这种增强。在处理Up前,我们记录q的当前best_dist。在更新处理期间,我们维护k个最佳传入对象的in_list(在任何情况下我们都不需要超过k个最佳移入对象)。在程序结束时,如果in_list包含多余|O|,我们将best_NN-O与in_list 合并,并在其中选择k个最佳对象形成q的KNN集合新的结果。如果in_list包含少于|O|个对象,这时只需调用重新计算模块。
步骤S42中使用连续范围查询算法得到范围内所有移动对象的方法具体为:
对移动对象更新表Up中对象数量|Up|进行判断,如果|Up|≤K(K表示系统设定的阈值)则直接对更新表Up中对象计算dist(p,q),如果 dist(p,q)≤R则将q插入结果集,否则忽略。如果|Up|>K则调用重新计算模块。
本发明的基本思想为:考虑实时流数据处理与应用个高效和实时地进行连续查询操作。首先通过用户提供的区域范围对整个数据范围进行网格划分,依据网格内移动对象数量进行网格的拆分和合并完成四叉树索引的实时更新,使得访问数据时减少时间的消耗;再对四叉树网格索引进行概念划分,确定访问顺序,对当前查询结果集进行保存,对下一次数据的更新建立列表,通过结合两个数据集实现高效的更新结果集的效果,从而节省了反复查询的消耗,显著提高了查询效率。
同常见的连续查询方法相比,本发明的关键创造点是基于对数据范围简历四叉树网格索引,从而减少对索引更新所消耗的时间;对四叉树索引进行概念划分确定访问顺序,同时结合旧的结果集与数据更新列表得到新的结果集,以获得更高效的查询效率。
在本发明实施例的具体说明:
本发明提出的一种地理空间实时流数据下移动对象连续查询方法,具体步骤如下:
步骤1,Kafka消息中间件消息生产和订阅
本发明方法的实施基础是基于实时流数据的处理。通过采集移动对象实时反馈的实时流数据,将实时流数据存储于消息中间件中,根据集群并发处理能力从消息中间件中进行订阅,做实时流数据处理。 Kafka由Topic、partition、Consumer Group(CG)和Consumer,下面对每一部分进行说明:
Topic:只有一个Topic,保证每条消息发布到Kafka集群时被指定的消息类别是统一的。
Partition:为了实现扩展性,Topic被分成n个Partition分布到n 个broker上,每个Partition是一个有序的队列。Partition中的每条消息都会被分配一个有序的id(offset)。Kafka只保证按照一个Partition 中的顺序将消息发送给Consumer,不保证Topic整体(多个Partition 之间)的顺序。
Consumer Group(CG):CG是Kafka用来实现一个Topic消息广播(发给所有consumer)和单播(发给任意一个Consumer)的手段。 Topic的消息会复制(不是真的复制,是概念上的)到所有CG。所以本文设有两个CG,目的是同时提供实时流数据的压缩和索引构建的多元化处理。
Consumer:由于每一条消息只会被同一个CG里的一个Consumer 实例消费,不同的CG可以同时消费同一条消息,所以在每一个CG 中只包含一个Consumer。
步骤2,根据获取到的数据构建或实时更新四叉树网格索引
本步骤是基于步骤1中从Kafka中实时获取的移动对象数据进行的实时更新四叉树网格索引,完成数据的导入后,轨迹数据被存储在 HBase表的各个Region中,现根据预先给定的空间范围(即经度坐标最小值、经度坐标最大值、纬度坐标最小值和纬度坐标最大值)针对这些轨迹数据点构建四叉树网格索引。四叉树网格索引的构建流程主要分为两步,每一步都需要开启一个MapReduce任务来完成。
(1)对所有轨迹点的空间范围矩形进行网格划分,统计各个网格内的轨迹点数目;
(2)根据实时到来的轨迹数据对四叉树网格索引进行实时更新操作,包括四叉树的分裂和合并。
初始化一个n*n的整型二维数组(其中n的大小取,height为设置的四叉树最大树高),该二维数组用于统计其代表的区域内轨迹点的数量。
处理当前Region的所有轨迹点,判断Region中是否仍有数据待处理,若数据未处理完毕,读取Region中下一条未被处理的行数据进行数据处理。
解析当前轨迹点的经纬度坐标,判断该点位于的具体网格,让该网格对应的数组元素自增(加1)。
各个网格内的轨迹点数量统计完毕,统计结果记录在二维整型数组中,将当前统计结果传入到Reduce中。
在Reduce将各个Region中的结果进行合并,算法结束。
根据实时到来的轨迹数据对四叉树网格索引进行实时更新操作,包括四叉树的分裂和合并。传统的网格划分方法中,矩形区域按照空间的长度和宽度,被均匀划分成2n*2n(其中n为正整数)个大小相同的子空间单元,每个子空间单元即是一个网格。同时,矩形区域中的轨迹点也被划分到其落入的网格中。以网格作为叶子节点向上构建四叉树,得到的四叉树是一棵满四叉树。
然而上述的传统网格划分方法并不非常适用于时空轨迹数据,因为轨迹数据在不同的时空区域其聚集程度是不一样的。以汽车轨迹数据为例说明,繁华的城市中心由于汽车路经较多,容易在市中心区域产生大量轨迹数据;而偏远的郊区地带汽车稀少,因此该区域只有少量的轨迹数据。若采用传统的划分标准来对时空轨迹数据进行网格划分,会造成数据的倾斜,使各个网格内负载的数据量不平衡。数据的倾斜会造成某些网格负载过重而有些网格负载过轻,这对网格内数据的访问是不利的。
为了使时空轨迹点能更均匀地分布在各个网格内,让每个网格内负载的数据量达到相对平衡的状态,本论文采用如图二所示的网格划分策略。该策略的核心思想是对空间矩形在长度和宽度上分别进行二等分,从而将空间矩形均匀划分成四个等大的子空间,若子空间内的数据量小于设定的阈值,则停止对其进行划分;否则,对数据量“超载”的子空间继续进行四等分。如此递归运行直至每个网格内的数据量都不超过设定阈值。而在实际操作中,为了防止递归层次太深,通常会对四叉树的树高进行约束,比如设置树高的最大值,当递归操作使得树高将超过设定的最大值时,则停止递归划分。设定阈值大小时,需综合考虑实际情况,包括数据源大小、数据分布情况和集群设备的硬件条件。若数据源过大而阈值过小,则会导致四叉树的深度和量级过大,对设备内存资源的要求越高。或者,若同时限制了四叉树的树高,则会导致网格划分提前结束,达不到数据平衡的效果。若数据源过小而阈值过大,则会导致四叉树过“矮”,从而达不到好的数据筛选和过滤的效果,影响检索性能。因此,实际设置阈值时,需综合考虑数据源和集群硬件资源等因素,合理控制四叉树的高度和量级。
上述改进后的网格划分策略较好地适应了轨迹数据空间分布不均匀的情况。在数据分布相对密集的区域,四叉树划分地更深,每个网格所代表的区域空间越小;反之,在数据分布较稀疏的地区,每个网格所表示的空间范围更大。
步骤3,对四叉树网格索引进行概念划分,确定连续查询时区域访问顺序
基于步骤2构建的四叉树网格索引,对四叉树网格索引进行概念分区。概念分区算法利用四叉树网格索引数据来解决欧式空间连续查询问题。概念分区采用了“概念划分”的方法对网格进行划分,这种划分修剪了不必要的网格,使得连续查询搜索的数据集达到最小化,增进了一定效率。通过四叉树网格索引概念分区并确定访问顺序包括以下两个子步骤:
(1)对四叉树网格索引进行概念划分:
如图三所示,每个矩形由方向和级别编号,方向包括U、D、L 和R(分别表示上、下、左和右),由关于q的相对方位决定。
级别编号表示矩形和Cq之间矩形数目,同一方向上的矩形之间的访问顺序是,对于相同方向上的矩形DIRj和DIRj+1,他们之间的关系是:
mindist(DIRj+1,q)=mindist(DIRj,q)+δ。
概念分区以mindist(c,q)的升序方式访问,因此保证了网格最小集合列表。
(2)确定连续查询时区域访问顺序
如图四所示,图中标号为四叉树中各个矩形的层次,图左边是以 q点所在矩形开始扩展查询,右边是三次扩张后的搜索区域。其中,三次扩张依据的矩形层次集合为{3,3,4},两个层次为4的矩形可以合并视为一个层次为3的矩形{3,3},而两个层次为3的矩形可以合并为一个层次为2的矩形,因此依据层次分别为{3,3,4}的矩形进行的三次搜索区域扩张,最终可以视为根据层次为2的矩形进行了一次扩张。扩张步骤如下:
首先确定查询点q所在的四叉树矩形区域,
若该区域范围小于best_dist,则获取该单元最小近邻矩形,按照最小近邻矩形将搜索区域扩张,计算得到新搜索区域.
若新搜索区域范围小于best_dist,则计算新搜索区域的最小近邻矩形,计算得到新搜索区域,并如此迭代扩展直至搜索区域范围大于 best_dist。
步骤4,基于历史查询结果以及新数据更新列表做当前时刻查询操作。计算过程包括两个子步骤:
(1)连续KNN查询,使用连续KNN查询算法计算KNN集合
如图五所示其中p2,p3位置发生更新。如果首先处理p2,则q 将被标记为受影响,(p2是当前NN并且移动得比best_dist更远),触发NN重新计算模块。然而这时不必要的,因为对象p3比先前的 best_dist更接近q,并且可以简单地用移入的p3替换移出的p2。
通常,令O表示移出的NN的集合(即移动到距离q比best_dist 更远的位置),I表示移入的NN的集合(即移动到距离q比比best_dist 更近的位置)。
以q为圆心,best_dist为半径的圆的集合为I∪best_NN–O。如果|I|≥|O|(其中|I|和|O|分别是I和O集合中包含元素的个数),该圆包括至少k个对象。
因此,可以在I∪best_NN–O中选择k个最佳对象形成新的 NN集合,而无需调用重新计算模块。
如下所述,在算法中进行了这种增强。在处理Up前,记录q的当前best_dist。在更新处理期间,维护k个最佳传入对象的in_list(在任何情况下都不需要超过k个最佳移入对象)。
在程序结束时,如果in_list包含多余|O|,将best_NN–O与in_list 合并,并在其中选择k个最佳对象形成q的KNN集合新的结果。
如果in_list包含少于|O|个对象,这时只需调用重新计算模块。
通常,q的最近邻集中在较小的一块区域中并且q的影响区域只包含很少的网格。因此影响列表、搜索列表和访问列表开销都会很小。但是如果系统的物理内存耗尽,我们可以直接删除搜索堆和q的访问列表以释放空间。即使没有这些信息,概念分区也可以继续监控q。
(2)连续范围查询算法得到范围内所有移动对象。
确定查询点q所在的四叉树矩形区域
若该区域范围小于R,则获取该单元最小近邻矩形
按照最小近邻矩形将搜索区域扩张,计算得到新搜索区域
若新搜索区域范围小于R,则计算新搜索区域的最小近邻矩形
计算得到新搜索区域,并如此迭代扩展直至搜索区域范围大于R,得到最终影响区域。
本发明的内容不限于实施例所列举,本领域普通技术人员通过阅读本发明说明书而对本发明技术方案采取的任何等效的变换,均为本发明的权利要求所涵盖。
Claims (10)
1.地理空间实时流数据下移动对象连续查询方法,其特征在于:
包括以下步骤:
S1、采集移动对象实时反馈的实时流数据,将实时流数据存储于消息中间件中,根据集群并发处理能力从消息中间件中进行消费,做实时流数据处理;
S2、根据获取到的数据构建或实时更新四叉树网格索引;
S3、对四叉树网格索引进行概念划分,确定连续查询时区域访问顺序;
S4、根据历史查询结果以及新数据更新列表做当前时刻查询操作,更新查询结果并反馈到用户。
2.根据权利要求1所述的地理空间实时流数据下移动对象连续查询方法,其特征在于:
步骤S1中将实时流数据存储于消息中间件中的具体方法为:
Kafka设计中包含有一个Topic,其中含有多个Partition,每个Partition有两个Consumer Group,每个Consumer Group中只有一个consumer;
Topic被分成n个Partition分布到n个broker上,每个Partition是一个有序的队列;Partition中的每条消息都会被分配一个有序的id;
Kafka只保证按照一个Partition中的顺序将消息发送给Consumer,不保证Topic整体的顺序。
3.根据权利要求2所述的地理空间实时流数据下移动对象连续查询方法,其特征在于:
步骤S2中根据获取到的数据构建或实时更新四叉树网格索引的具体方法为:
S21、对所有轨迹点进行MapReduce处理,Map中统计各个Region中的轨迹点数量,Map中统计完毕后,会将二维数组传入到Reduce中进行统计信息的合并处理;
S22、根据实时到来的轨迹数据对四叉树网格索引进行实时更新操作,包括四叉树的分裂和合并。
4.根据权利要求3所述的地理空间实时流数据下移动对象连续查询方法,其特征在于:
步骤S21中Map中统计各个Region中的轨迹点数量的方法具体为:
初始化一个n*n的整型二维数组,其中n的大小取2height-1,height为设置的四叉树最大树高,height为设置的四叉树最大树高,该二维数组用于统计其代表的区域内轨迹点的数量;处理当前Region的所有轨迹点,判断Region中是否仍有数据待处理,若数据未处理完毕,读取Region中下一条未被处理的行数据进行数据处理,直至Region中所有数据处理完毕。
5.根据权利要求4所述的地理空间实时流数据下移动对象连续查询方法,其特征在于:
步骤S22中根据实时到来的轨迹数据对四叉树网格索引进行实时更新操作的方法具体为:
对空间矩形在长度和宽度上分别进行二等分,从而将空间矩形均匀划分成四个等大的子空间,若子空间内的数据量小于设定的阈值,则停止对其进行划分;否则,对数据量“超载”的子空间继续进行四等分;如此递归运行直至每个网格内的数据量都不超过设定阈值。
6.根据权利要求5所述的地理空间实时流数据下移动对象连续查询方法,其特征在于:
步骤S3中对四叉树网格索引进行概念划分的方法具体为:
每个矩形由方向和级别编号,方向包括U、D、L和R,分别表示上、下、左和右,由关于q的相对方位决定;级别编号表示矩形和Cq之间矩形数目,同一方向上的矩形之间的访问顺序是,对于相同方向上的矩形DIRj和DIRj+1,他们之间的关系是:mindist(DIRj+1,q)=mindist(DIRj,q)+δ;基于公式,CPM以mindist(c,q)的升序方式访问,因此保证了网格最小集合列表;
特别地,CPM初始化空堆H并插入网格Cq以及最小距离mindist(Cq,q)=0且每个方向上第0号矩形以及最小距离mindist(DIRo,q),然后,迭代地开始访问每个节点,如果堆节点是网格,则迭代内部的移动对象并相应的更新best_NN,如果堆节点是矩形DIR|v|,则将DIR|v|中每个网格c以及最小距离mindist(c,q)且下一级矩形DIR|v+1|以及最小距离mindist(DIR|v|,q=mindist(DIR|v|,q)插入H中;当H中被访问网格或者矩形满足mindist(DIR|v|,q)或mindist(c,q)大于best_dist时算法终止;
其中mindist(DIRj,q)表示查询点q到矩形DIRj的最小距离,best_dist查询最大距离范围,δ表示每个网格宽度。
7.根据权利要求6所述的地理空间实时流数据下移动对象连续查询方法,其特征在于:
步骤S3中确定连续查询时区域访问顺序方法具体为:
根据概念划分结果,首先确定查询点q所在的四叉树矩形区域,若该区域范围小于best_dist,则获取该单元最小近邻矩形,按照最小近邻矩形将搜索区域扩张,计算得到新搜索区域,若新搜索区域范围小于best_dist,则计算新搜索区域的最小近邻矩形,计算得到新搜索区域,并如此迭代扩展直至搜索区域范围大于best_dist。
8.根据权利要求7所述的地理空间实时流数据下移动对象连续查询方法,其特征在于:
步骤S4中根据历史查询结果以及新数据更新列表做当前时刻查询操作的方法具体为:
S41、对于连续KNN查询,使用连续KNN查询算法计算KNN集合;
S42、如果是连续范围查询,使用连续范围查询算法得到范围内所有移动对象。
9.根据权利要求8所述的地理空间实时流数据下移动对象连续查询方法,其特征在于:
步骤S41中使用连续KNN查询算法计算KNN集合的方法具体为:
令O表示移出的NN的集合,即移动到距离q比best_dist更远的位置,I表示移入的NN的集合,即移动到距离q比比best_dist更近的位置;以q为圆心,best_dist为半径的圆的集合为I∪best_NN–O;如果|I|≥|O|,其中|I|和|O|分别是I和O集合中包含元素的个数,该圆包括至少k个对象;在I∪best_NN–O中选择k个最佳对象形成新的NN集合,而无需调用重新计算模块,在CPM算法中进行了这种增强;在处理Up前,记录q的当前best_dist;在更新处理期间,维护k个最佳传入对象的in_list;在程序结束时,如果in_list包含多余|O|,将best_NN–O与in_list合并,并在其中选择k个最佳对象形成q的KNN集合新的结果;如果in_list包含少于|O|个对象,这时只需调用重新计算模块。
10.根据权利要求9所述的地理空间实时流数据下移动对象连续查询方法,其特征在于:
步骤S42中使用连续范围查询算法得到范围内所有移动对象的方法具体为:
对移动对象更新表Up中对象数量|Up|进行判断,K表示系统设定的阈值,如果|Up|≤K,则直接对更新表Up中对象计算dist(p,q),如果dist(p,q)≤R则将q插入结果集,否则忽略;如果|Up|>K则调用重新计算模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910220988.5A CN110119408B (zh) | 2019-03-22 | 2019-03-22 | 地理空间实时流数据下移动对象连续查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910220988.5A CN110119408B (zh) | 2019-03-22 | 2019-03-22 | 地理空间实时流数据下移动对象连续查询方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110119408A true CN110119408A (zh) | 2019-08-13 |
CN110119408B CN110119408B (zh) | 2022-12-06 |
Family
ID=67520517
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910220988.5A Active CN110119408B (zh) | 2019-03-22 | 2019-03-22 | 地理空间实时流数据下移动对象连续查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110119408B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825250A (zh) * | 2019-11-14 | 2020-02-21 | 珠海金山网络游戏科技有限公司 | 一种笔刷轨迹的优化方法及装置 |
CN110888880A (zh) * | 2019-11-19 | 2020-03-17 | 武汉光谷信息技术股份有限公司 | 基于空间索引的邻近分析方法、装置、设备及介质 |
CN113377782A (zh) * | 2021-08-12 | 2021-09-10 | 深圳市数字城市工程研究中心 | 一种城市空间移动对象查询方法、装置及存储介质 |
CN113742536A (zh) * | 2021-09-17 | 2021-12-03 | 上海交通大学 | 一种面向轨迹流数据的连续范围查询的方法和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020147703A1 (en) * | 2001-04-05 | 2002-10-10 | Cui Yu | Transformation-based method for indexing high-dimensional data for nearest neighbour queries |
CN106528815A (zh) * | 2016-11-14 | 2017-03-22 | 中国人民解放军理工大学 | 一种路网移动对象概率聚集查询方法及系统 |
CN106777093A (zh) * | 2016-12-14 | 2017-05-31 | 大连大学 | 基于空间时序数据流应用的Skyline查询系统 |
-
2019
- 2019-03-22 CN CN201910220988.5A patent/CN110119408B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020147703A1 (en) * | 2001-04-05 | 2002-10-10 | Cui Yu | Transformation-based method for indexing high-dimensional data for nearest neighbour queries |
CN106528815A (zh) * | 2016-11-14 | 2017-03-22 | 中国人民解放军理工大学 | 一种路网移动对象概率聚集查询方法及系统 |
CN106777093A (zh) * | 2016-12-14 | 2017-05-31 | 大连大学 | 基于空间时序数据流应用的Skyline查询系统 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110825250A (zh) * | 2019-11-14 | 2020-02-21 | 珠海金山网络游戏科技有限公司 | 一种笔刷轨迹的优化方法及装置 |
CN110825250B (zh) * | 2019-11-14 | 2024-02-23 | 珠海金山数字网络科技有限公司 | 一种笔刷轨迹的优化方法及装置 |
CN110888880A (zh) * | 2019-11-19 | 2020-03-17 | 武汉光谷信息技术股份有限公司 | 基于空间索引的邻近分析方法、装置、设备及介质 |
CN113377782A (zh) * | 2021-08-12 | 2021-09-10 | 深圳市数字城市工程研究中心 | 一种城市空间移动对象查询方法、装置及存储介质 |
CN113377782B (zh) * | 2021-08-12 | 2021-11-16 | 深圳市数字城市工程研究中心 | 一种城市空间移动对象查询方法、装置及存储介质 |
CN113742536A (zh) * | 2021-09-17 | 2021-12-03 | 上海交通大学 | 一种面向轨迹流数据的连续范围查询的方法和系统 |
CN113742536B (zh) * | 2021-09-17 | 2024-04-19 | 上海交通大学 | 一种面向轨迹流数据的连续范围查询的方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110119408B (zh) | 2022-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110119408A (zh) | 地理空间实时流数据下移动对象连续查询方法 | |
Hartmann et al. | Clustering evolving networks | |
CN110889434B (zh) | 一种基于活动的社交网络活动特征提取方法 | |
WO2022217839A1 (zh) | 一种基于深度时空相似性的空气质量预测方法 | |
CN106777093B (zh) | 基于空间时序数据流应用的Skyline查询系统 | |
CN104462190A (zh) | 一种基于海量空间轨迹挖掘的在线的位置预测方法 | |
CN107220285A (zh) | 面向海量轨迹点数据的时空索引构建方法 | |
Yang et al. | An improved artificial bee colony algorithm for optimal land-use allocation | |
CN105608222A (zh) | 一种大规模栅格数据集的瓦片金字塔快速构建方法 | |
CN106708989A (zh) | 基于空间时序数据流应用的Skyline查询方法 | |
CN106528815B (zh) | 一种路网移动对象概率聚集查询方法及系统 | |
CN110471946A (zh) | 一种基于网格剪枝的lof离群点检测方法及系统 | |
CN107526975A (zh) | 一种基于差分隐私保护决策树的方法 | |
Fan et al. | A new multi-objective particle swarm optimizer using empirical movement and diversified search strategies | |
CN111709560A (zh) | 一种基于改进蚁群算法的解决车辆路径问题方法 | |
Sarwat | Interactive and scalable exploration of big spatial data--a data management perspective | |
Wang et al. | Short-term load forecasting of power system based on time convolutional network | |
Yang et al. | Recommending profitable taxi travel routes based on big taxi trajectories data | |
Song et al. | A data streams analysis strategy based on hoeffding tree with concept drift on hadoop system | |
Wang et al. | Stull: Unbiased online sampling for visual exploration of large spatiotemporal data | |
CN107257307A (zh) | 一种基于Spark的并行化遗传算法求解多终端协同接入网络方法 | |
CN110222023A (zh) | 基于Spark与蚁群优化的多目标并行属性约简方法 | |
CN116822759A (zh) | 旅行商问题求解方法、装置、设备及存储介质 | |
Zhang et al. | Maximizing range sum in trajectory data | |
Liu et al. | Analysis and improvement of neighborhood topology of particle swarm optimization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |