ArcGIS与CorelDraw数据格式转换实现

2016-11-11 10:37赵冰雪
宿州学院学报 2016年10期
关键词:数据格式边框图层

王 雷,赵冰雪

池州学院资源环境学院,安徽池州,247000



ArcGIS与CorelDraw数据格式转换实现

王雷,赵冰雪

池州学院资源环境学院,安徽池州,247000

针对现有地图制图软件ArcGIS和CorelDraw数据共享困难的问题,探讨了基于两种软件的二次开发技术实现数据格式转换的方法。采用ArcGIS二次开发组件库ArcGIS Engine读取GIS数据,借助第三方数据格式Dxf和XML技术完成数据输出,在此基础上,通过CorelDraw COM库完成地图数据的导入和设置,从而实现ArcGIS文件到CorelDraw文件的转换。最后,以皖南国际文化旅游示范区为例,完成了ArcGIS专题图数据到CorelDraw数据格式的转换,结果表明该方法能够灵活、有效地完成两种软件之间的数据转换。

ArcGIS;CorelDraw;格式转换

随着GIS技术在相关行业应用的不断深入,GIS软件的各种功能也为人们所熟知。GIS充分结合空间和属性数据,不仅可以生产高质量的数字线划图,同时可以通过复杂的空间分析功能挖掘地理空间中隐含的信息,在此基础上生成各类专题地图。GIS数据规范性好,逻辑性强,数据源广泛,便于筛选,这些特点使得应用GIS软件制图越来越受到数字制图人员的喜爱,其中以ArcGIS软件的普及率最高。ArcGIS的桌面产品ArcMap集地图绘制、编辑、显示和输出于一体,组件式GIS开发平台ArcGIS Engine提供了丰富的类库和开发资源,使得传统的地图制作与编辑方式发生了重大变化。

CorelDraw是一款具有强大图形、文字编辑与整饰功能的矢量图形绘制软件,与其他制图相比,它的主要优势在于极强的图形处理功能以及独特的表现效果。软件能够兼容Dxf、Dwg、Eps、PS、AI和BMP等多种数据格式,排版功能强大,可直接输出PS和EP格式用于印刷[1];尤其是符号化功能强大,用户可以根据自己的需要创建各类符号,简单易学,颇受制图人员的青睐,在各类专题地图的设计与编绘中已得到普遍使用[2-4]。

充分结合ArcGIS数据精确的空间信息和CorelDraw软件完美的地图整饰能力完成一幅优质的地图,更好地服务于各类生产活动,需要解决两种软件间的数据共享问题。本文采用ArcGIS Engine10.2和CorelDraw 16.0 Type Library类库,借助第三方数据格式Dxf完成ArcGIS数据到CorelDraw数据的转换,实现ArcGIS与CorelDraw软件间的数据共享。

1 技术思路

首先借助ArcGIS Engine类库读取Mxd文档,将文档中的要素类分别转换成Dxf格式,在转换的过程中,将要素类的范围信息、符号颜色和尺寸等信息保存到同时生成的XML文件中。其次通过CorelDraw ActiveX Automation技术建立与CorelDraw对象的连接,实现访问和控制CorelDraw,在此基础上将Dxf文件导入CorelDraw。最后读取保存在XML文件中的信息,计算各图层导入后的缩放比例和中心点的位移,同时完善图形的颜色和尺寸信息;最终保存为cdr格式文件。技术思路如图1所示。

图1 数据转换思路

2 关键技术

ArcGIS Engine是ArcGIS平台的二次开发组件库,具有强大GIS数据处理分析功能。本文使用ArcGIS Engine访问ArcGIS地图文档(Mxd)及其包含的图层数据。ArcGIS Engine中提供了Geoprocessor对象,用于调用ArcGIS的处理过程,通过Geoprocessor对象执行ExportCAD操作,可以将各图层保存为Dxf文件,执行过程中该方法同时将执行过程的相关参数保存为XML格式文件。

XML即可扩展标记语言,是一种是用于标记电子文件并使其具有结构性的标记语言,常用语描述各类数据结构。CorelDraw软件由于对图幅尺寸有限制,而地理数据的范围往往比较大,在数据导入过程中软件会自动根据原图的范围和大小选择特定的比例进行缩放,导致图层的比例不一致;同时,由于CorelDraw软件不是地理信息系统软件,没有地理坐标的概念,GIS数据导入CorelDraw后地理参考丢失,图层之间的相对位置发生变化[5]。在一般制图方法中,需要采用对各图层绘制统一外边框的方式保证导入后图形的相对比例和位置关系[6],该方法需要对原始Mxd文档的各图层绘制外边框,当数据图层较多时,较为费时。本文使用XML文件保存原始图层的相关信息,用于计算导入CorelDraw后各图层的缩放比例、中心点位移和完善符号信息。

