一种地理信息系统拓扑集中的多边形链生成方法

文档序号:6374002阅读:281来源:国知局
专利名称:一种地理信息系统拓扑集中的多边形链生成方法
技术领域
本发明涉及一种地理信息系统拓扑集中的多边形链生成方法。
背景技术
地理信息系统(Geographic Information System, GIS)的矢量数据模型主要两种类型,即Spaghetti数据模型和拓扑数据模型(陈述彭等地理信息系统导论,科学出版社,2000年,P31-43)。拓扑模型的基本 实体类型包括结点、弧段和区域,其中,结点(node)位于弧段的端点或多条弧段连接点;弧段(edge)是由至少两个点(即节点)顺序地连接而成的曲线,它始于起始结点、终于终止结点;区域(area)是用弧段来描述的,是以一条或多条弧段为边界围成的一个连通域。基于拓扑数据模型的拓扑集中的结点、弧段和区域要素之间相互关联,而且定义了严格的拓扑一致性约束,如同类要素之间不重叠、相交等。在拓扑模型中,除了存储坐标数据外,还需要记录要素之间拓扑关系,如结点的关联弧段、弧段的起始和终止结点、组成区域的弧段等。为了完整描述要素之间拓扑关系,用于实现拓扑数据模型的数据结构通常需要包括以下内容弧段(edge)E = {path, from, to, left, right},其中,path 为弧段的路径;from, to分别表示起始和终止结点;left, right分别为弧段的左、右区域。同一拓扑集中的弧段的起点和终点都在所述拓扑集中的结点上,所述拓扑集中的任意两条弧段之间不存在除端点外的其它交点有向边,也称关联弧段(EI) EI = {e, f},其中e为弧段标识,f为方向标识。对于结点的有向边,若f为正方向标识,表示所述结点为弧段e的起始结点,当f为反方向标识,表示所述结点为弧段e的终止结点;对于多边形链中的有向边,若f为正方向标识,表示在多边形链中弧段e按正方向连接,当f为反方向标识,表示在多边形链中弧段e按反方向连接。GIS拓扑集中的每一条弧段都对应两条有向边,其中的一条有向边的方向与该弧段相同,该有向边的起点和终点分别对应该弧段的起点和终点,另一条有向边的方向与该弧段相反,该有向边的起点和终点分别对应其使用的弧段的终点和起点。结点(node)N = {location, edges},其中 location 表示结点位置;edges 为有向边(EI)表,其中的有向边(EI)按其始端连接向量与X轴正向在逆时针方向上的夹角大小排序。所述有向边的始端连接向量是指由有向边的终点到与该终点顺序上邻近的节点的向量。区域(area) A= {main, holes},其中,main表示区域的外边界,是一个多边形链;holes为用于存储描述区域内边界的多边形链数组。多边形链(CHAIN)是一个关联弧段(EI)表,其中的关联弧段(EI)按其在构成多边形时的连接顺序排序。在一个拓扑数据集中,并非所有弧段都可参与构成多边形链,通常将不能参与构成多边形链的弧段称为悬挂弧段。另外,有向边(EI)的末端结点是指,与有向边的对应弧段e在其方向标识f指定方向上的末端结点,即当f标识为正方向时,指的是弧段e的终止结点;当f标识为反方向时,指e的起始结点;左转有向边是指,当前有向边绕其末端结点顺时针方向旋转遇到的第一条有向边。在Spaghetti模型中,点用一个二维空间坐标表示,线由一串坐标(称为节点或顶点,vertex)组成,面是由一条或多条线所围成的闭合多边形区域。Spaghetti模型中,只存储实体的坐标数据,不记录实体间的拓扑信息。GIS矢量数据处理的一项重要内容是利用线数据生成拓扑数据集或Spaghetti模型的面数据。在拓扑数据集的建立过程涉及区域数据的生成;而利用线数据生成Spaghetti模型面数据时,则通常需要先建立拓扑区域数据,然后利用拓扑区域数据生成面数据。因而,拓扑区域数据的建立是利用线数据生成面数据的关键。利用线数据生成拓扑数据集的建立步骤可归结为线数据的预处理;结点的匹配和弧段连接关系的建立;同一结点上弧-弧拓扑关系的建立;多边形链搜索、构建及包含关
系的确定等。这些环节中,多边形链的搜索、构建是影响拓扑区域数据构建效率的关键因素之一,其目的是利用拓扑数据集中弧段生成用于描述区域边界的所有多边形链。多边形链搜索算法主要涉及两个方面,一是起始有向边的选择;二是单个多边形链的搜索和构建。选择起始有向边时,要求从这些有向边出发,能构造出所有多边形链,同时构造出的多边形链不应与已有多边形链相同。当无悬挂弧段时,GIS多边形拓扑模型中的每条弧段由两个且仅由两个多边形所公共(GIS中多边形图拓扑信息生成的数学基础,《测绘学报》,1996年第4期,P267-271),即每条弧段都沿正反两个方向分别参与构成不同区域边界的多边形链。因而需要遍历每条弧段,对尚未使用的弧段,沿其正反两个方向进行搜索,分别构建多边形链。当不存在悬挂弧段时,多边形链搜索和构建的一般思路为从指定有向边出发,到达末端结点时,则按左转算法,沿绕该结点顺时针方向旋转遇到的第一条有向边(即左转有向边)继续搜索,直至回到起始有向边,依次访问过的有向边即构成一个多边形链。实际应用中,拓扑数据集中往往存在悬挂弧段,因而,单个多边形链构建的关键在于悬挂弧段的处理。当拓扑数据集中存在悬挂弧段时,由于悬挂弧段不参与构建多边形链,因而必须在构建多边形链时必须排除悬挂弧段。为达到这一目的,传统方法是通过预处理事先排除悬挂弧段,以便在进行单个多边形链搜索、构建时不必考虑悬挂弧段的影响。由于悬挂弧段的判定需要采用类似于多边形链搜索的算法,通过额外的搜索计算来完成,因而这种方法会增加通过访问结点确定左转有向边的次数,由于左转有向边的确定需要查找算法确定当前有向边在结点关联弧段表中的位置,时间复杂度高,从而降低了整个拓扑数据集中多边形链生成的时间效率。为此,有必要提供一种全新的地理信息系统拓扑集中的多边形链生成方法,以提高多边形链的生成效率。

