一种从CAD到ArcGIS数据转化方法研究 | ![]() |
2. 惠州市国土资源勘察测绘院,广东 惠州,516001
2. Huizhou Institute of Land and Resources Survey and Mapping, Huizhou 516001, China
在各种地理信息系统数据库建设和地图制图中,空间数据格式是多种多样的,南方CASS绘制的数字线划图是其中最为重要的一种。CAD(computer aided design)以图层组织空间数据,不同类型的要素(点、线、多边形等)可以共层,其实体采用三维坐标描述,实体间不具备拓扑描述信息[1]。CAD软件并非是天然的测绘软件,虽然有坐标信息,但是属性管理较弱,不具备空间分析和决策支持能力[2]。而ArcGIS不仅具有强大的空间数据属性管理功能还具备大量的空间分析功能。如何实现CAD到ArcGIS数据转化成为应用的主要技术问题。
目前主流的转化途径主要有3大类。一是直接采用ArcGIS工具箱转换,往往导致图层混乱和属性丢失,后续处理困难;二是借助其他软件实现。比如采用输出MIF格式数据, 借助MapInfo最终形成TAB格式的GIS数据[3],采FME软件通过Workbeanch转换模版建立字段映射关系实现转换[4-6];三是直接开发软件实现,比如直接解析CAD的复杂冗长的DXF文件,或者借助中间类库实现转化[7],过程相对复杂,编写难度大。这几种方式要么无法完美实现,要么编写复杂,或需借助第三方软件。为此,本文立足CAD和ArcGIS软件本身,以CAD内嵌的AutoLisp解析CAD实体,提取关键信息,然后用ArcObjects高效重建地理实体[8, 9]。既保留了感兴趣的信息,避免解析复杂冗长的DXF文件,且无需借助第三方软件。编译后可嵌入ArcGIS作为命令工具,简单易用,其实现思路可为直接实现二者数据转换提供参考。
1 转化思路若能直接从CAD获取数字线划图的关键感兴趣要素信息,以某文本文件为媒介加以记录,然后再在ArcGIS中根据这些感兴趣关键信息予以要素重建,即可较好的完成数据转换任务。为此,在CAD中采用AutoLisp解析CAD实体,将感兴趣要素写入到文本文件中。然后采用基于ArcObjects编写的系列函数读取文本文件,生成图层、点、线、面、注记、地物类型、地物编码、地物名称等信息,可以细粒度控制数据转化过程,实现感兴趣信息的无损转换。其技术流程如图 1所示。
![]() |
图 1 技术流程 Fig.1 Flow Chart of Technical Process |
2 实现过程 2.1 AutoLisp导出数字线划图文件
按照分类转换的原则,以点、线、面、文字、块等为基本单元分别编写自定义函数。采用ssget函数选定选择集,entget函数获取地物实体详细信息,assoc函数获取地物实体的各个组码。依据CAD帮助文档参照组码对应表(见表 1),按顺序将地物所在图层、类型、闭合性、坐标、扩展属性等感兴趣信息写入到文本文件(结构见表 2)中存储。
表 1 组码对应关系表 Tab.1 Corresponding Relation Table of Group Code |
![]() |
表 2 文本文件结构 Tab.2 Text File Structure |
![]() |
对于数字线划图来说,最容易丢失的就是南方CASS地物编码,提取的关键代码如下:
(setq ent (ssget))
(setq ent1 (ssname ent 0))
(setq e1 (entget ent1 ’(“SOUTH”)))
(setq wb (member (assoc 10 e1) e1))
(setq len (length wb))
; ;;获取图形扩展属性
(setq tp (assoc-3 e1))
(write-line “扩展属性:” f)
(setq a1 (nth 1 tp))
(setq xx (cdr a1))
(write-line (cdr (car xx)) f)
2.2 ArcGIS读取数字线划图文件自定义List < Entity>集合记录文本文件同类实体所有信息。每一个Entity中含有实体的起始和最终节点坐标索引、是否闭合特性、地物编码和其它感兴趣属性。根据Entity实体中的地物编码和南方CASS编码与实体名称对应关系,查询得到地物名称。调取ArcObjects函数重新生成要素图层并向图层添加要素,填写属性字段值。其流程图如图 2所示。
![]() |
图 2 读取数字线划图文件流程 Fig.2 Flow of Reading Digital Line Graph |
以形成面状数据为例,关键代码如下:
IFeatureClass pFeatureClass;
pFeatureClass = FWS.CreateFeatureClass(shapeName, pFields, null, null, esriFeatureType.esriFTSimple, “Shape”, “”);
pFeatureLayer.Name = shapeName;
pFeatureLayer.FeatureClass = pFeatureClass;
IGeometryCollection pointPolygon = new PolygonClass();
pointPolygon.AddGeometry(ring1 as IGeometry, ref missing, ref missing);
IPolygon polyGonGeo = pointPolygon as IPolygon;
IFeature pFeature = pFeatureClass.CreateFeature();
pFeature.Shape = polyGonGeo;
int filedIndex_DWMC = pFeature.Fields.FindField(“地物名称”);
pFeature.set_Value(filedIndex_DWMC, getEntityNameByCoding(cpoly.coding));
pFeature.Store();
在Visual Studio2010中编译后,以addin插件方式加载到ArcGIS桌面版软件中,其转换界面如图 3所示。
![]() |
图 3 转换插件界面 Fig.3 Conversion Plug-in Interface |
2.3 文件整理
在完成分层转换,检查完地物不缺少,图层属性正确的前提下,根据数据实际情况设置地理坐标系和投影坐标系,根据需要制作专题图。
2.4 转换实例以珠海市某地形图为例,选取30 000个分布在居民地、道路、独立地物、水系等图层的地物,提取关键有用信息,形成文本文件,再在ArcGIS中要素重建,分层设色配置地图,即完成转换工作。其局部转换前如图 4所示,转换后如图 5所示。
![]() |
图 4 转换前原始数据 Fig.4 Original Data Before Conversion |
![]() |
图 5 转换后数据 Fig.5 Converted Data |
3 结束语
本文论述了当前CAD数字线划图转到ArcGIS的主要方法,提出了一种直接基于CAD和ArcGIS实现感兴趣空间属性信息完整高效转换的方法,以层为单位,转化效率高,思路清晰,具备自由控制感兴趣字段优点。目前该软件尚需分点、线、面、文字注记等不同类型分别转化,仍需进一步优化成熟。
[1] |
薄伟伟, 丁俊杰, 王爱萍. CAD数据向GIS数据的转换方法[J]. 地理空间信息, 2013, 11(6): 94-95. |
[2] |
孟妮娜, 周校东. GIS空间数据转换为DXF格式的方法研究[J]. 测绘科学, 2007(2): 105-107. |
[3] |
刘阳, 刘允, 刘宓, 等. CAD数据向GIS数据转换方法的研究[J]. 城市勘测, 2012(2): 81-85. |
[4] |
吴聪聪, 蓝贵文, 耿继军, 等. CAD数据向GIS数据转换的方法比较[J]. 测绘科学, 2017, 42(2): 183-186. |
[5] |
黄永芳. AutoCAD与ArcGIS数据转换方法研究[J]. 测绘标准化, 2018, 34(2): 27-30. |
[6] |
孙正林, 邹峥嵘, 曾毅. 基于FME的城镇地籍空间数据转换研究[J]. 测绘信息与工程, 2011, 36(2): 16-18. |
[7] |
于艳超, 许捍卫, 杜婵娟. 基于DWGDirect的CAD到GIS数据转换研究[J]. 地理空间信息, 2015, 13(1): 84-86. |
[8] |
董玉德, 赵韩. CAD二次开发理论与技术[M]. 合肥: 合肥工业大学出版社, 2012.
|
[9] |
牟乃夏, 王海银, 李丹, 等. ArcGIS Engine地理信息系统开发教程[M]. 北京: 测绘出版社, 2015.
|