基于ArcEngine的CAD数据与ArcGIS数据互转

2014-07-25 11:29任学申张月香
铁道勘察 2014年5期
关键词:图层代码编码

任学申 张月香

(山东正元地球物理信息技术有限公司,山东济南 250101)

基于ArcEngine的CAD数据与ArcGIS数据互转

任学申 张月香

(山东正元地球物理信息技术有限公司,山东济南 250101)

AutoCAD和ArcGIS两种软件在数据处理上各有其优点,为了充分利用这两种软件的数据,降低数据采集的费用,实现数据共享,以标准CASS的基础地形图为例,对AutoCAD数据与ArcGIS数据的无缺失相互转换进行探讨。

ArcEngine CASS ArcGIS 相互转换

ArcGIS有强大的数据分析、数据管理等功能,在建立空间数据库方面有其得天独厚的优势,但ArcGIS也具有图层叠加不便、屏幕刷新缓慢、绘图功能不足等缺点。AutoCAD具有强大的绘图功能和处理矢量图形的能力,大部分地形图采用了AutoCAD为制图平台,不过,其处理数据间的拓扑关系较为简单,处理对象属性方面及空间分析功能欠缺。因此,为了使ArcGIS和AutoCAD软件平台发挥其最大的优点,进行CAD数据与GIS数据相互转换方法的研究具有重要现实意义。

AutoCAD数据和ArcGIS数据在数据模型方面存在很大差异,两种软件描述数据的方式不同。传统的数据转换方法只考虑如何把AutoCAD数据转换为ArcGIS数据,而没有考虑在转换之后的ArcGIS数据如何再转为CAD数据,使转换之后的CAD数据与原始CAD数据图形属性无丢失。本文探讨标准CASS的基础地形图与 GIS数据相互转换的逻辑组织及解决方案。

1 CAD与ArcGIS数据格式的差异

1.1 CAD数据格式

在AutoCAD数据中,包含了多种类型的图形对象,包括:点、线段、折线、文字等,其中点、线为基本元素,其他的是由基本元素组合形成的复杂元素,这些元素都是矢量形式的,即由一组或多组X、Y、Z坐标确定图形元素的几何位置和形状。在CAD的一个图层上可以存放多种类型的图形对象,而且每个图形对象都可以设置独有的颜色、线形、样式等。

DXF 是Autodesk公司开发的用于AutoCAD与其他软件之间进行CAD数据交换的CAD数据文件格式。DXF是一种开放的矢量数据格式,可以分为两类:ASCII格式和二进制格式;ASCII可读性好,但占有空间较大;二进制格式占有空间小、读取速度快。DXF在表现图形的大小方面十分精确,包含了AutoCAD图形文件的所有信息。

1.2 ArcGIS数据格式

Geodatabase是一种采用标准关系数据库技术来表现地理信息的数据模型。目前有两种Geodatabase结构:Personal Geodatabase和Multiuser Geodatabase。Personal Geodatabase更像基于文件的工作空间,使用微软的Access数据库同时存储空间数据和属性数据,数据库存储量大小可伸缩,最大为2GB。Personal Geodatabase支持单用户编辑,不支持版本管理。

2 CAD与GIS数据之间对应关系

2.1 图层对应关系

在CAD中,不同的地理要素放在不同的图层,比如水系、居民地、植被等,相同地理要素的注记、点、线、块都是放在同一图层,即一个图层里可以放置拥有相同性质的若干元素,如一幅地形图中的水系可以放在同一层中,居民地又可以放在另一层中。ArcGIS图层由点、线、面、注记四种类型的数据组成,且每一个图层里面只能存放一种类型的数据,如点图层只能存放点数据,线图层只能存放线数据。

根据CASS标准图层及基础地理信息要素分类及代码(GB/T 13923-2006)对数据进行分类,共分为8大类,然后根据点、线、面、注记每类数据的要求,分为若干个不同类型的层,如表1所示。

表1 CASS图层与ArcGIS图层对应

