基于夹角判断的复杂多边形边界排序算法
刘理想1,2, 唐远彬1,2, 刘仁义2, 张丰1,2, 刘南1
1.浙江大学浙江省资源与环境重点实验室,杭州 310028
2.浙江大学地理信息科学研究所,杭州 310027

第一作者简介: 刘理想(1984-),男,硕士研究生,主要从事GIS国土应用系统开发和空间数据库研究。

摘要

针对复杂多边形的有序边界信息仅仅通过线-多边形拓扑关系很难确定的问题,提出了一种基于最小夹角判断来确定复杂多边形有序边界的算法; 同时通过引入曲线的切线来构建夹角,并根据夹角大小确定下一条边界。在土地利用调查中的实际应用表明,该方法可以很好地解决多条边共用一个节点和包含“岛”或者“孔”等多种类型的复杂多边形的边界排序处理问题,并能够满足土地利用调查中矢量数据交互文件(VCT)生产的需要。

关键词: 夹角判断; 多边形; 边界排序; 矢量数据交换格式(VCT); 土地利用
中图分类号:P208 文献标志码:A 文章编号:1001-070X(2011)02-0015-04
A Sorting Algorithm of Complex Polygonal Boundary Based on Angle Judgment
LIU Li-xiang1,2, TANG Yuan-bin1,2, LIU Ren-yi2, ZHANG Feng1,2, LIU Nan1
1.Zhejiang Provincial Key Laboratory of GIS, Zhejiang University, Hangzhou 310028, China
2.Department of Geographic Information Science, Zhejiang University, Hangzhou 310027, China
Abstract

It is difficult to determine the complex polygonal boundary information only through the line-polygon topology. In view of this situation, the authors proposed a sorting algorithm based on the judgment of minimum angle to get the orderly boundary of complex polygon. As the polygon boundaries are usually irregular curves in the investigation of land use,the authors introduced the curve tangent to get the angle and to determine the next boundary according to the size of the angle,which can solve the sorting processing problems of complex polygonal boundaries,such as multi-edge sharing of a common node which includes islands holes, etc., to meet the requirements of VCT data production in the land use investigation.

Keyword: Angle judgment; Polygon; Boundary sorting; VCT; Land use
0 引言

矢量数据交换格式(VCT)是土地利用调查中的一种非常重要的数据交换格式, 也是第二次全国土地调查和土地利用数据库更新的重要基础。VCT中的面要素用间接坐标来描述, 它需要按照一定的顺序(顺时针或者逆时针)记录组成该多边形数据的线要素和其他一些属性信息[1]。对于简单多边形, 其有序边界可以根据线-多边形的拓扑关系、组成多边形的边界线的首尾相连性和地理信息系统(GIS)中线的矢量性来加以判断和获取; 但对于复杂多边形(比如: 多条边共用一个节点的多边形), 其有序边界信息若根据简单多边形的边界排序算法就不能确定。目前, 夹角判断和多边形处理的相关算法大多集中在利用已有数据来构建多边形[2]的应用, 如通过判断夹角的变化趋势来实现多边形自动搜索和构建的相关算法[3], 而关于已有多边形数据边界排序的研究则相对较少。多边形的边界排序算法并不是多边形构建算法的简单逆向, 其处理过程也是十分复杂的。

针对上述情况, 本文给出了一种利用切线来构建夹角, 并通过夹角大小的判断来确定多边形有序边界排序的算法。利用此算法可以获取复杂多边形的有序边界信息, 可满足VCT数据生产的需要和提高数据处理的能力。

1 问题的提出

在VCT数据中, 由于与面要素对应的多边形通常都是不规则的, 而且边界大都是极不规整的曲线[4], 因此需要对其进行特殊处理才可以构建夹角; 同时由于面要素采用间接坐标的方式来记录组成其多边形的有序边界信息, 因此就需要对各种有效的复杂多边形进行边界线的排序处理。本文涉及的基本概念如下:

(1)借用《地球空间数据交换格式》中的描述, VCT由文件头、层类型参数、属性数据结构、几何图形数据、注记和属性数据等6个部分组成。对于几何图形要素部分, 不同的要素分别采用不同的坐标记录方式。点和线要素采用直接坐标方式来记录其空间坐标信息, 并附加一些属性信息; 面要素采用间接坐标的记录方式, 即按照一定的顺序(顺时针或者逆时针)记录组成该面要素的线要素和其他一些属性信息[1]

(2)夹角是在方位角的基础上定义的, 是一条射线沿着某一点、按照一定的方向(顺时针或者逆时针)旋转到另一条射线的角度, 其取值范围为0~2π [3]。如图1所示, OAOC的逆时针夹角为β , 顺时针夹角为γ ; OAOB的逆时针夹角是α

图1 夹角示意图Fig.1 Sketch map of the angles

在上述两个概念的基础上, 引出了“ 基于夹角判断的多边形边界的排序算法” 。

2 多边形的边界排序算法

多边形的边界排序有顺时针排序和逆时针排序两种情况, 处理方式大同小异。本文以多边形边界的顺时针排序为例来加以说明。

