APP下载

CorelDraw线状地图符号库的设计

2017-06-21郭庆胜魏智威柳其志

测绘工程 2017年7期
关键词:图元线状编辑器

刘 洋,郭庆胜,魏智威,柳其志,魏 嘉

(武汉大学 资源与环境科学学院,湖北 武汉 430079)

CorelDraw线状地图符号库的设计

刘 洋,郭庆胜,魏智威,柳其志,魏 嘉

(武汉大学 资源与环境科学学院,湖北 武汉 430079)

在CorelDraw中绘制有些线状地图符号需要使用程序控制,无法直接调用CorelDraw的线状符号绘制功能。文中基于图元组合的思想,依据CorelDraw软件的特点,对常用地图中的线状符号进行分类、组织和存储,建立相应的线状地图符号库,设计专门的线状地图符号编辑器,实现对线状地图符号的统一编辑与管理,并且为不同类型的线状地图符号绘制设计相应的算法,最后利用CorelDraw提供的VBA二次开发环境实现文中所提出的方法,实验效果很好,可满足地图生产的需要。

符号库;图元;线状地图符号;编辑器

地图上表示各种复杂的自然和人文现象都是通过地图语言来实现,通常分为地图符号、注记和色彩;相比于其它几种地图语言,地图符号表达地图内容形象直观、一目了然,因而对于符号的研究和设计是地图学的基本问题之一。由于计算机技术的发展,很多制图工作都需要借助计算机进行完成,因而研究和设计的符号要在计算机中进行绘制。目前,计算机中地图符号绘制的主要途径可以分为两大类[1]:一是在现有的软件基础上利用其所提供的二次开发环境进行符号的设计,如ArcGis,AutoCAD,Coreldraw等软件均提供了可以供用户调用的编程接口,这种方法的优点是开发过程简单,并且可以利用系统本身的图形编辑功能,缺点是符号绘制受到系统自身功能的限制,且符号库的独立性较差;二是利用程序语言开发独立的符号设计平台,如目前流行的COM技术等[2],其优点是符号设计平台独立、符号共享性较好,缺点是许多符号绘制功能需要从底层进行设计,开发过程较为复杂[3]。在地图符号绘制的过程中,线状地图符号的绘制需要考虑多种情况,程序设计算法复杂,操作运算量大,耗费时间较长,因此,线状地图符号的绘制是地图符号绘制过程中的重点问题[4]。对于线状地图符号的绘制,已有许多学者进行过相关的研究,目前绘制线状地图符号的主要算法有:纵向叠加法,即将线符号分成几层,然后每层单独绘制;横向循环配置法,将重复出现的基本图元沿定位线进行循环配置;程序块法,即为每种不同的符号编写单独的绘制函数[3],这几种算法均有其不足之处,如纵向叠加法难以绘制一些不易分解为不同层的符号(如河流等),横向循环配置法在拐角处存在符号变形且效率较低,程序块法使程序过于复杂臃肿且不利于符号的扩充;因此,在一般的线状地图符号的绘制过程中,往往将这几种方法结合起来使用。

本文基于图元组合的思想,利用CorelDraw所提供的VBA二次开发环境,对地图中常用的线状符号进行分类、组织、存储,建立相应的线状地图符号库,并且采用图元组合及程序块的方式为不同类型的线符号设计相应的绘制算法,设计专门的线状符号编辑器,对各类线符号进行统一编辑与管理,供制图人员进行编辑和调用。

1 Coreldraw绘制地图符号的局限性

虽然Coreldraw是一款出色的图形设计软件,但它并不是一款专业的地图制图软件,在绘制地图符号时存在一定的局限性:例如对于线符号来说,Coreldraw虽然提供了一定数量的内置线型,但对一些较为复杂的线符号,不能从系统中直接调用,例如对防洪堤的绘制,需要逐个节点的添加短线并通过手动旋转的方式使其与基线垂直,如图1所示的防洪堤符号,这样就使得这类符号的绘制过程十分繁琐,增加制图人员的工作量。另外,在绘制在建高速公路时,常常需要将两条或更多的宽度不等的虚线叠加在一起,这时由于Coreldraw系统自身的规定,叠加的虚线中虚线部分的长度必须是虚线自身宽度的整数倍,如果对于不同宽度的虚线设置相同的线样式,就会使不同的虚线之间产生压盖,导致绘制错误。如图2所示的在建高速公路符号绘制时出错。

