文章快速检索    
  地震地磁观测与研究  2023, Vol. 44 Issue (3): 192-198  DOI: 10.3969/j.issn.1003-3246.2023.03.027
0

引用本文  

陈雅慧. QGIS插件技术在点状地图符号转换中的应用[J]. 地震地磁观测与研究, 2023, 44(3): 192-198. DOI: 10.3969/j.issn.1003-3246.2023.03.027.
CHEN Yahui. Application of QGIS plugin technology in conversion of point symbols[J]. Seismological and Geomagnetic Observation and Research, 2023, 44(3): 192-198. DOI: 10.3969/j.issn.1003-3246.2023.03.027.

基金项目

地震应急青年重点任务:开源GIS地图符号转换插件研发(项目编号:CEAEDEM022)

作者简介

陈雅慧(1990—), 女, 硕士, 工程师, 主要从事地震应急制图和数据分析工作。E-mail: chenyahui@seis.ac.cn

文章历史

本文收到日期:2022-11-21
QGIS插件技术在点状地图符号转换中的应用
陈雅慧     
中国北京 100045 中国地震台网中心
摘要:地震系统的核心技术及软硬件设备需提升安全防护能力,实现“自主可控”,在应用开源地理信息系统软件QGIS进行地震应急制图时,要解决地震数据符号库由ArcGIS平台向QGIS平台转换的问题。运用QGIS插件技术创建点符号转换插件,通过符号库输入、符号读取、符号属性转换、QGIS符号创建、符号库输出等步骤,实现点符号的转换。结果表明,QGIS插件技术能够实现跨平台的点符号转换,并且表现出转换效率和成功率高、制图效果强的特点。本次QGIS插件技术在点符号转换方面的应用也为线符号、面符号转换提供了参考。
关键词QGIS插件    符号转换    ArcGIS    地震应急    
Application of QGIS plugin technology in conversion of point symbols
CHEN Yahui     
China Earthquake Networks Center, Beijing 100045, China
Abstract: Due to the need to improve the security and protection capabilities of the seismic system' score technology, hardware and software equipment, and achieve "independence and controllability", it is necessary to apply the open-source GIS software QGIS for earthquake emergency mapping, and there is a need to solve the problem of converting the symbol library of seismic data from ArcGIS to QGIS. This paper uses QGIS plugin technology to create a point symbol conversion plugin, achieving point symbol conversion through steps such as symbol library input, symbol reading, symbol attribute conversion, QGIS symbolcreation, and symbol library output. The results show that QGIS plug-in technology can realize cross-platform point symbol conversion with high conversion efficiency and success rate, and strong mapping effects. The application of QGIS plugin technology in point symbol conversion also provides a reference for line symbol and surface symbol conversion.
Key words: QGIS plugin    symbol conversion    ArcGIS    earthquake emergency    
0 引言

地震系统的核心技术以及软硬件设备要确保可靠、可信、可控。因此,地震应急业务系统有从商业软件向开源软件转换的迫切需求,制作各类专题地图是转换的直接体现。

在地震系统日常业务中,专题图多采用美国ESRI公司旗下的ArcGIS软件进行制作,并积累了一套地震数据特有符号库,该符号库能够增强地图可读性,丰富地图的可视化表达,进而传递出灾区基本情况和灾情信息,在地震灾害应急指挥及救援管理中发挥着重要作用。但商业软件昂贵,且难以获得开发版权,制图软件开源化发展成为必然。

地图符号库转换成为跨平台应用的关键问题。为了符合地图制图规范,减少符号重复设计等工作,跨平台的地图符号共享成为研究热点(陶陶等,2007)。目前,地图符号共享的研究主要分为2类,一类是研究不同数据格式之间的符号共享(陈梦琳等,2015王志强等,2020),另一类是研究统一标准的符号共享,包括通用图形标准(吴明光等,2011陈长林,2018)、通用地图符号(王本林等,2018)、统一行业标准(Liu et al,2016)等,还有对符号共享的可用性评价(廖嫣然等,2022)。

