您的位置:首页 > 其它

浅谈导航数据中POI搜索技术原理

2013-07-31 11:36 399 查看

浅谈导航数据中POI搜索技术原理之一

王健
导航技术的应用已经成为现在生活中重要组成部分,为我们的生活提供了极大的便利。基本都有这样生活的体验,搜索自己位置附近的银行网点、餐馆。那么这些POI是如何快速检索出来呢?本文将浅谈这些技术原理的实现。在介绍POI搜索之前,需要对POI数据的组织有个了解。

导航数据的存储简介

移动终端上的导航电子地图数据的物理存储与组织,可以采用2种方法实现:嵌入式数据库和文件管理系统.目前的嵌入式数据库管理系统并不能完全满足其需求,但未来随着其自身技术的发展和完善,可能会成为导航应用中数据存储的主要方式之一。因此国内外导航系统使用的导航数据在移动客户端主要还是采用文件存储。

文件格式可以简单地分为二进制文件和文本文件,相对于文本文件,二进制文件具有以下优点:方便记录文件偏移,快速索引定位到指定的内容;通过每个比特存储导航数据,节省存储空间等优点。因此选择二进制文件,实现导航地图数据的物理存储与组织。本文所谈POI搜索技术基于文件存储结构。

POI数据存储成二进制文件的模拟。

POI(points ofinterest)即关键兴趣点,比如人民大学、新世界华联、306医院、沙县小吃、华联超市。下面选择一些数据先模拟数据存储,然后再模拟搜索的基本实现。

如表1中的数据。真实数据中的POI有很多属性,这里仅选则POI名称和所属区域两个属性作为例子。

序号

POI名称

所属的区域

1

四维图新

朝阳区

2

方正科技

海淀区

3

四方集团

海淀区

4

北京城建第四分公司

西城区

….

…..

……

表1
这个数据是如何存储到二进制文件中呢?可以采用表2所示的结构。

数据长度(固定字节表示整个结构的长度)

数据内容

表2
利用这个结构可以把上述数据序列化到如下的二进制文件(模拟)。结果如图1所示。



图 1
由上图可以知道,直接从二进制文件中搜索一个poi数据,十分困难,关键字检索和空间检索是常用的辅助技术手段。

关键字检索

POI关键字搜索常用的是倒排索引技术。

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted
file)。

下面演示如何对关键词建立倒排索引。为了提高搜索的速度,我们建立一个索引表,索引表第一列就是常用搜索条件,第二列存放包含key值的POI个数。第三列存放偏移表中该项的开始地址。这个地址也可以根据OffsetTable中index存储结构和Number数计算出来。

Key Table

Key

Number

Offset

K1

N1

M1

K2

N2

M2

K3

N3

M3

Kn

Nn

Mn

表3
OffsetTable

Index

Address in binary file

0

POI Address



……….

N1

POI Address



……….

表4

选择“四”字作为key值。那么N1 = 3,所以根据key值找到0-N1数据。再根据offset中M1和前面N找到OffsetTable中的index,根据POI Address 进而找到了在二进制文件中地址。这样便可以快速准确的找到包含“四”字的POI数据四维图新,四方集团、北京城建第四分公司。这便完成了一次快速检索的过程。

它们之间的关系。





图2
这个搜索过程可以抽象为图3所示的搜索树模型。搜索根据索引的key找到于key相关的叶子节点。



图3

最后再把偏移表和索引表用同样的方式序列化成二进制文件与POI数据保存在一个文件中(如图4所示)。那么这个文件具备了基本快速搜索数据的特性。可以供导航应用软件使用的物理数据。



图4

空间检索

空间索引是指根据空间要素的地理位置、形状或空间对象之间的某种空间关系,按一定的顺序排列的一种数据结构,一般包括空间要素标识,外包络矩形以及指向空间要素的指针。

空间索引的技术和方法是GIS关键技术之一,是快速高效的查询、检索和显示地理空间数据的重要指标,它的优劣直接影响空间数据库和GIS系统的整体性能。

针对海量数据采用倒排索引也不能完全解决空间搜索问题。所以需要采用倒排索引加空间分割的方式:

1、采用网格方式对所有POI信息按照空间位置关系,进行分割。

2、分割之后的空间内的POI建立倒排索引。

如下表所示,K1则代表着图幅号或是行政区号对应的键值。

Key

Number

Offset

K1

N1

M1

K2

N2

M2

K3

N3

M3

Kn

Nn

Mn

表5
读者看到这个地方明白接下来步骤和上面检索过程一样了。就不做累述了。

提高效率的B树、R树

上述搜索过程在数据量很大时,存在着效率的问题,在数据变更过程中又存在不好扩展索引表和偏移表的问题。B树和R树是比较成熟的改进办法,基于B树和R树建立空间索引会提高搜索的效率。受篇幅限制,在此仅对这两种树做个简介。

B树简介

B树是一棵平衡树,它是把一维直线分为若干段线段,当我们查找满足某个要求的点的时候,只要去查找它所属的线段即可。这种方式其实就是先找一个大的空间,再逐步缩小所要查找的空间,最终在一个自己设定的最小不可分空间内找出满足要求的解。一个典型的B树查找如下:



图5
要查找满足某一条件的点,先去找到满足条件的线段,然后遍历所在线段上的点,即可找到答案。

但是B树存在着问题,B树是一种相对来说比较复杂的数据结构,尤其是在它的删除与插入操作过程中,因为它涉及到了叶子结点的分解与合并。R树则是一个好的解决办法。

R树介绍

R树是GUTTMAN于1984年提出的最早支持扩展对象存取方法之一,也是目前应用最为广泛的一种空间索引结构。R树运用了空间分割的理念,这种理念是如何实现的呢?R树采用了一种称为MBR(Minimal Bounding Rectangle)的方法,把它译作“最小边界矩形”。从叶子结点开始用矩形(rectangle)将空间框起来,结点越往上,框住的空间就越大,以此对空间进行分割。R树中的R应该代表的是Rectangle。如图6是个简单的R树结构。如果搜索F中的内容,从A搜索。再搜索F的子节点是否符合我们的要求。



图6

结语

导航地图数据的物理存储是导航系统中非常重要的模块,本文所谈均是数据组织基本的结构、搜索的基本原理。实际应用要远远比这些复杂。由于本文作者水平有限和时间紧迫,仅作抛砖引玉作用,疏漏之处还请读者不吝批评和斧正。在写出该文的过程中,得到吴中恒、胡钱钱、邓庆明同事鼎力帮助!在此表示由衷感谢!

作者简介

王健, 男,毕业于华电(北京)软件工程专业, 专长C++编程,主要从事Gis领域软件研发工作。 email:wjflrain@163.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: