中国地震  2021, Vol. 37 Issue (4): 916-923
ArcGIS点符号库向QGIS平台迁移的实现
陈雅慧, 段乙好, 徐志双, 李晓丽     
中国地震台网中心, 北京 100045
摘要:地图符号在各GIS平台之间存在的差异导致符号交换、共享困难, 本文以点状地图符号为基础, 分析了ArcGIS与QGIS平台中常用地图符号的格式结构差异; 通过Python编程设计符号转换方式, 将TTF转换为SVG图片格式, 使用标记组合的方法完成点符号制作。通过该方法转换的QGIS点状地图符号具备与ArcGIS相同的功能, 转换后的符号能够满足QGIS的制图要求, 实现了由ArcGIS到QGIS平台的点符号完整迁移, 节省了人工制作符号所消耗的时间。本文提出的符号转换方法在实际应用中能够满足地震行业相关业务需求, 在其他行业和GIS制图领域也具有良好的发展前景。
关键词符号转换    点符号    Python    开源GIS    
The Transformation of Point Symbols from ArcGIS to QGIS
Chen Yahui, Duan Yihao, Xu Zhishuang, Li Xiaoli     
China Earthquake Networks Center, Beijing 100045, China
Abstract: It is difficult in symbols exchange and share between various GIS platforms because of different symbols in GIS platforms. Based on point symbol library, we conducted the structural analysis in two common map symbols in ArcGIS and QGIS. The TrueType Font is converted into Scalable Vector Graphics(SVG)through Python programming, and the point symbol is made by mark combination. The converted symbols have the same functions as ArcGIS, and thus can meet the mapping requirements of QGIS. The point symbol complete transformation is achieved in the ArcGIS earthquake disaster symbol library, which saves time for artificially symbol making. The technique we proposed in this paper can meet the actual demand of seismic, and has a good development prospect in other industries.
Key words: Symbol conversion     Point symbols     Python     Open source GIS    
0 引言

地图符号是表示地图内容的基本手段,其增强了地图的可读性,是地理信息系统显示和输出的支撑和基础。自“十五”规划以来,地震系统普遍采用ArcGIS软件制图,由此产生了一套基于ArcGIS的地图符号库,并得到较为广泛的应用。然而,随着应急管理部对应急产品的“自主可控”提出更高的要求,开源GIS(Geographic Information System)的应用被逐渐推广,重新制作一套基于开源GIS的地图符号库成为迫切的需求。

地图符号共享一直是地图制图过程中研究的重点和难点,由于不同GIS平台数据结构、存储方法、渲染策略以及商业软件封闭性等原因,导致地图符号难以共享(Chen et al,2011)。为在各GIS平台之间实现符号“一库多用”,国内外众多学者从符号共享方法、应用环境等不同角度进行了探讨,从研究符号规范实现地图符号互操作(Liu et al,2016刘青峰,2018),到研究不同平台之间(薛章斌,2014)、不同符号格式之间的数据转换(吴自银,2000陈泰生等,2011陈金龙等,2015),更有学者研究了网络环境下的符号共享(吴明光等,2011Robinson 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所示。

表 1 ArcGIS与QGIS系统点状符号差异对比
2 点符号转换方法及实现

针对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图像;通过设置填充颜色、轮廓宽度、图像宽度和坐标起点(xy)描述PNG图像细节(图 1)。

图 1 TTF转换生成PNG图片
2.2 PNG向SVG转换

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所示。

图 2 SVG部分代码展示
2.3 转换结果验证

在ArcGIS中点符号为矢量数据,能够参照地图比例尺和制图幅面修改符号大小,且能够更改符号颜色,防止与底图颜色冲突。点符号经过符号转换后生成的SVG图片同样为矢量格式。由于在上述编码过程中考虑了符号背景透明,以及填充(fill)和轮廓(stroke)参数规定,因此在QGIS使用SVG标记方法导入转换结果后,也能够实现ArcGIS中的相同功能,即更改轮廓颜色和填充颜色、改变符号大小、符号质量不变等。图 3展示的符号分别由ArcGIS和QGIS制作,二者从符号颜色、大小、外观,到符号的整体可视化表达几乎无差别,这也证实了本文描述的点符号转换方法是可行的,转换后的点状符号能够满足QGIS制图要求。

图 3 ArcGIS(a)与QGIS(b)符号对比
3 地震灾情符号库迁移

为进一步验证方法的可行性,本文以ArcGIS地震灾情符号库为例,将其中的点状符号迁移至QGIS中。地震灾情符号库是国家科技支撑计划项目“地震灾情服务及应急决策支撑平台研究”的成果之一,目前已在地震系统的应急专题制图中得到广泛应用。该符号库包括点、线、面三类符号,其中包含点状符号140余个,大致涉及基础地理信息、地震、地震次生灾害、重点目标、交通等11类。

通过分析,可将140个点状符号分为两类,一类符号能够用QGIS本身的点符号标记方法实现,属于简单符号,包括历史地震、各级政府驻地这类的圆形符号,震中位置、地质调查点等五角星、三角形符号,以及化工厂、学校这类文字符号。这种简单符号通过QGIS符号系统中的椭圆标记、实心标记、文字符号标记、简单标记、SVG标记、矢量字段标记等便可快速制作。另一种符号属于复杂符号,这类符号的特点是QGIS符号系统没有且无法绘制,或是绘制时间较长,至少需要叠加一个SVG图片实现符号制作,因此必须通过SVG转换方式实现,此类点符号的数量占符号总量的三分之二。以3个复杂符号为例,通过多层标记叠加组合实现符号制作,如图 4所示。

图 4 部分复杂符号举例

对于复杂符号,基于上述点符号转换方法,将“地震灾情符号库.ttf”进行一系列转换,筛选出复杂符号所需的SVG图片,使QGIS平台能够以SVG标记的方式载入图片库。随后,对两类符号统一制作,简单符号以圆形、正方形、三角形、星形等简单形状为基础图形,采用QGIS自带的符号标记方式将多项标记进行组合;复杂符号通过载入SVG图片库,加以颜色设计、轮廓填充、大小设置、角度偏转、坐标偏移等操作进行符号制作。制作完成的140个点符号通过QGIS符号样式管理器统一导出,生成XML文件,如图 5所示。至此,ArcGIS点符号库向QGIS平台迁移工作完成,任意版本QGIS软件可以通过导入“地震灾情符号库.xml”文件来加载全部点符号,符号库满足了地震行业专业技术人员对QGIS平台的制图需求。

图 5 基于QGIS平台的地震灾情符号库

将QGIS地震灾情符号库应用于地震应急快速出图,实现了不同幅面大小的专题图的产出,实际应用效果如图 6所示。其中,台站符号按数据属性分类,符号色彩饱满,可以看出无论是从符号颜色、样式,还是从符号大小和分辨率上,转换后的地图符号能够清晰地表达地图主题,实现与ArcGIS制图相同的呈现效果。

图 6 符号库制图的应用 (a)ArcGIS制作;(b)QGIS制作
4 结论与展望

通过对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