2.2 要素对应关系

AutoCAD数据与ArcGIS数据在要素结构上有所不同,但两个系统对要素的表达方式基本相同,即都是点、线、注记及其组合。

AutoCAD 和 ArcGIS之间的数据转换可以转化为要素之间的对应转换,其转换关系如表2所示。

表2 AutoCAD要素与ArcGIS要素对应关系

2.3 结构对应关系

表3 GIS数据结构

在标准CASS数据转换为ArcGIS数据时,需要记录标准CASS数据的属性信息,以便在ArcGIS转换为标准CASS数据时使用,其ArcGIS数据结构如表3所示。

2.4 编码对应关系

GIS要素的分类编码结构,在大类、中类、小类和子类的基础上添加几何特征码及图形特征码,用以描述要素对象的几何特征和图形特征。

GIS要素大类、中类、小类的分类代码采用基础地理信息要素分类及代码(GB/T 13923—2006)中规定的分类代码;要素子类的分类代码统一采用9位十进制数字码,分别为按数字顺序排列的大类码、中类码、小类码、子类码、几何特征码和图形特征码,具体代码结构见图1。

图1 要素代码结构

根据标准CASS数据的图形、代码描述和国家基本比例尺地图图式,建立两系统的对照,如表4所示。

表4 标准CASS编码与GIS编码对应关系

建立编码对应关系是为了在对ArcGIS符号化时,与AutoCAD数据保持一致,也是为了符合基础地理信息要素的建库标准。

3 数据转换

3.1 AutoCAD转ArcGIS

(1)转换之前预处理

当转换后的DXF中存在注记时,系统很有可能读取到的内容是乱码,因此需要转换前把DXF文件使用记事本打开,然后使用UTF-8编码另存为一份DXF文件,另存的DXF文件,可能使用AutoCAD打不开,因为记事本把DXF的文件头破坏掉了,但不影响转换,转换之前标准CASS数据如图2所示。

图2 标准CASS数据

(2)转换方法及实现

目前国内外实现数据转换的方式大致有四种:外部数据交换模式、直接数据访问模式、空间数据互操作模式、数据转换平台,本文采用第一种方法,即外部数据交换模式。首先把CASS的CAD数据转换为DXF格式的数据,使用程序读取DXF文件中的明码,逐个分析,然后使用基于ArcEngine中的接口创建数据库、图层、要素等,逐个把实体记录下来。关键代码如下:

#region按类型读取

switch (sValue)

{

case "MTEXT":

sFtType="注记";

VbContinue=ReadDXFMText(i, iEdSec, ref tPntInfoArr, ref sFldVal, ref Anno, ref Height, ref Angle, ref iFAliType);

bContinue=CreateMText(sLyrName, tPntInfoArr, sFldVal, Anno, Height, Angle, iFAliType);

break;

case "TEXT":

sFtType="注记";

bContinue=ReadDXFText(i, iEdSec, ref tPntInfoArr, ref sFldVal, ref Anno, ref Height, ref Angle, ref iHAliType, ref iVAliType);

bContinue=CreateText(sLyrName, tPntInfoArr, sFldVal, Anno, Height, Angle, iHAliType, iVAliType);

break;

case "POINT":

case "INSERT":

sFtType="点";

bContinue=ReadDXFPoint(i, iEdSec, ref tPntInfoArr, ref sFldVal);

bContinue=CreateGeoFeature(sLyrName, sFtType, i, iClose, tPntInfoArr, sFldVal);

break;

……

}

#endregion

转换之后的ArcGIS数据如图3所示。

图3 转换后的ArcGIS数据

3.2 ArcGIS转AutoCAD

ArcGIS数据转换为AutoCAD数据,需要注意的是转换后的AutoCAD文件中,数据的位置、颜色、样式、属性等信息,需同原始CAD中数据相一致。

while (pFeature !=null)