QGIS是基于Python和C++语言研发的开源制图软件。其用户界面友好,支持多类型数据加载,符号编辑功能丰富,在制图方面更具优势。而且,QGIS支持插件,可以通过编译插件扩展软件的制图功能。本文将符号读取、属性转换、符号输出功能集成在QGIS插件内,成功实现ArcGIS符号库点符号向QGIS的迁移,且迁移前后点符号的制图功能和效果完全相同。

1 插件构建方法

运用QGIS技术创建的点符号转换插件主要用于数据处理和分析,且用户界面只需要文件输入和输出部件。

QGIS插件开发主要有2种方式,一种是手动创建,另一种是自动创建。自动创建是利用Plugin Builder生成固定的插件模板,通过对模板文件的编译实现相应功能,比手动创建简便。此外,自动创建的插件模板有3个,分别为Tool button with dialog(带有对话框的工具按钮)、Tool button with dock widget(带部件的工具按钮),以及Processing Provider(处理框架)。与前2个模板相比,Processing Provider模板能够生成固定插件界面,简化设计界面流程。对比发现,使用Processing Provider自动创建方法能够更简单快速地构建插件,且插件既能够用于数据批处理,也能够被Python控制台调用。

2 点符号转换功能设计

同一类型的符号在ArcGIS和QGIS平台中使用的函数库不同,基于QGIS技术设计的点符号转换插件可以使两平台同类型符号匹配。本插件在QGIS平台生成的新符号与ArcGIS中的同类型符号具有相同的功能、属性和展示效果。

程序总体流程(图 1)为:①输入ArcGIS“.style”符号库文件,对文件中的全部符号进行遍历循环,提取各类数据;②对数据进行解码,获得符号对象的多种属性信息和guid值(全局唯一标识符,用于识别每个符号的类型,在QGIS创建符号时能够通过判断符号类型添加对应的符号属性);③将解码得到的各种属性与QGIS中的相同属性建立一一对应关系,实现两平台符号属性的转换;④对多层符号进行符号层叠加,并将全部符号统一输出为XML文件。根据实际需求,本次只完成点符号中的简单标记符号和字符标记符号2类符号的转换。

图 1 QGIS点符号转换程序流程 Fig.1 Flowchart of QGIS point symbol conversion program
2.1 符号读取

调用Access数据库软件打开“.style”符号库文件,查看每个符号属性表,其中包括ID、Name、Category、Tags和Object,Tags中记录了符号层数(多图层)、色彩模式(rgb、hsv等)、颜色值(蓝色、白色、绿色等)、符号类别(字符、简单)和字体(ESRI Default Marker等)等属性。参考这些标签,在符号属性转换模块中定义相应的转换函数。

通过对Object进行后台解码,获取每个符号的二进制数据(BLOB),这些数据包含了Tags中涉及的全部符号属性信息,这些不同类型的属性信息(int、string、double、uchar等类型)需要通过创建对应的读取方法获得其属性值。调用这些方法可以得到简单标记符号(Simple Marker Symbol)的符号层数、点类型Style、符号大小Size、X和Y的偏移量Offset和轮廓线Outline等属性;得到字符标记符号(Character Marker Symbol)的符号层数、Unicode值、旋转角度Angle等属性。

在符号的二进制数据中还能够提取guid值。在ArcGIS中每类符号具有唯一guid值,如简单标记符号为“7914e5fe-c892-11d0-8bb6-080009ee4e41”,若待转换符号的guid值与之相匹配,则判断该符号为简单标记符号,进而按简单标记符号的创建方法添加符号属性。这种方法能够确保符号类型的唯一性,便于快速识别并创建符号。

2.2 符号属性转换

在符号属性转换模块中,本插件定义了多种转换函数,这些函数通过调用QGIS提供的各种类库和函数接口,将ArcGIS符号属性转换为QGIS中相同的符号属性,实现两软件平台符号属性的统一。

2.2.1 简单标记符号