图1 防洪堤符号

图2 高速公路符号

针对前面所提到的问题,一些学者提出相应的解决方法[7-9],但是往往只是针对某几个特殊的符号,没有对符号进行较为系统的分类,并且没有形成一个能够统一对线符号进行编辑与调用的平台。

2 Coreldraw线状地图符号库的构建

2.1 图元分类

关于地图符号的绘制,有很多学者采用基于图元的方式进行[1-6,10-12]。图元法将地图符号看做一定数量的组成单元(图元)的集合,通过定义不同的图元类型,改变图元自身的参数及图元间的组合方式得到不同类型的地图符号。

依据图元的几何特征可以将图元分为点图元、线图元和面图元三类[6]。点状图元的分类比较简单,一般依据其几何特征可以分为:点、折线、圆、圆弧、多边形等几种类型的基本图元类型。线状符号的基本图元已有学者做了大量的研究,如程朋根等[6]针对地形图图式线状符号,设计出组成线状符号的基本图元有:实线、虚线、点虚线、双虚线、双实线、连续点符号、定位点符号、导线连线、导线点符号、齿线状符号、渐变宽实线、渐变宽虚线、带状晕线等共13种图元。

由于一般的图元分类比较复杂,本文依据Coreldraw的自身特点将图元分为3种:长线图元、短线图元、点状图元。

2.2 Coreldraw线状地图符号的分类

在Coreldraw环境下图元分类的基础上,需要对Coreldraw中的线状地图符号进行分类,这里的线状符号主要是指那些不能直接从Coreldraw系统中调用出来的符号,依据其图元构成的不同可以分为以下四类:

1)第一种线符号:由一种或几种长线图元叠加组成,如高速公路等。

2)第二种线符号:由一条或几条长线图元上按一定规则排列的短线图元得到,如防洪堤等。

3)第三种线符号:由在长线图元上按一定规则排列的点状图元构成,如沟渠符号。

4)其他线符号:主要指那些不能够通过图元组合的方式得到的符号,包括河流、桥梁、长城等特殊符号。

各类典型符号及其构成方式如表1所示。

2.3 Coreldraw线状地图符号库的构建

对于抽象出的各类线状地图符号需要进行组织和存储。本文采用面向对象的思想对线状地图符号进行组织[6],将一个线符号看做是一个对象,这个对象是由一个记录这个线符号基本信息的抽象对象(LineSymbol对象)和多个相同或不同类型的图元对象组成而得到的复杂对象,每一个对象都有其相应的属性和方法,其中,抽象的LineSymbol对象的属性包括线符号的ID、线符号类型、组成图元等基本信息,而每一个图元对象的属性则包括ID和在符号化的过程中所需用到的所有属性。

线状地图符号采用ACCESS表的形式进行存储,分为一张母表和多张从表,其中,母表用来存储LineSymbol对象的属性,母表的结构如表2所示。

表2 母表的结构

每一种类型的图元分别对应一张从表,每张从表的每个字段分别用来存储图元的编号和属性,对于像桥梁、长城这类符号,不能通过前几种图元组合得到,这时采用程序块进行绘制,存储其在绘制过程中的所有必要参数。各类不同类型的图元及其属性如表3所示。各类程序符号及其控制参数如表4所示。

表3 不同类型的图元及其属性

通过以上对Coreldraw中常用地图符号的组织和存储,即完成对Coreldraw下地图符号库的构建,符号库中的典型符号如图3所示。

表4 各类程序符号及其控制参数

图3 符号库中的典型符号

3 Coreldraw线状地图符号绘制

在Coreldraw线状地图符号库的基础上,进行线状地图符号绘制算法的设计,算法主要分为两大类:第一大类主要针对那些能够由基本图元构成的线状地图符号,如由长线图元与短线图元构成的堤坝类符号、由长线图元与点状图元构成的沟渠类符号等;第二大类算法则主要针对那些不能通过基本图元间的组合得到的特殊线状地图符号,如河流、桥梁、长城等线状地图符号。

对于第一类算法,其基本思想是对于要绘制的线符号,首先从数据库主表中读取线符号ID、线符号类型及其相应的组成图元等信息,然后根据获取的线符号类型及线符号的组成图元,读取每张相应的从表中的图元信息,最后根据不同的线符号类型选择相应的符号化方法即可。以堤坝类符号的绘制为例,算法的流程如图4所示。

