利用开源组件的GIS数据到CorelDRAW数据转换实现
2024-05-13高寿峰杨欣
高寿峰 杨欣
1. 安徽省第四测绘院 安徽 合肥 230031;2. 合肥工业大学 安徽 合肥 230009
引言
随着计算机技术和地图编制技术的不断发展,现代制图技术和手段也在不断发展和变化,针对不同的制图需求,采用了不同的地图编制技术。在地图编制过程中,较多采用两种编图模式,一种是传统的GIS软件模式,比如ArcGIS、MapGIS等GIS平台,另外一种模式是平面设计软件模式,比如采用CorelDRAW和Illustrator等平台进行编辑制图[1]。GIS软件作为制图软件,作为应急制图的应用较多,而作为以印刷为目的编图任务,尽管基础数据的处理采用GIS软件进行,但是编图平台还是采用了CorelDRAW等平面设计软件。CorelDRAW作为一款平面图形处理软件,近年来,版本不断推陈出新,功能也不断强大,但是作为一个通用的平面设计图形处理软件,并未考虑到地图编制过程中GIS格式数据的交互性,导致地图编制人员只能采用CorelDRAW支持图形交换格式DXF进行数据的导入。
在传统的数据交换中,将GIS数据转换为DXF,此格式是AutoCAD绘图交换格式,导出后原始属性、图层等信息都无法保存,仅仅把数据的几何图形信息保存下来。然后利用CorelDRAW导入DXF文件功能导入数据[2]。该方法使用较广,但是数据信息损失较多,特别是点要素在AutoCAD中是块的定义,而在CorelDRAW中是点符号进行表达,软件之间要素的定义不兼容,导致了转换数据的时候只能转换其表征特点,DXF中点符号导入CorelDRAW后变为一个或多个圆图形,造成了后期编辑的复杂性。此外,为了解决图层信息丢失的问题,常常把GIS数据先按照属性拆分为单个文件,然后逐个转换为DXF格式文件,最后逐文件导入CorelDRAW中,大大增加了数据处理的工作量。
为了解决CorelDRAW和其他GIS数据的有效转换,技术人员探索了基于开源GIS组件的DotSpatial,对GIS交换格式数据(Shape File)进行处理后直接导入CorelDRAW中,省去了中间的环节,解决了GIS矢量数据和CorelDRAW软件的有效交互。
1 开发概述
1.1 开发环境简介
CorelDRAW软件提供了多种开发模式,常见以VBA、VSTA方式进行开发。VBA是一种宏语言,采用的是Basic语言脚本的形式,功能开发后保存为GMS格式文件,虽然VBA是一门容易掌握和开发的形式,但是代码的安全性差,主要处理自身文档,而对其他软件组件的兼容性较差[3]。为此技术人员采用了VSTA的开发模式,该模式为二次开发人员提供了微软的Visual Studio开发环境,编程语言采用C#。C#是微软桌面语言主推的开发平台之一,C#是一种安全的、稳定的、简单的由C语言和C++语言衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性。
GIS开发组件选用了DotSpatial,DotSpatial是一套基于.Net Framework平台开发的开源GIS类库,整套类库是使用C#语言编写完成,DotSpatial是众多GIS开源软件中功能比较全面、扩展性比较好的一款,具有开源、免费、稳定且独立于特定操作系统的地理信息系统类库。它提供空间数据的处理、分析、投影等功能。DotSpatial整个类库实现的功能包括[4]:①显示地图;②支持Shape File,以及其他常用的栅格数据和遥感影像数据;③渲染符号和标签;④支持动态投影和投影变换;⑤支持属性数据的编辑和显示;⑥支持空间分析,包括叠加分析、缓冲区分析、差值分析、空间统计等。
1.2 VSTA结合DotSpatial开发步骤
软件平台采用了CorelDRAW 2022版本,先安装Visual Studio2015或者以上版本,新建类库工程后将CorelDRAW的COM引用,然后将DotSpatial的GIS组件引入,主要包括Corel.Interop.VGCore21、DotSpatial.Controls、DotSpatial.Data等[5]。根据设计功能的需求,在工程中增加窗体,并在窗体中放置所需控件,然后编写功能代码。
2 插件功能的实现
插件的功能主要分为以下两个功能:①基础数据的处理,主要是缩放和平移;②数据的图形、属性读取并转换为CorelDRAW中各类符号和填充形式。
数据的处理流程如图1所示。
图1 数据处理流程图
地图编制过程中使用的GIS数据,较多采用了地理坐标系或者平面坐标系,而在CorelDRAW中无法表示地图的实际坐标,因此需要将原始的根据制图比例尺进行缩放和平移,让制图范围的左下角和CorelDRAW中制图的左下角坐标一致。根据输入的比例尺参数,自动测算缩放比,缩放工具界面如图2所示。
图2 地图缩放对话框
以线要素缩放为例,读取一个Shape File文件后,开始遍历图形要素,读取要素的图形信息,根据缩放比例和平移参数,将逐个要素进行处理,并最后保存为新的矢量文件。
地图数据经过缩放和CorelDRAW制图坐标一致后,将缩放后的Shape File进行导入操作。导入数据分为点、线、面3种类型的要素,点要素的导入分为两种情况,点要素作为符号要素进行导入,设置好点符号的名称[6]。作为文字性导入,则需要设置导入文字的属性字段名称,选中“属性转注记”,并选择文字对应的属性字段名称。面要素导入时,可以只导入边线,也可以导入CorelDRAW后作为填充要素,并可以根据分色方案对对面要素逐个填充不同的颜色方案[7]。
在地图实际生产中,对3200多个图形元素进行导入对比测试,导入前原始格式为shape file,导入后保存为CorelDRAW格式。通过插件导入数据,可以迅速解决外部数据的导入,且图层、要素类型和属性信息均保留原始数据的信息。
表1 生产过程中应用对比
3 结束语
随着CorelDRAW在地图编制的广泛应用,基于CorelDRAW数据转换的需求越来越重要,由于软件自带的数据交换不能满足地图的需求,因此利用开源组件开发相关的工具,不仅仅解决了软件自身的功能不足,也提高了编图的效率,组件不依赖任何商用GIS平台,直接读取文件信息,解决的批量提醒缩放后,直接导入CorelDRAW中,从而达到了GIS数据的高效率、无损失的转换,并可以自定义转换后的符号参数,减少了后期地图编制符号化等的工作量,不仅仅提高了制图效率,也提高了制图质量。