测绘地理信息   2017, Vol. 42 Issue (3): 69-73
0
ArcGIS到CorelDRAW平台的地图符号自动配置方法[PDF全文]
严锐1, 任福1, 杨杨1, 陶桐桐1    
1. 武汉大学资源与环境科学学院,湖北 武汉,430079
摘要: 不同平台间地图符号结构不同,地图符号模型存在较大差异, 导致相互之间地图符号难以共享。本文深入分析地图符号在地图编制常用软件ArcGIS和CorelDRAW中的数据组织结构,通过地图要素数据转换和地图符号自动符号化,实现地图符号由ArcGIS到CorelDRAW中的自动化配置。
关键词: 地图符号     ArcGIS     CorelDRAW     数据转换     符号配置    
Automatic Configuration Method of Map Symbol from ArcGIS to CorelDRAW
YAN Rui1, REN Fu1, YANG Yang1, TAO Tongtong1    
1. School of Resource and Environmental Sciences, Wuhan University, Wuhan 430079, China
Abstract: There are quite a lot differences in the models and structures of map symbol among different platforms, map symbols are difficult to share. In this paper, a deep analysis based on the data structure of map symbols is done in map drawing platfroms between CorelDraw and ArcGIS. Using data conversion of map features and automatic symbolization of map symbols, this paper have successfully realized automatic symbolization from ArcGIS to CorelDraw.
Key words: map symbol     ArcGIS     CorelDRAW     data conversion     symbol configuration    

ArcGIS具有较强的空间信息制图表达能力,但它不能完全满足地图编辑出版的要求,而矢量绘图软件CorelDRAW具有强大的图形处理和排版功能,在专题地图的编制过程中往往将二者结合来提高制图的效率和制图质量,增强地图的信息表达和可读性。从地图编制到生产的技术流程中,通常在ArcGIS中进行数据入库、符号编辑等操作,将处理后的数据导入CorelDRAW中完成图面的配置和整饰,检查确认无误后再打印输出。由于地图符号在ArcGIS和CorelDRAW中的组织方式不同,因此需要借助数据转换实现平台间地图符号的共享。目前,制图生产中常用的方法是使用AI、DXF和DWG等中间数据格式进行平台间的转换,这种方式仅仅达到显示数据的图面表示目的,会导致与要素实体相关联的属性数据的缺失,同时也可能出现空间数据不完整等问题。另一方面,由于CorelDRAW面向的领域不同,大多没有针对地图符号构图模式的设计方式,因此它缺乏地图符号自动化配置的方法,只能通过手动“复制”、“粘贴”的方式进行同类别要素的绘制。这种方式实现起来费时耗力,严重影响制图者的工作效率。

本文对ArcGIS和CorelDRAW平台中地图符号的数据组织方式进行对比分析,基于这两者间的数据转换方法进行了大量研究,重点分析了利用中间数据格式进行数据转换存在的严重不足,通过直接数据转换法将ArcGIS中的地图要素转换为CorelDRAW VBA可读取的数据格式文件,实现ArcGIS到CorelDRAW平台地图符号的共享,进而借助CorelDRAW VBA编程完成地图符号的自动化配置。

1 地图要素数据转换方法 1.1 ArcGIS与CorelDRAW符号模型对比

地理对象和地理现象本身的复杂性以及人们认知它们的角度、兴趣和方法的差异性,导致ArcGIS与CorelDRAW对同一地理对象和地理现象的描述方式不完全相同,因此平台间符号的组织方式、数据结构和存储方式存在巨大差异[1]

ArcGIS中的地图符号按照几何特征可分为点状符号、线状符号和面状符号[2],由地图符号库统一管理。与ArcGIS相比,所有的符号在CorelDRAW中都是图形对象,组成地图符号的图形对象没有特定的地图符号的组织方式,虽然也可以用“符号”的形式组织为“符号库”,但是对于线状和面状的地图符号大多采用松散的图形方式管理[1]。地图符号在ArcGIS中采用分层管理模式,符号可以分成若干符号图层,一个符号可以由一个或多个符号图层组合而成。根据符号几何类型的不同,每种类型的地图符号按照相应的符号结构进行组织,相比而言,在CorelDRAW中地图符号图形对象一般由几何形状、轮廓、填充构成。此外,ArcGIS中的地图符号同时具有空间数据和与空间要素相关联的属性数据,这两类数据往往一一对应,分开存储。CorelDRAW的数据模型相对较为简单,是以点、线、面的二进制文件存储图形文件,只能存储少量的属性数据,一般是地图图层和注记标注。