ActiveX Automation的基础是微软的COM协议,协议的目的在于提供二进制的可复用代码模块。该技术能够使用户程序以相同的方式将其他软件中实现的任何自动化对象集成到自己的应用程序中,实现应用程序间的对象共享[7]。由于ActiveX不依赖于任何编程语言,本文选用C#语言开发环境建立与CorelDraw对象的连接,实现访问CorelDraw软件的各项处理功能和处理后的数据。

3 实 例

现以皖南国际文化旅游示范区专题图的制作来说明整个数据转化的流程。

3.1ArcGIS专题图制作

专题图的原始数据共包括6个shapefile文件,分别为安徽省行政界线、市级行政界线、示范区县级行政界线、市级行政中心、县级行政中心和水系文件。将这些文件加载到ArcMap中并进行符号化,其中县级行政中心符号的颜色为蓝色,尺寸为14(ArcMap中尺寸单位为points,每个point单位约等于0.353 mm);市级行政中心符号颜色为绿色,尺寸为18;水系填充颜色的RGB值分别为151、219、242,边框颜色的RGB值为64、101、235,宽度为0.4;示范区填充颜色的RGB值为112、168、0,边框颜色的RGB值为110、110、110,宽度为0.4;市级行政界线填充颜色为白色,边框颜色为灰色(110、110、110),宽度为0.4;省界图层无填充颜色,边框颜色为红色,宽度为2。效果如图2所示。

图2 皖南国际文化旅游示范区

3.2开发步骤

(1)新建窗体程序,添加ArcGIS引用和CorelDraw 16.0 Type Library类库文件,针对ArcGIS常用的地图文档(mxd)设计mxd转cdr窗口,如图3所示,针对其图形文件(shp)设计shp转cdr窗口,如图4所示。

图3 mxd转cdr窗口

图4 shp转cdr窗口

(2)建立ShpFile和MxdFile类用于描述ArcGIS文件。ShpFile类的主要方法有三种:ConvertToDxf、WriteExtentInfoToXML和WriteSymbolInfoToXML,其中ConvertToDxf方法使用Geoprocessor类执行ExportCAD工具将shp文件转换为Dxf文件,同时调用WriteExtentInfoToXML方法将图层的范围信息写入XML文件。

主要语句如下:

Geoprocessor gp=new Geoprocessor();

ExportCAD ExportToCAD=new ExportCAD();

ExportToCAD.in_features=FilePath;

ExportToCAD.Output_File=DxfFilePath;

gp.Execute(ExportToCAD,null);

WriteExtentInfoToXML(DxfFilePath+".xml",pFeatureClass);

MxdFile类主要方法有ConvertToDxfs。该方法首先读取文档中的图层数据,然后利用ShpFile类的ConvertToDxf方法将各图层分别转成Dxf文件。借助IGeoFeatureLayer接口的Renderer属性获取各图层的渲染属性,通过ShpFile类的WriteSymbolInfoToXML将符号信息写入XML文件。

(3)新建CdrFile类用于描述cdr文件。建立CdrFile类的主要方法有ImportDXF、GetExtentInfoFromXML、GetCDRlyrMaxExtent和GetSymbolInfoFromXML。其中导入Dxf文件的语句为:

Layer lyr=doc.ActivePage.CreateLayer(fileName);

StructImportOptions Option=new StructImportOptionsClass();

lyr.Import(DxfFilePath,cdrFilter.cdrDXF,Option);

GetExtentInfoFromXML和GetCDRlyrMaxExtent方法用于获取Dxf图层和cdr图层的范围。根据获取导入前的Dxf图层范围和导入后的cdr图层范围信息,可以计算图层的缩放比例,从而统一各图层的比例。其主要逻辑为:计算最大范围图层的缩放比例与当前导入图层的缩放比例X、Y比例系数XScale和YScale,使用StretchEx方法以当前图形的中心点为基点按比例系数进行拉伸。另外,该信息可用于计算当前导入图层的中心位置与范围最大图层中心位置的偏移量。主要逻辑为:计算当前导入的Dxf文件的中心点与范围最大Dxf文件的中心点偏移量,乘以文件缩放比例获得X、Y偏移量XDelta和YDelta,最后使用Move方法移动图形。

主要语句如下:

//缩放当前图层

Double XScale=((cdrRightX-cdrLeftX)/(dxfMaxX-dxfMinX))/

((CurrentcdrMaxX-CurrentcdrMinX)/(CurrentDxfMaxX-CurrentDxfMinX));

double YScale=((cdrTopY-cdrBottomY)/(dxfMaxY-dxfMinY))/

((CurrentcdrMaxY-CurrentcdrMinY)/(CurrentDxfMaxY-CurrentDxfMinY));