2.1 简单多边形边界排序

空间拓扑关系是GIS的重要基础, 也是GIS不可缺少的重要组成部分[5]。在多边形的边界排序处理中, 线-多边形拓扑关系尤为重要。在GIS中, 多边形是由多条首尾相连的矢量线构成的, 每条矢量线具有方向和起始节点信息。定义每条矢量线的开始节点为起点(BeginPoint), 结束节点为终点(EndPoint), 基线(BaseLine)为当前正在处理的边界矢量线[6]。下文中所提到的“ 默认线” 就是这种边界矢量线。

图2 简单多边形Fig.2 Simple polygon

图2中与图斑697(图中数字为图斑编号和边界线编号, 下同)对应的多边形为例, 简单多边形的边界排序算法的实现步骤如下:

(1)获取多边形的边界线的原始集合C。集合C中的元素是无序的, 图2中多边形697的对应边界线集合为C={104256, 103837, 104457, 104269}。

(2)随机获取集合C中的任意一条线, 作为排序结果集合R的首条线, 并利用该线对BaseLine赋值, 同时在集合C中剔除该元素。假设首先获取的矢量线是104269, 则R={104269}, C={104256, 103837, 104457}。

(3)通过拓扑运算来判断多边形与边界线的左右位置关系。当多边形位于边界线的右侧, 则令P(x, y)等于BaseLine的终点Pend; 当多边形位于边界线的左侧, 则令P(x, y)等于BaseLine的起点Pbegin

(4)遍历集合C中的所有元素, 查找其起点值或者终点值等于P(x, y)的线元素。如果没有找到, 则执行步骤(7); 如果找到, 则把该元素插入到集合R中, 同时在集合C中剔除该元素, 并利用该元素对BaseLine进行重新赋值。

(5)对P(x, y)进行重新赋值。当P(x, y)等于BaseLine的起点值时, 则P(x, y)=Pend; 否则P(x, y)=Pbegin

(6)重复步骤(4)、(5)。

(7)结束。获取排序结果集合R, 此时集合R={104269, 104256, 103837, 104457}。

对于类似的简单多边形, 通过上述算法, 根据线-多边形的拓扑特性, 即可以实现其边界的排序处理。

但是上述算法对图3所示的复杂多边形就不适用。

图3 复杂多边形Fig.3 Complex polygon

2.2 复杂多边形边界排序

图3中的图斑2940对应的多边形存在着多条边共用一个节点情况, 即边界线3853、3862、3859和3857共4条边相交于点O(共用O这个节点)。2.1节中所述的算法遇到这种情况就不适用, 因此需要对上述算法进行调整, 即需作切线处理(图4)。

图4 切线处理示意图Fig.4 Tangent process

切线处理时, 首先以O为起点, 分别获取4条边的切线(图4中①②③④共4条线), 并按逆时针方向计算其他切线与BaseLine切线的夹角; 然后取对应夹角最小的边作为BaseLine的下一条边界, 如此循环下去, 直到所有的边都处理结束为止。

复杂多边形的边界排序算法实现步骤如下:

(1)通过拓扑运算来获取多边形边界的矢量线的原始集合C, 集合C中的元素是无序的。

(2)随机获取集合C中的任意一条线, 作为排序结果集合R中的首条线, 并利用该线对BaseLine进行赋值, 同时在集合R中剔除该线。

(3)通过拓扑运算, 判断多边形与线的左右位置关系。当多边形位于线的右侧, 则令P(x, y)=Pend; 当多边形位于线的左侧, 则令P(x, y)=Pbegin

(4)遍历集合C中的所有元素, 查找其起点Pbegin值或者终点Pend值等于P(x, y)的线。如果没有找到, 则执行步骤(8); 如果找到一个元素, 则把该线插入到结果集合R中, 同时在集合C中剔除该条线, 并利用该线对BaseLine进行重新赋值, 执行步骤(7); 如果找到多个元素, 则把找到的多条线存放到临时映射IMap< ID号, 夹角> 中, 其中ID号是每条线的唯一标识值, 夹角的初始值全设为0, 执行步骤(5)。

(5)计算临时映射(IMap< ID号, 夹角> )中的每条线与BaseLine的最小逆时针夹角值。在实际应用中, 由于多边形的边界不一定是直线, 可能是曲线, 因此需要进行特殊处理。可以借用P(x, y)为起点, 沿着各边界线的切线所在的射线来进行夹角计算。处理方式如图4所示。点O是当前的点P(x, y), 共搜索到3条共用该节点的边界线(不包含BaseLine), 并分别获取每条边界线的对应边界切线所在的射线①、②和③, 同时计算BaseLine逆时针旋转到每条射线的最小夹角, 并存放在临时映射IMap< ID号, 夹角> 中。

(6)获取临时映射IMap< ID号, 夹角> 中夹角值最小的那条边界线。并把该线插入到结果集合R中, 同时在集合C中剔除该线, 再利用该条线对BaseLine进行重新赋值。

