周义军,刘小飞,舒滨,刘宓
(天津市测绘院,天津 300381)
随着地理信息行业的蓬勃发展,市场对GIS数据的需求越来越大,而现有的测绘成果大多以CAD数据为主。为了充分利用现有的数字化成果,CAD数据到GIS数据的转换成为行业内必须面对和解决的问题。现有的CAD到GIS数据转换大体可分为两种方式,一是利用现有的软件所提供的转换功能进行格式转换,此种转换大多只能达到数据显示的需要,往往要对转换后的结果进行一系列人工处理,才能达到实际应用的要求;另一种转换方式是基于现有的软件提供的二次开发组件,结合实际要求进行二次开发,达到无损转换的要求。本文采用第二种方式,提出了一种基于规则和模板的CAD到GIS数据转换的解决方案,实现了GIS数据的自动、无损转换,并具有一定的兼容性。
由于数据组织模型的不同,CAD数据和GIS数据在数据组织、表达和应用等方面都不尽相同,转换过程中很难将数据承载的信息一一对应过去。目前,很多的转换方法都或多或少的存在一些问题:
(1)由于CAD软件和GIS软件对图形实体的数据结构定义不一致,转换过程中造成要素丢失和要素变形。
(2)由于CAD软件很少考虑地理要素的拓扑关系,在转换过程中,CAD数据的误差和错误完全被传递到GIS数据上。
(3)CAD软件对符号的表达不够规范,在转换过程中很难将符号信息剔除出去,造成大量数据冗余。
(4)针对数据转换没有一个详尽适用的统一标准,这就导致转换程序很难达到兼容性。
我们针对上述几点问题,设计出一种基于规则的CAD数据到GIS数据的转换程序。首先,针对两种数据的数据结构,设计出一种合理的转换规则——对照表,其次,对应于转换规则,人为设定GIS数据模板。对照表和GIS数据模板可以人为的进行控制,同时修改它们可以动态调整和改变转换结果。基于ArcGIS Engine组件和CAD二次开发组件实现了CAD数据到GIS数据的无损转换,并详细叙述了程序的设计原理和实施步骤。目前,此应用程序已经应用到实际工作当中,通过了时间的检查,达到了预期的目标。
按照图形的几何特征,空间数据可分为点、线、面和注记4种地理要素。CAD数据到GIS数据转换的实质就是这4种地理要素间的转换,转换过程可细分为4种地理要素的几何数据和属性数据的读取,组织和写入过程。按照此种思路,本文采用模块化的设计理念对转换功能进行了详细设计。如图1所示,数据转换功能大体可分为以下几个部分:转换规则和GIS数据模板设计,数据读取,错误处理,数据写入以及后续处理。
图1 转化功能流程图
(1)转换规则
转换规则是所有编码的地理要素都要遵循的转换原则,具有兼容性和可扩展性,本文设定的转换规则如下:
Rule={FeatureCode,FeatureName,Shape,GISLayer,YesOrNo,Attributes}
其中FeatureCode为此类要素的编码,此编码具有唯一性,亦适合于GIS数据。
FeatureName表示此类地理要素的中文名称,无名称的可置为空。
Shape表示此类要素的几何类型,要素按照图形的表达方式可分为,点,线,面和注记四种类型。
GISLayer表示在ArcGIS数据中此类要素所属的要素层。
YesOrNo表示此类编码的要素是否需要转换,需要转换为Yes,不需要转换为NO。
Attributes表示此类编码的要素应具有的属性要素的名称集合。
本文将具体的规则以行的形式存储在Access数据库的表中,以供程序读取和使用。
(2)数据模板
数据模板的实质是GIS数据格式的文件,其结构是根据对照表中的具体信息进行设计的。本文设计的数据模板采用ArcGIS的个人数据库格式(*.mdb),依照转换规则中的具体的GISLayer的名称和类别建立FeatureClass,每个FeatureClass的属性结构对应于对照表中所有具有相同GISLayer规则的Attributs的并集。
由此可见,对照表和GIS数据模板又是相互联系的,其中一个修改,另一个也需要做相应的修改。这种联系在CAD数据和GIS数据之间搭起了一座桥梁,为CAD到GIS数据转换开辟了一条可行之路。
(1)数据读取
数据读取是转换的开始,依据转换规则,读取CAD数据,作为数据写入的基础。此过程可分为图形数据的读取和属性数据的读取。AutoCAD按照图层来组织数据,按编码分类地理要素,图形数据读取以图层为单元,遍历图层中的所有图元,得到每个图元的编码,并通过对照表确定各个图元的有效性和正确性;属性数据读取以相应的图元为基础,依据对照表中相应编码的属性集合(Attributes)读取图元的属性信息,并确定属性的正确性和逻辑一致性。最后,将图形信息和属性信息以ArcGIS数据结构进行组织,为数据写入做好准备。
(2)错误处理
错误处理具有发现、定位和输出错误的功能,它依附于数据读取,贯穿于数据读取的全过程。在图形和属性数据读取的过程中,程序对不符合转换规则的图形要素进行标记和定位,同时输出错误报告。如:面的多段线不闭合、对照表中没有此编码、其扩展属性与对照表中属性不完全对应等等。
数据读取是数据转换的开始,也是基础,错误处理保证了数据的正确性、完整性和逻辑一致性。另外,对于CAD数据中圆和圆弧的处理,本文采用了一种与众不同的做法。和一般的转换程序采取弧段加密的方式不同,本文利用ArcGIS的圆和复杂曲线的数据结构,将CAD数据中的圆和圆弧一一对应到GIS数据中的圆和复杂曲线,实现了转换过程中数据无损失,图形要素无变形。
(1)数据写入
数据写入实质就是GIS数据的生成过程,将数据读取后的信息按照一定的规则写入到事先复制好的GIS数据模板(*.mdb)中。数据写入以层为单元,逐条写入。另外,考虑到大数据量的问题,本文利用C#语言的事件触发机制将数据进行分段读取和写入,避免了程序占用内存较大导致系统内存不足的错误。
(2)后续处理
后续处理主要是进行岛屿处理以达到GIS数据的最终要求。岛屿处理可分为同层岛屿处理和异层面相减处理。同层岛屿处理过程中,本文参考ArcGIS数据结构中的复杂面的设定,为同面岛屿处理设定出“奇删偶不删”的原则,即删除被包含奇数次的多边形,保留被包含偶数次的多边形,如图2所示,其中“被包含”定义为图形被包含着并且属性相同,异层面相减处理,可以按层进行操作,确保地物无压盖,如植被层与道路层应无压盖等。
图2 同面岛屿处理规则图
本文采用C#.net+ArcGIS Engine 9.2技术开发转换程序,对照表在Access数据库中以表的形式存在,转换生成ArcGIS的个人数据库(GeoDatabase)成果。本文所编写的数据转换程序已经应用于天津市测绘院的1∶2 000比例尺地形图的GIS数据的生产实践中,取得了良好的效果,确保了数据的质量,大大提高了GIS数据生产的效率。另外,值得一提的是,此种设计具有一定的兼容性,操作员可以通过修改对照表和GIS数据模板控制转换过程,适用于大多数CAD数据。
[1]李娇娇.基于ArcGIS的CAD到GIS数据转换[J].交通科技与经济,2009(3):110~113
[2]周小成,焦道振.基于GeodataBase的CAD数据到GIS的解决方案[J].测绘与空间地理信息,2005(2):128~133
[3]韩勇,陈戈.基于CAD数据建立GIS文本数据库方法的探讨[J].测绘通报,2004(1):1~3
[4]张叶,孙毅中,陈年松.CAD城市基础数据到GIS转换的有关问题探讨[J].测绘与空间地理信息,2007(2):50~52
[5]文学东,钟文军,祝方雄等.基于Geodatabase的CAD到ARCGIS数据入库研究[J].测绘科学,2006(6):64~66
[6]李东军.CAD到ArcGIS的数据自定义转换探讨[J].江西测绘,2007(1):23~25