APP下载

ArcGIS点符号库向QGIS平台迁移的实现

2022-01-28陈雅慧段乙好徐志双李晓丽

中国地震 2021年4期
关键词:点状灾情字体

陈雅慧 段乙好 徐志双 李晓丽

中国地震台网中心,北京 100045

0 引言

地图符号是表示地图内容的基本手段,其增强了地图的可读性,是地理信息系统显示和输出的支撑和基础。自“十五”规划以来,地震系统普遍采用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 所示。

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

图1 TTF转换生成PNG图片

2.2 PNG向SVG转换

PNG向SVG转换本质上是将位图转换为矢量图,通过XML代码描绘图像,使图像具有交互功能。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 符号库制图的应用

4 结论与展望

通过对ArcGIS地震灾情符号库中点状地图符号的迁移,证实了本文提出的运用Python编程实现TTF向SVG符号格式转换方法是可行的,实现了ArcGIS与QGIS之间跨平台符号转换。在研究过程中,还发现了有待进一步改进的问题,例如,fontTools库能够处理TrueType字体转换为XML格式,QGIS符号库可以识别XML格式,如果能够在程序上实现TTF转换为XML,将避免QGIS从SVG图片获取点状地图符号,从而使符号共享更简便、更快捷。

在实际应用中,基于QGIS的点状地图符号库能够满足制图要求和地震行业需求,达到了本文设计符号转换的目的,同时,转换后的符号实现了与ArcGIS相同的符号使用和编辑自由等功能。ArcGIS点符号库向QGIS平台迁移的方法在其他行业和GIS领域也有良好的发展前景。

猜你喜欢

点状灾情字体
Ⅰ型肢根型点状软骨发育不良家系的遗传学分析
某住宅楼的混凝土点状爆裂原因分析
2022年6月全球灾情
2021年12月全球灾情
长庆油田:灾情就是命令
字体的产生
锰合金化奥氏体不锈钢的抗点状腐蚀性能
灾情再显城市短板
组合字体
皮损点状切除联合中药熏洗治疗肛门瘙痒症43例