1.2 地图要素数据转换方法研究

鉴于地图符号模型在ArcGIS和CorelDRAW间的差异性,地图符号无法直接在这两种平台间进行共享,要想实现共享,首先要进行地图要素的数据转换。一直以来,很多学者基于GIS软件和CorelDRAW间的数据转换做了大量的研究[3-6]。在这些研究中,数据转换可以归结为3种方法:① 利用中间矢量数据格式进行数据共享,例如先借助于ArcGIS的转换工具转换为AutoCAD的DXF中间数据格式文件,然后再导入到CorelDRAW中;② 使用“剪贴板”进行转换,采用ArcGIS的“复制地图窗口”与CorelDRAW的“选择性粘贴”来传递剪贴板数据;③ 直接数据转换法,通过编写程序直接读取ArcGIS中的地理空间数据,然后按自定义的数据格式要求输出,在CorelDRAW中利用VBA编程进行读取,通过坐标的变换、层定义、数据读写等手段完成数据转换[7]

“复制”、“粘贴”的转换方式操作简便,但是重复的工作量大,往往会降低制图者的工作效率。利用中间数据格式进行数据转换相比“复制”、“粘贴”而言,可以一步到位,避免较大的工作量,但是会存在不能准确地表达源数据的信息,空间数据转换容易造成数据信息丢失,损失空间数据精度等问题[8]。例如唐双宁以AutoCAD的DXF格式为中间数据格式,经过转换后发现其存在数据不完整或重复、属性信息不完整、要素实体拓扑关系错误、要素逻辑关系不统一、数据冗余等问题[9]。为了确保转换过程中数据的完整性,本文采用直接数据交换的方法:先定义一种CorelDRAW VBA可读取的数据格式,然后将ArcGIS中地图要素按照以上格式输出。这种方法对数据的操作性灵活,需要熟悉平台的数据格式和具备一定的VBA编程基础,其转换流程如图 1所示。

图 1 直接数据交换流程图 Figure 1 Flow Chart of Direct Data Exchange

1.3 制定数据交换格式

直接转换法的第一步即制定一种可交换的数据格式。本文根据ArcGIS数据组织的特点,制定后缀为.atc格式的文件作为交换格式,该文件包含了索引文件、要素的空间数据文件和属性数据文件。索引文件的后缀为.code,空间数据文件和属性数据文件分别以.spt和.attr为后缀,自定义数据格式的结构如图 2所示。

图 2 自定义数据格式结构图 Figure 2 Structure of Custom Data Formats

索引文件用于建立地图要素的空间数据文件和属性数据文件之间的一一对应关系,它由文件头、文件实体和文件尾3部分组成。文件头和文件尾以“0”、“END ALL”标识,文件实体记录图层信息,即图层数目 (以“LAYERNUM”标识) 和图层内容 (“LAYER”和“END LAYER”中的内容)。图层内容包含图层名、图层类型 (P-点要素、L-线要素、A-面要素) 和要素编码,每类编码的要素对应于一个空间数据文件和一个属性数据文件。索引文件的结构如图 3所示。

图 3 索引文件结构图 Figure 3 Structure of the Index File

空间数据文件的文件头以“START”标识,文件尾以“END ALL”标识,文件的实体是某个要素或某类要素的集合。因要素的类型不同,文件实体的组织方式也不同,其中点要素、线要素、面要素分别以“POINT”、“POLYLINE”、“POLYLGON”标识开头,以“END ”标识结尾,以“ 10”标识X坐标,“ 20”标识Y坐标。每个点实体是一个XY坐标值,线实体是一组XY坐标对的集合,面实体是一系列起始坐标值相同的XY坐标对的集合。空间数据文件的结构如图 4所示。

图 4 空间数据文件结构图 Figure 4 Structure of Spatial Data

属性数据文件的命名方式和空间数据文件一致,均以地理要素的编码命名,文件中的每一条数据对应于空间数据文件地理实体的属性值。属性数据文件的文件头由实体的属性字段组成,以“,”分隔,以“END”作为结尾标识符,其结构图如图 5所示。