ArcGIS中的Simple Marker Symbol简单标记符号类型对应QGIS中的Simple Marker类型。简单标记符号的属性参数有Color、Style、Size、X Offset、Y Offset、Outline Color和Outline Size。在两平台中,有些属性参数能够直接进行关联,关联方法是,导入QGIS中的core、gui等核心包和模块,调用相应方法给参数赋值。如:代码(a)为创建参数点类型(Style)转换方法,其中ArcGIS中的“X”形状对应QGIS中的“Cross2”形状。有些属性参数转换需要通过数学运算来实现,如:代码(b)为颜色转换,QGIS软件中只有HSV和RGB2种色彩模式,因此对ArcGIS中的部分以CMYK显示颜色的点符号来说,需要考虑不同色彩模式的成色原理,实现参数Color的转换。

代码(a):

defconvert_marker_type(marker_style):

   # 转换点类型

ifmarker_style == ‘circle’:

returnQgsSimpleMarkerSymbolLayerBase.Circle

elifmarker_style == ‘square’:

returnQgsSimpleMarkerSymbolLayerBase.Square

elifmarker_style == ‘cross’:

returnQgsSimpleMarkerSymbolLayerBase.Cross

elifmarker_style == ‘x’:

return QgsSimpleMarkerSymbolLayerBase.Cross2

elifmarker_style == ‘diamond’:

returnQgsSimpleMarkerSymbolLayerBase.Diamond

else:

raise Exception

代码(b):

defconvert_color(color):

   # 颜色转换函数

ifisinstance(color, CMYKColor):

returnQColor.fromCmykF(color.cyan / 100,

color.magenta / 100,

color.yellow / 100,

color.black / 100)

returnQColor(color.red, color.green, color.blue, 0 if color.is_null else 255)

2.2.2 字符标记符号

ArcGIS中的Character Marker Symbol字符标记符号类型对应QGIS中的Font Marker类型。字符标记符号的属性参数有Font、Unicode、Size、Angle、Color和Offset。与简单标记符号的转换类似,除了要转换能够直接关联的属性参数外,还需要运用数学运算完成符号角度参数的转换。在ArcGIS中,随着角度数值的增大,符号呈逆时针转动,而在QGIS中则相反,角度数值增加,符号顺时针转动。由此通过数学运算中的角度换算,定义了角度转换函数,用360°减去ArcGIS中的符号角度值则为QGIS中的符号角度值。这些数学运算实现了两平台符号角度的一致性。

2.3 符号创建及输出

符号创建包括单层符号和多层符号,本插件定义了符号(层)创建函数,通过调用符号属性转换模块中的属性转换方法,为符号的每一层添加转换后的属性参数,调用qgis.core核心包中的QgsSimpleMarkerSymbolLayer和QgsFontMarkerSymbolLayer方法创建对应的2类点符号(层)。

此外,定义符号创建函数对符号的层数进行判断,单层符号直接创建,多层符号叠加后创建。点符号转换插件的输出结果为“.xml”格式文件,通过调用QgsStyle.exportXml方法将新创建的全部点符号打包输出为XML格式符号库。转换后的符号库能够在QGIS软件的样式管理器中直接导入使用。

2.4 运行调试 2.4.1 插件激活

在QGIS的插件管理器中识别并启用已经编译的点符号转换插件“Marker Symbol”。插件置于Processing ToolBox菜单栏,激活后双击运行。

2.4.2 插件调试

插件初次运行程序经常报错,需不断调试并反复修改。使用插件重载器插件(Plugin Reloader),可对自定义插件执行重载、加载和卸载的指令,无需重启QGIS软件即可实现自定义插件的修改和测试。

3 符号转换结果对比

以目前地震应急专题图系统在用的“ArcGIS灾情信息标绘符号库”为例,运行点符号转换插件进行符号转换。共读取符号192个,其中点符号141个,由插件运行日志中记录的符号转换进度,141个点符号按符号ID顺序依次读取、转换、输出,用时小于3 s。与人工制作符号相对比,运用QGIS插件技术缩短了符号转换时间,实现了地图符号从ArcGIS向QGIS的快速批量迁移。将插件运行后生成的.xml文件导入QGIS插件管理器,导入结果见图 2

图 2 点符号转换结果 Fig.2 Result of point symbol conversion

