亢孟軍 吳雨錕 張開(kāi)碩 蘇世亮 翁 敏
1 武漢大學(xué)資源與環(huán)境科學(xué)學(xué)院,湖北武漢,430079 2 城市空間信息工程北京市重點(diǎn)實(shí)驗(yàn)室,北京,100038 3 黑龍江地理信息工程院,黑龍江哈爾濱,150081
電子海圖是開(kāi)展各種海上航行活動(dòng)的數(shù)據(jù)基礎(chǔ),是極其重要的海洋信息及數(shù)據(jù)源。其圖示表達(dá)在行業(yè)和研究中具有重要意義。但電子海圖的發(fā)展與傳統(tǒng)GIS 的發(fā)展不相適應(yīng),具體表現(xiàn)在:①現(xiàn)行電子海圖顯示標(biāo)準(zhǔn)—— 國(guó)際海道測(cè)量組織(International Hydrographic Organization,IHO)發(fā)布的S-52[1]只面向電子航海圖,缺乏一個(gè)面向海洋地理信息全域的顯示標(biāo)準(zhǔn)[2];②S-52 符號(hào)化過(guò)程過(guò)于復(fù)雜,難以集成在常規(guī)GIS 軟件中;③S-52 與S-57[3]的 耦 合 表 達(dá) 方式限制了其開(kāi)放性和可擴(kuò)展性。 構(gòu)建S-52 的開(kāi)放解決方案,使其便于被開(kāi)源GIS 軟件集成和渲染是一項(xiàng)亟待解決的工作。
當(dāng)前對(duì)S-52 渲染解決方案的研究主要集中在符號(hào)庫(kù)的設(shè)計(jì)和渲染引擎的開(kāi)發(fā)方面。其中,符號(hào)庫(kù)設(shè)計(jì)的相關(guān)研究熱點(diǎn)在于選擇通用、便捷的符號(hào)組織載體存儲(chǔ)海圖符號(hào),如PostScript、TrueType、可縮放矢量圖形(scalable vector graphics,SVG )以及在ArcGIS 符號(hào)體系基礎(chǔ)上的擴(kuò)展[4-8],采用柵格圖片存儲(chǔ)符號(hào)也是一種備選方法,但是局限性大,僅適用于靜態(tài)的點(diǎn)狀符號(hào)[9]。SVG 作為一種開(kāi)放標(biāo)準(zhǔn)的矢量圖形語(yǔ)言,具有良好的交互功能,非常適用于表達(dá)電子海圖符號(hào)[10],本文選擇此方式組織圖元。
S-52 渲染引擎主要有兩種實(shí)現(xiàn)方式:①底層開(kāi)發(fā)。解析S-57 數(shù)據(jù),依照S-52 符號(hào)標(biāo)準(zhǔn),對(duì)其進(jìn)行實(shí)現(xiàn)及優(yōu)化改造[11,12],并設(shè)計(jì)渲染算法[13]及其他多種功能,集成構(gòu)建海圖綜合顯示平臺(tái)[14,15]。②開(kāi)源渲染解決思路。主要基于XML 構(gòu)建開(kāi)放式海圖符號(hào)的表達(dá)規(guī)則,并通過(guò)OpenLayers、Canvas 等開(kāi)源類庫(kù)在開(kāi)源WebGIS 軟件上搭建相關(guān)功能模塊[16],運(yùn)用矢量瓦片提高渲染速度。底層開(kāi)發(fā)的渲染引擎通常內(nèi)嵌于系統(tǒng),不具備良好的開(kāi)放性、共享性和數(shù)據(jù)的互操作性。而目前的開(kāi)源解決方案注重總體設(shè)計(jì)思路,對(duì)符號(hào)化規(guī)則的實(shí)現(xiàn)細(xì)節(jié)不足,并且其與現(xiàn)有開(kāi)源GIS 軟件結(jié)合不夠,技術(shù)落地仍有差距。
本文提供了一種基于開(kāi)放式地理信息系統(tǒng)協(xié)會(huì)(Open GIS Consortium,OGC)定義的圖層樣式描述規(guī)范(styled layer descriptor,SLD)的S-52 開(kāi)源解決方案,通過(guò)建立S-52 與SLD 的映射及符號(hào)轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)開(kāi)源GIS 軟件對(duì)S-52 符號(hào)的規(guī)則的渲染。同時(shí),采用一張海圖配合一份SLD 配置文件的思路,在uDig 中實(shí)現(xiàn)了標(biāo)準(zhǔn)電子海圖的集成顯示。
IHO S-52 規(guī)范符號(hào)演示庫(kù)中的復(fù)雜符號(hào)主要有4 種:①點(diǎn)符號(hào)或者是以面狀圖形中心點(diǎn)渲染的點(diǎn)符號(hào);②復(fù)雜線型符號(hào),線由兩個(gè)或多個(gè)不同圖元構(gòu)成;③復(fù)雜面型,以特定條紋或者圖像填充整個(gè)面狀區(qū)域;④注記符號(hào)。
SLD 是一種基于XML 的樣式描述語(yǔ)言,具有豐富的擴(kuò)展性和良好的開(kāi)放性,是一種重要的GIS符號(hào)共享方法,適用于描述復(fù)雜S-52 顯示規(guī)范符號(hào)庫(kù)[17]中的復(fù)雜符號(hào)樣式,能實(shí)現(xiàn)跨平臺(tái)的調(diào)用渲染。SLD 定義的渲染規(guī)則均包含在
表1 S-52 符號(hào)屬性與SLD 對(duì)應(yīng)關(guān)系Tab.1 Correspondence Between S-52 SymbolicProperties and SLD
S-52 中的復(fù)雜符號(hào)往往需要使用一個(gè)圖形或者圖形的有序組合來(lái)完成符號(hào)渲染,一個(gè)獨(dú)立的圖形稱為圖元。將S-52 轉(zhuǎn)換為SLD 并配置出電子海圖的技術(shù)流程,如圖1 所示。
圖1 S-52 與SLD 映射的技術(shù)流程Fig.1 Flow Chart of Mapping S-52 to SLD
1)簡(jiǎn)單類型。簡(jiǎn)單類型符號(hào)包括簡(jiǎn)單點(diǎn)符號(hào)、單色線符號(hào)、純色填充面符號(hào)。這些符號(hào)可使用簡(jiǎn)單的SLD 語(yǔ)句定義,它們分別由
2)特殊點(diǎn)符號(hào)。特殊點(diǎn)符號(hào)是指將特定圖像渲染在某一點(diǎn)狀目標(biāo)上或其周圍的符號(hào)類型。S-52 主要通過(guò)符號(hào)樣式、錨點(diǎn)坐標(biāo)等屬性描述對(duì)其進(jìn)行定義。可使用SLD 中的
3)復(fù)雜線型符號(hào)。復(fù)雜線型符號(hào)是指用多個(gè)不同或同一圖元等間距沿線狀目標(biāo)渲染的符號(hào)類型。S-52主要通過(guò)符號(hào)樣式、線寬等屬性描述對(duì)其進(jìn)行定義??墒褂肧LD 中的多個(gè)
圖2 復(fù)雜線型渲染對(duì)比(比例尺1∶25 000)Fig.2 Comparison of Complex Linestyles Rendering(Scale 1∶25 000)
4)復(fù)雜面狀符號(hào)。復(fù)雜面狀符號(hào)指邊界線是復(fù)雜線型或者需要填充點(diǎn)符號(hào)的符號(hào)類型。S-52主要通過(guò)圖元樣式、填充規(guī)則等屬性描述對(duì)其進(jìn)行定義??墒褂肧LD 中的
圖3 復(fù)雜面型渲染對(duì)比(比例尺1∶50 000)Fig.3 Comparison of Complex Area Rendering(Scale 1∶50 000)
5)屬性依賴渲染。屬性依賴渲染是指各種符號(hào)類型需要根據(jù)物標(biāo)具體的屬性值指定不同渲染規(guī)則的渲染模式。在SLD 中控制符號(hào)渲染方式的所有標(biāo)簽需放置于一個(gè)
圖4 面狀水深渲染結(jié)果對(duì)比(比例尺1∶250 000)Fig.4 Comparison of Area Water Depth Rendering(Scale 1∶250 000)
6)注記運(yùn)算渲染。注記運(yùn)算渲染是指直接渲染注記或根據(jù)屬性渲染注記的渲染模式。SLD 中包括OGC 標(biāo)準(zhǔn)提供的四則運(yùn)算和豐富的功能函數(shù),四則運(yùn)算通過(guò)標(biāo)簽