图4 堤坝绘制流程

对于那些不能通过基本图元间的组合得到的特殊线状地图符号,一般采用程序块的方法进行绘制 ,本文对河流、桥梁、长城及在建高速公路等符号均设计了专门的符号化程序,其中,河流的绘制主要包括两个部分:对整个河流图层的绘制和对单条河流的绘制,在对整个河流图层的绘制前要首先对河流数据进行预处理,包括确定河系的主流、判断河流的方向、划分河流的等级及对河流进行编码,这一部分在ArcGIS中完成,然后将整理好后的河流数据导入到Coreldraw中进行符号化;对单条河流的绘制在Coreldraw中一般采用将曲线在结点处打断,然后对打断后的每一个小段逐个设定宽度的方式,本文在此基础上开发了相应的自动化程序,实现了河流的自动渐变,并且在渐变的过程中考虑到了渐变是否光滑的问题,设计了相应的算法,使渐变效果更加美观;桥梁的绘制则是首先按桥梁长度生成一条原始曲线,然后将曲线向两侧偏移1/2个桥梁宽度并将原始曲线删除,最后在得到的两条直线两端生成四条短线;长城的绘制则是先将曲线等分并画垂线,然后连接第一条垂线与第二条垂线的首端点、第三条垂线与第四条垂线的尾端点,依次类推,最后删除原始曲线得到长城符号;在建高速公路的绘制需获取设定的道路宽倍数和边线宽倍数,然后计算两者的最小公倍数,根据设定的样式和这个最小公倍数分别计算得到边线、道路、中心线的实线和虚线的长度,最后将边线、道路、中心线叠加就得到在建高速公路。现以河流符号的绘制为例,给出算法的流程如图5、图6所示。

图5 单条河流绘制流程

图6 河流图层绘制流程

4 Coreldraw线状地图符号编辑器的设计与实现

为方便制图人员的操作,本文设计了专门的线状地图符号编辑器,实现对各种线型的编辑与管理,编辑器的界面如图7所示,在界面的左上角可以选择要符号化的图层,左侧的ListView显示系统提供的所有线符号,中间的ListView则显示选中的线符号的组成部分,最右侧的一列则提供对线符号的编辑与功能,可以对选中的线符号的组成部分进行编辑,针对不同类型的线型提供相应的编辑方法,能够将编辑的结果保存到数据库中,并且能够选择某个线图层,对所选图层进行符号化。线编辑器的详细功能如下:

1)选择要编辑的线符号: 在主界面最左侧预览的线符号中选择一种要进行编辑的线型,然后会在中间的ListView控件中显示其组成部分,点击其中的一个组成部分,再点击Advanced Edit进行进一步的编辑,调出相应的编辑器。

2)对第一种线符号进行编辑:将调用Coreldraw中自带的轮廓笔编辑器,对线的宽度、颜色、样式等进行编辑,并将结果返回到临时图层进行预览。

3)对第二种线符号进行编辑:调用自定义的编辑器,对短线的各种属性进行编辑,其中方向属性是预先设定好的不可更改,单元间间隔表示两个短线间的间距,偏移是指短线距离下方定位线起点的距离,颜色编辑需要调用系统的轮廓笔对短线设定颜色,编辑好后点击确定,即可在临时图层中预览编辑情况。

4)对第三种线符号进行编辑:调用自定义的编辑器,可以编辑点状图元的宽度高度和单元间隔,用户也可以导入更多的已经设计好的符号。

5)对河流进行编辑:调用自定义的编辑器,可以编辑河流的最大宽度、最小宽度、渐变宽度,改变河流的方向与颜色。

6)对桥梁线符号进行编辑:调用自定义的编辑器,可以编辑桥梁的宽度、桥梁中小短线的角度和长度,也可以编辑使桥梁具有一个矩形颜色块。

7)对长城线符号进行编辑:调用自定义的编辑器,可以编辑长城符号中短线的长度和间隔,使长城看起来更宽或更窄。

8)对在建高速公路线符号进行编辑:调用自定义的编辑器,编辑基线宽度、道路宽倍数和边线宽倍数,得到不同的在建高速公路符号样式。

9)保存线符号:符号编辑好后进行保存,将符号参数保存到本地数据库中。

10)符号化:选定图层并编辑好符号后点击符号化按钮,可以在界面中即时查看符号化的过程。

