买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:昆明理工大学
摘要:本发明涉及一种基于Geo‑BTree的范围查询方法及装置,本发明方法包括:数据预处理步骤,将数据集中所有位置点编码成长度为n的字符串string,根据字符串按字典序对数据集中的位置点排序并编号ID;空间索引建立步骤,根据排序后的字符串构建B‑Tree索引结构;范围查询步骤,以检索B‑Tree索引结构返回的ID为起始点双向搜索获取查询域内的ID,经过滤得到ID候选集,并对候选集中ID所对应的位置点验证返回查询范围内的位置点。本发明采用基于geohash编码构建B‑Tree索引结构,具有较高的查询效率,可直接用于数据管理系统中;采用geohash空间索引方法,有效支持任意范围查询。
主权项:1.一种基于Geo-BTree的范围查询方法,其特征在于:包括:数据预处理步骤,将数据集中所有位置点编码成长度为n的字符串string,根据字符串按字典序对数据集中的位置点排序并编号ID;空间索引建立步骤,根据排序后的字符串构建B-Tree索引结构;范围查询步骤,以检索B-Tree索引结构返回的ID为起始点双向搜索获取查询域内的ID,经过滤得到ID候选集,并对候选集中ID所对应的位置点验证返回查询范围内的位置点;所述空间索引建立步骤,具体为:步骤210:根据字符串构建B-Tree索引结构,每个结点至少存储1个string,ID;所述范围查询步骤,具体包括如下步骤:步骤310:给定查询位置点q和查询距离范围d,根据geohash精度表选定与d相对应的geohash编码长度p,通过geohash算法将位置点q编码为p位长度的字符串qs,获取字符串qs周围8个区域的geohash编码,并将字符串qs及其周围8个区域的geohash编码分别作为查询域,共9个查询域;其中,p对应的距离误差不小于d且为最小值,每一个geohash编码表示一个区域;步骤320:根据检索B-Tree索引结构返回的ID,在记录集中以此ID为起始点双向搜索至不满足查询条件,返回满足查询条件的ID,为一个查询域内的ID;重复以上操作至获取9个查询域内的ID;其中,每一行数据称为一条记录,则由这些数据组成的数据集称为记录集,记录由ID、纬度、经度、字符串组成;查询条件指记录集中字符串的前p位与查询域的geohash编码相同;步骤330:根据查询位置点q和查询距离范围d分别确定纬度范围与经度范围,通过经纬度范围对9个查询域内的ID进行筛选,最终得到ID候选集;步骤340:计算候选集中ID对应的位置点到q的距离dq:若dq≤d,则返回该位置点,否则,不返回。
全文数据:_种基于Geo-BTree的范围查询方法及装置技术领域[0001]本发明涉及一种基于Geo-BTree的范围查询方法及装置,属于数据库Database领域、范围查询RangeSearch领域、基于位置的服务Location-BasedService,LBS等领域。背景技术[0002]近年来,随着智能手机、平板电脑等移动设备的普及,基于桌面的互联网时代已转向移动互联网时代。与此同时,随着定位技术的发展,如:6?5、36、46、胃1?1等,导致产生了大量具有位置属性的数据,且数据量急剧增长。[0003]面对海量的空间数据,高效支持空间查询是一个迫切需要解决的问题。空间索引用于过滤、排除大量与特定空间操作无关的地理对象,从而缩减空间操作范围,为高效支持空间查询,则需高效的空间索引结构。从空间数据库的观点来看,空间索引结构可以分为两类:专门用于处理点对象的点存取方法PAM和处理具有空间扩展的空间对象包括点、线、面、体的空间存取方法SAM。PAM包括Grid文件、Buddy树、K-D-B树、hB树、LSD树等;依据空间对象的不同组织方式,SAM分为对象映射、对象分割复制和对象界定三类,对象映射即将高维空间中的对象线性映射到一维空间,用空间排列码如:Peano码、HiIbert码、Morton码等进行表达;对象分割复制是把与子空间相交的数据对象分割成几个子对象,分别存储在互不重叠的子空间中,在子空间中复制对象本身或其标识符,如:R+树、Ce11树、线性四叉树等;对象界定又称为区域重叠技术,其主要思想是允许子空间的相互重叠,如:R树、R*树等。R树是目前最流行的动态空间索引结构,其采用对象的最小外包矩形(MinimumBoundingRectangle,MBR来近似表示空间实体,可有效支持查询、插入、删除等操作。由于空间数据分布的偶然性,容易造成MBR重叠,查询时会产生多个查询分支,从而降低查询效率。[0004]选取geohash空间索引方法可有效解决R-Tree的多路径查询问题,geohash编码用二分法划分空间,避免了区域重叠;选用geohash编码可支持任意范围查询。因此,geohash空间索引方法广泛用于多个领域,如:地理信息系统领域(如:PostGIS、空间数据库领域如:MongoDB、信息检索领域如:Lucene。[0005]存储geohash编码常用的索引结构如:B-TreehB+TreedashingcB-Tree是一种自平衡的树,其支持对数据的增加、删除、修改、查找操作在对数时间内完成,故B-Tree常被应用在数据库和文件系统的实现上。R-Tree是B-Tree在k维空间上的自然扩展,因其采用对象界定技术组织空间对象,造成多路径查询问题,从而降低查询效率。发明内容[0006]本发明提供了一种基于Geo-BTree的范围查询方法及装置,目的在于有效支持任意范围查询;有效解决因R树存在的多路径查询问题而导致的检索低效问题;直接用于数据管理系统中。[0007]本发明的技术方案是:一种基于Geo-BTree的范围查询方法,包括:数据预处理步骤,将数据集中所有位置点编码成长度为η的字符串string,根据字符串按字典序对数据集中的位置点排序并编号ID;空间索引建立步骤,根据排序后的字符串构建B-Tree索引结构;范围查询步骤,以检索B-Tree索引结构返回的ID为起始点双向搜索获取查询域内的ID,经过滤得到ID候选集,并对候选集中ID所对应的位置点验证返回查询范围内的位置点。[0008]所述数据预处理步骤,具体包括如下步骤:步骤110:给定一个由一系列位置点构成的数据集D,通过geohash算法将D中的位置点编码成长度为η的字符串string;其中,位置点由炜度、经度数据构成;步骤120:根据字符串按字典序对数据集中的位置点排序并编号,该编号即为对应的位置点ID,每一行数据称为一条记录,则由这些数据组成的数据集称为记录集;其中,记录由ID、炜度、经度、字符串组成。[0009]所述空间索引建立步骤,具体为:步骤210:根据字符串构建B-Tree索引结构,每个结点至少存储1个〈string,ID〉。[0010]所述范围查询步骤,具体包括如下步骤:步骤310:给定查询位置点q和查询距离范围d,根据geohash精度表选定与d相对应的geohash编码长度p,通过geohash算法将位置点q编码为p位长度的字符串qs,获取字符串qs周围8个区域的geohash编码,并将字符串qs及其周围8个区域的geohash编码分别作为查询域,共9个查询域;其中,p对应的距离误差不小于d且为最小值,每一个geohash编码表示一个区域;步骤320:根据检索B-Tree索引结构返回的ID,在记录集中以此ID为起始点双向搜索至不满足查询条件,返回满足查询条件的ID,为一个查询域内的ID;重复以上操作至获取9个查询域内的ID;其中,每一行数据称为一条记录,则由这些数据组成的数据集称为记录集,记录由ID、炜度、经度、字符串组成;查询条件指记录集中字符串的前p位与查询域的geohash编码相同;步骤330:根据查询位置点q和查询距离范围d分别确定炜度范围与经度范围,通过经炜度范围对9个查询域内的ID进行筛选,最终得到ID候选集;步骤340:计算候选集中ID对应的位置点到q的距离dq:若Kd,则返回该位置点,否贝IJ,不返回。[0011]所述步骤110,包括下列步骤111、112:步骤111:根据geohash精度表确定geohash编码长度η;步骤112:通过geohash算法将所有位置点编码成长度为η的字符串。[0012]所述通过geohash算法将位置点编码成字符串具体为:首先,将经炜度范围看作二维平面坐标系;然后,采用二分法对经度炜度进行划分,根据位置点经度炜度在划分结果中的位置分别赋值〇或1,直到划分次数满足对应的经炜度位串的位数;之后,通过位交错方法合并经度位串与炜度位串;最后,通过Base32编码将经炜度位串编码为相应长度的字符串。[0013]所述步骤310中,获取qs周围8个区域的geohash编码的方法:根据qs的经炜度位串,东西方向的区域编码:经度位串不变,炜度位串加减1,通过位交错方法得到该区域的经炜度位串;南北方向的区域编码:炜度位串不变,经度位串减加1,通过位交错方法得到该区域的经炜度位串;东北西南方向的区域编码,经炜度位串均加减1,通过位交错方法得到该区域的经炜度位串;东南方向的区域编码:炜度位串加1,经度位串减1,通过位交错方法得到该区域的经炜度位串;西北方向的区域编码:炜度位串减1,经度位串加1,通过位交错方法得到该区域的经炜度位串;之后,通过Base32编码将以上8个位串进行编码即可获得qs周围8个区域的geohash编码。[0014]所述步骤320中,根据检索B-Tree索引结构返回ID的方法为:从根结点开始重复如下过程:若比结点的第一个关键字小,则查找在该结点第一个指针指向的结点进行;若等于结点中某个关键字,则查找成功;若在两个关键字之间,则查找在它们之间的指针指向的结点进行;若比该结点所有关键字大,则查找在该结点最后一个指针指向的结点进行;若查找已经到达某个叶子结点,还未匹配成功,则查找失败,其中,字符串的如P位为关键字。[0015]所述步骤330中,根据查询位置点q和查询距离范围d分别确定炜度范围与经度范围方法如下:炜度的最大值maxLat=Iat+range,炜度的最小值minLat=Iat-range;经度的最大值maxLng=Ion+IngR,经度的最小值minLng=Ion-IngR;其中,Iat表示查询位置点q的炜度值,Ion表示查询位置点q的经度值,[0016]一种基于Geo-BTree的范围查询装置,包括:数据预处理装置,用于将数据集中所有位置点编码成长度为η的字符串string,根据字符串按字典序对数据集中的位置点排序并编号ID;空间索引建立装置,用于根据排序后的字符串构建B-Tree索引结构;范围查询装置,用于以检索B-Tree索引结构返回的ID为起始点双向搜索获取查询域内的ID,经过滤得到ID候选集,并对候选集中ID所对应的位置点验证返回查询范围内的位置点。[0017]本发明的有益效果是:本发明采用基于geohash编码构建B-Tree索引结构,具有较高的查询效率,可直接用于数据管理系统中;采用geohash空间索引方法,有效支持任意范围查询。附图说明[0018]图1是基于Geo-BTree的范围查询功能模块图;图2是geohash精度表;图3是Base32编码规则图;(注:(+_表不加减);图4是位置点转换为字符串图;图5是位置点排序图;(注:记录集)图6是基于字符串构建的B-Tree图;图7是创建索引时间对比图;图8是查询响应时间对比图;图9是基于最小外包矩形划分的空间区域图;图10是基于图9构建的R-Tree图。具体实施方式[0019]实施例1:如图1-10所示,一种基于Geo-BTree的范围查询方法,包括:数据预处理步骤:步骤111、根据geohash精度表如图2所示),将geohash编码长度η设置为8,则经炜度位串分别为20位;步骤112、通过geohash算法将D中的位置点转换成长度为8的字符串,实现方法如下:示例:(19.596412-99.219501首先将炜度范围-90,90平分成-90,0、(0,90两个区间,如果目标炜度位于前一个区间,则编码为〇,否则编码为1。因19.596412属于区间(0,90,所以编码为1;然后再将0,90分成0,45、(45,90两个区间,因19.596412属于区间(0,45,所以编码为0;以此类推,直至位串长度为20。最终19.596412的编码为10011011110111101101。[0020]经度也采取同样的方法,对范围(-180,180依次细分至位串长度为20。最终-99.219501的编码为00111001011100011010。[0021]接下来将经炜度位串进行合并,奇数位为炜度,偶数位为经度,得到编码0100101111000111011110110101011011011001。[0022]最后,通过Base32编码(如图3所示)得到(19.5964412-99.219501的geohash编码为9g3rqpqt。[0023]通过geohash算法将D中的位置点转换成长度为8的字符串,如图4所示。[0024]步骤120、根据字符串按字典序对数据集中的位置点排序并编号,如图5所示。[0025]步骤210、空间索引的建立:字符串集{2jtc7013,2jtc73c4,2svshqyr,3p0905sx,4qr2jmhq,4qstlsd7,4qt9d6rj,4qt9dxxg,4qtduesw,9g3rmy55,9g3rmzlw,9g3rqn7z,9g3rqp4t,9g3rqp57,9g3rqp5t,9g3rqp7u,9g3rqpbz,9g3rqphk,9g3rqpmz,9g3rqpnl,9g3rqpnl,9g3rqpqt,9g3rqpvz,9g3rqqmk,9g3rqr7x,9g3rqrbt,9g3rtb4h,9g3rw04d,9g3rw058,9g3rw27u},根据字符串构建B-Tree索引结构,选取m=5,则每个非叶子结点至多有5棵子树,每个结点至多有4个〈string,ID;除根结点外,其它每个分支结点至少有3棵子树;根结点至少有2棵子树;有3个孩子的非叶子结点恰好有2个〈string,ID,有4个孩子的非叶子结点恰好有3个〈string,ID;B-Tree索引结构的构建过程:依次从字符串集中获取字符串,其中,叶子结点编号从左至右依次为1、2、3、4、5、6、7、8、9、10,注:因以Map的形式存储〈string,ID,若string重复,就覆盖前一个〈string,ID,故9g3rqpnl仅出现一次,其相对应的ID为21。)步骤一:获取字符串“2jtc7013”,其对应的ID为1,存储;获取字符串“2jtc73c4”,其对应的ID为2,依次存储〈2jtc73c4,2;获取字符串“2svshqyr”,其对应的ID为3,依次存储;获取字符串“3p0905sx”,其对应的ID为4,依次存储〈3p0905sx,4;获取字符串“4qr2jmhq”,其对应的ID为5,依次存储,因每个结点至多存储4个〈string,ID,故引起分裂在中间值进行分裂,下同),如图6所示,第1个叶子结点依次存储〈2jtc7013,1、〈2jtc73c4,2,第2个叶子结点依次存储、〈4qr2jmhq,5,两个叶子结点的父结点存储;步骤二:获取字符串“4qstlsd7”,其对应的ID为6,第2个叶子结点依次存储;获取字符串“4qt9d6rj”,其对应的ID为7,第2个叶子结点依次存储;获取字符串“4qt9dxxg”,其对应的ID为8,第2个叶子结点依次存储,因每个结点至多存储4个〈string,ID,故引起分裂,如图6所示,第2个叶子结点依次存储、〈4qr2jmhq,5,第3个叶子结点依次存储、,第1、2、3个叶子结点的父结点依次存储、〈4qstlsd7,6;步骤三:获取字符串“4qtduesw”,其对应的ID为9,第3个叶子结点依次存储;获取字符串“9g3rmy55”,其对应的ID为10,第3个叶子结点依次存储;获取字符串“9g3rmzlw”,其对应的ID为11,第3个叶子结点依次存储,因每个结点至多存储4个〈string,ID,故引起分裂,如图6所示,第3个叶子结点依次存储、,第4个叶子结点依次存储、,第1、2、3、4个叶子结点的父结点依次存储〈2svshqyr,3、〈4qstlsd7,6、〈4qtduesw,9;步骤四:获取字符串“9g3rqn7z”,其对应的ID为12,第4个叶子结点依次存储〈9g3rqn7z,12;获取字符串“9g3rqp4t”,其对应的ID为13,第4个叶子结点依次存储〈9g3rqp4t,13;获取字符串“9g3rqp57”,其对应的ID为14,第4个叶子结点依次存储〈9g3rqp57,14,因每个结点至多存储4个〈string,ID,故引起分裂,如图6所示,第4个叶子结点依次存储、〈9g3rmzlw,11,第5个叶子结点依次存储、〈9g3rqp57,14,第1、2、3、4、5个叶子结点的父结点依次存储、〈4qstlsd7,6、〈4qtduesw,9、〈9g3rqn7z,12;步骤五:获取字符串“9g3rqp5t”,其对应的ID为15,第5个叶子结点依次存储〈9g3rqp5t,15;获取字符串“9g3rqp7u”,其对应的ID为16,第5个叶子结点依次存储〈9g3rqp7u,16;获取字符串“9g3rqpbz”,其对应的ID为17,第5个叶子结点依次存储〈9g3rqpbz,17,第5个叶子结点依次存储、〈9g3rqp57,14,第6个叶子结点依次存储〈9g3rqp7u,16、〈9g3rqpbz,17,第1、2、3、4、5、6个叶子结点的父结点依次存储〈2svshqyr,3、〈4qstlsd7,6、〈4qtduesw,9、〈9g3rqn7z,12、〈9g3rqp5t,15,因每个结点至多存储4个〈string,ID,故引起分裂,如图6所示,第1、2、3个叶子结点的父结点依次存储〈28¥81^71',3、〈4981:1817,6,第4、5、6个叶子结点的父结点依次存储〈983以1172,12、〈9g3rqp5t,15,第1、2、3、4、5、6个叶子结点的父结点的父结点存储;步骤六:获取字符串“9g3rqphk”,其对应的ID为18,第6个叶子结点依次存储〈9g3rqphk,18;获取字符串“9g3rqpmz”,其对应的ID为19,第6个叶子结点依次存储〈9g3rqpmz,19;获取字符串“9g3rqpnl”,其对应的ID为21,第6个叶子结点依次存储〈9g3rqpnl,21,因每个结点至多存储4个〈string,ID,故引起分裂,如图6所示,第6个叶子结点依次存储、〈9g3rqpbz,17,第7个叶子结点依次储存、〈983印?111,21,第4、5、6、7个叶子结点的父结点依次存储〈983^1172,12、〈983印?5115、〈9g3rqphk,18;步骤七:获取字符串“9g3rqpqt”,其对应的ID为22,第7个叶子结点依次存储〈9g3rqpqt,22;获取字符串“9g3rqpVZ”,其对应的ID为23,第7个叶子结点依次存储〈9g3rqpVZ,23;获取字符串“9g3rqqmk”,其对应的ID为24,第7个叶子结点依次存储〈9g3rqqmk,24,因每个结点至多存储4个〈string,ID,故引起分裂,如图6所示,第7个叶子结点依次储存、〈9g3rqpnl,21,第8个叶子结点依次存储、〈9g3rqqmk,24,第4、5、6、7、8个叶子结点的父结点依次存储、、〈9g3rqphk,18、〈9g3rqpqt,22;步骤八:获取字符串“9g3rqr7x”,其对应的ID为25,第8个叶子结点依次存储〈9g3rqr7x,25;获取字符串“9g3rqrbt”,其对应的ID为26,第8个叶子结点依次存储〈9g3rqrbt,26;获取字符串“9g3rtb4h”,其对应的ID为27,第8个叶子结点依次存储〈9g3rtb4h,27,因每个结点至多存储4个〈string,ID,故引起分裂,如图6所示,第8个叶子结点依次存储、,第9个叶子结点依次储存、〈983竹匕411,27,第4、5、6、7、8、9个叶子结点的父结点依次存储〈983^1172,12、〈983^?5七,15、〈9g3rqphk,18、〈9g3rqpqt,22、〈9g3rqr7x,25,因每个结点至多存储4个〈string,ID,故引起分裂,如图6所示,第4、5、6个叶子结点的父结点依次存储、〈9g3rqp5t,15,第7、8、9个叶子结点的父结点依次存储、〈9g3rqr7x,25,第1、2、3、4、5、6、7、8、9个叶子结点的父结点的父结点依次存储〈49七1116819、〈983印?1^,18;步骤九:获取字符串“9g3rw04d”,其对应的ID为28,第9个叶子结点依次存储〈9g3rw04d,28;获取字符串“9g3rw058”,其对应的ID为29,第9个叶子结点依次存储〈9g3rw058,29;获取字符串“9g3rw27u”,其对应的ID为30,第9个叶子结点依次存储〈9g3rw27u,30,因每个结点至多存储4个〈string,ID,故引起分裂,如图6所示,第9个叶子结点依次储存、,第10个叶子结点依次储存、〈9g3rw27u,30,第7、8、9、10个叶子结点的父结点依次存储、〈9g3rw04d,28〇[0026]范围查询包括下列步骤:步骤311、给定查询位置点(19.596412-99.219501和查询距离范围500米,需p对应的距离误差不小于500米且为最小值,则p值应设置为6,通过geohash算法将(19.596412-99·219501编码为6位长度的字符串9g3rqp;步骤312、获取9831'«周围8个区域的86〇1^811编码,并将9831'«及其周围8个区域作为查询域,方法如下:9g3rcip的炜度位串为100110111101111,经度位串为001110010111000。[0027]北方区域的geohash编码:炜度位串为100110111101111,经度位串为001110010111000+1=001110010111001,经炜度位串为010010111100011101111011010111,geohash编码为9g3rqr;东北区域的geohash编码:炜度位串为100110111101111+1=100110111110000,经度位串为001110010111000+1=001110010111001,经炜度位串为010010111100011101111110000010,geohash编码为9g3rw2;东方区域的geohash编码:炜度位串为100110111101111+1=100110111110000,经度位为001110010111000,经炜度位串为010010111100011101111110000000,geohash编码为9g3rw0;东南区域的geohash编码:炜度位串为100110111101111+1=100110111110000,经度位串为001110010111000-1=001110010110111,经炜度位串为01001011110001110111110010101046〇1^811编码为983竹13;南方区域的geohash编码:炜度位串为100110111101111,经度位串为001110010111000-1=001110010110111,经炜度位串为010010111100011101111001111111,geohash编码为9g3rmz;西南区域的geohash编码:炜度位串为100110111101111-1=100110111101110,经度位串为001110010111000-1=001110010110111,经炜度位串为01001011110001110111100111111046〇1^811编码为983^1^;西方区域的geohash编码:炜度位串为100110111101111-1=100110111101110,经度位为001110010111000,经炜度位串为010010111100011101111011010100,geohash编码为9g3rqn;西北区域的geohash编码:炜度位串为100110111101111-1=100110111101110,经度位串为001110010111000+1=001110010111001,经炜度位串为01001011110001110111101101011046〇1^811编码为983印9。[0028]9g3rqp周围的8个区域为:9g3rqr、9g3rw2、9g3rw0、9g3rtb、9g3rmz、9g3rmy、9g3rqn、9g3rqq;步骤320:根据检索B-Tree索引结构返回的ID,在记录集中以此ID为起始点双向搜索至不满足查询条件,返回满足查询条件的ID,为一个查询域内的ID;重复以上操作至获取9个查询域内的ID;其中,每一行数据称为一条记录,则由这些数据组成的数据集称为记录集,记录由ID、炜度、经度、字符串组成;查询条件指记录集中字符串的前p位与查询域的geohash编码相同;实现过程如下:通过检索B-Tree索引结构返回ID的过程,其中,从根结点至第1、2、3个叶子结点称为B-Tree的第一分支,以9g3rqp查询域为例:从根结点(叶子结点的父结点的父结点)开始,根结点中依次存储〈4qtduesw,9、〈9g3rqphk,18,关键字为“4qtdue”、“9g3rqp”,9g3rqp与第2个关键字相等,故通过B-Tree查询9g3rqp区域的ID为18。若9g3rqp比第1个关键字小,则查找在第1、2、3个叶子结点的父结点进行,若比第1、2、3个叶子结点的父结点的第1个关键字小,则查找在第1个叶子结点进行;若比第1、2、3个叶子结点的父结点的第1个关键字大,小于第1、2、3个叶子结点的父结点的第2个关键字,则查找在第2个叶子结点进行;若比第1、2、3个叶子结点的父结点的第2个关键字大,则查找在第3个叶子结点进行;若等于第1、2、3个叶子结点的父结点的某一个关键字,则返回对应的ID;若未匹配成功,则查找失败。若9g3rqp比第1个关键字大,比第2个关键字小,则查找在第4、5、6个叶子结点的父结点进行,查询方法与对B-Tree的第一分支的操作一致。若9g3rqp比第2个关键字大,则查找在第7、8、9、10个叶子结点的父结点进行,查询方法与对B-Tree的第一分支的操作一致。[0029]通过B-Tree查询9g3rqp区域的ID为18,在记录集中,以ID为18的记录为起始点双向搜索至ID所对应的字符串的前6位不等于“9g3rqp”,故9g3rqp区域内的ID为{18,17,16,15,14,13,19,20,21,22,23};通过B-Tree查询9g3rqr区域的ID为25,在记录集中,以ID为25的记录为起始点双向搜索至ID所对应的字符串的前6位不等于“9g3rqr”,故9g3rqr区域内的ID为{25,26};通过B-Tree查询9g3rw2区域的ID为30,在记录集中,以ID为30的记录为起始点双向搜索至ID所对应的字符串的前6位不等于“9g3rw2”,故9g3rw2区域内的ID为{30};通过B-Tree查询9g3rw0区域的ID为28,在记录集中,以ID为28的记录为起始点双向搜索至ID所对应的字符串的前6位不等于“9g3rw0”,故9g3rw0区域内的ID为{28,29};通过B-Tree查询9g3rtb区域的ID为27,在记录集中,以ID为27的记录为起始点双向搜索至ID所对应的字符串的前6位不等于“9g3rtb”,故9g3rtb区域内的ID为{27};通过B-Tree查询9g3rmz区域的ID为11,在记录集中,以ID为11的记录为起始点双向搜索至ID所对应的字符串的前6位不等于“9g3rmz”,故9g3rmz区域内的ID为{11};通过B-Tree查询9g3rmy区域的ID为10,在记录集中,以ID为10的记录为起始点双向搜索至ID所对应的字符串的前6位不等于“9g3rmy”,故9g3rmy区域内的ID为{10};通过B-Tree查询9g3rqn区域的ID为12,在记录集中,以ID为12的记录为起始点双向搜索至ID所对应的字符串的前6位不等于“9g3rqn”,故9g3rqn区域内的ID为{12};通过B-Tree查询9g3rqq区域的ID为24,在记录集中,以ID为24的记录为起始点双向搜索至ID所对应的字符串的前6位不等于“9g3rqq”,故9g3rqq区域内的ID为{24};由上可知,9个查询域内的ID为:{10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};步骤330、根据查询位置点(19.596412-99.219501和查询距离范围500m确定炜度范围与经度范围,如下所示:stepl:range=180+3.141593X0.5+6372.797=0.004495step2:IngR=0.004495+cos19.596412X3.141593+180.0=0.004771step3:19.596412+0.004495=19.600907炜度的最大值)step4:19.596412-0.004495=19.591917炜度的最小值)step5:-99.219501+0.004771=-99.214730经度的最大值)step6:-99.219501-0.004771=-99.224272经度的最小值)由上可知,炜度范围为[19.591917,19.600907],经度范围为[-99.224272,-99.214730]。根据经炜度范围对9个查询域内的ID{10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30}进行过滤并返回经炜度范围内的位置点。如:ID为10时,其炜经度为(19.589223-99.23521,19.589223不位于[19.591917,19.600907]内,故过滤ID为10的位置点。经过滤后,候选集为{14,15,16,18,19,20,21,22,23,26,29}。[0030]步骤340、计算候选集{14,15,16,18,19,20,21,22,23,26,29}中ID对应的位置点19.596412-99.219501的距离dq,若dq〈=500,则返回该位置点,实现过程如下所示:查询条件:(19.596412-99.219501,500米;距离计算公式:设ΑΧ1,_Π,BX2,_F2,贝Ij根据公式(1依次计算位置点集中的位置点与(19.596412-99.219501的距离,返回不大于500米的位置点,经计算,满足要求的位置点集为{{19.594717-99.22388},{19.59506-99.223537},{19.596261-99.223194},{19.594888-99.222507},{19.596776-99.220447},{19.594324-99.220118},{19.594354-99.220102},{19.596412-99.219501},{19.599523-99.220447},{19.59918-99.21667}}。[0031]故满足查询范围内的位置点为{{19.594717-99.22388},{19.59506-99.223537},{19.596261-99.223194},{19.594888-99.222507},{19.596776-99.220447},{19.594324-99.220118},{19.594354-99.220102},{19.596412-99.219501},{19.599523-99.220447},{19.59918-99.21667}}。[0032]一种基于Geo-BTree的范围查询装置,包括:数据预处理装置,用于将数据集中所有位置点编码成长度为η的字符串string,根据字符串按字典序对数据集中的位置点排序并编号ID;空间索引建立装置,用于根据排序后的字符串构建B-Tree索引结构;范围查询装置,用于以检索B-Tree索引结构返回的ID为起始点双向搜索获取查询域内的ID,经过滤得到ID候选集,并对候选集中ID所对应的位置点验证返回查询范围内的位置点。[0033]为说明基于Geo-BTree的范围查询方法的有效性,本实施例实验以创建索引的时间开销与查询响应时间为指标,对基于Geo-BTree的范围查询方法与基于R-Tree的范围查询方法进行比较,如下所述。[0034]实验的测试环境,如下表所示,实验数据集:Foursquaredata,3000000个位置点(炜度经度)。[0035]实验结果:创建索引的时间开销如图7所示,由图可知,创建索引的时间开销随着数据量的增加而增大,其中,基于Geo-BTree的范围查询方法的创建索引的时间开销呈缓慢增长趋势,而基于R-Tree的范围查询方法的创建索引的时间开销呈快速增长趋势;查询响应时间如图8所示,由图可知,查询响应时间随着数据量的增加而增大,但基于Geo-BTree的范围查询方法的查询响应时间均小于基于R-Tree的范围查询方法的查询响应时间。[0036]实验结果分析:由上可知,相较于基于R-Tree的范围查询方法,无论是以创建索引的时间开销为指标进行分析,还是以查询响应时间为指标进行分析,基于Geo-BTree的范围查询方法的索引创建时间与查询响应时间更少。出现上述实验结果的主要原因是:R-Tree采用区域重叠技术组织空间对象,数据量越大,重叠区域越多,导致大量的查询路径,从而直接降低检索效率;基于Geo-BTree的范围查询方法通过geohash算法将空间对象线性映射为一维对象,其中,geohash用二分法的方法划分空间,避免了区域重叠,故基于Geo-BTree的范围查询方法具有更好的检索效率;R-Tree是B-Tree向多维空间发展的另一形式,其创建过程如图9-10所示,最小域MBR仅位于叶节点,而在B-Tree中,最小域位于所有节点;在B-Tree中,每个结点存储的〈string,ID需按升序排列,因数据预处理步骤对字符串进行了升序排序,故基于B-Tree创建索引的时间开销较少。[0037]实施例2:如图1-10所示,一种基于Geo-BTree的范围查询方法,包括:数据预处理步骤,将数据集中所有位置点编码成长度为η的字符串string,根据字符串按字典序对数据集中的位置点排序并编号ID;空间索引建立步骤,根据排序后的字符串构建B-Tree索引结构;范围查询步骤,以检索B-Tree索引结构返回的ID为起始点在记录集中双向搜索获取查询域内的ID,经过滤得到ID候选集,并对候选集中ID所对应的位置点验证返回查询范围内的位置点。[0038]进一步地,可以设置所述数据预处理步骤,具体包括如下步骤:步骤110:给定一个由一系列位置点构成的数据集D,通过geohash算法将D中的位置点编码成长度为η的字符串string;其中,位置点由炜度、经度数据构成;步骤120:根据字符串按字典序对数据集中的位置点排序并编号,该编号即为对应的位置点ID,每一行数据称为一条记录,则由这些数据组成的数据集称为记录集;其中,记录由ID、炜度、经度、字符串组成。[0039]进一步地,可以设置所述空间索引建立步骤,具体为:步骤210:根据字符串构建B-Tree索引结构,每个结点至少存储1个〈string,ID〉。[0040]所述范围查询步骤,具体包括如下步骤:步骤310:给定查询位置点q和查询距离范围d,根据geohash精度表选定与d相对应的geohash编码长度p,通过geohash算法将位置点q编码为p位长度的字符串qs,获取字符串qs周围8个区域的geohash编码,并将字符串qs及其周围8个区域的geohash编码分别作为查询域,共9个查询域;其中,p对应的距离误差不小于d且为最小值,每一个geohash编码表示一个区域;步骤320:根据检索B-Tree索引结构返回的ID,在记录集中以此ID为起始点双向搜索至不满足查询条件,返回满足查询条件的ID,为一个查询域内的ID;重复以上操作至获取9个查询域内的ID;其中,每一行数据称为一条记录,则由这些数据组成的数据集称为记录集,记录由ID、炜度、经度、字符串组成;查询条件指记录集中字符串的前p位与查询域的geohash编码相同;步骤330:根据查询位置点q和查询距离范围d分别确定炜度范围与经度范围,通过经炜度范围对9个查询域内的ID进行筛选,最终得到ID候选集;步骤340:计算候选集中ID对应的位置点到q的距离dq:若Kd,则返回该位置点,否贝IJ,不返回。[0041]进一步地,可以设置所述步骤110,包括下列步骤111、112:步骤111:根据geohash精度表确定geohash编码长度η;步骤112:通过geohash算法将所有位置点编码成长度为η的字符串。[0042]进一步地,可以设置所述通过geohash算法将位置点编码成字符串具体为:首先,将经炜度范围看作二维平面坐标系;然后,采用二分法对经度炜度进行划分,根据位置点经度炜度在划分结果中的位置分别赋值0或1,直到划分次数满足对应的经炜度位串的位数;之后,通过位交错方法合并经度位串与炜度位串;最后,通过Base32编码将经炜度位串编码为相应长度的字符串。[0043]进一步地,可以设置所述步骤310中,获取qs周围8个区域的geohash编码的方法:根据qs的经炜度位串,东西方向的区域编码:经度位串不变,炜度位串加减1,通过位交错方法得到该区域的经炜度位串;南北方向的区域编码:炜度位串不变,经度位串减加1,通过位交错方法得到该区域的经炜度位串;东北西南方向的区域编码,经炜度位串均加减I,通过位交错方法得到该区域的经炜度位串;东南方向的区域编码:炜度位串加I,经度位串减1,通过位交错方法得到该区域的经炜度位串;西北方向的区域编码:炜度位串减1,经度位串加1,通过位交错方法得到该区域的经炜度位串;之后,通过Base32编码将以上8个位串进行编码即可获得qs周围8个区域的geohash编码。[0044]进一步地,可以设置所述步骤320中,根据检索B-Tree索引结构返回ID的方法为:从根结点开始重复如下过程:若比结点的第一个关键字小,则查找在该结点第一个指针指向的结点进行;若等于结点中某个关键字,则查找成功;若在两个关键字之间,则查找在它们之间的指针指向的结点进行;若比该结点所有关键字大,则查找在该结点最后一个指针指向的结点进行;若查找已经到达某个叶子结点,未匹配成功,则查找失败,其中,字符串的如P位为关键字。[0045]进一步地,可以设置所述步骤330中,根据查询位置点q和查询距离范围d分别确定炜度范围与经度范围方法如下:炜度的最大值maxLat=Iat+range,炜度的最小值minLat=Iat-range;经度的最大值maxLng=Ion+IngR,经度的最小值minLng=Ion-IngR;其中,Iat表示查询位置点q的炜度值,Ion表示查询位置点q的经度值,range=180π*d6372.797,IngR=rangecoslat*π180.0。[0046]一种基于Geo-BTree的范围查询装置,包括:数据预处理装置,用于将数据集中所有位置点编码成长度为η的字符串string,根据字符串按字典序对数据集中的位置点排序并编号ID;空间索引建立装置,用于根据排序后的字符串构建B-Tree索引结构;范围查询装置,用于以检索B-Tree索引结构返回的ID为起始点双向搜索获取查询域内的ID,经过滤得到ID候选集,并对候选集中ID所对应的位置点验证返回查询范围内的位置点。[0047]上面结合图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
权利要求:1.一种基于Geo-BTree的范围查询方法,其特征在于:包括:数据预处理步骤,将数据集中所有位置点编码成长度为η的字符串string,根据字符串按字典序对数据集中的位置点排序并编号ID;空间索引建立步骤,根据排序后的字符串构建B-Tree索引结构;范围查询步骤,以检索B-Tree索引结构返回的ID为起始点双向搜索获取查询域内的ID,经过滤得到ID候选集,并对候选集中ID所对应的位置点验证返回查询范围内的位置点。2.根据权利要求1所述的基于Geo-BTree的范围查询方法,其特征在于:所述数据预处理步骤,具体包括如下步骤:步骤110:给定一个由一系列位置点构成的数据集D,通过geohash算法将D中的位置点编码成长度为η的字符串string;其中,位置点由炜度、经度数据构成;步骤120:根据字符串按字典序对数据集中的位置点排序并编号,该编号即为对应的位置点ID,每一行数据称为一条记录,则由这些数据组成的数据集称为记录集;其中,记录由ID、炜度、经度、字符串组成。3.根据权利要求1所述的基于Geo-BTree的范围查询方法,其特征在于:所述空间索引建立步骤,具体为:步骤210:根据字符串构建B-Tree索引结构,每个结点至少存储1个〈string,ID。4.根据权利要求1所述的基于Geo-BTree的范围查询方法,其特征在于:所述范围查询步骤,具体包括如下步骤:步骤310:给定查询位置点q和查询距离范围d,根据geohash精度表选定与d相对应的geohash编码长度p,通过geohash算法将位置点q编码为p位长度的字符串qs,获取字符串qs周围8个区域的geohash编码,并将字符串qs及其周围8个区域的geohash编码分别作为查询域,共9个查询域;其中,p对应的距离误差不小于d且为最小值,每一个geohash编码表示一个区域;步骤320:根据检索B-Tree索引结构返回的ID,在记录集中以此ID为起始点双向搜索至不满足查询条件,返回满足查询条件的ID,为一个查询域内的ID;重复以上操作至获取9个查询域内的ID;其中,每一行数据称为一条记录,则由这些数据组成的数据集称为记录集,记录由ID、炜度、经度、字符串组成;查询条件指记录集中字符串的前p位与查询域的geohash编码相同;步骤330:根据查询位置点q和查询距离范围d分别确定炜度范围与经度范围,通过经炜度范围对9个查询域内的ID进行筛选,最终得到ID候选集;步骤340:计算候选集中ID对应的位置点到q的距离dq:若Kd,则返回该位置点,否则,不返回。5.根据权利要求2所述的基于Geo-BTree的范围查询方法,其特征在于:所述步骤110,包括下列步骤111、112:步骤111:根据geohash精度表确定geohash编码长度η;步骤112:通过geohash算法将所有位置点编码成长度为η的字符串。6.根据权利要求2或4所述的基于Geo-BTree的范围查询方法,其特征在于:所述通过geohash算法将位置点编码成字符串具体为:首先,将经炜度范围看作二维平面坐标系;然后,采用二分法对经度炜度进行划分,根据位置点经度炜度在划分结果中的位置分别赋值O或I,直到划分次数满足对应的经炜度位串的位数;之后,通过位交错方法合并经度位串与炜度位串;最后,通过Base32编码将经炜度位串编码为相应长度的字符串。7.根据权利要求4所述的基于Geo-BTree的范围查询方法,其特征在于:所述步骤310中,获取qs周围8个区域的geohash编码的方法:根据qs的经炜度位串,东西方向的区域编码:经度位串不变,炜度位串加减1,通过位交错方法得到该区域的经炜度位串;南北方向的区域编码:炜度位串不变,经度位串减加1,通过位交错方法得到该区域的经炜度位串;东北西南方向的区域编码,经炜度位串均加减1,通过位交错方法得到该区域的经炜度位串;东南方向的区域编码:炜度位串加1,经度位串减1,通过位交错方法得到该区域的经炜度位串;西北方向的区域编码:炜度位串减1,经度位串加1,通过位交错方法得到该区域的经炜度位串;之后,通过Base32编码将以上8个位串进行编码即可获得qs周围8个区域的geohash编码。8.根据权利要求4所述的基于Geo-BTree的范围查询方法,其特征在于:所述步骤320中,根据检索B-Tree索引结构返回ID的方法为:从根结点开始重复如下过程:若比结点的第一个关键字小,则查找在该结点第一个指针指向的结点进行;若等于结点中某个关键字,则查找成功;若在两个关键字之间,则查找在它们之间的指针指向的结点进行;若比该结点所有关键字大,则查找在该结点最后一个指针指向的结点进行;若查找已经到达某个叶结点,还未匹配成功,则查找失败,其中,字符串的如P位为关键字。9.根据权利要求4所述的基于Geo-BTree的范围查询方法,其特征在于:所述步骤330中,根据查询位置点q和查询距离范围d分别确定炜度范围与经度范围方法如下:炜度的最大值maxLat=Iat+range,炜度的最小值minLat=Iat-range;经度的最大值maxLng=Ion+IngR,经度的最小值minLng=Ion-IngR;其中,Iat表示查询位置点q的炜度值,Ion表示查询位置点q的经度值,range=180π*d6372.797,IngR=rangecoslat*V180.0〇10.—种基于Geo-BTree的范围查询装置,其特征在于:包括:数据预处理装置,用于将数据集中所有位置点编码成长度为η的字符串string,根据字符串按字典序对数据集中的位置点排序并编号ID;空间索引建立装置,用于根据排序后的字符串构建B-Tree索引结构;范围查询装置,用于以检索B-Tree索引结构返回的ID为起始点双向搜索获取查询域内的ID,经过滤得到ID候选集,并对候选集中ID所对应的位置点验证返回查询范围内的位置点。
百度查询: 昆明理工大学 一种基于Geo-BTree的范围查询方法及装置
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。