地图符号是表示地图内容的基本手段,其增强了地图的可读性,是地理信息系统显示和输出的支撑和基础。自“十五”规划以来,地震系统普遍采用ArcGIS软件制图,由此产生了一套基于ArcGIS的地图符号库,并得到较为广泛的应用。然而,随着应急管理部对应急产品的“自主可控”提出更高的要求,开源GIS(Geographic Information System)的应用被逐渐推广,重新制作一套基于开源GIS的地图符号库成为迫切的需求。
地图符号共享一直是地图制图过程中研究的重点和难点,由于不同GIS平台数据结构、存储方法、渲染策略以及商业软件封闭性等原因,导致地图符号难以共享(Chen et al,2011)。为在各GIS平台之间实现符号“一库多用”,国内外众多学者从符号共享方法、应用环境等不同角度进行了探讨,从研究符号规范实现地图符号互操作(Liu et al,2016;刘青峰,2018),到研究不同平台之间(薛章斌,2014)、不同符号格式之间的数据转换(吴自银,2000;陈泰生等,2011;陈金龙等,2015),更有学者研究了网络环境下的符号共享(吴明光等,2011;Robinson et al,2013;周海霞等,2019)。相比较而言,对于开源GIS方面的符号共享研究,尤其是SVG(Scalable Vector Graphics)符号共享研究相对缺乏。
QGIS(Quantum GIS)作为一种开源软件,具有要素加载更快速、颜色渲染更美观等优势,其具有自身的符号体系,能够满足基础的地图渲染工作,SVG标记是该软件的一种符号制作方式,常用SVG图片展示复杂符号。在以往研究中,陈梦琳等(2015)实现了将SVG地图符号共享至ArcGIS平台。本文重点研究TTF(TrueType Font)字体符号向SVG符号的反向转换,实现ArcGIS符号库向QGIS软件的迁移,确保基础地理数据在QGIS中能够得到符号化展示,加强地图渲染效果。鉴于点符号为线和面符号制作的基础,本文以ArcGIS点符号库为基础,探讨点符号从ArcGIS向QGIS平台迁移的方法,为点、线、面符号的整体迁移做准备。
1 ArcGIS与QGIS点状地图符号对比在符号库格式方面,2种GIS系统默认的符号库通常是通用符号库,难以满足各行业个性化的表达需要,其中ArcGIS常用*.style符号库存储用户自定义的符号,QGIS则通过可扩展标记语言(Extensible Markup Language,XML)来存储符号。在style文件中,符号由相应的字体库描述,即利用TrueType字体构建符号,其特点是对符号轮廓进行描绘,通过描边将轮廓线转换为曲线,再对符号内部进行填充,实现丰富符号颜色和增添符号效果的目的(吴新强,2014)。而在QGIS中,用户自定义的复杂符号采用从外部引入矢量图片进行SVG标记,再将多种标记叠加组合而成。在点状符号中,SVG为图形对象,通过图形、路径等参数定义符号的几何结构,并利用轮廓和填充描述符号的样式(陈梦琳,2015)。
在符号构建上,GIS系统点状符号的构建方法主要有几何图元组合、TrueType字体、图片图标与程序法等(Wu et al,2017)。其中,ArcGIS利用矢量几何图形和系统字体库中的字符来构建点符号,通过多重字符和图形的叠加,组合成复杂点状符号;而QGIS既符合图形系统特点,将地图符号作为图形对象,对图形边界和内部进行轮廓修改和填充,又与其他GIS平台(如ArcGIS)相同,能够用图元组合的方式绘制地图符号。
此外,对比ArcGIS与QGIS系统,二者均采用符号分层方式管理地图符号库,但在数据结构方面具有一些差别,ArcGIS主要采用字符构图,QGIS则注重几何图形构图。在符号的组织方式上,QGIS比ArcGIS增加了多层符号组别的设置,使各类符号的管理更加便利。对比2个GIS系统的地图符号特点,如表 1所示。
针对QGIS平台自定义地图符号的迫切需求,目前亟需设计一种简洁、快速的方式将2种格式的点符号库进行转换。通过了解和掌握源格式与目标格式的数据结构、绘制方法等详细信息,发现2种格式在符号结构、数据关联模式、渲染方式和技术实现等方面难以进行符号内部的直接转换,并且在转换过程中容易出现数据损失,故需要一个公开格式作为间接转换的桥梁(黄瑞阳,2013)。经过分析,本文采用Python实现点符号格式转换,采用便携式网络图形(Portable Network Graphics,PNG)格式作为公开格式,根据每种格式的特点编写具有针对性的转换程序,实现ArcGIS点符号库向QGIS平台迁移。
2.1 TTF向PNG转换TTF向PNG转换主要基于Python中的ReportLab库和fontTools库。其中,ReportLab库用于创建自定义PDF文档,输出高质量图形,其主要功能包括绘制自定义图形、图表、文字、编码,输出PDF页面和段落布局等(梁晶等,2019)。本文采用该代码库子包“ReportLab Graphics”中的Drawing方法和Group方法来绘制基础形状和特殊形状,所有待转换的TTF字体均可通过ReportLab Graphics获取符号轮廓路径的方式来绘制PNG图片。另外,fontTools是一个使用Python编写、用于处理字体的库,它可以将TrueType和OpenType字体格式转换为XML格式。本文先依次读取全部TrueType字体,再将所有字体转换为Python对象。
具体的设计思路为: 采用ReportLab库创建一个具有画笔功能的类,描述字体轮廓直线、曲线、移动等方法;然后采用fontTools库创建字体转换函数读取字体库,获取字型名称列表,按字母进行排序,依次循环,调用创建类的绘画方法绘制PNG图像;通过设置填充颜色、轮廓宽度、图像宽度和坐标起点(x,y)描述PNG图像细节(图 1)。
PNG向SVG转换本质上是将位图转换为矢量图,通过XML代码描绘图像,使图像具有交互功能。SVG代码由开启标签< svg>和关闭标签</svg>2个根元素组成,开启标签定义了XML头文件属性,包括XML的版本、字符编码方式,确定选择正确的外部DTD文件。本文选择W3C发布的svg11.dtd规范来解释相关程序定义。SVG代码的编辑包括SVG版本、命名空间、SVG图像的宽度、高度和画布区域等。描述图像时直接嵌入基于Base64编码的像素值,使转换的图像仍是位图结构(袁家政等,2008)。采用base64.b64 encode方式将图片转为base64编码,定义宽、高、起点、填充方式,对之前由TTF转出的PNG图片进行循环遍历,生成多个SVG图像,部分实现代码如图 2所示。
在ArcGIS中点符号为矢量数据,能够参照地图比例尺和制图幅面修改符号大小,且能够更改符号颜色,防止与底图颜色冲突。点符号经过符号转换后生成的SVG图片同样为矢量格式。由于在上述编码过程中考虑了符号背景透明,以及填充(fill)和轮廓(stroke)参数规定,因此在QGIS使用SVG标记方法导入转换结果后,也能够实现ArcGIS中的相同功能,即更改轮廓颜色和填充颜色、改变符号大小、符号质量不变等。图 3展示的符号分别由ArcGIS和QGIS制作,二者从符号颜色、大小、外观,到符号的整体可视化表达几乎无差别,这也证实了本文描述的点符号转换方法是可行的,转换后的点状符号能够满足QGIS制图要求。
为进一步验证方法的可行性,本文以ArcGIS地震灾情符号库为例,将其中的点状符号迁移至QGIS中。地震灾情符号库是国家科技支撑计划项目“地震灾情服务及应急决策支撑平台研究”的成果之一,目前已在地震系统的应急专题制图中得到广泛应用。该符号库包括点、线、面三类符号,其中包含点状符号140余个,大致涉及基础地理信息、地震、地震次生灾害、重点目标、交通等11类。
通过分析,可将140个点状符号分为两类,一类符号能够用QGIS本身的点符号标记方法实现,属于简单符号,包括历史地震、各级政府驻地这类的圆形符号,震中位置、地质调查点等五角星、三角形符号,以及化工厂、学校这类文字符号。这种简单符号通过QGIS符号系统中的椭圆标记、实心标记、文字符号标记、简单标记、SVG标记、矢量字段标记等便可快速制作。另一种符号属于复杂符号,这类符号的特点是QGIS符号系统没有且无法绘制,或是绘制时间较长,至少需要叠加一个SVG图片实现符号制作,因此必须通过SVG转换方式实现,此类点符号的数量占符号总量的三分之二。以3个复杂符号为例,通过多层标记叠加组合实现符号制作,如图 4所示。
对于复杂符号,基于上述点符号转换方法,将“地震灾情符号库.ttf”进行一系列转换,筛选出复杂符号所需的SVG图片,使QGIS平台能够以SVG标记的方式载入图片库。随后,对两类符号统一制作,简单符号以圆形、正方形、三角形、星形等简单形状为基础图形,采用QGIS自带的符号标记方式将多项标记进行组合;复杂符号通过载入SVG图片库,加以颜色设计、轮廓填充、大小设置、角度偏转、坐标偏移等操作进行符号制作。制作完成的140个点符号通过QGIS符号样式管理器统一导出,生成XML文件,如图 5所示。至此,ArcGIS点符号库向QGIS平台迁移工作完成,任意版本QGIS软件可以通过导入“地震灾情符号库.xml”文件来加载全部点符号,符号库满足了地震行业专业技术人员对QGIS平台的制图需求。
将QGIS地震灾情符号库应用于地震应急快速出图,实现了不同幅面大小的专题图的产出,实际应用效果如图 6所示。其中,台站符号按数据属性分类,符号色彩饱满,可以看出无论是从符号颜色、样式,还是从符号大小和分辨率上,转换后的地图符号能够清晰地表达地图主题,实现与ArcGIS制图相同的呈现效果。
(a)ArcGIS制作;(b)QGIS制作 |
通过对ArcGIS地震灾情符号库中点状地图符号的迁移,证实了本文提出的运用Python编程实现TTF向SVG符号格式转换方法是可行的,实现了ArcGIS与QGIS之间跨平台符号转换。在研究过程中,还发现了有待进一步改进的问题,例如,fontTools库能够处理TrueType字体转换为XML格式,QGIS符号库可以识别XML格式,如果能够在程序上实现TTF转换为XML,将避免QGIS从SVG图片获取点状地图符号,从而使符号共享更简便、更快捷。
在实际应用中,基于QGIS的点状地图符号库能够满足制图要求和地震行业需求,达到了本文设计符号转换的目的,同时,转换后的符号实现了与ArcGIS相同的符号使用和编辑自由等功能。ArcGIS点符号库向QGIS平台迁移的方法在其他行业和GIS领域也有良好的发展前景。
陈金龙、吴新强、秦兴国等, 2015, MapGIS地学符号库向ArcGIS转换研究, 广西民族大学学报(自然科学版), 21(3): 70-74. DOI:10.3969/j.issn.1673-8462.2015.03.014 |
陈梦琳, 2015. GIS与图形系统地图符号共享的数据模型与方法研究. 硕士学位论文. 南京: 南京师范大学.
|
陈梦琳、陈泰生、吴明光等, 2015, GIS平台点状地图符号共享方法探讨, 测绘科学, 40(11): 159-163. |
陈泰生、闾国年、吴明光, 2011, GIS点状符号共享研究, 武汉大学学报· 信息科学版, 36(10): 1144-1148. |
黄瑞阳, 2013. 地图符号共享关键技术研究. 博士学位论文. 郑州: 中国人民解放军信息工程大学.
|
梁晶、杨旭东, 2019, 基于Python语言的条形码生成方法研究, 电脑编程技巧与维护, (5): 42-44. DOI:10.3969/j.issn.1006-4052.2019.05.017 |
刘青峰, 2018. 可用性引导的地图符号共享方法研究——以ArcGIS和CorelDRAW为例. 硕士学位论文. 南京: 南京师范大学.
|
吴明光、闾国年、陈泰生, 2011, 点状地图符号数据结构同化研究, 武汉大学学报· 信息科学版, 36(2): 239-243. |
吴新强, 2014. 跨GIS平台符号库建设及其数据格式转换研究. 硕士学位论文. 桂林: 桂林电子科技大学.
|
吴自银, 2000, 基于共享的TrueType点符号的设计, 测绘信息与工程, (2): 21-23. |
薛章斌, 2014. 顾及图元与实体关系的GIS与CAD数据双向转换方法研究. 硕士学位论文. 南京: 南京师范大学.
|
袁家政、须德、王育坚等, 2008, 一种基于网络矢量图形SVG仿真展示光栅图像的有效方法, 电子学报, 36(1): 188-193. |
周海霞、霍亮、朱杰等, 2019, 本体驱动下的地图符号共享方法研究, 测绘通报, (3): 81-85. |
Chen T S, Chen M L, Tan S S, et al, 2011. Study on analysis and sharing of ArcGIS symbol and SLD symbol. In: International Conference on Applied Informatics and Communication. Xi′an, China: Springer, 54~61.
|
Liu D L, Zhou Z Y, Wu Q, et al, 2016, Symbol recognition and automatic conversion in GIS vector maps, Petrol Sci, 13: 173-181. DOI:10.1007/s12182-015-0068-z |
Robinson A C, Pezanowski S, Troedson S, et al, 2013, Symbol store: sharing map symbols for emergency management, Cartogr Geogr Inf Sci, 40(5): 415-426. DOI:10.1080/15230406.2013.803833 |
Wu M G, Zhu A X, Zheng P B, et al, 2017, An improved map-symbol model to facilitate sharing of heterogeneous qualitative map symbols, Cartogr Geogr Inf Sci, 44(1): 62-75. DOI:10.1080/15230406.2015.1102083 |