本发明涉及一种计算机信息处理技术,具体涉及一种面向海量路网数据压缩存储的层次网络构建方法。
背景技术:
在面向大规模道路网络数据的地理信息系统应用中,道路网络复杂多样,信息量大。在导航系统设计中,面向大规模地理网络的路径查找往往会有很高计算复杂度,且不能支持网络的动态性,增加了查询时间,影响用户体验,且随着大数据技术发展,海量道路网络数据下的网络分析引起了越来越多的关注,传统算法在解决海量网络数据条件下的网络分析问题时往往具有很高的计算复杂度和内存占用。针对这一问题,在对现实道路网络进行观察研究的基础上,后续研究者提出了一系列的启发式优化算法,其中最重要的一种就是层次化方法。层次化方法通过挖掘道路网内部的层次特征,即不同的节点在搜索过程中有不同的重要程度这一事实来降低搜索空间。上述两种方法在降低算法复杂度,提升路径查询效率上具有显著的提升,但这同时也是以牺牲一定的预处理时间作为代价的。
层次化方法通过挖掘道路网内部层次特征,将不同层次节点集合构建出对应的上层覆盖网络。在路径搜索过程中,当搜索遇到一些上层节点时只释放上一层的节点集合和对应的边。这样通过不同层级网络的迭代构建可以减少很多无关搜索节点释放,进一步降低搜索空间。现有的层次化算法主要分为两种类型,一种是分割算法,利用道路网的平面特性对网络做分割,然后利用边界点及对应的距离构建高层网络。另外一种是利用节点重要度对节点进行层次划分,并构建相应的覆盖图,路径搜索过程在由原始网络和覆盖图的集合上进行。
在对大规模道路网络数据分析时,现有技术往往只需要提取一些重要节点来表征整个网络,即对整个网络在保持整体结构特征情况下做压缩。当前没有方法能很好的能解决这一问题。
技术实现要素:
发明目的:本发明的目的在于解决现有技术中存在的不足,提供一种面向海量路网数据压缩存储的层次网络构建方法,现对大规模网络数据高精度压缩,并通过将压缩掉的节点信息保存在关联节点上实现对原始网络信息的保留。
技术方案:本发明一种面向海量路网数据压缩存储的层次网络构建方法,依次包括以下步骤:
(1)对道路网络属性信息进行筛选,提取必要属性信息并存储;对所有网络节点进行编码,利用网络数据中节点和边的起止节点的坐标信息构建网络拓扑关系;然后设计基于节点-边映射关系的网络存储数据结构;
(2)对原始道路网络节点进行层次划分,不同的划分方法产生不同的网络层次效果,然后根据不同分层结果对网络层次划分标准进行评估,初步判断划分结果是否满足区域特征;层次划分方法包括基于道路网络属性即根据道路所属等级进行划分,或者根据局部最优路径信息进行层次划分;此处,不同的网络层次效果包括网络层次划分、覆盖图构建和网络分区构建效果;
(3)根据道路网络层次划分结果,构建不同层次网络的覆盖图;覆盖图是由所属上层网络节点集和上层节点间不经过下层节点的最短路径构成,其构建过程基于下一层的网络覆盖图进行,通过对特定层次网络节点做局部搜索确定上层网络节点间连通性,通过遍历上层节点完成对网络覆盖图的构建;
(4)根据各级网络覆盖图进行分区构建:对于某一层次的覆盖图,利用高层次的节点对下层节点进行区域划分,分区构建过程为选取一个下层种子节点进行邻边扩展从而构成一个扩展树,扩展过程直到树的所有分支都遇到高层节点停止,一个分区包括分区内节点集和边界节点集两个部分;
(5)根据道路网络的层次结构提供不同级别的压缩方式,压缩过程中基于层次网络中的某一分区分别计算分区内节点分到分区最近边界点的距离,然后将分区内节点及到对应边界节点距离信息关联到对应边界节点上,以这种方式完成对海量网络数据的压缩。
进一步的,所述步骤(1)中,所筛选的道路网络属性必要信息包括道路等级信息、起止节点的坐标信息、poi名称信息、坐标信息以及分类信息;
所述网络数据拓扑关系的构建方法为:对网络数据节点进行编码,给每个网络数据节点赋予一个序列标志符,然后利用网络数据中节点和边起止节点坐标信息,通过设置一定的容差(该容差需要根据具体坐标值进行确定,要小于所有匹配节点距离差最小值)对节点坐标进行匹配,遍历网络中每一条边最终得到完整的网络拓扑关系;
网络存储数据结构的设计方法为:首先将节点按照序列标标识符大小进行排序,然后将每条边分别按照起止节点标识符进行优先级排序,接着将起始节点标识符一致的边关联对应的节点上,同时对于上述节点和边必要的属性信息,分别设置对应属性表进行逐条存储。
进一步的,步骤(2)中,所选取的网络层次划分方法可根据各自压缩需求和层次划分效果对网络进行层次划分,但划分结果必须合满足不同层次节点的区域分布特征,否则会影响层次网络构建结果和最终压缩效果,本专利提供两种划分方法,一种是根据道路网络属性信息,一种是根据经典的ch算法得到的节点顺序按比例进行划分。
对道路网络进行层级划分,将原始道路网络节点v的n个节点通过某种规则(按照节点重要度排序规则)将其划分为k个层次,用vi表示第i个层次的节点集合,所有层次节点集的并集构成了原始道路网节点集,且任意两个层次节点集之间无交集,道路网络节点层次之间的关系形式化表达为:
对于一般道路网络,不同层次的节点意味着具有不同重要度的交通属性,原则上应满足|v1|<|v2|<…|vk|,即上层节点集元素个数要小于下层节点集元素个数。
进一步的,所述步骤(3)中构建不同层次的网络覆盖图是对网络进行拓扑重构,对保留的节点进行拓扑重构以保存其原有的拓扑信息,构建过程按照由下到上的层级关系迭代进行。
进一步的,网络拓扑重构的过程为:采取局部搜索策略对上层网络进行拓扑重构,局部搜索策略通过对任意节点做有限的邻域搜索以得到局部最短路信息,按照上层节点间最短路径不经过下层节点的原则对最短路径信息进行筛选,将路径起止点和对应距离权值作为新的边构建上层网络拓扑关系;
覆盖图是由连续层次节点集及其基于节点间最短路径形成的边构成的图结构,对于给定图gl(cvl,el),gl包括层次大于l的节点集合,即
所述构建覆盖图的关键的是对边集的定义,对于图gl中的任意两个节点u,v∈cvl+1,如果ps(u,v)=<u,…,v>中包含的节点除了u,v其余中间节点都属于vl,那么就把边(u,v)添加到边集合el+1中,且满足
进一步的,所述步骤(4)所述分区方法是基于层次覆盖图进行的,基于覆盖图进行分区就是在前期构建的每一层覆盖图基础上,利用不同层次节点间的拓扑关系进行分区划分,使覆盖图中最低层的网络节点被划分为不同的单元并通过高层节点关联。
对于某一层次的覆盖图,利用高层次的节点对下层节点进行区域划分,分区构建过程为选取一个下层种子节点进行邻边扩展从而构成一个扩展树,扩展过程直到树的所有分支都遇到高层节点停止,一个分区包括分区内节点和边界节点两个部分。
对不同层次覆盖图构建分区的目的在于对每个层次要压缩的节点进行区域划分,使每个节点都属于唯一的分区,在后续压缩操作中可将这些分区内节点的相关信息附着在分区边界节点上,从而最大限度保存原始网络信息,通过对不同层次网络覆盖图构建分区,将每个层次的网络都划分为一个个相互独立的单元,不同独立单元之间通过边界节点连接,通过边界节点又可以和高层次网络产生层级之间的连接,从而使得层次网络不仅具有横向上相互关联关系,在纵向上也彼此连接。
进一步的,所述步骤(5)中,在对网络进行压缩时,构建覆盖图只是重构了高层次网络的拓扑信息,对于压缩掉的节点的关键信息应该做一些保留,通过对分区内节点进行局部计算该节点到分区最近的边界节点距离从而将该节点和对应最短路径距离信息存储在分区边界节点上,在网络分析时可以直接利用这些信息对节点进行模糊查找。
进一步的,对每个分区内节点进行局部最优路径搜索时,当搜索过程标记了分区边界节点时,就将分区内节点连同对应最小权值存储到对应的边界节点属性表中;并且对某一点进行局部搜索过程中,搜索路径中的除了起始节点以外的其他分区内节点都有着样的对应边界节点,因此根据这一特征可以避免对一部分网络节点做重复搜索,提高网络数据的压缩效率。
有益效果:发明提出对海量道路网络节点进行层次划分,在层次划分基础上构建不同层次的网络覆盖图;对每个层次的网络覆盖图根据不同层次节点之间的关联关系对网络进行区域划分,构建层次网络在水平方向上既相互独立又相互关键的关系;根据层次网络区域划分结果对分区内节点进行压缩并保留相关属性信息,使海量网络数据压缩能够保存结构性信息。
综上,本发明简单实用,广泛适应于对各种道路网络数据进行层次划分与数据压缩,有效的解决了大规模网络数据分析困难和内存占用率大的问题,提高了对道路网络分析的效率,具有很好的应用前景。
附图说明
图1为本发明的整体流程示意图;
图2为本发明中网络拓扑存储示意图;
图3为本发明中网络节点层次划分示意图;
图4为本发明中网络覆盖图构建流程图;
图5为本发明中覆盖图中边构建示意图;
图6为本发明中局部搜索形成的搜索树示意图;
图7为本发明中局部搜索停止条件示意图;
图8为本发明中层次网络分区示意图;
图9为本发明中基于层次网络的路网数据压缩结果示意图;
图10为本发明中基于层次网络的路网数据压缩过程示意图;
图11为本发明中基于层次网络的路网数据压缩结果实例图;
其中图7(a)为即刻停止方法示意图;图7(b)为延伸停止方法示意图;
图7(c)为唤醒停止节点方法示意图;图7(d)为混合策略示意图;图11(a)为第2,3,4层次节点压缩示意图;图11(b)为第3,4层节点压缩示意图;图11(c)为第4层压缩结果示意图。
具体实施方式
下面对本发明技术方案进行详细说明,但是本发明的保护范围不局限于所述实施例。
如图1所示,本发明的一种面向海量路网数据压缩存储的层次网络构建方法,其步骤为:数据预处理、构建网络拓扑、网络层次划分、分层覆盖图构建、层次网络分区构建和网络数据压缩存储。其具体步骤如下:
1、对道路网络属性信息进行筛选,提取有用的信息并存储;对所有网络节点进行编码,利用网络数据中节点和边的起止节点坐标信息构建网络拓扑关系,并设计一种基于节点-边映射关系的网络数据存储结构。
一般道路网络数据包含多种属性信息,需要根据研究的需要选择相关属性信息进行存储,在本实施例中,选取道路网络的等级信息、起止节点的坐标信息,poi名称信息、坐标信息以及分类信息等进行存储。
构建网络拓扑需要根据网络节点坐标信息和边的起止点坐标信息,通过设定一定的容差进行点的匹配。在本实施例中,设定容差为e,对于两个节点,根据坐标值计算两个节点之间距离d,如果满足d小于e,则可以判定两个节点属于同一节点,完成对两个点的匹配。
构建网络拓扑关系,需要对网络节点进行编码,然后遍历每一条边,将边的起止节点与道路网络节点匹配,将匹配成功点的编号赋给这条边,完成匹配后的边按照节点序列号进行顺序存储。如图2所示,在一个实施例中,将道路网络节点按id=1,2,3,…的顺序进行编码并按照编码序列进行排序,然后将边分别按照起始点id排序并将具有同一起始点的边关联到对应的道路网络节点上,通过这种方式可以实现对道路网络拓扑信息的快速读取。
2、对原始道路网络节点进行层次划分,划分方法可以基于道路网络属性即根据道路所属等级进行划分或者根据局部最优路径信息进行层次划分,不同的划分方法导致不同的层次效果,需要对网络层次划分结果进行评估,初步判断划分的合理性;
本实施例中,利用经典ch算法对路网节点进行重要度排序,利用得到的节点序列进行网络节点层次划分。对道路网络进行层级划分,将原始路网节点v的n个节点通过某种规则将其划分为k个层次,用vi表示第i个层次的节点集合。在本实施例中,如图3所示,节点序列是从左到右节点重要度逐渐升高节点序列标识符,采用二分法的策略对网络节点进行层次划分,每一层的节点数都按照占剩余未划分层次节点的一半原则进行划分,结果划分为3个层次。用二分法进行网络层次划分是最简单的一种划分方法,在实际划分过程中需应用多种原则对网络节点进行层次划分,并检验每种划分方法最终效果,确定道路网络层次划分的最佳标准。
3、根据道路网络节点层次划分结果,构建不同层次网络的覆盖图。覆盖图是由上层网络节点间不经过下层节点的最短路径构成的,构建过程基于下一层的网络覆盖图进行,通过对特定层次网络节点做局部搜索确定上层网络节点间连通性,通过遍历上层节点完成对网络覆盖图的构建。详细的构造流程如图4所示。
构建对于图gl的覆盖图gl+1,关键问题是找到cvl+1中任意两节点之间不经过任何其他cvl+1中节点的最短路径。如图5所示,节点s,t∈cvl+1,u,v∈vl,那么<s,u,v,t>为一条满足条件的最短路径,所以边(s,t)连同他们之间距离被添加到图gl+1的边集中。为完整实现对图gl+1构建,最简单的方法是求出任意两个节点间最短路径并加以判断和筛选。这种做法虽然具有很高的准确性,但计算已经缩减过的上层网络仍然会有很高的算法复杂度。在本实施例中,从对现实道路网络观察结果出发,在覆盖图的构建中采用局部搜索策略。
对某一节点进行局部搜索,在搜索过程中只对新标记的点进行邻接边释放并更新已有节点最小权值属性。在本实施例中,如图6所示,当搜索到节点a时,只对a的两个邻接点t2,c添加到搜索空间中。
本实施例中,如图6所示,完整的局部搜索过程为对于给定cvl+1中的起始点s向四周作逐步搜索,在搜索过程中只对新标记的点进行邻接边释放并更新已有节点最小权值属性,例如当搜索到节点a时,只对a的两个邻接点t2,c添加到搜索空间中。
通过预先设置的搜索停止判定条件来决定每个分支是否停止搜索,直到所有分支的叶子节点ti都被cvl+1所覆盖。为方便描述我们将这些节点称为停止节点。在局部搜索过程中,如果遇到停止节点时大部分情况下应该停止做边的扩展。在本实施例中,如图6虚线部分所示,如果在t4节点继续搜索过程,那么之后所释放的节点多数情况下都是无效的。
本实施例中,如图7所示讨论了四种局部搜索的停止策略,每种方法都有各自的局限性。如图7(a)所示,即刻停止方法的搜索空间最小,但是这种方法会造成搜索结果错误率大大增加。图7(b)的延伸停止方法通过给定参数a来控制搜索空间,如a=1意味着到v继续进行一次边释放到w后停止。图7(c)的唤醒停止节点方法适应于当新的停止节点w释放的边中含有已经停止节点v并且w(s,v)+w(v,w)<w(s,w),那么将唤醒v继续进行搜索。唤醒停止节点也会增加额外搜索空间并伴随一些特殊情况下搜索错误。图7(d)融合了唤醒停止节点和延伸停止的方法,通过对唤醒节点进行与参数a一致的延伸来避免一些特殊情况的出现。参数a的设置需要根据网络数据的具体特征和对结果的精度要求进行动态设置。
本实施例中,如图6实线部分所示,局部搜索过程最终会形成一个局部搜索树,下一关键步骤需要从局部搜索树中筛选符合条件路径并将其转换边的形式存储到新的边集中去。在本实施例中,具体筛选过程为从每个叶子节点ti向根节点s查找,如果中间节点不属于cvl+1中的节点就将边(s,ti)添加到边集el+1中。经过这一步骤最终可以得到5条满足条件的边,分别为(s,t1)、(s,t2)、(s,t3)、(s,t4)、(s,t5)。
最后一个步骤为对每个cvl+1中的节点都进行同样的局部搜索,将搜索树中满足条件的边添加到边集el+1中,可以得到一个初始边集合。在本实施例中,所有的图都当做无向图处理,所以初始边集中(u,v)和(u,v)被视作同一条边,因此需要对重复边进行删除。经过上述操作可以得到上层网络对应的边集el+1,最终得到gl的覆盖图gl+1(cvl+1,el+1)。
4、根据各级网络覆盖图进行分区构建,对于某一层次的覆盖图,利用高层次的节点对下层节点进行区域划分,分区构建过程为选取一个下层种子节点进行邻边扩展从而构成一个扩展树,扩展过程直到树的所有分支都遇到高层节点停止,一个分区包括分区内节点和边界节点两个部分。
对于覆盖图gl(cvl,el),如果将cvl中的所有属于cvl+1的节点连同与其相连接的边删除,那么剩余的vl节点及其对应的边就构成了一个个连通分量,且这些连通分量都处在cvl+1节点包围之中。每个连通分量及其对应的包围节点构成了一个个网络分区,在本实施例中,如图8所示,节点a,b,c,d,m,n,p,q构成一个网络分区,其中a,b,c,d被称为边界节点,m,n,p,q被称为分区内节点。从图中还可以可以看出分区内节点总是处在不同高层次节点(不同颜色代表不同层次节点)包围之中并通过它和其他区域相连,这些边界节点(如节点c,d)成为连接不同分区的关键并在路径查询中起到决定性作用。
对某一层次网络节点分区采取一种较为简单的方法,对于给定层次l,详细的构建过程如下:
(1)首先构建一个集合s,从道路网络节点集vl中的选择一个节点放入集合中s中,在本实施例中,选择节点m进行扩展;
(2)根据前面所述数据表,从中查找m的邻接点进行判断,如果节点属于cvl+1则添加到边界点集中,如果属于vl则添加到点集s中,并将节点m移出点集s并添加到分区内点集中并对其进行标记。在本实施例中,m邻接点a添加到边界点集中,m邻接点p,n添加到点集s中;
(3)从s选取新的节点重复(2)的操作直到点集s为空,完成对一个分区的构建;
(4)从vl中选取新的未标记节点,重复步骤1-3直到vl中的节点都被标记完成整个层次网络的分区构建。
5、道路网络的层次结构提供不同级别的压缩方式,压缩过程中基于层次网络中的某一分区分别计算分区内节点分到分区最近边界点的距离,然后将分区内节点及到对应边界节点距离信息附着在对应边界节点上,以这种方式完成对海量网络数据的压缩。
压缩过程针对不同的需求可选择不同层次的压缩等级,选择不同的压缩等级意味着对网络进行不同级别层次构造和数据压缩。如果对网络进行二级压缩,那么就构造对应的两层覆盖图并在此基础上进行数据压缩。在本实施例中,如图9所示,原始网络11个节点总共划分成三层网络,那么实施例中可以提供两个级别的压缩。经过一级和二级压缩后,所剩网络节点数分别为5和2。
本实施例中,结合图10对压缩具体实施过程进行说明。搜索过程为(1)首先对于一个给定的分区内节点m进行局部dijkstra搜索,搜索过程直到标定了第一个分区边界点d时停止,(2)将节点m到边界点d的最短路径上的所有节点m,p连同对应的距离信息(4和2)都存储在这个边界点d上,并将m,p都标记为已压缩;(3)重复上述过程,直到分区内的所有节点都被压缩。
从宏观上来说,这些分区边界点是对下层网络的抽象,很好的保存了网络的整体结构信息,通过这种压缩方法可以很好的保持网络的整体结构性,并对下层网络信息实现最大程度的保留。应用表明,本发明提出的层次划分与数据压缩方法可以很好地应用于大规模网络数据的压缩处理与相应的网络分析算法。
为对本专利一种面向海量路网数据压缩存储的层次网络构建方法的实施效果进行说明,我们以常州市道路网络数据为例对本方法进行了验证。在实施例中,对网络进行三级压缩,经过实施上述基于层次网络的压缩过程,可以得到压缩后的结果如图11所示。