发明内容
本发明所要解决的技术问题是提供一种地理信息系统拓扑集中的多边形链生成方法,该地理信息系统拓扑集中的多边形链生成方法易于实施,且能显著提高多边形链的生成效率。发明的技术解决方案如下一种地理信息系统拓扑集中的多边形链生成方法,所述拓扑集中包括至少一个结点,每一个结点采用一个点来表示它的位置,所述拓扑集中的不同结点的位置不相同;所述拓扑集中还包括至少一条弧段,用以连接所述拓扑集中的结点,所述弧段是由至少两个节点顺序地连接而成的曲线,所述拓扑集中的弧段的起点和终点都在所述拓扑集中的结点上,所述拓扑集中的任意两条弧段之间不存在除端点外的其它交点;所述拓扑集中的每一条弧段都对应两条有向边,其中的一条有向边的方向与该弧段相同,该有向边的起点和终点分别对应该弧段的起点和终点,另一条有向边的方向与该弧段相反,该有向边的起点和终点分别对应其使用的弧段的终点和起点;指定任一有向边作为一趟多边形链搜索的起始有向边所述有向边可被选择作
为一趟多边形链搜索的起始有向边
,所述一趟多边形链搜索的过程是指从起始有向边出发,不经过其他弧段,或历经至少一条其他弧段,直到再次回到所述起始有向边的多边形链搜索过程;所述多边形链包括至少一条有向边,这些有向边按其在构成多边形链时的连接顺序排序;多边形链的生成方法包括以下步骤在一趟多边形链搜索中,如果某一弧段会经过两次,则判定该弧段为悬挂弧段,所述悬挂弧段对应的有向边不能参与构成多边形链;利用一趟多边形链搜索中同一悬挂弧段对应的两条有向边之间的可用有向边构建多边形链,所述可用有向边是指不包括悬挂弧段对应的有向边、以及已被用于构建多边形链的有向边在内的有向边。从起始有向边出发搜索和生成多边形链,使用一个搜索链来记录所经过的有向边,所述搜索链是一个有向边表;包括以下步骤先清空搜索链,并指定所述起始有向边作为当前有向边,然后执行以下步骤此时,当前有向边尚未加入搜索链步骤I :指定当前有向边所使用的弧段作为当前弧段;重置当前弧段,此时,当前有向边尚未加入搜索链步骤2 :检查搜索链中是否存在使用一条当前弧段的有向边,如果存在,则判定当前弧段为悬挂弧段,进入步骤处理悬挂弧段;否则,转到步骤跳过步骤3、4,将当前有向边加入搜索链;步骤3 :检查所述使用当前弧段的有向边是否位于搜索链的末尾,若是,则将该有向边从搜索链中删除;否则,利用搜索链中该有向边所在位置之后的有向边构建多边形链,并从搜索链中删除该有向边及之后的有向边;回溯可用有向边步骤4 :转到步骤6 ;跳过步骤5,当前有向边不再加入搜索链步骤5 :将当前有向边加入到搜索链末尾;步骤6 :指定当前有向边的左转有向边作为当前有向边;重置当前有向边步骤7 :判定当前有向边与起始有向边是否相同回到起始有向边?,若是,转到步骤8结束搜索;否则,返回步骤I继续搜索
步骤8 :检查搜索链是否为空,如果空,则直接结束搜索过程;如果不空,则不构建多边形链结束搜索如果不为空,则利用其中的剩下的全部有向边构建多边形链。结束搜索其中所述当前有向边的左转有向边是指以所述当前有向边的末端连接向量绕其终点所在的结点顺时针旋转大于零度角度大于零度角度的目的,是避开当前有向边的反向有向边,以便只有该结点上只有当前有向边的对应弧段连接时,才会选择当前有向边的反向有向边,相当于对于当前有向边,其反向有向边的始端连接向量的旋角是360度的方向上遇到的第一个始端连接向量的有向边定义左转有向边,该始端连接向量的起点是所述末端连接向量的终点,其中所述有向边的末端连接向量是指由有向边上的、与其终点顺序上邻近的节点到该终点的向量定义末端连接向量,所述有向边的始端连接向量是指由有向边的终点到与该终点顺序上邻近的节点的向量定义始端连接向量定义左转有向边本发明的主要思想是,利用一趟搜索得到的搜索链中,悬挂弧段会出现两次,来识
别悬挂弧段;利用多边形链与同一悬挂弧段对应的有向边的嵌套关系,来提取并构建多边形链,并从搜索链中删除该悬挂弧段对应的有向边及之后的有向边;一趟搜索结束的条件是回到起始有向边。有益效果本发明的地理信息系统拓扑集中的多边形链生成方法与现有技术相比,其优点在于可不必通过预处理来排除悬挂弧段,而是在多边形链搜索、构建过程中完成悬挂弧段的识别和排除,这样,每个弧段结点只需访问两次,减少拓扑数据集中弧段的遍历次数和访问结点查找左转关联弧段的次数,从而提高多边形链的生成效率,加快拓扑数据集的构建速度。


