陳雅慧 段乙好 徐志雙 李曉麗
中國地震臺(tái)網(wǎng)中心,北京 100045
地圖符號(hào)是表示地圖內(nèi)容的基本手段,其增強(qiáng)了地圖的可讀性,是地理信息系統(tǒng)顯示和輸出的支撐和基礎(chǔ)。自“十五”規(guī)劃以來,地震系統(tǒng)普遍采用ArcGIS軟件制圖,由此產(chǎn)生了一套基于ArcGIS的地圖符號(hào)庫,并得到較為廣泛的應(yīng)用。然而,隨著應(yīng)急管理部對應(yīng)急產(chǎn)品的“自主可控”提出更高的要求,開源GIS(Geographic Information System)的應(yīng)用被逐漸推廣,重新制作一套基于開源GIS的地圖符號(hào)庫成為迫切的需求。
地圖符號(hào)共享一直是地圖制圖過程中研究的重點(diǎn)和難點(diǎn),由于不同GIS平臺(tái)數(shù)據(jù)結(jié)構(gòu)、存儲(chǔ)方法、渲染策略以及商業(yè)軟件封閉性等原因,導(dǎo)致地圖符號(hào)難以共享(Chen et al,2011)。為在各GIS平臺(tái)之間實(shí)現(xiàn)符號(hào)“一庫多用”,國內(nèi)外眾多學(xué)者從符號(hào)共享方法、應(yīng)用環(huán)境等不同角度進(jìn)行了探討,從研究符號(hào)規(guī)范實(shí)現(xiàn)地圖符號(hào)互操作(Liu et al,2016; 劉青峰,2018),到研究不同平臺(tái)之間(薛章斌,2014)、不同符號(hào)格式之間的數(shù)據(jù)轉(zhuǎn)換(吳自銀,2000; 陳泰生等,2011; 陳金龍等,2015),更有學(xué)者研究了網(wǎng)絡(luò)環(huán)境下的符號(hào)共享(吳明光等,2011;Robinson et al,2013; 周海霞等,2019)。相比較而言,對于開源GIS方面的符號(hào)共享研究,尤其是SVG(Scalable Vector Graphics)符號(hào)共享研究相對缺乏。
QGIS(Quantum GIS)作為一種開源軟件,具有要素加載更快速、顏色渲染更美觀等優(yōu)勢,其具有自身的符號(hào)體系,能夠滿足基礎(chǔ)的地圖渲染工作,SVG標(biāo)記是該軟件的一種符號(hào)制作方式,常用SVG圖片展示復(fù)雜符號(hào)。在以往研究中,陳夢琳等(2015)實(shí)現(xiàn)了將SVG地圖符號(hào)共享至ArcGIS平臺(tái)。本文重點(diǎn)研究TTF(TrueType Font)字體符號(hào)向SVG符號(hào)的反向轉(zhuǎn)換,實(shí)現(xiàn)ArcGIS符號(hào)庫向QGIS軟件的遷移,確?;A(chǔ)地理數(shù)據(jù)在QGIS中能夠得到符號(hào)化展示,加強(qiáng)地圖渲染效果。鑒于點(diǎn)符號(hào)為線和面符號(hào)制作的基礎(chǔ),本文以ArcGIS點(diǎn)符號(hào)庫為基礎(chǔ),探討點(diǎn)符號(hào)從ArcGIS向QGIS平臺(tái)遷移的方法,為點(diǎn)、線、面符號(hào)的整體遷移做準(zhǔn)備。
在符號(hào)庫格式方面,2種GIS系統(tǒng)默認(rèn)的符號(hào)庫通常是通用符號(hào)庫,難以滿足各行業(yè)個(gè)性化的表達(dá)需要,其中ArcGIS常用*.style符號(hào)庫存儲(chǔ)用戶自定義的符號(hào),QGIS則通過可擴(kuò)展標(biāo)記語言(Extensible Markup Language,XML)來存儲(chǔ)符號(hào)。在style文件中,符號(hào)由相應(yīng)的字體庫描述,即利用TrueType字體構(gòu)建符號(hào),其特點(diǎn)是對符號(hào)輪廓進(jìn)行描繪,通過描邊將輪廓線轉(zhuǎn)換為曲線,再對符號(hào)內(nèi)部進(jìn)行填充,實(shí)現(xiàn)豐富符號(hào)顏色和增添符號(hào)效果的目的(吳新強(qiáng),2014)。而在QGIS中,用戶自定義的復(fù)雜符號(hào)采用從外部引入矢量圖片進(jìn)行SVG標(biāo)記,再將多種標(biāo)記疊加組合而成。在點(diǎn)狀符號(hào)中,SVG為圖形對象,通過圖形、路徑等參數(shù)定義符號(hào)的幾何結(jié)構(gòu),并利用輪廓和填充描述符號(hào)的樣式(陳夢琳,2015)。
在符號(hào)構(gòu)建上,GIS系統(tǒng)點(diǎn)狀符號(hào)的構(gòu)建方法主要有幾何圖元組合、TrueType字體、圖片圖標(biāo)與程序法等(Wu et al,2017)。其中,ArcGIS利用矢量幾何圖形和系統(tǒng)字體庫中的字符來構(gòu)建點(diǎn)符號(hào),通過多重字符和圖形的疊加,組合成復(fù)雜點(diǎn)狀符號(hào); 而QGIS既符合圖形系統(tǒng)特點(diǎn),將地圖符號(hào)作為圖形對象,對圖形邊界和內(nèi)部進(jìn)行輪廓修改和填充,又與其他GIS平臺(tái)(如ArcGIS)相同,能夠用圖元組合的方式繪制地圖符號(hào)。
此外,對比ArcGIS與QGIS系統(tǒng),二者均采用符號(hào)分層方式管理地圖符號(hào)庫,但在數(shù)據(jù)結(jié)構(gòu)方面具有一些差別,ArcGIS主要采用字符構(gòu)圖,QGIS則注重幾何圖形構(gòu)圖。在符號(hào)的組織方式上,QGIS比ArcGIS增加了多層符號(hào)組別的設(shè)置,使各類符號(hào)的管理更加便利。對比2個(gè)GIS系統(tǒng)的地圖符號(hào)特點(diǎn),如表1 所示。
表1 ArcGIS與QGIS系統(tǒng)點(diǎn)狀符號(hào)差異對比
針對QGIS平臺(tái)自定義地圖符號(hào)的迫切需求,目前亟需設(shè)計(jì)一種簡潔、快速的方式將2種格式的點(diǎn)符號(hào)庫進(jìn)行轉(zhuǎn)換。通過了解和掌握源格式與目標(biāo)格式的數(shù)據(jù)結(jié)構(gòu)、繪制方法等詳細(xì)信息,發(fā)現(xiàn)2種格式在符號(hào)結(jié)構(gòu)、數(shù)據(jù)關(guān)聯(lián)模式、渲染方式和技術(shù)實(shí)現(xiàn)等方面難以進(jìn)行符號(hào)內(nèi)部的直接轉(zhuǎn)換,并且在轉(zhuǎn)換過程中容易出現(xiàn)數(shù)據(jù)損失,故需要一個(gè)公開格式作為間接轉(zhuǎn)換的橋梁(黃瑞陽,2013)。經(jīng)過分析,本文采用Python實(shí)現(xiàn)點(diǎn)符號(hào)格式轉(zhuǎn)換,采用便攜式網(wǎng)絡(luò)圖形(Portable Network Graphics,PNG)格式作為公開格式,根據(jù)每種格式的特點(diǎn)編寫具有針對性的轉(zhuǎn)換程序,實(shí)現(xiàn)ArcGIS點(diǎn)符號(hào)庫向QGIS平臺(tái)遷移。
TTF向PNG轉(zhuǎn)換主要基于Python中的ReportLab庫和fontTools庫。其中,ReportLab庫用于創(chuàng)建自定義PDF文檔,輸出高質(zhì)量圖形,其主要功能包括繪制自定義圖形、圖表、文字、編碼,輸出PDF頁面和段落布局等(梁晶等,2019)。本文采用該代碼庫子包“ReportLab Graphics”中的Drawing方法和Group方法來繪制基礎(chǔ)形狀和特殊形狀,所有待轉(zhuǎn)換的TTF字體均可通過ReportLab Graphics獲取符號(hào)輪廓路徑的方式來繪制PNG圖片。另外,fontTools是一個(gè)使用Python編寫、用于處理字體的庫,它可以將TrueType和OpenType字體格式轉(zhuǎn)換為XML格式。本文先依次讀取全部TrueType字體,再將所有字體轉(zhuǎn)換為Python對象。
具體的設(shè)計(jì)思路為:采用ReportLab庫創(chuàng)建一個(gè)具有畫筆功能的類,描述字體輪廓直線、曲線、移動(dòng)等方法; 然后采用fontTools庫創(chuàng)建字體轉(zhuǎn)換函數(shù)讀取字體庫,獲取字型名稱列表,按字母進(jìn)行排序,依次循環(huán),調(diào)用創(chuàng)建類的繪畫方法繪制PNG圖像; 通過設(shè)置填充顏色、輪廓寬度、圖像寬度和坐標(biāo)起點(diǎn)(x,y)描述PNG圖像細(xì)節(jié)(圖1)。
圖1 TTF轉(zhuǎn)換生成PNG圖片
PNG向SVG轉(zhuǎn)換本質(zhì)上是將位圖轉(zhuǎn)換為矢量圖,通過XML代碼描繪圖像,使圖像具有交互功能。SVG代碼由開啟標(biāo)簽2個(gè)根元素組成,開啟標(biāo)簽定義了XML頭文件屬性,包括XML的版本、字符編碼方式,確定選擇正確的外部DTD文件。本文選擇W3C發(fā)布的svg11.dtd規(guī)范來解釋相關(guān)程序定義。SVG代碼的編輯包括SVG版本、命名空間、SVG圖像的寬度、高度和畫布區(qū)域等。描述圖像時(shí)直接嵌入基于Base64編碼的像素值,使轉(zhuǎn)換的圖像仍是位圖結(jié)構(gòu)(袁家政等,2008)。采用base64.b64 encode方式將圖片轉(zhuǎn)為base64編碼,定義寬、高、起點(diǎn)、填充方式,對之前由TTF轉(zhuǎn)出的PNG圖片進(jìn)行循環(huán)遍歷,生成多個(gè)SVG圖像,部分實(shí)現(xiàn)代碼如圖2 所示。
圖2 SVG部分代碼展示
在ArcGIS中點(diǎn)符號(hào)為矢量數(shù)據(jù),能夠參照地圖比例尺和制圖幅面修改符號(hào)大小,且能夠更改符號(hào)顏色,防止與底圖顏色沖突。點(diǎn)符號(hào)經(jīng)過符號(hào)轉(zhuǎn)換后生成的SVG圖片同樣為矢量格式。由于在上述編碼過程中考慮了符號(hào)背景透明,以及填充(fill)和輪廓(stroke)參數(shù)規(guī)定,因此在QGIS使用SVG標(biāo)記方法導(dǎo)入轉(zhuǎn)換結(jié)果后,也能夠?qū)崿F(xiàn)ArcGIS中的相同功能,即更改輪廓顏色和填充顏色、改變符號(hào)大小、符號(hào)質(zhì)量不變等。圖3 展示的符號(hào)分別由ArcGIS和QGIS制作,二者從符號(hào)顏色、大小、外觀,到符號(hào)的整體可視化表達(dá)幾乎無差別,這也證實(shí)了本文描述的點(diǎn)符號(hào)轉(zhuǎn)換方法是可行的,轉(zhuǎn)換后的點(diǎn)狀符號(hào)能夠滿足QGIS制圖要求。
圖3 ArcGIS(a)與QGIS(b)符號(hào)對比
為進(jìn)一步驗(yàn)證方法的可行性,本文以ArcGIS地震災(zāi)情符號(hào)庫為例,將其中的點(diǎn)狀符號(hào)遷移至QGIS中。地震災(zāi)情符號(hào)庫是國家科技支撐計(jì)劃項(xiàng)目“地震災(zāi)情服務(wù)及應(yīng)急決策支撐平臺(tái)研究”的成果之一,目前已在地震系統(tǒng)的應(yīng)急專題制圖中得到廣泛應(yīng)用。該符號(hào)庫包括點(diǎn)、線、面三類符號(hào),其中包含點(diǎn)狀符號(hào)140余個(gè),大致涉及基礎(chǔ)地理信息、地震、地震次生災(zāi)害、重點(diǎn)目標(biāo)、交通等11類。
通過分析,可將140個(gè)點(diǎn)狀符號(hào)分為兩類,一類符號(hào)能夠用QGIS本身的點(diǎn)符號(hào)標(biāo)記方法實(shí)現(xiàn),屬于簡單符號(hào),包括歷史地震、各級政府駐地這類的圓形符號(hào),震中位置、地質(zhì)調(diào)查點(diǎn)等五角星、三角形符號(hào),以及化工廠、學(xué)校這類文字符號(hào)。這種簡單符號(hào)通過QGIS符號(hào)系統(tǒng)中的橢圓標(biāo)記、實(shí)心標(biāo)記、文字符號(hào)標(biāo)記、簡單標(biāo)記、SVG標(biāo)記、矢量字段標(biāo)記等便可快速制作。另一種符號(hào)屬于復(fù)雜符號(hào),這類符號(hào)的特點(diǎn)是QGIS符號(hào)系統(tǒng)沒有且無法繪制,或是繪制時(shí)間較長,至少需要疊加一個(gè)SVG圖片實(shí)現(xiàn)符號(hào)制作,因此必須通過SVG轉(zhuǎn)換方式實(shí)現(xiàn),此類點(diǎn)符號(hào)的數(shù)量占符號(hào)總量的三分之二。以3個(gè)復(fù)雜符號(hào)為例,通過多層標(biāo)記疊加組合實(shí)現(xiàn)符號(hào)制作,如圖4 所示。
圖4 部分復(fù)雜符號(hào)舉例
對于復(fù)雜符號(hào),基于上述點(diǎn)符號(hào)轉(zhuǎn)換方法,將“地震災(zāi)情符號(hào)庫.ttf”進(jìn)行一系列轉(zhuǎn)換,篩選出復(fù)雜符號(hào)所需的SVG圖片,使QGIS平臺(tái)能夠以SVG標(biāo)記的方式載入圖片庫。隨后,對兩類符號(hào)統(tǒng)一制作,簡單符號(hào)以圓形、正方形、三角形、星形等簡單形狀為基礎(chǔ)圖形,采用QGIS自帶的符號(hào)標(biāo)記方式將多項(xiàng)標(biāo)記進(jìn)行組合; 復(fù)雜符號(hào)通過載入SVG圖片庫,加以顏色設(shè)計(jì)、輪廓填充、大小設(shè)置、角度偏轉(zhuǎn)、坐標(biāo)偏移等操作進(jìn)行符號(hào)制作。制作完成的140個(gè)點(diǎn)符號(hào)通過QGIS符號(hào)樣式管理器統(tǒng)一導(dǎo)出,生成XML文件,如圖5 所示。至此,ArcGIS點(diǎn)符號(hào)庫向QGIS平臺(tái)遷移工作完成,任意版本QGIS軟件可以通過導(dǎo)入“地震災(zāi)情符號(hào)庫.xml”文件來加載全部點(diǎn)符號(hào),符號(hào)庫滿足了地震行業(yè)專業(yè)技術(shù)人員對QGIS平臺(tái)的制圖需求。
圖5 基于QGIS平臺(tái)的地震災(zāi)情符號(hào)庫
將QGIS地震災(zāi)情符號(hào)庫應(yīng)用于地震應(yīng)急快速出圖,實(shí)現(xiàn)了不同幅面大小的專題圖的產(chǎn)出,實(shí)際應(yīng)用效果如圖6 所示。其中,臺(tái)站符號(hào)按數(shù)據(jù)屬性分類,符號(hào)色彩飽滿,可以看出無論是從符號(hào)顏色、樣式,還是從符號(hào)大小和分辨率上,轉(zhuǎn)換后的地圖符號(hào)能夠清晰地表達(dá)地圖主題,實(shí)現(xiàn)與ArcGIS制圖相同的呈現(xiàn)效果。
圖6 符號(hào)庫制圖的應(yīng)用
通過對ArcGIS地震災(zāi)情符號(hào)庫中點(diǎn)狀地圖符號(hào)的遷移,證實(shí)了本文提出的運(yùn)用Python編程實(shí)現(xiàn)TTF向SVG符號(hào)格式轉(zhuǎn)換方法是可行的,實(shí)現(xiàn)了ArcGIS與QGIS之間跨平臺(tái)符號(hào)轉(zhuǎn)換。在研究過程中,還發(fā)現(xiàn)了有待進(jìn)一步改進(jìn)的問題,例如,fontTools庫能夠處理TrueType字體轉(zhuǎn)換為XML格式,QGIS符號(hào)庫可以識(shí)別XML格式,如果能夠在程序上實(shí)現(xiàn)TTF轉(zhuǎn)換為XML,將避免QGIS從SVG圖片獲取點(diǎn)狀地圖符號(hào),從而使符號(hào)共享更簡便、更快捷。
在實(shí)際應(yīng)用中,基于QGIS的點(diǎn)狀地圖符號(hào)庫能夠滿足制圖要求和地震行業(yè)需求,達(dá)到了本文設(shè)計(jì)符號(hào)轉(zhuǎn)換的目的,同時(shí),轉(zhuǎn)換后的符號(hào)實(shí)現(xiàn)了與ArcGIS相同的符號(hào)使用和編輯自由等功能。ArcGIS點(diǎn)符號(hào)庫向QGIS平臺(tái)遷移的方法在其他行業(yè)和GIS領(lǐng)域也有良好的發(fā)展前景。