韦 胜 叶兴平
(江苏省城市规划设计研究院,南京 210036)
当前,我国有很大一部分的地形图数据是以AutoCAD格式存储的,对于其信息提取主要有两种方式:第一种是先对其格式转换再进行相关软件的处理,如陈能等[1]在研究AutoCAD数据向GIS数据入库时,提出了基于地理编码和规则库的方案,但这种方式需要用户熟悉其它软件、增加了用户的操作复杂度且缺乏拓扑规则处理;第二种是基于AutoCAD数据自身结构特点的处理办法,如马文祥等[2]在研究AutoCAD地形图中离散高程点提取时,提出了基于最邻近关系的提取方法.另外,ArcGIS软件也在空间关联性处理(spacial join)上提供了基于要素的合并(union)、相交(intersect)等方式,但需要转换数据格式且不能解决一些特殊环境下的数据问题.
通过研究发现,AutoCAD数据与GIS数据相比较,缺乏拓扑关系及详细的属性信息.如果对Auto-CAD数据实体建立一定的拓扑关系,并以此提取信息,将会减少数据空间关系上的错误.为了提高利用效率,本文给出了一般性的基于拓扑关系的信息提取程序接口.由于在大数据量下处理速度将会缓慢,为此本文提出在缓冲查询基础上进行相关信息提取.同时,在AutoCAD二次开发基础上进行信息提取,减少了人为处理的不必要的错误,也增强了大数据量处理的效率及更强的适应性.最后,总结了提取步骤并以离散高程点的提取作为实例验证了该思路的正确性和有效性.
本文中的拓扑处理主要是指对AutoCAD中实体建立拓扑关系,并按需求给出信息提取的方法,其需要确定两个方面内容:实体的类型及其集合、实体间拓扑关系.其中拓扑关系包括面面相交、线线重叠等.由于在AutoCAD中实体间拓扑关系没有明确给出,为此先要确定拓扑关系,再进行具体信息提取.
AutoCAD由于缺乏丰富的拓扑功能,各实体间缺乏有效的拓扑检查及数据约束,为此需要用户依据不同的实体类型等去建立拓扑关系.本文仅以面面间3个(相交、重叠、岛)重要的拓扑关系的提取为例来说明,这里的面指AutoCAD里的闭合多段线.
如果要判断面面之间的上述3个拓扑关系,需要将不同的两个面(闭合多段线)转化为面域,再通过面域之间的拓扑计算进行判断.如果计算后得到的面域面积等于0,则认为两面相离;如果计算后得到的面域面积小于最小面的面积,则认为两面为相交的关系;如果计算后得到的面域面积等于最小面的面积,则还需要判断这两个面的面积是否相等,如果两个面的面积相等则认为两面重叠,如果两面面积不相等则认为两面为岛的关系;如图1所示.
图1 面面间拓扑关系示意图
基于拓扑的处理主要依据AutoCAD数据本身特点、应用情况及空间拓扑关系来建立实体间拓扑规则.拓扑规则的建立要依据以下几个原则:
第1,实体的类型及其集合.在GIS中,将现实世界的实体主要分为点、线、面3种类型,而在Auto-CAD制图环境下,操作人员可以对这3种类型实体,在不同尺度下以不同的图元类型表示,如水井既可用单点来表示,也可用一定大小的圆来表示[3].不同类型实体对应的拓扑规则可能不同,如面面相交、线割面,所以要依据实体类型建立相应的拓扑规则.对于一定数量的同类型实体以集合(Collection)的形式存储表示.集合操作具有很多优点,便于对实体遍历、删除、增加等操作.集合管理方式也实现了对不同实体功能、结构的封装抽象.
第2,拓扑关系本身特点.拓扑关系可以依据OGC(Open GIS Consortium)制定的地理信息系统空间标准.空间拓扑关系谓词包括:Crosses、Disjoint、Within、Contains、Equals、Touches、Intersects、Overlaps等8种.另外,还有实体的方向关系等.对于系统用户而言,对不同实体的不同空间拓扑关系进行记录,并对每种记录做唯一的标识,表1给出了部分拓扑关系的示例.这样在一个统一的系统环境下,用户根据这些不同的拓扑关系编写不同的实现功能代码,提高代码的可利用性.
表1 部分拓扑关系示例
第3,实体最小外接矩形.为了对各种不同类型的实体在空间拓扑关系上进行拓扑分析,如两实体间的位置方向分析,需要确定各种实体的最小包络矩形以简化不规则实体间复杂的空间关系处理.如图2所示,实体A与实体B相交,实体A与实体C、实体B与实体C均是分离的关系.A、B、C之间的这些关系可以利用这些外接矩形来做一些简化处理,如果两个实体的最小外接矩形相离,则认为这两个实体相离.实体的最小外接矩形的最大点是矩形的右上角点,最小点是矩形的左下角点.另外,实体的最小外接矩形也是对实体在二维空间地理空间定位最有利的条件依据,只要查询到最小外接矩形便可以依据坐标关系迅速地寻找到实体的所在地,这也是信息提取的一个重要处理办法.
图2 实体最小外接矩形示例
在一些实际情况下,依据实体类型、实体间距离等将一些实体间的空间关系作相应的转换处理.如点点之间可以有“包含”(Contains)关系,其中Contains指的是以两个点中的其中一个点建立一定范围内的缓冲区,并以此缓冲区判断是否包含另外一个点,如果包含则做“T rue”标记,如果不包含则做“False”标记.点点之间还可以根据点的最小外接矩形做出点点间方位的判断.
根据上述原则,可以在连续的AutoCAD二维空间Ω内的实体集ES(E)={{E1},{E2},…,{En}}、拓扑关系集TS(T)={T1,T2,…,Tn}及用户参数集PS(P)={P1,P2,…,Pn}上建立信息提取的一般接口形式:
其中,{E1},{E2},…,{En}代表各种类型实体的集合,如{E1}代表点实体集、{E2}代表文字实体集合; T1,T2,…,Tn代表各拓扑关系,如 T1代表包含关系,T2代表方向关系;P1,P2,…,Pn代表用户输入的各种参数,如P1代表上述包含关系中的缓冲查询距离;F为拓扑处理方法.在实际程序中,可以将T I转换为具体接口形式,这样ES,TS,PS分别为接口的不同属性,F为接口的处理方法.另外,需说明的是这里所说的接口是对信息提取方法的一般抽象.
如果用户要提取AutoCAD中的相交、重叠及岛关系的面(闭合多段线)集合,可以建立如下的接口TI1={EP1,{Tintersect,Toverlap,Tisland},F};其中,EP1为用户传入的面(多段线)集合,Tintersect、Toverlap、Tisland分别为面之间的拓扑相交、重叠、岛的标识.如果用户要删除指定圆集合中重复的部分可以建立如下的接口,T I2={EP2,Trepeat,d,F};其中,EP2为用户传入的圆集合,Trepeat为圆重复拓扑关系的标识,d为系统确认两个圆重复与否的最小距离容差值.T I1、T I2均继承TI.
在连续的AutoCAD二维空间Ω内,有类型为A的实体集合ES(A)={A1,A2,…,Am},类型为B的实体集合ES(B)={B1,B2,…,Bn},ES(A)与ES (B)可能存在某种拓扑关系T,假设两不同类型实体做一次拓扑关系 T的检查确认的平均时间为t.如果需要检查ES(A)与ES(B)之间所有的拓扑关系,那么查询消耗将随着m、n的增大而迅速增加,特别是在大数据量的情况下.以下从两种不同的方法去考虑查询优化问题.
如果以二次遍历查询作为不同实体间拓扑关系的查询方式,那么在一般情况下将会有m×n×t的时间消耗.再利用实体最小外接矩形的简单坐标过滤作用,如果每次过滤的所需时间t1小于t,那么总的时间消耗会在数积m×n×t的参数t上有所减小.但这并没有改变m、n的数量很大的情况下的时间消耗,也缺乏人为空间查询范围等的参数化控制功能.
为了改变每个实体A都需要去与每个实体B做一定的比较,可以考虑让以每个实体A只与一定范围内的实体B做比较,这不仅解决了二次遍历的数据量庞大的问题,也提供了用户参数化的控制功能.缓冲查询便是利用这样的原理,即通过对实体做一定范围的搜索查询,这个范围可以是与实体相关的一定矩形、圆形等.由于现在的商业软件在空间查询方面都具有很高的执行效率(利用空间索引),因此这种缓冲查询的效率是有所保证的[4].此外,缓冲查询具有实际的可操作性,很多实际应用问题也证实了这种方法的可行性.
如图3所示,对实体A以一定范围内的矩形作为缓冲查询,则只需对其缓冲范围内的实体进行拓扑检查,对于图3中左边图的情况,只需进行3次检查.另外,用户也可以通过改变矩形范围的大小来达到不同的实际目的.图3中右边图的情况,用户在不同的矩形缓冲范围内会得到不同的查询结果,这样对于不同的地形图就可以按照图面的实际距离情况进行缓冲查询操作.
图3 基于矩形的实体缓冲查询示意图
缓冲查询方式在某些特殊情况下具有非常高的执行效率.假设在连续的AutoCAD二维空间 Ω内,有数量为p(p可以趋向无穷大)的不规则实体,其中很多实体是由于用户操作不当导致的重复实体,有的重复数还较大,还有些实体出现了很小空间范围内的重叠.如果使用二次遍历的处理方式,那么在这些重复实体、重叠实体的查询处理上就会造成大量的时间浪费[5].而如果采用实体缓冲查询方式.如图4所示,实体C与实体A出现重叠,另外实体A还有重复的实体,而在用户的实际需求中,只需要保留下实体A.经分析,采取以实体A的最小外接矩形做缓冲区分析,如果这个缓冲区内包含与A一样的类型实体,则将其删除.这种处理方式,避免了实体A与实体C的及其重复实体的反复比较处理,只需进行一次遍历的缓冲查询便将不需要的实体提取出并删除[6].
图4 利用最小外接矩形做缓冲查询示意图
本文以对9037个圆图元的重复图元删除为实验题材,分别以基于缓冲查询的一次遍历与二次遍历为查询处理方法.比较发现:这个试验中,基于缓冲查询的一次遍历的执行效率是二次遍历的9倍,结果见表2.
表2 查询比较
提取AutoCAD信息需要确定3个因素:不同实体集、拓扑关系及用户参数.为了提高空间查询的效率,需要利用缓冲查询来减少遍历次数.为此,信息提取步骤分为以下4个环节.
第1,实体集与拓扑关系的确定.不同类型的实体具有不同的性质,为此需要将不同实体划分开来,并组成个数大于等于1的实体集合.一般情况下,为了简化问题的处理,只需要确定两类不同类型的实体集合ES(K)与ES(L),即实体集E(Q)={{ES (K)},{ES(L)}}.
确定实体集合后,找出这两种不同类型实体间需要确定或处理的拓扑关系.比如确定的某种拓扑关系T(M).如果是基于两种不同拓扑关系处理,则需要确定另外的某个拓扑关系T(N).多种拓扑关系依次类推.
第2,用户参数确定.实际工作中,用户需要具有一定的控制处理功能,为此,通过一些参数传递达到这个目的,如实体间距离参数d.需注意的是,参数是根据具体问题具体分析而得来.
第3,缓冲查询处理.如果需要通过查询来实现较高的执行效率,可以以某类型实体的一定距离范围或给定具体坐标范围来进行缓冲查询.缓冲查询应该是具有反复修改查询范围的功能来达到用户的控制使用效果.
第4,根据信息提取具体的结果,经反复测试,在程序中建立信息提取的功能接口I(P)={E(Q),{T (M),T(N)},d,F}.其中F为拓扑处理的具体方法.
为了验证本文所提出的方法的正确性,以某地区的原始AutoCAD地形图提取高程点信息做为实验验证.在地形图中,高程点以圆图元表示,高程值以单行文本图元表示,高程点数为9037个(包括大量的重复点),高程文本图元数为4503个.高程点集合与高程数值集合分别记为数据集E(M)、E(N).经分析高程点与高程文本图元的一般间隔距离d大概为12个图面单位距离,可以采用空间关系中最邻近距离实现匹配,其中d可以作为用户的输入参数.然而,在高程点较密集的地方,出现如图5中情况,最邻近距离匹配的影响可能没有高程注记字位的影响因子大,即黑色填充的圆点尽管与数值为1 200.2的文本距离较近,但实际中,与其匹配的高程值应该是数值为1452.2的文本.这说明高程注记文本的字位在匹配中也是一个关键的考虑因素.此外,重复的高程点需要删除.所以,采取了基于两种空间关系处理方法,即最邻近距离T(N)与高程注记字位在高程点右下角优先T(S).
图5 注记字位的影响
为此,可建立程序接口I={{E(M),E(N)},{T (N),T(S)},d,F}.其伪代码形式如下:
在具体功能类的实现时,先以高程点最小外接矩形范围作缓冲查询删除重复高程点,再以高程点集合作为遍历条件,以12个图面单位作为每个高程点的缓冲查询范围,以注记字位为位于高程点右下角优先及最邻近距离拓扑关系的原则匹配出高程点的(X, Y,Z).其中,缓冲查询使用的是AutoCAD提供的功能接口函数SelectCrossingWindow[7].
最后,随机提取100个高程点(包含一些高程点密集的地方),发现正确率在97%.而只使用最邻近距离匹配方法时,正确率只有87%.利用这些高程点制作的地形模拟图如图6所示.软件操作界面如图7所示.
一般的AutoCAD地形图数据缺乏拓扑关系,用户在数据提取时往往忽视了数据本身一些潜在的空间关系,导致直接使用某些专业软件产生了较大的错误率.本文研究了基于空间拓扑关系与缓冲查询的AutoCAD二次开发提取数据信息的方法,并给出了完整的操作流程,强调了应根据实际情况利用不同拓扑关系去提取信息.其中缓冲查询提高了大数据量环境下的查询效率,也为用户操作提供了更好的互操作方式.实验结果表明,这种方式提取信息具有很好的实际效果,可解决AutoCAD环境下地形图数据一些特殊的问题,如最邻近距离无法很准确的提取出高程点信息.本文只是提出了一般意义上的AutoCAD地形数据提取方法,还要根据实际情况建立更多的处理接口去实现用户不同需求.接口数量的增加及空间关系的复杂性增强,将会带来接口分离、继承等问题的出现,这也是本文后续研究的重点.
[1] 陈 能,施蓓琦.AutoCAD地形图数据转换为GIS空间数据的技术研究与应用[J].测绘通报,2005(8):11-14.
[2] 马文祥,金芳丽.在AutoCAD中实现高程信息的快速提取[J].测绘通报,2006(3):54-55.
[3] 解云琳,彭明军.用MapInfo快速提取高程点信息[J].测绘通报,2003(1):48-50.
[4] 秦洪现,崔惠岚,孙 剑.Autodesk系列产品开发培训教程[M].北京:化学工业出版社,2008.
[5] 曾宪硅,徐昌荣.数字地形图清理研究[J].测绘通报, 2002(2):31-33.
[6] 余承飞,方 勇.AutoCAD2000二次开发技术(Object-ARX)[M].北京:人民邮电出版社,1999.
[7] 龚家玉,黄德咏.AutoCAD与其他常用软件的数据转换[J].四川测绘,2004,27(1):32-35.