陳雅慧
(中國北京 100045 中國地震臺(tái)網(wǎng)中心)
地震系統(tǒng)的核心技術(shù)以及軟硬件設(shè)備要確保可靠、可信、可控。因此,地震應(yīng)急業(yè)務(wù)系統(tǒng)有從商業(yè)軟件向開源軟件轉(zhuǎn)換的迫切需求,制作各類專題地圖是轉(zhuǎn)換的直接體現(xiàn)。
在地震系統(tǒng)日常業(yè)務(wù)中,專題圖多采用美國ESRI公司旗下的ArcGIS軟件進(jìn)行制作,并積累了一套地震數(shù)據(jù)特有符號(hào)庫,該符號(hào)庫能夠增強(qiáng)地圖可讀性,豐富地圖的可視化表達(dá),進(jìn)而傳遞出災(zāi)區(qū)基本情況和災(zāi)情信息,在地震災(zāi)害應(yīng)急指揮及救援管理中發(fā)揮著重要作用。但商業(yè)軟件昂貴,且難以獲得開發(fā)版權(quán),制圖軟件開源化發(fā)展成為必然。
地圖符號(hào)庫轉(zhuǎn)換成為跨平臺(tái)應(yīng)用的關(guān)鍵問題。為了符合地圖制圖規(guī)范,減少符號(hào)重復(fù)設(shè)計(jì)等工作,跨平臺(tái)的地圖符號(hào)共享成為研究熱點(diǎn)(陶陶等,2007)。目前,地圖符號(hào)共享的研究主要分為2類,一類是研究不同數(shù)據(jù)格式之間的符號(hào)共享(陳夢(mèng)琳等,2015;王志強(qiáng)等,2020),另一類是研究統(tǒng)一標(biāo)準(zhǔn)的符號(hào)共享,包括通用圖形標(biāo)準(zhǔn)(吳明光等,2011;陳長(zhǎng)林,2018)、通用地圖符號(hào)(王本林等,2018)、統(tǒng)一行業(yè)標(biāo)準(zhǔn)(Liu et al,2016)等,還有對(duì)符號(hào)共享的可用性評(píng)價(jià)(廖嫣然等,2022)。
QGIS是基于Python和C++語言研發(fā)的開源制圖軟件。其用戶界面友好,支持多類型數(shù)據(jù)加載,符號(hào)編輯功能豐富,在制圖方面更具優(yōu)勢(shì)。而且,QGIS支持插件,可以通過編譯插件擴(kuò)展軟件的制圖功能。本文將符號(hào)讀取、屬性轉(zhuǎn)換、符號(hào)輸出功能集成在QGIS插件內(nèi),成功實(shí)現(xiàn)ArcGIS符號(hào)庫點(diǎn)符號(hào)向QGIS的遷移,且遷移前后點(diǎn)符號(hào)的制圖功能和效果完全相同。
運(yùn)用QGIS技術(shù)創(chuàng)建的點(diǎn)符號(hào)轉(zhuǎn)換插件主要用于數(shù)據(jù)處理和分析,且用戶界面只需要文件輸入和輸出部件。
QGIS插件開發(fā)主要有2種方式,一種是手動(dòng)創(chuàng)建,另一種是自動(dòng)創(chuàng)建。自動(dòng)創(chuàng)建是利用Plugin Builder生成固定的插件模板,通過對(duì)模板文件的編譯實(shí)現(xiàn)相應(yīng)功能,比手動(dòng)創(chuàng)建簡(jiǎn)便。此外,自動(dòng)創(chuàng)建的插件模板有3個(gè),分別為Tool button with dialog(帶有對(duì)話框的工具按鈕)、Tool button with dock widge(t帶部件的工具按鈕),以及Processing Provide(r處理框架)。與前2個(gè)模板相比,Processing Provider模板能夠生成固定插件界面,簡(jiǎn)化設(shè)計(jì)界面流程。對(duì)比發(fā)現(xiàn),使用Processing Provider自動(dòng)創(chuàng)建方法能夠更簡(jiǎn)單快速地構(gòu)建插件,且插件既能夠用于數(shù)據(jù)批處理,也能夠被Python控制臺(tái)調(diào)用。
同一類型的符號(hào)在ArcGIS和QGIS平臺(tái)中使用的函數(shù)庫不同,基于QGIS技術(shù)設(shè)計(jì)的點(diǎn)符號(hào)轉(zhuǎn)換插件可以使兩平臺(tái)同類型符號(hào)匹配。本插件在QGIS平臺(tái)生成的新符號(hào)與ArcGIS中的同類型符號(hào)具有相同的功能、屬性和展示效果。
程序總體流程(圖1)為:①輸入ArcGIS“.style”符號(hào)庫文件,對(duì)文件中的全部符號(hào)進(jìn)行遍歷循環(huán),提取各類數(shù)據(jù);②對(duì)數(shù)據(jù)進(jìn)行解碼,獲得符號(hào)對(duì)象的多種屬性信息和guid值(全局唯一標(biāo)識(shí)符,用于識(shí)別每個(gè)符號(hào)的類型,在QGIS創(chuàng)建符號(hào)時(shí)能夠通過判斷符號(hào)類型添加對(duì)應(yīng)的符號(hào)屬性);③將解碼得到的各種屬性與QGIS中的相同屬性建立一一對(duì)應(yīng)關(guān)系,實(shí)現(xiàn)兩平臺(tái)符號(hào)屬性的轉(zhuǎn)換;④對(duì)多層符號(hào)進(jìn)行符號(hào)層疊加,并將全部符號(hào)統(tǒng)一輸出為XML文件。根據(jù)實(shí)際需求,本次只完成點(diǎn)符號(hào)中的簡(jiǎn)單標(biāo)記符號(hào)和字符標(biāo)記符號(hào)2類符號(hào)的轉(zhuǎn)換。
圖1 QGIS點(diǎn)符號(hào)轉(zhuǎn)換程序流程Fig.1 Flowchart of QGIS point symbol conversion program
調(diào)用Access數(shù)據(jù)庫軟件打開“.style”符號(hào)庫文件,查看每個(gè)符號(hào)屬性表,其中包括ID、Name、Category、Tags和Object,Tags中記錄了符號(hào)層數(shù)(多圖層)、色彩模式(rgb、hsv等)、顏色值(藍(lán)色、白色、綠色等)、符號(hào)類別(字符、簡(jiǎn)單)和字體(ESRI Default Marker等)等屬性。參考這些標(biāo)簽,在符號(hào)屬性轉(zhuǎn)換模塊中定義相應(yīng)的轉(zhuǎn)換函數(shù)。
通過對(duì)Object進(jìn)行后臺(tái)解碼,獲取每個(gè)符號(hào)的二進(jìn)制數(shù)據(jù)(BLOB),這些數(shù)據(jù)包含了Tags中涉及的全部符號(hào)屬性信息,這些不同類型的屬性信息(int、string、double、uchar等類型)需要通過創(chuàng)建對(duì)應(yīng)的讀取方法獲得其屬性值。調(diào)用這些方法可以得到簡(jiǎn)單標(biāo)記符號(hào)(Simple Marker Symbol)的符號(hào)層數(shù)、點(diǎn)類型Style、符號(hào)大小Size、X和Y的偏移量Offset和輪廓線Outline等屬性;得到字符標(biāo)記符號(hào)(Character Marker Symbol)的符號(hào)層數(shù)、Unicode值、旋轉(zhuǎn)角度Angle等屬性。
在符號(hào)的二進(jìn)制數(shù)據(jù)中還能夠提取guid值。在ArcGIS中每類符號(hào)具有唯一guid值,如簡(jiǎn)單標(biāo)記符號(hào)為“7914e5fe-c892-11d0-8bb6-080009ee4e41”,若待轉(zhuǎn)換符號(hào)的guid值與之相匹配,則判斷該符號(hào)為簡(jiǎn)單標(biāo)記符號(hào),進(jìn)而按簡(jiǎn)單標(biāo)記符號(hào)的創(chuàng)建方法添加符號(hào)屬性。這種方法能夠確保符號(hào)類型的唯一性,便于快速識(shí)別并創(chuàng)建符號(hào)。
在符號(hào)屬性轉(zhuǎn)換模塊中,本插件定義了多種轉(zhuǎn)換函數(shù),這些函數(shù)通過調(diào)用QGIS提供的各種類庫和函數(shù)接口,將ArcGIS符號(hào)屬性轉(zhuǎn)換為QGIS中相同的符號(hào)屬性,實(shí)現(xiàn)兩軟件平臺(tái)符號(hào)屬性的統(tǒng)一。
2.2.1 簡(jiǎn)單標(biāo)記符號(hào)。ArcGIS中的Simple Marker Symbol簡(jiǎn)單標(biāo)記符號(hào)類型對(duì)應(yīng)QGIS中的Simple Marker類型。簡(jiǎn)單標(biāo)記符號(hào)的屬性參數(shù)有Color、Style、Size、X Offset、Y Offset、Outline Color和Outline Size。在兩平臺(tái)中,有些屬性參數(shù)能夠直接進(jìn)行關(guān)聯(lián),關(guān)聯(lián)方法是,導(dǎo)入QGIS中的core、gui等核心包和模塊,調(diào)用相應(yīng)方法給參數(shù)賦值。如:代碼(a)為創(chuàng)建參數(shù)點(diǎn)類型(Style)轉(zhuǎn)換方法,其中ArcGIS中的“X”形狀對(duì)應(yīng)QGIS中的“Cross2”形狀。有些屬性參數(shù)轉(zhuǎn)換需要通過數(shù)學(xué)運(yùn)算來實(shí)現(xiàn),如:代碼(b)為顏色轉(zhuǎn)換,QGIS軟件中只有HSV和RGB2種色彩模式,因此對(duì)ArcGIS中的部分以CMYK顯示顏色的點(diǎn)符號(hào)來說,需要考慮不同色彩模式的成色原理,實(shí)現(xiàn)參數(shù)Color的轉(zhuǎn)換。
代碼(a):
2.2.2 字符標(biāo)記符號(hào)。ArcGIS中的Character Marker Symbol字符標(biāo)記符號(hào)類型對(duì)應(yīng)QGIS中的Font Marker類型。字符標(biāo)記符號(hào)的屬性參數(shù)有Font、Unicode、Size、Angle、Color和Offset。與簡(jiǎn)單標(biāo)記符號(hào)的轉(zhuǎn)換類似,除了要轉(zhuǎn)換能夠直接關(guān)聯(lián)的屬性參數(shù)外,還需要運(yùn)用數(shù)學(xué)運(yùn)算完成符號(hào)角度參數(shù)的轉(zhuǎn)換。在ArcGIS中,隨著角度數(shù)值的增大,符號(hào)呈逆時(shí)針轉(zhuǎn)動(dòng),而在QGIS中則相反,角度數(shù)值增加,符號(hào)順時(shí)針轉(zhuǎn)動(dòng)。由此通過數(shù)學(xué)運(yùn)算中的角度換算,定義了角度轉(zhuǎn)換函數(shù),用360°減去ArcGIS中的符號(hào)角度值則為QGIS中的符號(hào)角度值。這些數(shù)學(xué)運(yùn)算實(shí)現(xiàn)了兩平臺(tái)符號(hào)角度的一致性。
符號(hào)創(chuàng)建包括單層符號(hào)和多層符號(hào),本插件定義了符號(hào)(層)創(chuàng)建函數(shù),通過調(diào)用符號(hào)屬性轉(zhuǎn)換模塊中的屬性轉(zhuǎn)換方法,為符號(hào)的每一層添加轉(zhuǎn)換后的屬性參數(shù),調(diào)用qgis.core核心包中的QgsSimpleMarkerSymbolLayer和QgsFontMarkerSymbolLayer方法創(chuàng)建對(duì)應(yīng)的2類點(diǎn)符號(hào)(層)。
此外,定義符號(hào)創(chuàng)建函數(shù)對(duì)符號(hào)的層數(shù)進(jìn)行判斷,單層符號(hào)直接創(chuàng)建,多層符號(hào)疊加后創(chuàng)建。點(diǎn)符號(hào)轉(zhuǎn)換插件的輸出結(jié)果為“.xml”格式文件,通過調(diào)用QgsStyle.exportXml方法將新創(chuàng)建的全部點(diǎn)符號(hào)打包輸出為XML格式符號(hào)庫。轉(zhuǎn)換后的符號(hào)庫能夠在QGIS軟件的樣式管理器中直接導(dǎo)入使用。
2.4.1 插件激活。在QGIS的插件管理器中識(shí)別并啟用已經(jīng)編譯的點(diǎn)符號(hào)轉(zhuǎn)換插件“Marker Symbol”。插件置于Processing ToolBox菜單欄,激活后雙擊運(yùn)行。
2.4.2 插件調(diào)試。插件初次運(yùn)行程序經(jīng)常報(bào)錯(cuò),需不斷調(diào)試并反復(fù)修改。使用插件重載器插件(Plugin Reloader),可對(duì)自定義插件執(zhí)行重載、加載和卸載的指令,無需重啟QGIS軟件即可實(shí)現(xiàn)自定義插件的修改和測(cè)試。
以目前地震應(yīng)急專題圖系統(tǒng)在用的“ArcGIS災(zāi)情信息標(biāo)繪符號(hào)庫”為例,運(yùn)行點(diǎn)符號(hào)轉(zhuǎn)換插件進(jìn)行符號(hào)轉(zhuǎn)換。共讀取符號(hào)192個(gè),其中點(diǎn)符號(hào)141個(gè),由插件運(yùn)行日志中記錄的符號(hào)轉(zhuǎn)換進(jìn)度,141個(gè)點(diǎn)符號(hào)按符號(hào)ID順序依次讀取、轉(zhuǎn)換、輸出,用時(shí)小于3 s。與人工制作符號(hào)相對(duì)比,運(yùn)用QGIS插件技術(shù)縮短了符號(hào)轉(zhuǎn)換時(shí)間,實(shí)現(xiàn)了地圖符號(hào)從ArcGIS向QGIS的快速批量遷移。將插件運(yùn)行后生成的.xml文件導(dǎo)入QGIS插件管理器,導(dǎo)入結(jié)果見圖2。
圖2 點(diǎn)符號(hào)轉(zhuǎn)換結(jié)果Fig.2 Result of point symbol conversion
在符號(hào)外觀方面,與原ArcGIS符號(hào)庫(圖3)相比,127個(gè)點(diǎn)符號(hào)完全轉(zhuǎn)換成功,14個(gè)符號(hào)在顏色、形狀和大小上也完成轉(zhuǎn)換,但仍有少量符號(hào)層偏移現(xiàn)象,如“中型水庫”符號(hào),需人工調(diào)整。存在符號(hào)層偏移的原因可能有:①ArcGIS與QGIS軟件的符號(hào)單位不一致,如QGIS支持用像素為單位設(shè)置符號(hào)尺寸,而ArcGIS用點(diǎn),二者之間的轉(zhuǎn)換關(guān)系需進(jìn)一步研究;②在編寫符號(hào)轉(zhuǎn)換插件過程中,算法參數(shù)不適用,需根據(jù)實(shí)際情況調(diào)整。整體來說,本次符號(hào)外觀轉(zhuǎn)換成功率大于90%。此外,QGIS符號(hào)的顏色渲染和美觀度優(yōu)于ArcGIS,符號(hào)整體效果更簡(jiǎn)潔清晰。
圖3 原ArcGIS符號(hào)庫Fig.3 Original ArcGIS symbol library
在符號(hào)功能方面,ArcGIS中的符號(hào)為矢量格式,能夠根據(jù)圖幅比例調(diào)整符號(hào)大小,并且能夠更改符號(hào)顏色。經(jīng)插件轉(zhuǎn)換后的QGIS點(diǎn)符號(hào)同樣支持基礎(chǔ)的屬性修改功能,包括顏色、透明度、大小、偏移量、旋轉(zhuǎn)角度等參數(shù)設(shè)置,證實(shí)了用QGIS插件技術(shù)完成點(diǎn)符號(hào)轉(zhuǎn)換能夠達(dá)到平臺(tái)間符號(hào)共享的目的。
“災(zāi)情信息標(biāo)繪符號(hào)庫”QGIS轉(zhuǎn)換版已在地震應(yīng)急日常業(yè)務(wù)工作中得到應(yīng)用,如震前準(zhǔn)備圖件制作、專題圖模板的快速產(chǎn)出制作等。最新部署的地震應(yīng)急快速評(píng)估與協(xié)同系統(tǒng)配置了QGIS版本的多個(gè)專題圖模板,其使用的點(diǎn)狀地圖符號(hào)均由本點(diǎn)符號(hào)轉(zhuǎn)換插件“Marker Symbol”生成。以2022年9月5日四川瀘定MS6.8地震為例,系統(tǒng)自動(dòng)產(chǎn)出A3、A4幅面震后第一時(shí)段專題圖共14張,文中繪出地震快速評(píng)估影響范圍圖,見圖4中右側(cè)圖件,左圖為ArcGIS產(chǎn)出圖件,對(duì)比可見,QGIS產(chǎn)出圖件符號(hào)顏色顯示更均勻,對(duì)比度柔和,各要素間無遮蓋,整體成圖效果簡(jiǎn)潔、清晰。
圖4 評(píng)估系統(tǒng)產(chǎn)出的四川瀘定MS 6.8地震影響范圍專題圖Fig.4 Thematic maps of the influence area of the Luding MS 6.8 earthquake in Sichuan from assessment system
QGIS插件技術(shù)在點(diǎn)狀地圖符號(hào)轉(zhuǎn)換中的應(yīng)用,證明基于QGIS插件技術(shù)能夠提高符號(hào)轉(zhuǎn)換效率,減少重復(fù)工作,實(shí)現(xiàn)快速批量轉(zhuǎn)換,且符號(hào)轉(zhuǎn)換成功率較高。經(jīng)插件轉(zhuǎn)換后的點(diǎn)狀地圖符號(hào)具有以下優(yōu)勢(shì):①符號(hào)分辨率高、圖案清晰;②符號(hào)形狀標(biāo)準(zhǔn)、大小可調(diào);③符號(hào)顏色鮮明、色彩可換;④符號(hào)信息齊全、屬性可更改;⑤符號(hào)功能完備,專題圖件要素完整、表達(dá)精確;⑥符號(hào)適用于不同比例尺、不同地圖幅面的專題圖制作;⑦符號(hào)制圖效果與在ArcGIS軟件中相同,甚至優(yōu)于ArcGIS,達(dá)到直接應(yīng)用的標(biāo)準(zhǔn)。由此可見,QGIS插件技術(shù)具有較強(qiáng)的可操作性,是ArcGIS平臺(tái)向QGIS平臺(tái)轉(zhuǎn)換的重要工具,不但可以實(shí)現(xiàn)不同平臺(tái)間的符號(hào)共享,還可在其他行業(yè)和領(lǐng)域中實(shí)現(xiàn)更廣泛的應(yīng)用。
然而,采用QGIS插件技術(shù)轉(zhuǎn)換后的部分符號(hào)會(huì)出現(xiàn)符號(hào)層偏移現(xiàn)象,可能與兩平臺(tái)符號(hào)單位不同有關(guān)。此外,特殊字體轉(zhuǎn)換差異可能導(dǎo)致符號(hào)轉(zhuǎn)換錯(cuò)誤。以上問題仍需進(jìn)一步研究。