doc.ActiveLayer.Shapes[1].StretchEx(CenterX,CenterY,XScale,YScale);

//移动当前图层

double Xdelta=((CurrentDxfMaxX+CurrentDxfMinX)/2-(dxfMaxX+dxfMinX)/2)*((cdrRightX-cdrLeftX)/(dxfMaxX-dxfMinX));

double Ydelta=((CurrentDxfMaxY+CurrentDxfMinY)/2-(dxfMaxY+dxfMinY)/2)*((cdrTopY-cdrBottomY)/(dxfMaxY-dxfMinY));

doc.ActiveLayer.Shapes[1].Move(Xdelta,Ydelta);

GetSymbolInfoFromXML方法读取Mxd文档的符号信息,用于CorelDraw图形对象的符号设置。CorelDraw软件中没有明确点的概念,点图层导入后以极小的闭合曲线表示。针对点图层,采用ActiveLayer对象的CreateEllipse2方法创建以当前点的X、Y坐标为圆心、半径为原符号尺寸的一半的圆形替代原有的闭合曲线。为了充分利用CorelDraw的符号功能,将圆形转换为符号,并设置符号颜色,其他图层点要素可共享该符号。线图层使用前面获取的符号信息设置边框颜色和边框厚度。面图层使用前面获取的符号信息设置填充色、边框颜色和边框厚度。

图5 皖南国际文化旅游示范区

相关语句代码如下:

sh.Fill.UniformColor.RGBAssign(RGBFillColorR,RGBFillColorG,RGBFillColorB);

sh.Outline.Color.RGBAssign(RGBLineColorR,RGBLineColorG,RGBLineColorB);

sh.Outline.Width=LineWidth

(4)保存cdr文件,效果如图5所示。

4 结束语

地图数据共享是制图的研究热点,ArcGIS软件作为当前主流的GIS软件,具有强大的制图和分析功能,软件很好地实现了地理信息的负载,然而其地图编辑和美化功能不足[8]。笔者基于ArcGIS Engine 10.2和CorelDraw 16.0 Type Library类库,借助第三方数据格式Dxf,采用C#语言完成ArcGIS数据到CorelDraw数据格式的转换。实现CorelDraw中图层相对比例和中心位置的调整以及两种文件格式间的符号信息传递,为两者间的数据共享,提高制图效率和质量提供了基础。

该方法初步完成了两种文件格式的转换,但也存在一些问题有待于进一步研究,如地图符号中一项重要内容是符号的样式,由于ArcGIS中的符号库与CorelDraw的符号库不同,符号样式无法相互使用,需要进一步研究两者的符号特点,以实现符号样式的共享。

[1]麦照秋,韩雪华.GIS数据用于CorelDRAW地图制图方法的研究[J].测绘通报,2008(2):62-64

[2]马洪斌.基于ArcGIS-CorelDraw的地理国情普查专题图编制探讨[J].测绘与空间地理信息,2013,36(9):187-188

[3]张雷,黄亚萍,杨觅.CorelDraw平台下专题地图实时展现的研究[J].测绘通报,2014(12):118-121

[4]房雪玲.基于CorelDRAW的地图注记自动化配置方法研究[J].测绘与空间地理信息,2014,37(11):210-212

[5]曾克明.CorelDraw软件的二次开发在地图制图中的应用与实例[J].测绘通报,2010(8):60-61

[6]孟祥飞,王卫.ArcGIS数据与CorelDraw数据的转换方法研究[J].测绘科学,2009,34(3):181-182

[7]李论,张志鹏,陈慎.基于CorelDraw X6的专题地图统计图表自动化实现[J].测绘工程,2014,23(1):65-68

[8]王延霞,李鹏.ArcGIS与CorelDraw数据转换与损失弥补方法的探讨[J].矿山测量,2010(6):15-17

(责任编辑:汪材印)

10.3969/j.issn.1673-2006.2016.10.027

2016-05-28

池州学院自然科学一般项目“城市自行车租赁站点布局优化研究——以池州市为例”(2015ZR008);池州学院自然科学一般项目“基于GIS的池州市土地利用适宜性评价研究”(2014ZR007)。

王雷(1988-),安徽池州人,硕士,助教,主要研究方向:GIS开发与应用。

P283

A

1673-2006(2016)10-0107-04

猜你喜欢
数据格式边框图层
用Lightroom添加宝丽来边框
基于水利标准数据格式的BIM数据管理和水利BIM生态探索
给照片制作专业级的边框
巧用混合图层 制作抽象动感森林
外出玩
世界首个可记录物体内部结构等复杂信息的3D打印数据格式问世
摆脱边框的束缚优派
图层法在地理区域图读图中的应用
跟我学添加真实的光照效果
论子函数在C语言数据格式输出中的应用