图I示出了一个GIS拓扑数据集图形实例;图2示出了拓扑数据集存在悬挂弧段时的三种典型情况(分别对应图a_c);图3示出了根据本发明实施例的从起始有向边出发搜索和构建多边形链的方法流程;图4示出了根据本发明实施例的利用一拓扑数据集中的弧段构建多边形链的方法流程。表I示出了图I所示的GIS拓扑数据集存储结构;
具体实施例方式以下将结合附图和具体实施例对本发明做进一步详细说明实施例I :本实施例在计算机上实现,其中的GIS拓扑数据集中的弧段和结点需要首先被创建或装载到计算机上。图I示出了一个GIS拓扑数据集图形实例100。该GIS拓扑数据集包括5个结点,它们是 NOl、N02、N03、N04 和 N05 ;6 条弧段,即 EOl、E02、E03、E04、E05 和 E06 ;3 个区域A01、A02和A03 ;图中VOl VlI为弧段的节点。为了便于相关领域的人员进一步理解本发明中所述GIS拓扑数据集,图2示出了图I所示的GIS拓扑数据集存储结构200。包括结点表201、区域表202和弧段表即表I。结点表201中每一行表不一个结点,该表中ID为该结点的唯一标识;弧段属性的值为与该结点关联的弧段的ID,一个结点可以有一个或多条关联弧段,其中正值表示起始端、负值表示终止端;坐标属性的值表示该结点的坐标,第一个为X坐标,第二个为I坐标。弧段表中每一行表示一条弧段,表中ID为该弧段的唯一标识;起始结点、终止结点属性值为与结点表ID属性对应的结点标识;左区域、右区域属性值为与区域表ID属性对应的区域标识,其中的空值表示对应的区域不存在;节点属性值为该弧段的节点序列。区域表中每一行表示一个区域,表中的ID为该区域的唯一标识;弧段属性值表示围成该区域的有向边表,该有向边表可以分为多组,每一组表示一个多边形链,由一个或多个有向边的对应弧段ID组成,其中弧段ID前的负号表不对该有向边的方向标识为反方向,否则为正方向,这些多边形链中的第一个为外边界的多边形链,其它为内边界的多边形链,外边界的多边形链为反时针
方向,内边界的多边形链为顺时针方向。为了便于相关领域的人员进一步理解本发明中关于从起始有向边出发搜索和构建多边形链的思想,图3示出了存在悬挂弧段时的几种典型情况300,如果从弧段el出发,沿其正方向进行搜索,则在图中301,302,303三种情形下得到的弧段序列分别为(I) {e” e3, _e3, _e2, e5, _e5, _e4, e4, e2, _ej ;(2) {e1; e3, _e3, ~e2, _e4, e2, _ej ;(3) {e” -e2, _e4, e5, _e6, _e5, e3, e2}。其中的负号表示经过弧段的方向与弧段自身的方向相反。显然,序列⑴完全由悬挂弧段组成,为非闭合链;序列(2)含一个多边形链,但有由悬挂弧段构成的支链与其连接;而序列(3)则包括两条悬挂弧段和由这两条弧段串起来的三个多边形链,形成一个多边形串。这些结果在拓扑构建中都是不可接受的。通过分析这三个弧段序列不难发现在一趟搜索得到的搜索链中,悬挂弧段会沿不同方向出现两次,而非悬挂弧段则只出现了一次。因此,可以根据在一趟搜索中经过的次数来判定悬挂弧段,然后将它们从搜索链中剔除。但是,理想的多边形链搜索策略必须能直接得到单个的多边形链,以避免额外的多边形识别和分离计算。而对于图303中从弧段ei出发,沿其正方向进行的搜索,若在弧段序列{e” -e2, -e4, e5, -e6, -e5, e3, e2}生成后,再删除其中的悬挂弧段e2,e5的对应记录,则余下的序列为Ie1, _e4,_e6,e3},显然不能直接构成单个的多边形链,而且要将其拆分成单个的闭合链也比较困难。但若注意到多边形链与悬挂弧段对应的两条有向边之间嵌套关系,在搜索过程中,按照悬挂弧段对应的第二条有向边加入搜索链的先后顺序,依次取其前后两条对应记录之间的非空子序列构建多边形链,同时将此两条记录及它们之间的记录从原序列中删除,则可依次得到{_e6}、{-e4, e3}和IeJ三个多边形链。采用同样策略,对于图302也可相应地得到多边形链{_e4},而图301则不会有多边形链产生。为了便于相关领域的人员理解本发明中关于从起始有向边出发搜索和构建多边形链的思想,图3示出了根据其实施例的处理方法流程300。该方法先进行初始化,以清空搜索链、将当前有向边初始化为起始有向边(步骤302 )、当前弧段初始化为当前有向边所使用的弧段(步骤303),然后检查搜索链中是否存在使用当前弧段的有向边(步骤304),如果搜索链中不存在使用当前弧段的有向边,则将当前有向边加入到搜索链末尾(步骤305),并重新指定当前有向边的左转有向边作为当前有向边(步骤309);如果搜索链中存在一条使用当前弧段的有向边,则说明当前弧段为悬挂弧段,不参与构建多边形链,于是进一步检查该条使用当前弧段的有向边是否位于搜索链的末尾(步骤306),如果是,则将该条有向边从搜索链中删除(步骤308),并重新指定当前有向边的左转有向边作为当前有向边(步骤309);否则,利用搜索链中该有向边所在位置之后的有向边构建多边形链,并从搜索链中删除该有向边及其所在位置之后的有向边(步骤307),并重新指定当前有向边的左转有向边作为当前有向边(步骤309)。重新指定当前有向边的左转有向边作为当前有向边(步骤309)之后,再检查当前有向边与起始有 向边是否相同(步骤310),如果不相同,则进一步指定当前有向边所使用的弧段作为当前弧段(步骤303),继续搜索;如果当前有向边与起始有向边相同,则说明已经回到起始有向边,于是进一步检查搜索链是否为空(步骤311),如果空,则直接结束搜索过程(步骤313);如果不为空,则利用搜索链中的全部有向边构建多边形链(步骤312 ),再结束搜索过程(步骤313 )。为了便于相关领域的人员理解本发明中涉及的关于利用GIS拓扑集中的所有弧段搜索和构建多边形链的思想,图5示出了根据其实施例的处理方法流程500。该方法先将当前弧段初始化为拓扑集中弧段表的第一条弧段(步骤502),然后检查当前弧段是否存在(步骤503),如果不存在,则结束搜索(步骤504);如果存在,则取当前弧段作为当前有向边的对应弧段(步骤505),并将当前有向边标记为正方向(步骤506),接着检查当前有向边是否已访问过(步骤507),若当前有向边未访问过,将当前有向边标记为反方向(步骤508 ),继续;否则,若当前有向边未访问过,则以当前有向边为起始有向边采用图3所示方法(300)搜索和构造多边形链(步骤509),接着将当前有向边标记为反方向(步骤508)。将当前有向边标记为反方向(步骤508)后,接着检查当前有向边是否已访问过(步骤510),若当前有向边已访问过,则将当前弧段重置为弧段表中当前弧段的下一条弧段(步骤512);否则,若当前弧段为访问过,则以当前有向边为起始有向边搜索和构造多边形链(步骤511),并将当前弧段重置为弧段表中当前弧段的下一条弧段(步骤512)。将当前弧段重置为弧段表中当前弧段的下一条弧段(步骤512)后,返回步骤503继续。为方便进一步说明本发明核心内容的细节,在下面的关于本发明的实施例的描述中主要采用了类C和C++算法描述语言。为方便代码阅读,下述代码中采用的数据结构未经优化,高效的实现方法可使用更优秀的数据结构和算法。表I给出了本实施例涉及到的主要数据结构,其中EIS为有向边表;EIS为结点;EDGE为弧段;EI为有向边。表I
权利要求
1.一种地理信息系统拓扑集中的多边形链生成方法,所述拓扑集中包括至少一个结点,每一个结点采用一个点来表示它的位置,所述拓扑集中的不同结点的位置不相同; 所述拓扑集中还包括至少一条弧段,用以连接所述拓扑集中的结点,所述弧段是由至少两个节点顺序地连接而成的曲线,所述拓扑集中的弧段的起点和终点都在所述拓扑集中的结点上,所述拓扑集中的任意两条弧段之间不存在除端点外的其它交点; 所述拓扑集中的每一条弧段都对应两条有向边,其中的一条有向边的方向与该弧段相同,该有向边的起点和终点分别对应该弧段的起点和终点,另一条有向边的方向与该弧段相反,该有向边的起点和终点分别对应其使用的弧段的终点和起点; 指定任一有向边作为一趟多边形链搜索的起始有向边,所述一趟多边形链搜索的过程是指从起始有向边出发,不经过其他弧段,或历经至少一条其他弧段,直到再次回到所述起始有向边的多边形链搜索过程; 所述多边形链包括至少一条有向边,这些有向边按其在构成多边形链时的连接顺序排序; 其特征在于,多边形链的生成方法包括以下步骤 在一趟多边形链搜索中,如果某一弧段会经过两次,则判定该弧段为悬挂弧段,所述悬挂弧段对应的有向边不能参与构成多边形链; 利用一趟多边形链搜索中同一悬挂弧段对应的两条有向边之间的可用有向边构建多边形链,所述可用有向边是指不包括悬挂弧段对应的有向边、以及已被用于构建多边形链的有向边在内的有向边。
2.根据权利要求I所述的地理信息系统拓扑集中的多边形链生成方法,其特征在于,从起始有向边出发搜索和生成多边形链,使用一个搜索链来记录所经过的有向边,所述搜索链是一个有向边表;包括以下步骤 先清空搜索链,并指定所述起始有向边作为当前有向边,然后执行以下步骤 步骤I :指定当前有向边所使用的弧段作为当前弧段; 步骤2:检查搜索链中是否存在使用一条当前弧段的有向边,如果存在,则判定当前弧段为悬挂弧段,进入步骤3 ;否则,转到步骤5 ; 步骤3 :检查所述使用当前弧段的有向边是否位于搜索链的末尾,若是,则将该有向边从搜索链中删除;否则,利用搜索链中该有向边所在位置之后的有向边构建多边形链,并从搜索链中删除该有向边及之后的有向边; 步骤4 :转到步骤6 ; 步骤5 :将当前有向边加入到搜索链末尾; 步骤6 :指定当前有向边的左转有向边作为当前有向边; 步骤7 :判定当前有向边与起始有向边是否相同,若是,转到步骤8 ;否则,返回步骤I ;步骤8 :检查搜索链是否为空,如果空,则直接结束搜索过程;如果不为空,则利用其中的全部有向边构建多边形链。
3.如权利要求2所述的方法,其特征在于,其中所述当前有向边的左转有向边是指以所述当前有向边的末端连接向量绕其终点所在的结点顺时针旋转大于零度角度的方向上遇到的第一个始端连接向量的有向边,该始端连接向量的起点是所述末端连接向量的终点,其中所述有向边的末端连接向量是指由有向边上的、与其终点顺序上邻近的节点到该终点的向量,所述有 向边的始端连接向量是指由有向边的终点到与该终点顺序上邻近的节点的向量。
全文摘要
本发明公开了一种地理信息系统拓扑集中的多边形链生成方法,在一趟多边形链搜索中,如果某一弧段会经过两次,则判定该弧段为悬挂弧段,所述悬挂弧段对应的有向边不能参与构成多边形链;利用一趟多边形链搜索中同一悬挂弧段对应的两条有向边之间的可用有向边构建多边形链,所述可用有向边是指不包括悬挂弧段对应的有向边、以及已被用于构建多边形链的有向边在内的有向边。该地理信息系统拓扑集中的多边形链生成方法易于实施,且能显著提高多边形链的生成效率。
文档编号G06F17/30GK102819581SQ20121026152
公开日2012年12月12日 申请日期2012年7月26日 优先权日2012年7月26日
发明者邹滨, 曾永年, 邱永红 申请人:中南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1