图 5 属性数据文件结构图 Figure 5 Structure of Attribute Data

1.4 输出交换数据文件

ArcGIS的数据库由空间数据引擎管理,通过空间数据引擎可以直接对空间数据和属性数据进行存储和管理,从而避免了与关系数据库直接接触。空间数据引擎以图层来管理地图要素,将具有共同属性的要素放在同一图层,每条数据库记录对应一个地理要素。每层要素以XY坐标的形式存储,点要素以单一XY坐标值记录,线要素以一组有序的XY坐标集合记录,面要素以一组起始结点和终止结点相同的线段对应的XY坐标记录[10]

本文借助于ArcGIS Objects框架编程[11],使用ArcSDE按要素图层输出为制定的交换格式数据文件。图层的元数据输出到索引文件中,要素的空间位置和属性信息分别输出到空间数据文件和属性数据文件中,输出文件的格式与前一节制定的数据交换格式相同。

2 地图符号自动配置

CorelDRAW作为一款具备超强的图形和文字编辑处理功能的软件,拥有一个强大符号库,用户可以根据需求建立和使用符号库,灵活自如地完成点要素的符号化。但是线要素和面要素因缺乏线型库、面型库的支撑,自动符号化的实现较为困难。本文通过建立完整的点、线、面符号库来提高自动符号化的效率。在CorelDRAW中通常使用VBA技术编程引用其对象,操作其属性和方法等来达到二次开发的目的[12]。自动符号配置操作流程如图 6所示。

图 6 自动符号化流程图 Figure 6 Flow Chart of Automatic Symbolization

2.1 符号库的建立

地图符号根据其几何特征一般分为点、线、面3类[2]。点状符号的绘制要遵循方圆、挺直、齐整、对称、均匀等原则[13]。线状符号的绘制通过对轮廓线属性的编辑来实现[14],轮廓线属性包括线的颜色、灰度、宽度、线型、端点和拐角的类型、线端箭头、笔锋、轮廓线等[15]。面状符号由一条封闭的曲线构成其边界,然后对其内部区域填充而成,填充属性有颜色、图案、纹理等[15]

点符号库由一系列的单一或组合符号组成,以CDR文件的形式存放在CorelDRAW安装路径的Symbol\Point文件夹下。入库的点状符号需要符合以下条件:① 新绘制的符号如果是组合符号,必须要经过组群之后才能添加到点符号库中;② 符号的所有组成部分都必须封闭。

线符号库和面符号库分别以CDR文件存放在CorelDRAW安装路径的Symbol\Line和Symbol\Polygon文件夹下。其与点符号库相比略为复杂,由于一个图层有多种地物,需要配置不同的符号,而同一种地物为了显示的需要,也需要配置多个不同符号[16](如为达到不同道路相交处的融合效果,必须为一种道路配置上下两层符号)。因此,线状符号和面状符号在入库前,需要遵循以下规则:

1) 符号的命名方式:线符号中每一条组合线绘制在一个图层中,每一层以“比例尺+要素类型+_颜色”命名,例如线状要素“25万铁路”以黑、白线组合而成,黑、白线图层分别以“25万铁路_黑”、“25万铁路_白”命名;面符号的图层以“比例尺+要素类型+_图形类型”命名,例如面状要素“25万湖泊”,线图层和面图层分别以“25万湖泊_线”、“25万湖泊_面”命名。

2) 符号中图层叠置顺序:线符号中图层颜色较浅,置于上层,颜色较深,置于下层;面符号中,面图层居于上层,线图层居于下层。

2.2 符号匹配

通过符号匹配,将要素实体的图形属性与符号库相关联。首先在CorelDRAW平台中利用VBA读取索引文件,获取图层的类型和图层名。源数据图层与符号库中的模板匹配之后会生成相应的配置文件,该文件主要用于记录符号的图形属性,点要素记录点符号的符号路径,线要素记录线符号的图层数、图层名、图层属性 (线型、线宽、线的颜色),面要素记录面符号的图层数、图层名、图层属性 (线型、线宽、线的颜色、填充颜色)。

2.3 自动符号化