(7)对P(x, y)进行重新赋值。当P(x, y)等于线BaseLine的起点Pbegin值时, 则P(x, y)=Pend; 否则P(x, y)=Pbegin

(8)重复步骤(4)~(7)。

(9)结束。集合R就是最后的排序结果。

2.3 其他复杂多边形的处理

在土地利用调查中, 经常会遇到一些其他类型的复杂多边形, 通过适当处理也可以很好地使用上述算法来完成排序。

图5(a)所示, 图斑128是包含“ 孔” 或者“ 岛” 的复杂多边形, 可以将其拆分成两个简单多边形, 即与图斑24对应的多边形和由图斑128的外边界所形成的多边形, 以便可以很好地适应上述算法。

图5 其他复杂多边形Fig.5 Other complicate polygons

在实际应用中, 经常会遇到如图5(b)所示的与行政区261对应的多边形, 由两个空间位置并不相邻的孤立多边形组成。可以对其进行打散处理, 先形成两个简单的多边形, 再分别进行处理, 以便也可以适应上述算法。

图5(c)中, 与图斑19087对应的情况是前几种情况的综合, 它包含两个“ 岛” (19046和19055, 两者相接于一个节点)。因此, 与图斑19087的内边界对应的多边形是由岛19046和19055的边界线共同组成的。有一点需要注意, 对图斑19087的内边界进行排序的方法和2.2节中描述的算法存在细微差别, 只需要把步骤(5)中计算的最小夹角由逆时针方向改成顺时针方向即可。

3 应用实例

多边形边界的排序处理是实际应用中非常重要的技术。在第二次全国土地调查和土地利用数据库更新中都涉及到多边形边界的排序问题, 它直接影响VCT数据生产的质量。

笔者所在实验室开发的县级土地利用现状管理系统, 就是基于ArcEngine 9.3和SQL Server/ArcSDE平台, 采用Visual studio 2005 C#开发语言开发的一套土地利用管理软件。本文描述的算法已在该系统得以实现, 并已成功应用于VCT数据的生产。

例如图2所示的简单多边形, 利用本系统就可以成功生成多边形的有序边界集合, 如图2所示的697多边形的有序边界集合R={104269, 104256, 103837, 104457}。对于多条边共用一个节点的复杂多边形(如图3所示的复杂多边形), 利用本系统也可获取有序边界集合R={3853, 3862, 3855, 3859, 3857, 3967, 4081, 41507, 41281}。对于包含“ 岛” 或“ 孔” 的复杂多边形, 以及由多个空间位置不相邻的孤立多边形组成的复杂多边形, 可利用拆分和打散拓扑处理工具, 首先形成多个简单多边形, 再利用简单多边形的边界处理方式来获取有序边界集合。实际应用中, 有些多边形数据可能是上述几种情况的综合, 需要结合利用多种拓扑处理工具, 甚至在计算夹角时也需要根据实际情况确定逆时针夹角或者顺时针夹角。

4 结论

(1)对于简单多边形, 其有序边界可以根据线-多边形的拓扑关系、组成多边形的边界线的首尾相连性和GIS中线的矢量性来加以判断和获取。

(2)对于多条边界共用一个节点的复杂多边形, 可在线-多边形拓扑关系的基础上, 通过引入切线来构建夹角, 并进行最小夹角判断, 以获取有序的边界信息。

(3)对于其他类型的复杂多边形, 可通过打散、拆分等拓扑处理来生成上述两种多边形, 进而利用上述算法即可获取有序的边界信息。

致谢: 在写作本文的整个过程中, 得益于项目组师兄的悉心指导和匠心点拨。感谢陈明、张华鑫师兄, 曾志博士和唐远彬博士在本文写作过程中所给予的指导, 感谢张丰老师在科研和生活上给予的帮助和支持。再次感谢所有对本文的写作给予指导和帮助的同仁!

The authors have declared that no competing interests exist.

参考文献
[1] 中华人民共和国国土资源部. TD/T1016—2007土地利用数据库标准[S]. [本文引用:2]
[2] 程三友, 李英杰. 一种新的最小凸包算法及其应用[J]. 地理与地理信息科学, 2009, 25(5): 43-45. [本文引用:1]
[3] 梁晓文, 刘宗岐, 陈宜金. 基于夹角变化趋势的多边形自动搜索和生成算法[J]. 中国图象图形学报, 2005, 10(6): 785-789. [本文引用:2]
[4] 王斌, 施朝健. 多边形近似曲线的基于排序选择的拆分合并算法[J]. 计算机辅助设计与图形学学报, 2006, 18(8): 1149-1154. [本文引用:1]
[5] 黄先锋, 程晓光, 张帆, . 基于边长比约束的离散点准确边界追踪算法[J]. 武汉大学学报(信息科学版), 2009, 34(6): 688-691. [本文引用:1]
[6] 郝建强, 宫云战, 叶红. 点对多边形位置检测的稳定串行最优与并行的算法[J]. 计算机应用研究, 2010, 27(4): 1342-1347. [本文引用:1]