CN107798054A - 一种基于Trie的范围查询方法及装置 - Google Patents

一种基于Trie的范围查询方法及装置 Download PDF

Info

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
Application number
CN201710784973.2A
Other languages
English (en)
Other versions
CN107798054B (zh
Inventor
沈兵林
贾连印
丁家满
游进国
李晓武
陈文焰
章露露
吕晓伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kunming University of Science and Technology
Original Assignee
Kunming University of Science and Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Kunming University of Science and Technology filed Critical Kunming University of Science and Technology
Priority to CN201710784973.2A priority Critical patent/CN107798054B/zh
Publication of CN107798054A publication Critical patent/CN107798054A/zh
Application granted granted Critical
Publication of CN107798054B publication Critical patent/CN107798054B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/953Querying, e.g. by the use of web search engines
    • G06F16/9537Spatial or temporal dependent retrieval, e.g. spatiotemporal queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/29Geographical information databases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query 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)
  • Remote Sensing (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种基于Trie的范围查询方法及装置,本发明方法包括:数据预处理步骤,将数据集中所有位置点编码成长度为n的字符串,根据字符串后缀按字典序对数据集中的位置点排序并编号ID;空间索引建立步骤,根据排序后的字符串前缀构建Trie空间索引结构;范围查询步骤,在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。本发明采用基于字符串前缀构建部分Trie索引结构,在降低空间开销的同时,具有较高的查询效率;采用geohash空间索引方法,有效支持任意范围查询。

Description

一种基于Trie的范围查询方法及装置
技术领域
本发明涉及一种基于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范围的映射表;
范围查询装置,用于在索引结构上获取查询域内的位置点,经过滤得到候选集,并对候选集验证返回查询范围内的所有位置点。
CN201710784973.2A 2017-09-04 2017-09-04 一种基于Trie的范围查询方法及装置 Active CN107798054B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 滴滴(中国)科技有限公司 一种数据查找方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 石家庄铁道大学 基于空间距离约束的空间关键字查询方法及系统
CN108874880B (zh) * 2018-05-04 2021-11-23 昆明理工大学 一种基于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的空间关键词查询方法及装置
CN108846013B (zh) * 2018-05-04 2021-11-23 昆明理工大学 一种基于geohash与Patricia 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) 基于双数组的位置查询方法、装置、计算机设备及存储介质
CN108446357A (zh) 一种基于二维地理位置的海量数据空间范围查询方法
CN108776666A (zh) 一种基于关键词倒排与Trie的空间关键词查询方法及装置
CN116450765B (zh) 一种多形态地理实体编码一致性处理方法及系统
CN102890719B (zh) 一种对车牌号进行模糊搜索的方法及装置
CN112035586A (zh) 基于可扩展学习索引的空间范围查询方法
CN109885638B (zh) 一种三维立体空间索引方法及系统
CN106991149A (zh) 一种融合编码和多版本数据的海量空间对象存储方法
CN115563409A (zh) 一种地址行政区划识别方法、装置、设备及介质
CN105843948B (zh) 一种移动环境下基于索引技术的景点智能推荐方法
CN112948717B (zh) 一种基于多因素约束的海量空间poi搜索方法及系统
Ai et al. A map generalization model based on algebra mapping transformation
CN103500165A (zh) 一种结合聚类和双key值的高维向量检索方法
CN107729494A (zh) 一种基于z型空间曲线映射的poi检索方法
CN108776667A (zh) 一种基于geohash与B-Tree的空间关键词查询方法及装置
CN106649425A (zh) 一种顾及空间邻近性的矢量空间数据编码方法
CN111414445A (zh) 一种应用地理信息的地址反解析方法

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