{

string EntityType=GetFiledValue(clsFieldSysName.EntityType);

switch (EntityType)

{

case "MTEXT":

case "TEXT":

WriteTextEnt(pFeature.ShapeCopy as IPoint, sCADLayer, GetFiledValue(clsFieldSysName.FontText), GetFiledValue(clsFieldSysName.FontX), GetFiledValue(clsFieldSysName.FontY), GetFiledValue(clsFieldSysName.FontZ), GetFiledValue(clsFieldSysName.H), GetFiledValue(clsFieldSysName.FontName), GetFiledValue(clsFieldSysName.FontCenter), GetFiledValue(clsFieldSysName.FontHor), GetFiledValue(clsFieldSysName.FontVer), GetFiledValue(clsFieldSysName.FontHight), GetFiledValue(clsFieldSysName.FontWidth), GetFiledValue(clsFieldSysName.EntityColor), GetFiledValue(clsFieldSysName.CADAngle));

break;

case "POINT":

case "INSERT":

WritePointEnt(pFeature.ShapeCopy as IPoint, sCADLayer, GetFiledValue(clsFieldSysName.BlockName), GetFiledValue(clsFieldSysName.CASSCode), GetFiledValue(clsFieldSysName.PointXScale), GetFiledValue(clsFieldSysName.PointYScale), GetFiledValue(clsFieldSysName.PointZScale), GetFiledValue(clsFieldSysName.CADAngle), GetFiledValue(clsFieldSysName.H), GetFiledValue(clsFieldSysName.EntityColor), GetFiledValue(clsFieldSysName.AttHave));

break;

……

}

pFeature=pCursor.NextFeature();

}

转换后的AutoCAD数据如图4所示。

图4 转换后的AutoCAD数据

4 结论

(1)标准CASS的基础地形图与 GIS数据相互转换,前提是GIS数据来源于CAD数据,或者具有CAD数据的一些图形信息。

(2)标准CASS的基础地形图转换为GIS数据,需要使用CAD的中间格式DXF,且DXF文件的编码格式要明确。

(3)标准CASS数据的编码需要与基础地理信息要素代码对应,以便对GIS数据符号化。

(4)GIS数据转换为标准CASS数据需要DXF模板中存在较全的块名、线形及字体。

(5)实现标准CASS数据到GIS数据,再到标准CASS数据无信息丢失的转换,不但实现了两种数据的共享,也降低了数据采集的费用,加大了数据的利用率。

[1] 郭敏,刘长星.AutoCAD向GIS数据转换方法的研究[D].西安:西安科技大学测绘学院,2009

[2] 党安荣,贾海峰,易善桢,等.ArcGIS8 Desktop地理信息系统应用指南[M].北京:清华大学出版社,2005

[3] 杜辉.基于FME的ARCGIS与AUTOCAD空间数据交换[J].铁道勘察,2012(3)

[4] 刘永强.AutoCAD与ArcGIS数据转换方法研究[J].测绘科学,2009(S2)

[5] 鄂洁,陈婕.AutoCAD和ArcGIS间的数据转换研究[J].软件导刊,2007(17)

[6] 林晓清,杨素凤.COVERAGE格式数据和AOTUCAD格式数据间的转换[J].铁道勘察,2011(3)

[7] 陈乐书,刘连胜,王长委.CAD到GIS数据格式转换的探讨[J].安徽农业科学,2009(18)

[8] 曹国云,张伟.AutoCAD数据到GIS空间数据转换技术和方法的研究[J].安徽农业科学,2006(22)

[9] 肖鸣.CAD数据向GIS空间数据库转换方法的实现[J].测绘信息与工程,2007(3)

InterconversionofCADdataandGISdatabasedonArcEngine

REN Xue-shen ZHANG Yue-xiang

2014-07-10

任学申(1983—),男,2010年毕业于江西理工大学地理信息系统专业,硕士,工程师。

1672-7479(2014)05-0008-04

P208

: A

猜你喜欢
图层代码编码
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
Genome and healthcare
创世代码
创世代码
创世代码
创世代码
解密照片合成利器图层混合模式
跟我学添加真实的光照效果