基于线段拓扑关系的多边形压缩方法
技术领域
本发明属于电子地图领域,特别是涉及一种导航电子地图数据格式转换过程。
背景技术
在制作电子地图数据格式过程中,为了削减数据容量,通常会对各种地图要素进行形点压缩处理,以删除多余形点。在对多边形数据进行形点压缩时,一般的压缩算法都只针对单个多边形进行处理,对于形变的控制也只能基于单个图形,无法防止相邻的多个多边形之间由于个体形变的不同造成的边界处的缝隙,使得压缩后的多个多边形无法精密的吻合在一起,造成显示效果不佳。相关名词解释:
1.线段
连接不在同一位置的两点之间的组成部分,成为线段。
2.折线段
由若干条线段依次首尾相连组成的线状图形,将其称为折线段。折线段的首尾点可以相同,也可以不相同。
3.形点压缩
为了在地图要素的形状和数据容量之间取得一个平衡,需要用形点压缩算法去除不必要的形状点。现在常用的形点压缩算法有道格拉斯形点压缩算法和距离限差形点压缩算法。
4.多边形
导航地图中为了描述面状地图要素(如湖泊、公园、行政区等)所使用的几何图形,由一串坐标点记录,表示每两个相邻坐标点之间的线段所围成的图形。
5.多边形的公共边(界)
如果一条线段(或折线段)被两个多边形共有,则称这条线段(或这线段)是这两个多边形的公共边界。每条公共边界至少被两个多边形共有,而两个(或多个)多边形之间可以有多条公共边界。
6.多边形的部分公共边(界)
如果一条线段(或折线段)只有一部分被两个(或多个)多边形共有,则称这条线段(或折线段)是这两个(或多个)多边形的部分公共边界。
7.多边形的非公共边(界)
某个多边形不与其他多边形形成公共边界的剩余部分,都称为这个多边形的非公共边界。
8.多边形的缝隙(裂缝)
形点压缩之前,两个(或多个)多边形的公共边界由于坐标完全一致,所以是紧密相邻的;形点压缩之后,由于一般的形点压缩算法是对整个多边形的形点串进行处理,所以,两个(或多个)多边形在公共边界上对形点的删除情况可能不同,导致原本坐标一致的公共边界不在完全紧密相邻,则称为这两个(或多个)多边形之间有缝隙(裂缝)存在。
发明内容
本发明所提供的压缩方法,针对有邻接关系的多个多边形进行统一的线段化,并根据线段的拓扑关系对多边形分段压缩,能消除一般压缩算法中由于个体压缩结果的差异而造成的缝隙问题。
本发明所要解决的问题是:提供一种多边形的无缝压缩方法,使用该方法在导航电子地图转换过程中,能在大量减少或消除由于形点压缩而产生的多边形之间的缝隙。
为了实现本发明的技术效果,本发明提供一种用于导航地图中形点压缩后多边形的公共边界区分,包括以下步骤:
步骤一、多边形拆解,将多边形变换成以线段进行描述的方式;
步骤二、公共边界识别,将多边形之间的公共边界进行识别;
步骤三、多边形的边界拼接,将上述步骤多边形拆解后的线段进行拼接,形成新的边界;
步骤四、折线段构成的边界进行分段压缩;将拼接后的若干条折线段分别使用形点压缩算法进行压缩;
步骤五、多边形形状还原,按照多边形的原始顺序,用压缩后的折线段组成新的多边形数据。
优选的,上述步骤二中识别多个多边形之间的公共边界线段,如果是有部分边界的情况,会增加形点形成新的公共边界;
优选的,上述步骤三在步骤二的基础上,将基于线段描述方式的多边形按照其原始顺序进行线段拼接,形成若干条折线段,这些折线段为边界;其中,公共边界至少为两个多边形共有,非公共边界必须为单个多边形独有。
优选的,上述步骤二具体包括:
21)通过比较两个多边形的外接矩形是否有交集,来判断两多边形是否相邻,如果两多边形的外接矩形有交集,则说明它们相邻,才进行后续处理,否则跳过这一对多边形,继续判断下一对多边形;
22)对两个多边形的每两条线段,通过比较坐标判断两条线段是否存在公共部分;
23)如果两条线段不是完全包含,而只有部分公共区间,则通过增加形点的方式,使原来的一条线段分裂为非公共部分和完全公共部分;对于公共部分,并将当前的两个多边形加入该公共部分的共有多边形集合内;
24)将两个多边形的线段表示方式进行更新,记录每条线段是否是公共线段。
优选的,上述步骤三具体包括:
31)对于按线段表示的多边形,将其相邻的非公共线段进行合并,成为一条非公共边界;
32)将其相邻的公共线段也进行合并,成为一条公共边界,其中合并的前提是:相邻的2条公共线段所包含的共有多边形集合完全相同。
优选的,上述步骤四中采用任意指定的形点压缩算法去掉不必要的形点。
优选的,上述步骤五是按照步骤三中合并完成后的边界顺序,依次将每条边界的形点串连起来,得到还原后的多边形的形点信息。
本发明的优点是:当存在有多个多边形,且它们之间有公共边界或部分公共边界时,能在形点压缩时有效的减少或消除这些边界上产生的缝隙。
附图说明
图1为本发明对多边形进行公共边界识别的实施例示意图;
图2为本发明对多边形进行边界拼接的实施例示意图;
图3为本发明实施流程图;
图4为本发明实施效果图。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图及具体实施方式对本发明作进一步的详细描述。
如图3所示,本发明的实现方式,在开始之后包括以下步骤:
1)多边形拆解
多边形拆解目的是为了将输入的以形点串方式描述的多边形数据变换成基于线段描述的方式,为后续进行边的相交、重合等判断提供便利。
对于所有的多边形,从多边形的首形点开始,按形点的排列顺序将每2个相邻形点组成一个线段并记入多边形的线段列表中。
2)公共边界识别
公共边界识别的目的是为了将多边形集合当中任意两个(或多个)多边形的所有公共边界标记出来,以方便在形点压缩时,对公共边界和非公共边界分别压缩。该过程初始时,所有多边形的线段列表中的所有线段都被标记为非公共边界。对于公共边界,要记录其所属的所有多边形列表。
首先从多边形集合重取一对尚未处理过的多边形,判断两个多边形的外接矩形是否有交集,如果有交集存在则继续,否则跳过这一对多边形,重新取一对新的多边形进行比较。
依照多边形的线段组成顺序从两个多边形中各取一条线段进行处理,如果任一条线段被标记为公共边界,则继续判断这条公共边界的共有多边形记录中是否包含正在处理的两个多边形,如果两个多边形均被包含,则说明该公共边已经是当前两个多边形的公共边,跳过该线段,继续下一条。
对这两条线段进行交点计算,可能得到以下结果:
a)0个交点,说明2个线段不相交,没有公共部分
b)1个交点,说明2个线段相交,但不共线,也没有公共部分
c)∞个交点,说明2个线段相交,且共线,存在有公共部分
如果两条线段没有公共部分,则继续处理下一对线段;如果两条线段有公共部分,则要对这两条线段分别进行分割,为了简化描述,以下仅对两条线段进行描述。如图1,两个多边形的线段分为为S1和S2:
1)S1和S2有一部分公共区间,且S1和S2均不完全包含对方。公共边的标识如图1Case 1.
2)S1完全包含S2,且两线段无公共端点,公共边的标识如图1Case2.
3)S1完全包含S2,且两线段有1个公共端点,公共边的标识如图1Case 3.
4)S1和S2完全重合,公共边的标识如图1Case 4.
经过以上处理之后,多边形的一条边会被区分为公共边界和非公共边界,将两个多边形添加到每段公共边界的共有多边形列表中。如果S1(或S2)处理前已经是公共边界,则遍历其共有多边形列表,将每个多边形的线段S1(或S2)替换为分割后的线段集合,并调整线段的排列顺序,使其和所属多边形的线段排列顺序一致。
如果已经处理完毕的一对线段存在公共区间,则下一对线段从替换后的第一条线段开始继续进行公共边界识别操作。
当两个多边形的线段序列均从头到尾遍历完成后,继续处理下一对多边形,直到所有多边形处理完毕。
3)多边形边界拼接
多边形边界拼接的目的是为了将相邻的公共边界或非公共边界尽可能多的连接成一个边界,这样能使形点压缩最有效化。
从多边形的第一条线段开始,依次取一条线段和前一条线段进行比较,并按照以下规则判断是否可以合并:
a)如果当前线段和前一条线段都是非公共边界,则将两条线段合并为一个非公共边界。
b)如果当前线段和前一条线段都是公共边界,则继续比较两者的共
有多边形列表中包含的多边形是否完全一致
i)如果两者的共有多边形相同,则将两条线段合并为一个非公共边界
ii)如果两者的共有多边形不同,则不进行合并
4)线边界的分段压缩
使用任意指定的形点压缩算法,逐条边界进行压缩,以缩减多边形的形点数量。对于公共边界,由于在两个多边形中坐标是相同的,所以最终压缩结果也完全相同,保证了不会产生缝隙。
5)多边形的形状还原
经过步骤4的处理,将压缩后的边界,按照组成多边形的顺序,依次将其形点记入到其形点集合中。
6)实施案例
参考图4,使用一般的形点压缩方法,在多边形的交界处,会产生明显的缝隙,而使用该方法处理过的多边形则不会产生类似的问题。
以上所述,仅是用以说明本发明的具体实施案例而已,并非用以限定本发明的可实施范围,举凡本领域熟练技术人员在未脱离本发明所指示的精神与原理下所完成的一切等效改变或修饰,仍应由本发明权利要求的范围所覆盖。