点状要素是指地图上具有定位特征,大小与地图比例尺无关的空间点,如控制点、居民点、矿产地等[17]。点状要素属于独立的目标,由坐标位置和符号表示,符号的几何中心位置即代表地理实体的位置。点状符号符号化之后依旧可对其进行编辑,如修改符号大小、轮廓线的宽度、轮廓线和填充面的颜色,编辑完成之后,其原符号所在图层中的符号也做相应改变。点状要素的自动符号化流程如下:① 打开匹配的符号文件;② 选取符号文件图层中的符号,复制,关闭符号文件;③ 读取源数据的空间数据文件,获取一个点状要素的XY坐标值;④ 在相应的位置上粘贴符号并复制;⑤ 重复过程③、④,直到文件中所有的点状要素完成自动符号化。

线状要素在形态上呈条带状延伸,沿着定位基线由分层的图元叠合而成,它的几何中心与地物实际位置是一致的[18]。线状要素在地图中是一系列点的坐标集合,地物的类别由线的属性表示,本文根据实际制图要求仅考虑线的线型、线宽、颜色3种属性。线状要素自动符号化流程如下:① 打开符号匹配文件,获取线的属性;② 读取源数据的空间数据文件,获取线要素的第一个XY坐标值,作为线的起点;③ 读取源数据的空间数据文件,获取线要素的XY坐标值,作为线的中间点加入到线段中;④ 重复过程③,直到文件中所有的线要素的点都加入到曲线段中;⑤ 绘制曲线,并将线的属性赋值给该曲线,直到图层中所有线要素都符号化完毕。

面状要素是指地图上填充于面状分布现象范围内,用于说明面状分布现象质量特征或数量特征的要素符号[17]。面状要素符号化分为绘制边界封闭曲线和内部填充两个步骤,绘制边界封闭曲线的步骤同上述线要素符号化相同,内部填充即在封闭边界范围内配置不同的颜色。面状要素自动符号化流程如下:① 打开符号匹配文件,获取图层中边界线和填充区的属性;② 读取源数据的空间数据文件,获取线要素的第一个XY坐标值,作为线的起点;③ 读取源数据的空间数据文件,获取线要素的XY坐标值,作为线的中间点加入到线段中;④ 重复过程③,直到文件中所有的线要素的点都加入到曲线段中形成封闭曲线;⑤ 绘制封闭曲线,并将线的属性赋值给该曲线,然后将填充属性赋值给该封闭曲线内部区域完成填充,直到图层中所有线要素都符号化完毕。

2.4 对象属性赋值

CorelDRAW作为一款平面制图软件,具有较强的图形属性,而对象本身的描述属性较弱。利用中间数据格式进行数据转换后往往会丢失属性信息,本文基于直接数据交换法将要素的属性信息单独输出到属性文件中,因此要素的属性信息如FCode、长度、面积等可以完整地“移植”到CorlDRAW的图形对象中。要素在CorelDRAW中绘制之后再读取其属性文件,接着完成对象属性的赋值。

2.5 自动符号化的实现

本文基于CorelDRAW X3VBA编程开发了一套自动符号化工具,以中国某市各级要素的SHAPE数据为ArcGIS的数据源,成功实现了ArcGIS到CorelDRAW平台的自动符号配置。实验表明,ArcGIS中的原始数据总共有12个图层,412个点、线、面地理要素,每个要素都具有与之关联的属性信息,在CorelDRAW平台中自动符号化后,同样产生了12个图层,412个图形对象,不仅每个对象具有和ArcGIS中一样的空间位置,其属性信息也完全从ArcGIS中“复制”而来。由于CorelDRAW中符号化后的专题地图也是分层组织的,图层的顺序与ArcGIS中的原始数据相同,因此ArcGIS中数据按照点图层在最上层,线、面图层依次叠加,而且图层分得越细 (例如将道路分为道路边界线图层和道路中心线图层),在CorelDRAW中符号化的结果准确性越高。此外,相比ArcGIS,CorelDRAW中地图符号的可编辑性更强,排版更为灵活。用户操作界面如图 7所示,ArcGIS中的地图要素如图 8所示,CorelDRAW中自动符号化结果如图 9所示。

图 7 自动符号化用户界面图 Figure 7 User Interface of Automatic Symbolization