在符号外观方面,与原ArcGIS符号库(图 3)相比,127个点符号完全转换成功,14个符号在颜色、形状和大小上也完成转换,但仍有少量符号层偏移现象,如“中型水库”符号,需人工调整。存在符号层偏移的原因可能有:①ArcGIS与QGIS软件的符号单位不一致,如QGIS支持用像素为单位设置符号尺寸,而ArcGIS用点,二者之间的转换关系需进一步研究;②在编写符号转换插件过程中,算法参数不适用,需根据实际情况调整。整体来说,本次符号外观转换成功率大于90%。此外,QGIS符号的颜色渲染和美观度优于ArcGIS,符号整体效果更简洁清晰。

图 3 原ArcGIS符号库 Fig.3 Original ArcGIS symbol library

在符号功能方面,ArcGIS中的符号为矢量格式,能够根据图幅比例调整符号大小,并且能够更改符号颜色。经插件转换后的QGIS点符号同样支持基础的属性修改功能,包括颜色、透明度、大小、偏移量、旋转角度等参数设置,证实了用QGIS插件技术完成点符号转换能够达到平台间符号共享的目的。

4 成果应用

“灾情信息标绘符号库”QGIS转换版已在地震应急日常业务工作中得到应用,如震前准备图件制作、专题图模板的快速产出制作等。最新部署的地震应急快速评估与协同系统配置了QGIS版本的多个专题图模板,其使用的点状地图符号均由本点符号转换插件“Marker Symbol”生成。以2022年9月5日四川泸定MS 6.8地震为例,系统自动产出A3、A4幅面震后第一时段专题图共14张,文中绘出地震快速评估影响范围图,见图 4中右侧图件,左图为ArcGIS产出图件,对比可见,QGIS产出图件符号颜色显示更均匀,对比度柔和,各要素间无遮盖,整体成图效果简洁、清晰。

图 4 评估系统产出的四川泸定MS 6.8地震影响范围专题图 Fig.4 Thematic maps of the influence area of the Luding MS 6.8 earthquake in Sichuan from assessment system
5 结束语

QGIS插件技术在点状地图符号转换中的应用,证明基于QGIS插件技术能够提高符号转换效率,减少重复工作,实现快速批量转换,且符号转换成功率较高。经插件转换后的点状地图符号具有以下优势:①符号分辨率高、图案清晰;②符号形状标准、大小可调;③符号颜色鲜明、色彩可换;④符号信息齐全、属性可更改;⑤符号功能完备,专题图件要素完整、表达精确;⑥符号适用于不同比例尺、不同地图幅面的专题图制作;⑦符号制图效果与在ArcGIS软件中相同,甚至优于ArcGIS,达到直接应用的标准。由此可见,QGIS插件技术具有较强的可操作性,是ArcGIS平台向QGIS平台转换的重要工具,不但可以实现不同平台间的符号共享,还可在其他行业和领域中实现更广泛的应用。

然而,采用QGIS插件技术转换后的部分符号会出现符号层偏移现象,可能与两平台符号单位不同有关。此外,特殊字体转换差异可能导致符号转换错误。以上问题仍需进一步研究。

参考文献
陈长林. 开放式地图符号成像模型比较分析[J]. 海洋测绘, 2018, 38(4): 71-74.
陈梦琳, 陈泰生, 吴明光, 等. GIS平台点状地图符号共享方法探讨[J]. 测绘科学, 2015, 40(11): 159-163.
廖嫣然, 刘青峰. 面向共享的地图符号可用性指标构建研究[J]. 现代信息科技, 2022, 6(1): 124-126.
陶陶, 闾国年, 张书亮, 等. GIS地图符号共享研究进展与展望[J]. 中国图象图形学报, 2007, 12(8): 1 326-1 332.
王本林, 陈泰生, 陈梦琳. MapGIS点状符号共享方法研究[J]. 滁州学院学报, 2018, 20(2): 73-77.
王志强, 刘伟, 王学, 等. 跨GIS平台空间数据符号化及快速制图关键技术应用研究[J]. 信息技术与信息化, 2020(12): 35-39.
吴明光, 闾国年, 陈泰生. 点状地图符号数据结构同化研究[J]. 武汉大学学报(信息科学版), 2011, 36(2): 239-243.
Liu D L, Zhou Z Y, Wu Q, et al. Symbol recognition and automatic conversion in GIS vector maps[J]. Petroleum Science, 2016, 13(1): 173-181.