CN107798054A - 一种基于Trie的范围查询方法及装置 - Google Patents
一种基于Trie的范围查询方法及装置 Download PDFInfo
- Publication number
- CN107798054A CN107798054A CN201710784973.2A CN201710784973A CN107798054A CN 107798054 A CN107798054 A CN 107798054A CN 201710784973 A CN201710784973 A CN 201710784973A CN 107798054 A CN107798054 A CN 107798054A
- Authority
- CN
- China
- Prior art keywords
- longitude
- string
- latitude
- trie
- geohash
- 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
- 238000000034 method Methods 0.000 title claims abstract description 57
- 238000013507 mapping Methods 0.000 claims description 10
- 239000004576 sand Substances 0.000 claims description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000011218 segmentation Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000010304 firing Methods 0.000 description 1
- 238000012946 outsourcing Methods 0.000 description 1
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/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/953—Querying, e.g. by the use of web search engines
- G06F16/9537—Spatial or temporal dependent retrieval, e.g. spatiotemporal 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Remote Sensing (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于Trie的范围查询方法及装置,本发明方法包括:数据预处理步骤,将数据集中所有位置点编码成长度为n的字符串,根据字符串后缀按字典序对数据集中的位置点排序并编号ID;空间索引建立步骤,根据排序后的字符串前缀构建Trie空间索引结构;范围查询步骤,在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。本发明采用基于字符串前缀构建部分Trie索引结构,在降低空间开销的同时,具有较高的查询效率;采用geohash空间索引方法,有效支持任意范围查询。
Description
技术领域
本发明涉及一种基于Trie的范围查询方法及装置,属于空间数据库(SpatialDatabase)领域、空间关键字查询领域、地理信息系统(Geographic Information System,GIS)等领域。
背景技术
随着移动设备的普及、定位技术的快速发展、基于位置的服务(Location-BasedService,LBS)的飞速发展等,空间数据量正在飞速增长。
海量的空间数据需要高效的空间索引技术。空间索引用于过滤、排除大量与特定空间操作无关的地理对象,从而缩减空间操作范围,空间索引性能的优劣直接影响空间数据库的可用性与可扩展性。从空间数据库的观点来看,空间索引结构可以分为两类:专门用于处理点对象的点存取方法(PAM)和处理具有空间扩展的空间对象(包括点、线、面、体)的空间存取方法(SAM)。PAM包括Grid文件、Buddy树、K-D-B树、hB树、LSD树等;依据空间对象的不同组织方式,SAM分为对象映射、对象分割/复制和对象界定三类,对象映射即将高维空间中的对象线性映射到一维空间,用空间排列码(如:Peano码、Hilbert码、Morton码等)进行表达;对象分割/复制是把与子空间相交的数据对象分割成几个子对象,分别存储在互不重叠的子空间中,在子空间中复制对象本身或其标识符,如:R+树、Cell树、线性四叉树等;对象界定又称为区域重叠技术,其主要思想是允许子空间的相互重叠,如:R树、R*树等。R树是目前最流行的动态空间索引结构,其采用对象的最小外包矩形(Minimum BoundingRectangle, MBR)来近似表示空间实体,可有效支持查询、插入、删除等操作。由于空间数据分布的偶然性,容易造成MBR重叠,查询时会产生多个查询分支,从而降低查询效率。R+树的提出用于避免R树由于兄弟节点的重叠而产生的多路径查询问题,与此同时,也产生了相应的问题,如:冗余存储、可能产生死锁等。
采用geohash空间索引方法可有效解决由R树导致的上述问题。geohash编码支持区域分层、任意精度与简单的近似估计,只需对一个字段进行索引,降低空间索引复杂度。因此,geohash空间索引方法广泛用于多个领域,如:地理信息系统领域(如:PostGIS)、空间数据库领域(如:MongoDB)、信息检索领域(如:Lucene)。
存储geohash编码的常用索引结构如:B树、Hashing、Trie。对geohash编码而言,位于同一区域的位置点具有公共前缀,区域越小,公共前缀越长,这使得geohash编码可有效支持位置点的范围查询。Trie(字典树、前缀树、单词查找树)可以将字符串公共前缀压缩为Trie中一条公共路径,因此可以很好地存储geohash编码。采用Trie存储geohash编码的方法如:STCode、GeoTrie、MP-Trie等,但是上述方法通常基于完整字符串构建Trie索引结构,因此空间开销较大。
发明内容
本发明提供了一种基于Trie的范围查询方法及装置,目的在于有效支持任意范围查询;在降低空间开销的同时,具有较高的查询效率。
本发明的技术方案是:一种基于Trie的范围查询方法,包括:
数据预处理步骤,将数据集中所有位置点编码成长度为n的字符串,根据字符串后缀按字典序对数据集中的位置点排序并编号ID;
空间索引建立步骤,根据排序后的字符串前缀构建Trie空间索引结构;
范围查询步骤,在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。
所述数据预处理步骤,具体包括如下步骤:
步骤110:给定一个由一系列位置点构成的数据集D,通过geohash算法将D中的位置点编码成长度为n的字符串s;其中,位置点由纬度、经度数据构成;
步骤120:将每一个位置点编码的字符串s分为m位前缀部分spre和n-m位后缀部分ssuf,根据字符串后缀按字典序对数据集中的位置点排序并编号,该编号即为对应的位置点ID;其中,m≤n。
所述空间索引建立步骤,具体为:
步骤210:根据字符串前缀构建Trie索引结构,每个spre可映射为Trie中一条从根到叶节点的路径,那么spre可称为该叶节点的前缀,每个叶节点存储由该节点的前缀对应的ID构成的反向列表。
所述空间索引建立步骤,还包括步骤220,具体为:
步骤220:构建字符串后缀和ID范围的映射表;其中,ID范围指包含字符串后缀的字符串对应ID的起始值至结束值。
所述范围查询步骤,具体包括如下步骤:
步骤310:给定查询位置点q和查询距离范围d,根据geohash精度表选定与d相对应的geohash编码长度p,通过geohash算法将位置点q编码为p位长度的字符串qs,获取字符串qs周围8个区域的geohash编码,并将字符串qs及其周围8个区域作为查询域;其中,p对应的距离误差不小于d且为最小值;
步骤320:若d>d1,通过检索Trie索引结构即可返回9个查询域内的ID;反之,需通过映射表辅助查询方可返回9个查询域内的ID;其中,d1表示geohash精度表中|spre|+1对应的距离;
步骤330:根据查询位置点q和查询距离范围d分别确定纬度范围与经度范围,通过经纬度范围对9个查询域内的ID进行筛选,最终得到候选集;
步骤340:计算候选集中ID对应的位置点到q的距离dq:若dq≤d,则返回该位置点,否则,不返回。
所述步骤110,包括下列步骤111、112:
步骤111:根据geohash精度表确定geohash编码长度n;
步骤112:通过geohash算法将所有位置点编码成长度为n的字符串。
所述通过geohash算法将位置点编码成字符串具体为:首先,将经纬度范围看作二维平面坐标系;然后,采用二分法对经度/纬度进行划分,根据位置点经度/纬度在划分结果中的位置分别赋值0或1,直到划分次数满足对应的经/纬度位串的位数;之后,通过位交错方法合并经度位串与纬度位串;最后,通过Base32编码将经纬度位串编码为相应长度的字符串。
所述步骤310中,获取qs周围8个区域的geohash编码的方法:根据qs的经纬度位串,东/西方向的区域编码:经度位串不变,纬度位串加/减1,通过位交错方法得到该区域的经纬度位串;南/北方向的区域编码:纬度位串不变,经度位串减/加1,通过位交错方法得到该区域的经纬度位串;东北/西南方向的区域编码,经纬度位串均加/减1,通过位交错方法得到该区域的经纬度位串;东南方向的区域编码:纬度位串加1,经度位串减1,通过位交错方法得到该区域的经纬度位串;西北方向的区域编码:纬度位串减1,经度位串加1,通过位交错方法得到该区域的经纬度位串;之后,通过Base32编码将以上8个位串进行编码即可获得qs周围8个区域的geohash编码。
所述步骤330中根据查询位置点q和查询距离范围d分别确定纬度范围与经度范围方法如下:纬度的最大值maxLat = lat + range,纬度的最小值minLat = lat - range;经度的最大值 maxLng = lon + lngR,经度的最小值minLng = lon - lngR;其中,lat表示查询位置点q的纬度值,lon 表示查询位置点q的经度值,range =180 / π * d / 6372.797,lngR = range / cos(lat *π/ 180.0)。
一种基于Trie的范围查询装置,包括:
数据预处理装置,用于将数据集中所有位置点编码成长度为n的字符串,根据字符串后缀按字典序对数据集中的位置点排序并编号ID;
空间索引建立装置,用于根据排序后的字符串前缀构建Trie空间索引结构,并构建字符串后缀和对应的位置点ID范围的映射表;
范围查询装置,用于在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。
本发明的有益效果是:本发明采用基于字符串前缀构建部分Trie索引结构,在降低空间开销的同时,具有较高的查询效率;采用geohash空间索引方法,有效支持任意范围查询。
附图说明
图1是基于Trie的范围查询功能模块图;
图2是geohash精度表;
图3是 Base32编码规则图;(注:(+ / -)表示加减);
图4是位置点转换为字符串图;
图5是位置点排序图;
图6是基于字符串前缀构建的Trie图;
图7是字符串后缀和ID范围的映射表图。
具体实施方式
实施例1:如图1-7所示,一种基于Trie的范围查询方法,包括
数据预处理步骤:
步骤111、根据geohash精度表(如图2所示),将geohash编码长度n设置为8,则经纬度位串分别为20位;
步骤112、通过geohash算法将D中的位置点转换成长度为8的字符串,实现方法如下:
示例:(19.596412 -99.219501)
首先将纬度范围(-90,90)平分成(-90,0)、(0,90)两个区间,如果目标纬度位于前一个区间,则编码为0,否则编码为1。因19.596412属于区间(0,90),所以编码为1;然后再将(0,90)分成(0,45)、(45,90)两个区间,因19.596412属于区间(0,45),所以编码为0;以此类推,直至位串长度为20。最终19.596412的编码为10011011110111101101。
经度也采取同样的方法,对范围(-180,180)依次细分至位串长度为20。最终-99.219501的编码为00111001011100011010。
接下来将经纬度位串进行合并,奇数位为纬度,偶数位为经度,得到编码0100101111000111011110110101011011011001。
最后,通过Base32编码(如图3所示)得到(19.5964412 -99.219501)的geohash编码为9g3rqpqt。
通过geohash算法将D中的位置点转换成长度为8的字符串,如图4所示。
步骤120、将m值设置为“5”,根据字符串后缀按字典序对数据集中的位置点排序并编号,如图5所示。
空间索引的建立包括下列步骤:
步骤210、字符串集
{9g3rw04d,9g3rw058,9g3rw24s,9g3rw27u,9g3rtb4h,9g3rtbst,9g3rqn7z,9g3rqp4t,9g3rqp57,qw6x1p5t,tdn4rp5t,r39x8p5t,9g3rqp5t,dp3mgp5t,9g3rqp6z,wdw5rp7u,9g3rqp7u,7nx1tp7u,9g3rqpbz,9g3rqphk,9g3rqpmz,9g3rqpqt,9g3rqpvz,9g3rqq7z,9g3rqqmk,9g3rqr7x,9g3rqrbt,9g3rmy55,9g3rmz1w,9g3rmzxy},根据字符串前缀构建Trie索引结构,每个叶节点存储由该节点的前缀对应的ID构成的反向列表,如图6所示。
步骤220、构建字符串后缀和ID范围的映射表,如图7所示。
范围查询包括下列步骤:
步骤311、给定查询位置点(19.596412 -99.219501)和查询距离范围500米,需p对应的距离误差不小于500且为最小值,则p值应设置为6,通过geohash算法将(19.596412 -99.219501)编码为6位长度的字符串9g3rqp;
步骤312、获取9g3rqp周围8个区域的geohash编码,并将9g3rqp及其周围8个区域作为查询域,方法如下:
9g3rqp的纬度位串为100110111101111,经度位串为001110010111000。
北方区域的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,经纬度位串为010010111100011101111100101010,geohash编码为9g3rtb;
南方区域的geohash编码:纬度位串为100110111101111,经度位串为001110010111000-1=001110010110111,经纬度位串为010010111100011101111001111111,geohash编码为9g3rmz;
西南区域的geohash编码:纬度位串为100110111101111-1=100110111101110,经度位串为001110010111000-1=001110010110111,经纬度位串为010010111100011101111001111110,geohash编码为9g3rmy;
西方区域的geohash编码:纬度位串为100110111101111-1=100110111101110,经度位为001110010111000,经纬度位串为010010111100011101111011010100,geohash编码为9g3rqn;
西北区域的geohash编码:纬度位串为100110111101111-1=100110111101110,经度位串为001110010111000+1=001110010111001,经纬度位串为010010111100011101111011010110,geohash编码为9g3rqq。
9g3rqp周围的8个区域为:9g3rqr、9g3rw2、9g3rw0、9g3rtb、9g3rmz、9g3rmy、9g3rqn、9g3rqq;
步骤320、因500<610(前缀长度为5,则d1应选取geohash长度为6所对应的距离,由图2可知,其表示距离610m),故需通过映射表辅助查询返回候选集,实现过程如下:
通过Trie查询9g3rw区域内的ID{1,2,3,4},后缀表中以‘0’为起始字符的ID{1,2},{1,2,3,4}与{1,2}的交集为{1,2},故9g3rw0区域内的ID为{1,2};以‘2’为起始字符的ID{3,4},{1,2,3,4}与{3,4}的交集为{3,4},故9g3rw2区域内的ID为{3,4};
通过Trie查询9g3rq区域内的ID{7,8,9,13,15,17,19,20,21,22,23,24,25,26,27},后缀表中以‘r’为起始字符的ID{26,27},{7,8,9,13,15,17,19,20,21,22,23,24,25,26,27}与{26,27}的交集为{26,27},故9g3rqr区域内的ID为{26,27};以‘q’为起始字符的ID{24,25},{7,8,9,13,15,17,19,20,21,22,23,24,25,26,27}与{24,25}的交集为{24,25},故9g3rqq区域内的ID为{24,25};以‘n’为起始字符的ID{7},{7,8,9,13,15,17,19,20,21,22,23,24,25,26,27}与{7}的交集为{7},故9g3rqn区域内的ID为{7};以‘p’为起始字符的ID{8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23},{7,8,9,13,15,17,19,20,21,22,23,24,25,26,27}与{8,9,10,11,12,13,14,15,16,17,18,19,20, 21,22,23}的交集为{8,9,13,15,17,19,20,21,22,23}故9g3rqp区域内的ID为{8,9,13,15,17,19,20,21,22,23};
通过Trie查询9g3rm区域内的ID{28,29,30},后缀表中以‘y’为起始字符的ID{28},{28,29,30}与{28}的交集为{28},故9g3rmy区域内的ID为{28};以‘z’为起始字符的ID{29,30},{28,29,30}与{29,30}的交集为{29,30},故9g3rmz区域内的ID为{29,30};
通过Trie查询9g3rt区域内的ID{5,6},后缀表中以‘b’为起始字符的ID{5,6},{5,6}与{5,6}的交集为{5,6},故9g3rtb区域内的ID为{5,6};
由上可知,9个查询域内的ID为{1,2,3,4,5,6,7,8,9,13,15,17,19,20,21,22,23,24,25, 26,27,28,29,30};
(备注:根据以上所述,不难发现{9g3rw,9g3rq,9g3rm,9g3rt}四个区域内ID的并集与9个查询域内的ID一致,因数据集不全面而出现了该问题。若数据集中包含位置点(19.609757 -99.225675),其geohash编码为9g3rw1f5(假设其ID为10),则9g3rw区域内的ID为{1,2,3,4,10},后缀表中以‘0’为起始字符的ID{1,2},{1,2,3,4,10}与{1,2}的交集为{1,2},故9g3rw0区域内的ID为{1,2};以‘2’为起始字符的ID{3,4},{1,2,3,4,10}与{3,4}的交集为{3,4},故9g3rw2区域内的ID为{3,4}。9个查询域内的ID不包含10,即不包含该位置。)
步骤330、根据查询位置点(19.596412 -99.219501)和查询距离范围500m确定纬度范围与经度范围,如下所示:
step1: 180 ÷ 3.141593 × 0.5 ÷ 6372.797 = 0.004495
step2: 0.004495 ÷ cos(19.596412 × 3.141593 ÷ 180.0) = 0.004771
step3: 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{1,2,3,4,5,6,7,8,9,13,15,17,19,20,21,22,23,24,25,26,27,28,29,30}进行过滤并返回经纬度范围内的位置点。如:ID为1时,其经纬度为(19.600038 -99.22491),19.600038位于[19.591917,19.600907]内,而-99.22491不位于[-99.224272,-99.214730]内,故过滤ID为1的位置点。经过滤后,候选集为{2,9,13,17,20,21,22,23,27}。
步骤340、计算候选集{2,9,13,17,20,21,22,23,27}中ID对应的位置点(19.596412 -99.219501)的距离dq,若dq<=500,则返回该位置点,实现过程如下所示:
查询条件:(19.596412 -99.219501),500米;
距离计算公式:设A(x 1,y 1),B(x 2,y 2),则|AB|= (1);
根据公式(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.596412 -99.219501},{19.599523 -99.220447},{19.59918 -99.21667}}。
故满足查询范围内的位置点为{{19.594717 -99.22388},{19.59506 -99.223537}, {19.596261 -99.223194},{19.594888 -99.222507},{19.596776 -99.220447},{19.596412 -99.219501},{19.599523 -99.220447},{19.59918 -99.21667}}。
一种基于Trie的范围查询装置,包括:
数据预处理装置,用于将数据集中所有位置点编码成长度为n的字符串,根据字符串后缀按字典序对数据集中的位置点排序并编号ID;
空间索引建立装置,用于根据排序后的字符串前缀构建Trie空间索引结构,并构建字符串后缀和对应的位置点ID范围的映射表;
范围查询装置,用于在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。
实施例2:如图1-7所示,一种基于Trie的范围查询方法,包括:
数据预处理步骤,将数据集中所有位置点编码成长度为n的字符串,根据字符串后缀按字典序对数据集中的位置点排序并编号ID;
空间索引建立步骤,根据排序后的字符串前缀构建Trie空间索引结构;
范围查询步骤,在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。
进一步地,可以设置所述数据预处理步骤,具体包括如下步骤:
步骤110:给定一个由一系列位置点构成的数据集D,通过geohash算法将D中的位置点编码成长度为n的字符串s;其中,位置点由纬度、经度数据构成;
步骤120:将每一个位置点编码的字符串s分为m位前缀部分spre和n-m位后缀部分ssuf,根据字符串后缀按字典序对数据集中的位置点排序并编号,该编号即为对应的位置点ID;其中,m≤n。
进一步地,可以设置所述空间索引建立步骤,具体为:
步骤210:根据字符串前缀构建Trie索引结构,每个spre可映射为Trie中一条从根到叶节点的路径,那么spre可称为该叶节点的前缀,每个叶节点存储由该节点的前缀对应的ID构成的反向列表。
进一步地,可以设置所述范围查询步骤,具体包括如下步骤:
步骤310:给定查询位置点q和查询距离范围d,根据geohash精度表选定与d相对应的geohash编码长度p,通过geohash算法将位置点q编码为p位长度的字符串qs,获取字符串qs周围8个区域的geohash编码,并将字符串qs及其周围8个区域作为查询域;其中,p对应的距离误差不小于d且为最小值;
步骤320:d>d1,通过检索Trie索引结构即可返回9个查询域内的ID;其中,d1表示geohash精度表中|spre|+1对应的距离;(如实施例1,给出了d≤d1情况下,具体的实施过程,本实施例给出的是d>d1情况,采用实施例1中的数据对此处进行说明如下:通过检索Trie索引结构即可返回9个查询域内的ID,若给定查询位置点(19.596412 -99.219501)和查询距离范围2000米,由geohash精度表可知,需p对应的距离误差不小于2000且为最小值,则p值应设置为5,通过geohash算法将(19.596412 -99.219501)编码为5位长度的字符串9g3rq。9g3rq周围8个区域的geohash编码为:9g3rw、9g3rx、9g3rr、9g3rp、9g3rn、9g3rj、9g3rm、9g3rt。将9g3rq及其周围8个区域作为查询域,因2000>610,故通过检索Trie索引结构即可返回9个查询域内的ID,9个查询域内的ID为{1,2,3,4,5,6,28,29,30}。)
步骤330:根据查询位置点q和查询距离范围d分别确定纬度范围与经度范围,通过经纬度范围对9个查询域内的ID进行筛选,最终得到候选集;
步骤340:计算候选集中ID对应的位置点到q的距离dq:若dq≤d,则返回该位置点,否则,不返回。
进一步地,可以设置所述步骤110,包括下列步骤111、112:
步骤111:根据geohash精度表确定geohash编码长度n;
步骤112:通过geohash算法将所有位置点编码成长度为n的字符串。
进一步地,可以设置所述通过geohash算法将位置点编码成字符串具体为:首先,将经纬度范围看作二维平面坐标系;然后,采用二分法对经度/纬度进行划分,根据位置点经度/纬度在划分结果中的位置分别赋值0或1,直到划分次数满足对应的经/纬度位串的位数;之后,通过位交错方法合并经度位串与纬度位串;最后,通过Base32编码将经纬度位串编码为相应长度的字符串。
进一步地,可以设置所述步骤310中,获取qs周围8个区域的geohash编码的方法:根据qs的经纬度位串,东/西方向的区域编码:经度位串不变,纬度位串加/减1,通过位交错方法得到该区域的经纬度位串;南/北方向的区域编码:纬度位串不变,经度位串减/加1,通过位交错方法得到该区域的经纬度位串;东北/西南方向的区域编码,经纬度位串均加/减1,通过位交错方法得到该区域的经纬度位串;东南方向的区域编码:纬度位串加1,经度位串减1,通过位交错方法得到该区域的经纬度位串;西北方向的区域编码:纬度位串减1,经度位串加1,通过位交错方法得到该区域的经纬度位串;之后,通过Base32编码将以上8个位串进行编码即可获得qs周围8个区域的geohash编码。
进一步地,可以设置所述步骤330中根据查询位置点q和查询距离范围d分别确定纬度范围与经度范围方法如下:纬度的最大值maxLat = lat + range,纬度的最小值minLat = lat - range;经度的最大值 maxLng = lon + lngR,经度的最小值minLng =lon - lngR;其中,lat表示查询位置点q的纬度值,lon 表示查询位置点q的经度值,range=180 / π * d / 6372.797,lngR = range / cos(lat *π/ 180.0)。
一种基于Trie的范围查询装置,包括:
数据预处理装置,用于将数据集中所有位置点编码成长度为n的字符串,根据字符串后缀按字典序对数据集中的位置点排序并编号ID;
空间索引建立装置,用于根据排序后的字符串前缀构建Trie空间索引结构,并构建字符串后缀和对应的位置点ID范围的映射表;
范围查询装置,用于在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。
上面结合图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下作出各种变化。
Claims (10)
1.一种基于Trie的范围查询方法,其特征在于:包括:
数据预处理步骤,将数据集中所有位置点编码成长度为n的字符串,根据字符串后缀按字典序对数据集中的位置点排序并编号ID;
空间索引建立步骤,根据排序后的字符串前缀构建Trie空间索引结构;
范围查询步骤,在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。
2.根据权利要求1所述的基于Trie的范围查询方法,其特征在于:所述数据预处理步骤,具体包括如下步骤:
步骤110:给定一个由一系列位置点构成的数据集D,通过geohash算法将D中的位置点编码成长度为n的字符串s;其中,位置点由纬度、经度数据构成;
步骤120:将每一个位置点编码的字符串s分为m位前缀部分spre和n-m位后缀部分ssuf,根据字符串后缀按字典序对数据集中的位置点排序并编号,该编号即为对应的位置点ID;其中,m≤n。
3.根据权利要求1所述的基于Trie的范围查询方法,其特征在于:所述空间索引建立步骤,具体为:
步骤210:根据字符串前缀构建Trie索引结构,每个spre可映射为Trie中一条从根到叶节点的路径,那么spre可称为该叶节点的前缀,每个叶节点存储由该节点的前缀对应的ID构成的反向列表。
4.根据权利要求3所述的基于Trie的范围查询方法,其特征在于:所述空间索引建立步骤,还包括步骤220,具体为:
步骤220:构建字符串后缀和ID范围的映射表;其中,ID范围指包含字符串后缀的字符串对应ID的起始值至结束值。
5.根据权利要求1所述的基于Trie的范围查询方法,其特征在于:所述范围查询步骤,具体包括如下步骤:
步骤310:给定查询位置点q和查询距离范围d,根据geohash精度表选定与d相对应的geohash编码长度p,通过geohash算法将位置点q编码为p位长度的字符串qs,获取字符串qs周围8个区域的geohash编码,并将字符串qs及其周围8个区域作为查询域;其中,p对应的距离误差不小于d且为最小值;
步骤320:若d>d1,通过检索Trie索引结构即可返回9个查询域内的ID;反之,需通过映射表辅助查询方可返回9个查询域内的ID;其中,d1表示geohash精度表中|spre|+1对应的距离;
步骤330:根据查询位置点q和查询距离范围d分别确定纬度范围与经度范围,通过经纬度范围对9个查询域内的ID进行筛选,最终得到候选集;
步骤340:计算候选集中ID对应的位置点到q的距离dq:若dq≤d,则返回该位置点,否则,不返回。
6.根据权利要求2所述的基于Trie的范围查询方法,其特征在于:所述步骤110,包括下列步骤111、112:
步骤111:根据geohash精度表确定geohash编码长度n;
步骤112:通过geohash算法将所有位置点编码成长度为n的字符串。
7.根据权利要求2或5所述的基于Trie的范围查询方法,其特征在于:所述通过geohash算法将位置点编码成字符串具体为:首先,将经纬度范围看作二维平面坐标系;然后,采用二分法对经度/纬度进行划分,根据位置点经度/纬度在划分结果中的位置分别赋值0或1,直到划分次数满足对应的经/纬度位串的位数;之后,通过位交错方法合并经度位串与纬度位串;最后,通过Base32编码将经纬度位串编码为相应长度的字符串。
8.根据权利要求5所述的基于Trie的范围查询方法,其特征在于:所述步骤310中,获取qs周围8个区域的geohash编码的方法:根据qs的经纬度位串,东/西方向的区域编码:经度位串不变,纬度位串加/减1,通过位交错方法得到该区域的经纬度位串;南/北方向的区域编码:纬度位串不变,经度位串减/加1,通过位交错方法得到该区域的经纬度位串;东北/西南方向的区域编码,经纬度位串均加/减1,通过位交错方法得到该区域的经纬度位串;东南方向的区域编码:纬度位串加1,经度位串减1,通过位交错方法得到该区域的经纬度位串;西北方向的区域编码:纬度位串减1,经度位串加1,通过位交错方法得到该区域的经纬度位串;之后,通过Base32编码将以上8个位串进行编码即可获得qs周围8个区域的geohash编码。
9.根据权利要求5所述的基于Trie的范围查询方法,其特征在于:所述步骤330中根据查询位置点q和查询距离范围d分别确定纬度范围与经度范围方法如下:纬度的最大值maxLat = lat + range,纬度的最小值minLat = lat - range;经度的最大值 maxLng =lon + lngR,经度的最小值minLng = lon - lngR;其中,lat表示查询位置点q的纬度值,lon 表示查询位置点q的经度值,range =180 / π * d / 6372.797,lngR = range / cos(lat *π/ 180.0)。
10.一种基于Trie的范围查询装置,其特征在于:包括:
数据预处理装置,用于将数据集中所有位置点编码成长度为n的字符串,根据字符串后缀按字典序对数据集中的位置点排序并编号ID;
空间索引建立装置,用于根据排序后的字符串前缀构建Trie空间索引结构,并构建字符串后缀和对应的位置点ID范围的映射表;
范围查询装置,用于在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710784973.2A CN107798054B (zh) | 2017-09-04 | 2017-09-04 | 一种基于Trie的范围查询方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710784973.2A CN107798054B (zh) | 2017-09-04 | 2017-09-04 | 一种基于Trie的范围查询方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107798054A true CN107798054A (zh) | 2018-03-13 |
CN107798054B CN107798054B (zh) | 2021-06-18 |
Family
ID=61531741
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710784973.2A Active CN107798054B (zh) | 2017-09-04 | 2017-09-04 | 一种基于Trie的范围查询方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107798054B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108549690A (zh) * | 2018-04-12 | 2018-09-18 | 石家庄铁道大学 | 基于空间距离约束的空间关键字查询方法及系统 |
CN108628950A (zh) * | 2018-04-04 | 2018-10-09 | 昆明理工大学 | 一种基于文本-域倒排的空间文本查询方法及装置 |
CN108776667A (zh) * | 2018-05-04 | 2018-11-09 | 昆明理工大学 | 一种基于geohash与B-Tree的空间关键词查询方法及装置 |
CN108776666A (zh) * | 2018-05-04 | 2018-11-09 | 昆明理工大学 | 一种基于关键词倒排与Trie的空间关键词查询方法及装置 |
CN108846013A (zh) * | 2018-05-04 | 2018-11-20 | 昆明理工大学 | 一种基于geohash与Patricia Trie的空间关键词查询方法及装置 |
CN108874880A (zh) * | 2018-05-04 | 2018-11-23 | 昆明理工大学 | 一种基于Trie的空间关键词查询方法及装置 |
CN110457531A (zh) * | 2019-07-23 | 2019-11-15 | 昆明理工大学 | 一种基于OpenMP的并行字符串查询方法 |
CN111026978A (zh) * | 2019-10-14 | 2020-04-17 | 平安科技(深圳)有限公司 | 位置查询方法、装置、计算机设备及存储介质 |
CN111078807A (zh) * | 2019-10-12 | 2020-04-28 | 平安科技(深圳)有限公司 | 位置查询方法、装置、计算机设备及存储介质 |
CN111931015A (zh) * | 2020-08-11 | 2020-11-13 | 付立军 | 一种基于地质沉降数据的容差式线查询数据方法 |
CN113204553A (zh) * | 2021-05-07 | 2021-08-03 | 北京连山科技股份有限公司 | 一种基于GeoHash的矢量数据编译方法 |
CN113483729A (zh) * | 2021-07-07 | 2021-10-08 | 哈尔滨理工大学 | 一种基于隐私保护和机器负载平衡的经纬测距方法 |
CN114911787A (zh) * | 2022-05-31 | 2022-08-16 | 南京大学 | 一种融合位置和语义约束的多源poi数据清洗方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6041053A (en) * | 1997-09-18 | 2000-03-21 | Microsfot Corporation | Technique for efficiently classifying packets using a trie-indexed hierarchy forest that accommodates wildcards |
CN101499094A (zh) * | 2009-03-10 | 2009-08-05 | 焦点科技股份有限公司 | 一种数据压缩存储并检索的方法及系统 |
CN107291785A (zh) * | 2016-04-12 | 2017-10-24 | 滴滴(中国)科技有限公司 | 一种数据查找方法及装置 |
-
2017
- 2017-09-04 CN CN201710784973.2A patent/CN107798054B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6041053A (en) * | 1997-09-18 | 2000-03-21 | Microsfot Corporation | Technique for efficiently classifying packets using a trie-indexed hierarchy forest that accommodates wildcards |
CN101499094A (zh) * | 2009-03-10 | 2009-08-05 | 焦点科技股份有限公司 | 一种数据压缩存储并检索的方法及系统 |
CN107291785A (zh) * | 2016-04-12 | 2017-10-24 | 滴滴(中国)科技有限公司 | 一种数据查找方法及装置 |
Non-Patent Citations (2)
Title |
---|
RAGHU GANTI ET AL.: "MP-trie: Fast Spatial Queries on Moving Objects", 《ACM》 * |
YINGHUA ZHOU ET AL.: "Hybrid Index Structures for Location-based Web Search", 《ACM》 * |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108628950A (zh) * | 2018-04-04 | 2018-10-09 | 昆明理工大学 | 一种基于文本-域倒排的空间文本查询方法及装置 |
CN108549690B (zh) * | 2018-04-12 | 2021-07-13 | 石家庄铁道大学 | 基于空间距离约束的空间关键字查询方法及系统 |
CN108549690A (zh) * | 2018-04-12 | 2018-09-18 | 石家庄铁道大学 | 基于空间距离约束的空间关键字查询方法及系统 |
CN108846013B (zh) * | 2018-05-04 | 2021-11-23 | 昆明理工大学 | 一种基于geohash与Patricia Trie的空间关键词查询方法及装置 |
CN108846013A (zh) * | 2018-05-04 | 2018-11-20 | 昆明理工大学 | 一种基于geohash与Patricia Trie的空间关键词查询方法及装置 |
CN108874880A (zh) * | 2018-05-04 | 2018-11-23 | 昆明理工大学 | 一种基于Trie的空间关键词查询方法及装置 |
CN108776666A (zh) * | 2018-05-04 | 2018-11-09 | 昆明理工大学 | 一种基于关键词倒排与Trie的空间关键词查询方法及装置 |
CN108776666B (zh) * | 2018-05-04 | 2022-05-20 | 昆明理工大学 | 一种基于关键词倒排与Trie的空间关键词查询方法及装置 |
CN108874880B (zh) * | 2018-05-04 | 2021-11-23 | 昆明理工大学 | 一种基于Trie的空间关键词查询方法及装置 |
CN108776667A (zh) * | 2018-05-04 | 2018-11-09 | 昆明理工大学 | 一种基于geohash与B-Tree的空间关键词查询方法及装置 |
CN110457531A (zh) * | 2019-07-23 | 2019-11-15 | 昆明理工大学 | 一种基于OpenMP的并行字符串查询方法 |
CN110457531B (zh) * | 2019-07-23 | 2022-11-01 | 昆明理工大学 | 一种基于OpenMP的并行字符串查询方法 |
CN111078807A (zh) * | 2019-10-12 | 2020-04-28 | 平安科技(深圳)有限公司 | 位置查询方法、装置、计算机设备及存储介质 |
CN111078807B (zh) * | 2019-10-12 | 2023-10-24 | 平安科技(深圳)有限公司 | 位置查询方法、装置、计算机设备及存储介质 |
WO2021068346A1 (zh) * | 2019-10-12 | 2021-04-15 | 平安科技(深圳)有限公司 | 基于Geohash算法的位置查询方法、装置、计算机设备及存储介质 |
CN111026978A (zh) * | 2019-10-14 | 2020-04-17 | 平安科技(深圳)有限公司 | 位置查询方法、装置、计算机设备及存储介质 |
CN111931015B (zh) * | 2020-08-11 | 2022-04-26 | 付立军 | 一种基于地质沉降数据的容差式线查询数据方法 |
CN111931015A (zh) * | 2020-08-11 | 2020-11-13 | 付立军 | 一种基于地质沉降数据的容差式线查询数据方法 |
CN113204553A (zh) * | 2021-05-07 | 2021-08-03 | 北京连山科技股份有限公司 | 一种基于GeoHash的矢量数据编译方法 |
CN113483729A (zh) * | 2021-07-07 | 2021-10-08 | 哈尔滨理工大学 | 一种基于隐私保护和机器负载平衡的经纬测距方法 |
CN114911787A (zh) * | 2022-05-31 | 2022-08-16 | 南京大学 | 一种融合位置和语义约束的多源poi数据清洗方法 |
CN114911787B (zh) * | 2022-05-31 | 2023-10-27 | 南京大学 | 一种融合位置和语义约束的多源poi数据清洗方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107798054B (zh) | 2021-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107798054A (zh) | 一种基于Trie的范围查询方法及装置 | |
CN107766433A (zh) | 一种基于Geo‑BTree的范围查询方法及装置 | |
CN104199986B (zh) | 基于hbase和geohash的矢量数据空间索引方法 | |
CN108846013B (zh) | 一种基于geohash与Patricia Trie的空间关键词查询方法及装置 | |
CN107153711A (zh) | 地理信息数据处理方法及装置 | |
CN103383682B (zh) | 一种地理编码方法、位置查询系统及方法 | |
CN103914544A (zh) | 一种基于地址特征词的多层次快速中文地址匹配方法 | |
WO2021068346A1 (zh) | 基于Geohash算法的位置查询方法、装置、计算机设备及存储介质 | |
WO2021072874A1 (zh) | 基于双数组的位置查询方法、装置、计算机设备及存储介质 | |
CN116450765B (zh) | 一种多形态地理实体编码一致性处理方法及系统 | |
CN108446357A (zh) | 一种基于二维地理位置的海量数据空间范围查询方法 | |
CN108776666A (zh) | 一种基于关键词倒排与Trie的空间关键词查询方法及装置 | |
CN106991149B (zh) | 一种融合编码和多版本数据的海量空间对象存储方法 | |
CN102890719B (zh) | 一种对车牌号进行模糊搜索的方法及装置 | |
CN111522892A (zh) | 地理要素的检索方法及装置 | |
CN112035586A (zh) | 基于可扩展学习索引的空间范围查询方法 | |
CN109885638B (zh) | 一种三维立体空间索引方法及系统 | |
WO2021068347A1 (zh) | 自适应位置查询方法、装置、计算机设备及存储介质 | |
CN108776667A (zh) | 一种基于geohash与B-Tree的空间关键词查询方法及装置 | |
CN103500165A (zh) | 一种结合聚类和双key值的高维向量检索方法 | |
CN115563409A (zh) | 一种地址行政区划识别方法、装置、设备及介质 | |
CN105843948B (zh) | 一种移动环境下基于索引技术的景点智能推荐方法 | |
CN106649425A (zh) | 一种顾及空间邻近性的矢量空间数据编码方法 | |
CN112948717B (zh) | 一种基于多因素约束的海量空间poi搜索方法及系统 | |
CN110096564A (zh) | 一种基于bim+gis的路线点定位方法、装置及系统 |
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 |