从1∶70万的安徽省政区图中截取部分数据进行符号化实验,符号化的效果如图8所示。

图7 线编辑器主界面

图8 实验图

5 结束语

将图元法应用于Coreldraw环境下的线状地图符号绘制,在对图元符号进行分类与组织的基础上,建立Coreldraw线状地图符号库,所开发的软件能有效解决人工绘制符号时效率低下的问题,提高制图人员的工作效率。如果制图人员对某一图层的符号化效果不满意,还可通过编辑器选择相应的符号进行编辑,用编辑好后的符号对特定图层进行符号化。

[1] 张园玉,李霖,龙毅,等. 地图符号系统的设计与实现[J]. 测绘信息与工程, 2004, 29(6): 25-27.

[2] 王伟,张波,殷赣华,等. 基于COM技术的地图符号库结构设计与实现[J]. 武汉大学学报(信息科学版), 2002,27(3): 296-300.

[3] 姜琦,周晓光,曾联斌,等. 可编辑复杂线状符号库的设计与实现[J]. 地理信息世界, 2012(2): 75-80.

[4] 吴小芳,杜清运,徐智勇,等. 复杂线状符号的设计及优化算法研究[J]. 武汉大学学报(信息科学版), 2006,31(7): 632-635.

[5] 车森,孙群,刘海砚. 参数控制的地图符号编辑器设计[J]. 武汉大学学报(信息科学版),2013,38(11): 1326-1329.

[6] 程朋根,龚健雅,眭海刚. GIS中地图符号设计系统的设计与实现[J]. 中国图像图形学报, 2000, 5(12): 1006-1011.

[7] 姚兴海,马秋云. 基于CorelDRAW的地图符号库建库[J]. 测绘通报, 2003(2): 36-38.

[8] 乔俊军,房雪玲,张海文. 基于CorelDRAW的制图要素符号化研究[J]. 测绘与空间地理信息, 2013(8): 30-33.

[9] 尹言军,孔令华,黄海涛. 基于CorelDRAW VBA的地图制图符号化程序设计[J]. 勘察科学技术, 2013(1): 51-52.

[10] 蔡忠亮,李霖. 普通地图符号的全开放式设计[J]. 武汉测绘科技大学学报, 1999(3): 259-261.

[11] 谈晓军,边馥苓,何忠焕. 地图符号可视化系统的面向对象设计与实现[J]. 测绘通报,2003(1): 11-13.

[12] 梅洋,李霖. 顾及符号关系处理的地图符号库设计与实现[J]. 测绘通报, 2007(8): 66-70.

[责任编辑:张德福]

Design of linear cartographic symbol based on CorelDraw

LIU Yang, GUO Qingsheng, WEI Zhiwei, LIU Qizhi, WEI Jia

(School of Resource and Environment Science,Wuhan University,Wuhan 430079,China)

Drawing some linear cartographic symbols needs to be controled by program, because the plotting function of linear symbols can not be adopted directly from CorelDraw. According to the characteristics of CorelDraw, the study is based on the conception of graphical element composition. The commonly-used linear cartographic symbols are categorized, organized and stored, the relevant symbol base of linear cartographic symbols is established, the special editor is designed, the uniform editing and management is realized, and the algorithms are designed. Finally the method proposed is realized by taking advantage of secondary developmental environment of VBA in CorelDraw, and the result of the experiments proves to meet the needs of map production.

symbol base; primitive; linear cartographic symbol; editor

著录:刘洋,郭庆胜,魏智威,等.CorelDraw线状地图符号库的设计[J].测绘工程,2017,26(7):66-70,75.

10.19349/j.cnki.issn1006-7949.2017.07.014

2016-10-25

国家自然科学基金资助项目(41471384); 安徽省国土资源科技项目(2015-k-17)

刘 洋(1991-),男,硕士研究生.

P208

A

1006-7949(2017)07-0066-05

猜你喜欢

图元线状编辑器
无取向硅钢边部线状缺陷分析及改进措施
学术出版物插图的编排要求(一):图注
联锁表自动生成软件的设计与实现
热轧卷板边部线状缺陷分析与措施
你距离微信创作达人还有多远?
车辆段收发车运行图编辑器的设计与实现
线状生命
电气CAD接线图快速转换G图形的技术应用研究
基于VLIW目标机的ELF二进制编辑器设计与实现
线状α=MnO2的水热制备及其电容性能