图 8 ArcGIS中的地图要素 Figure 8 Features in ArcGIS

图 9 自动符号化结果 Figure 9 Results of Automatic Symbolization

3 结束语

本文以地图符号共享为切入点,通过分析地图符号在具有代表性的GIS软件 (ArcGIS) 和图形处理软件 (CorelDRAW) 中的数据模型,利用地图要素数据转换和地图符号自动符号化实现地图符号在这两种平台间的自动配置。利用直接转换法将地图要素的属性数据完整地“移植”到CorelDRAW平台中,弥补了中间数据格式转换造成属性数据缺失的不足;在CorelDRAW平台中建立了强大的符号库,提高了专题地图的自动符号化程度,大大提高了制图者的工作效率。但是本文提出的地图符号自动配置方法中还存在有待完善的地方:① 在转换数据格式的空间数据文件中,要素都是以坐标的形式记录的,未充分考虑其空间拓扑关系,可能会导致转换后压盖的情况;② 由于研究范围的局限性,本文只选取了有代表性的GIS软件 (ArcGIS) 和图形处理软件 (CorelDRAW) 进行符号配置研究,还未总结出一套通用的符号化方法。因此在后续的研究工作中,应当将拓扑信息作为研究的重心,以符号化配置方法的通用性为研究的深度,为满足更多平台的地图符号共享进行深入研究。

参考文献
[1] 陈梦琳. GIS与图形系统地图符号共享的数据模型与方法研究[D]. 南京: 南京师范大学, 2015
[2] 胡鹏, 黄杏元, 华一新. 地理信息系统教程[M]. 武汉: 武汉大学出版社, 2007
[3] 姚志强. MapInfo和CorelDRAW间的数据转换[J]. 矿山测量, 2007, (4): 51–53
[4] 孟祥飞, 王卫. ArcGIS数据与CorelDRAW数据的转换方法研究[J]. 测绘科学, 2009, 34(3): 181–182
[5] 张文华, 闫家盼, 黄辉, 等. MapGIS数据向CorelDRAW数据转换方法研究[J]. 电脑编程技巧与维护, 2013, (18): 64–65 DOI: 10.3969/j.issn.1006-4052.2013.18.026
[6] 唐彬彬. 考古绘图中CorelDRAW、AutoCAD与MapGIS的数据转换[N]. 中国文物报, 2012-11-02(007)
[7] 梁建国, 徐占华, 颜宇. CorelDRAW VBA在地图制图中的应用[J]. 测绘科学, 2009, 34(2): 218–219
[8] 胡诚, 陈方林, 刘俊亮. 空间数据共享与互操作技术探讨[J]. 现代测绘, 2003, 26(6): 31–33
[9] 唐双宁. 基于GIS的空间数据共享研究[D]. 长春: 吉林大学, 2006
[10] 王创新, 甘羲, 胡勇军. ArcGIS与MapGIS空间数据转换技术与方法[J]. 计算机与现代化, 2006, (8): 35–37
[11] 郭敏. 基于Arcobjects的GIS数据转换研究[D]. 西安: 西安科技大学, 2009
[12] 高小明, 汤青慧, 温俊丽. CorelDRAW中基于VBA的二次开发[J]. 测绘与空间地理信息, 2006, 29(6): 54–56
[13] 付超, 张雷聂, 聂时贵. CorelDRAW中专题地图符号的制作与管理[J]. 现代测绘, 2009, 32(3): 32–33
[14] 姚兴海, 马秋云. 基于CorelDRAW的地图符号库建库[J]. 测绘通报, 2003, (2): 36–38
[15] 麦照秋, 韩雪华. GIS数据用于CorelDRAW地图制图方法的研究[J]. 测绘通报, 2008, (2): 62–64
[16] 杨勇, 李霖, 王红. 地图制图软件中符号图形的研究[J]. 测绘信息与工程, 2007, 32(3): 46–48
[17] 乔俊军, 房雪玲, 张海文. 基于CorelDRAW的制图要素符号化研究[J]. 测绘与空间地理信息, 2013, 36(8): 30–33
[18] 尹言军, 孔令华, 黄海涛. 基于CorelDRAW VBA的地图制图符号化程序设计[J]. 勘察科学技术, 2013, (1): 51–52, 64