陳雅慧
(中國北京 100045 中國地震臺網中心)
地震系統的核心技術以及軟硬件設備要確保可靠、可信、可控。因此,地震應急業務系統有從商業軟件向開源軟件轉換的迫切需求,制作各類專題地圖是轉換的直接體現。
在地震系統日常業務中,專題圖多采用美國ESRI公司旗下的ArcGIS軟件進行制作,并積累了一套地震數據特有符號庫,該符號庫能夠增強地圖可讀性,豐富地圖的可視化表達,進而傳遞出災區基本情況和災情信息,在地震災害應急指揮及救援管理中發揮著重要作用。但商業軟件昂貴,且難以獲得開發版權,制圖軟件開源化發展成為必然。
地圖符號庫轉換成為跨平臺應用的關鍵問題。為了符合地圖制圖規范,減少符號重復設計等工作,跨平臺的地圖符號共享成為研究熱點(陶陶等,2007)。目前,地圖符號共享的研究主要分為2類,一類是研究不同數據格式之間的符號共享(陳夢琳等,2015;王志強等,2020),另一類是研究統一標準的符號共享,包括通用圖形標準(吳明光等,2011;陳長林,2018)、通用地圖符號(王本林等,2018)、統一行業標準(Liu et al,2016)等,還有對符號共享的可用性評價(廖嫣然等,2022)。
QGIS是基于Python和C++語言研發的開源制圖軟件。其用戶界面友好,支持多類型數據加載,符號編輯功能豐富,在制圖方面更具優勢。而且,QGIS支持插件,可以通過編譯插件擴展軟件的制圖功能。本文將符號讀取、屬性轉換、符號輸出功能集成在QGIS插件內,成功實現ArcGIS符號庫點符號向QGIS的遷移,且遷移前后點符號的制圖功能和效果完全相同。
運用QGIS技術創建的點符號轉換插件主要用于數據處理和分析,且用戶界面只需要文件輸入和輸出部件。
QGIS插件開發主要有2種方式,一種是手動創建,另一種是自動創建。自動創建是利用Plugin Builder生成固定的插件模板,通過對模板文件的編譯實現相應功能,比手動創建簡便。此外,自動創建的插件模板有3個,分別為Tool button with dialog(帶有對話框的工具按鈕)、Tool button with dock widge(t帶部件的工具按鈕),以及Processing Provide(r處理框架)。與前2個模板相比,Processing Provider模板能夠生成固定插件界面,簡化設計界面流程。對比發現,使用Processing Provider自動創建方法能夠更簡單快速地構建插件,且插件既能夠用于數據批處理,也能夠被Python控制臺調用。
同一類型的符號在ArcGIS和QGIS平臺中使用的函數庫不同,基于QGIS技術設計的點符號轉換插件可以使兩平臺同類型符號匹配。本插件在QGIS平臺生成的新符號與ArcGIS中的同類型符號具有相同的功能、屬性和展示效果。
程序總體流程(圖1)為:①輸入ArcGIS“.style”符號庫文件,對文件中的全部符號進行遍歷循環,提取各類數據;②對數據進行解碼,獲得符號對象的多種屬性信息和guid值(全局唯一標識符,用于識別每個符號的類型,在QGIS創建符號時能夠通過判斷符號類型添加對應的符號屬性);③將解碼得到的各種屬性與QGIS中的相同屬性建立一一對應關系,實現兩平臺符號屬性的轉換;④對多層符號進行符號層疊加,并將全部符號統一輸出為XML文件。根據實際需求,本次只完成點符號中的簡單標記符號和字符標記符號2類符號的轉換。

圖1 QGIS點符號轉換程序流程Fig.1 Flowchart of QGIS point symbol conversion program
調用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值與之相匹配,則判斷該符號為簡單標記符號,進而按簡單標記符號的創建方法添加符號屬性。這種方法能夠確保符號類型的唯一性,便于快速識別并創建符號。
在符號屬性轉換模塊中,本插件定義了多種轉換函數,這些函數通過調用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):
2.2.2 字符標記符號。ArcGIS中的Character Marker Symbol字符標記符號類型對應QGIS中的Font Marker類型。字符標記符號的屬性參數有Font、Unicode、Size、Angle、Color和Offset。與簡單標記符號的轉換類似,除了要轉換能夠直接關聯的屬性參數外,還需要運用數學運算完成符號角度參數的轉換。在ArcGIS中,隨著角度數值的增大,符號呈逆時針轉動,而在QGIS中則相反,角度數值增加,符號順時針轉動。由此通過數學運算中的角度換算,定義了角度轉換函數,用360°減去ArcGIS中的符號角度值則為QGIS中的符號角度值。這些數學運算實現了兩平臺符號角度的一致性。
符號創建包括單層符號和多層符號,本插件定義了符號(層)創建函數,通過調用符號屬性轉換模塊中的屬性轉換方法,為符號的每一層添加轉換后的屬性參數,調用qgis.core核心包中的QgsSimpleMarkerSymbolLayer和QgsFontMarkerSymbolLayer方法創建對應的2類點符號(層)。
此外,定義符號創建函數對符號的層數進行判斷,單層符號直接創建,多層符號疊加后創建。點符號轉換插件的輸出結果為“.xml”格式文件,通過調用QgsStyle.exportXml方法將新創建的全部點符號打包輸出為XML格式符號庫。轉換后的符號庫能夠在QGIS軟件的樣式管理器中直接導入使用。
2.4.1 插件激活。在QGIS的插件管理器中識別并啟用已經編譯的點符號轉換插件“Marker Symbol”。插件置于Processing ToolBox菜單欄,激活后雙擊運行。
2.4.2 插件調試。插件初次運行程序經常報錯,需不斷調試并反復修改。使用插件重載器插件(Plugin Reloader),可對自定義插件執行重載、加載和卸載的指令,無需重啟QGIS軟件即可實現自定義插件的修改和測試。
以目前地震應急專題圖系統在用的“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插件技術完成點符號轉換能夠達到平臺間符號共享的目的。
“災情信息標繪符號庫”QGIS轉換版已在地震應急日常業務工作中得到應用,如震前準備圖件制作、專題圖模板的快速產出制作等。最新部署的地震應急快速評估與協同系統配置了QGIS版本的多個專題圖模板,其使用的點狀地圖符號均由本點符號轉換插件“Marker Symbol”生成。以2022年9月5日四川瀘定MS6.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
QGIS插件技術在點狀地圖符號轉換中的應用,證明基于QGIS插件技術能夠提高符號轉換效率,減少重復工作,實現快速批量轉換,且符號轉換成功率較高。經插件轉換后的點狀地圖符號具有以下優勢:①符號分辨率高、圖案清晰;②符號形狀標準、大小可調;③符號顏色鮮明、色彩可換;④符號信息齊全、屬性可更改;⑤符號功能完備,專題圖件要素完整、表達精確;⑥符號適用于不同比例尺、不同地圖幅面的專題圖制作;⑦符號制圖效果與在ArcGIS軟件中相同,甚至優于ArcGIS,達到直接應用的標準。由此可見,QGIS插件技術具有較強的可操作性,是ArcGIS平臺向QGIS平臺轉換的重要工具,不但可以實現不同平臺間的符號共享,還可在其他行業和領域中實現更廣泛的應用。
然而,采用QGIS插件技術轉換后的部分符號會出現符號層偏移現象,可能與兩平臺符號單位不同有關。此外,特殊字體轉換差異可能導致符號轉換錯誤。以上問題仍需進一步研究。