年秋慧, 王英杰, 李聰旭, 封博卿
(1. 中國鐵道科學(xué)研究院集團有限公司,北京 100081;2. 中國鐵道科學(xué)研究院集團有限公司電子計算技術(shù)研究所,北京 100081)
我國鐵路線路分布遼闊,是國民經(jīng)濟的大動脈。截至2019 年底,全國鐵路運營里程達到13.9 萬km[1]。《鐵路“十三五”發(fā)展規(guī)劃》提出,到2020年,鐵路運營總里程將達到15萬km[2]。面對密度大、跨度長的鐵路基礎(chǔ)設(shè)施投入運營,以及鐵路各專業(yè)管理的設(shè)備設(shè)施與空間信息緊密相連,數(shù)量龐大、類型眾多、管理復(fù)雜等情況,建立了鐵路地理信息平臺對數(shù)據(jù)進行統(tǒng)一存儲和管理[3],鐵路業(yè)務(wù)應(yīng)用系統(tǒng)通過訪問部署于鐵路內(nèi)網(wǎng)的鐵路地理信息平臺實現(xiàn)對電子地圖的查看與使用。由于網(wǎng)絡(luò)覆蓋范圍、關(guān)鍵設(shè)施信息安全等因素限制,在鐵路不少業(yè)務(wù)領(lǐng)域?qū)σ苿佣髓F路電子地圖有使用需求。
黎慧斌等[4]探討了移動終端離線電子地圖系統(tǒng)的總體設(shè)計思路,指出系統(tǒng)設(shè)計開發(fā)時應(yīng)重點考慮的問題。戴傳飛[5]詳細分析了SQLite 的體系結(jié)構(gòu),深入研究了接口、編譯器、引擎以及存儲層的實現(xiàn)機制。黃偉明等[6]提出一種基于扇形篩選法的矢量數(shù)據(jù)壓縮方法,實現(xiàn)對數(shù)據(jù)的高效壓縮。在此,基于當(dāng)前研究成果和鐵路空間數(shù)據(jù)存儲現(xiàn)狀,將多種壓縮方法進行融合,實現(xiàn)鐵路空間數(shù)據(jù)輕量化存儲,滿足移動端鐵路電子地圖的使用需求,共同推進鐵路地理信息系統(tǒng)(RGIS)與智能高鐵的建設(shè)[7]。
鐵路地理信息數(shù)據(jù)按數(shù)據(jù)來源分為國家基礎(chǔ)地理信息數(shù)據(jù)、鐵路專業(yè)公用地理數(shù)據(jù)和鐵路專業(yè)專用地理信息數(shù)據(jù);按展示要素分為鐵路線路、車站、管界及駐地、工務(wù)、電務(wù)、供電及給水、房建、臺賬數(shù)據(jù)等;按數(shù)據(jù)存儲形式分為 .jpg、.png、.tif、.dwg、.dxf、.shp、.kml、.geosjon等[8]。為保證數(shù)據(jù)輕量化存儲應(yīng)選取合適的數(shù)據(jù)庫。不同移動端數(shù)據(jù)庫的優(yōu)缺點對比見表1。
表1 移動端數(shù)據(jù)庫的優(yōu)缺點對比
移動端軟件大部分采用java語言進行開發(fā),而鐵路地理信息數(shù)據(jù)支持SQL語言查詢,根據(jù)表1數(shù)據(jù)庫的對比,選取SQLite數(shù)據(jù)庫對鐵路空間數(shù)據(jù)進行存儲。
空間數(shù)據(jù)分為柵格數(shù)據(jù)和矢量數(shù)據(jù),通過數(shù)據(jù)量輕量化、數(shù)據(jù)結(jié)構(gòu)輕量化和數(shù)據(jù)庫輕量化實現(xiàn)數(shù)據(jù)的輕量化存儲。空間數(shù)據(jù)輕量化存儲流程見圖1。
圖1 空間數(shù)據(jù)輕量化存儲流程
對柵格數(shù)據(jù)進行存儲時,首先需要將柵格數(shù)據(jù)分割為1 組瓦片存儲在服務(wù)器端[9],然后建立合適的數(shù)據(jù)索引結(jié)構(gòu)對瓦片進行存儲,實現(xiàn)地圖數(shù)據(jù)的快速讀取和查詢。最后,采用JPEG2000 標(biāo)準(zhǔn)對瓦片金字塔進行壓縮,實現(xiàn)對柵格數(shù)據(jù)的輕量化處理。金字塔結(jié)構(gòu)是一種層次結(jié)構(gòu)模型,每層地圖瓦片的分辨率從上至下逐漸提高,且每層表示的數(shù)據(jù)范圍均相同。金字塔瓦片地圖模型結(jié)構(gòu)見圖2。
圖2 金字塔瓦片地圖模型結(jié)構(gòu)
金字塔的層數(shù)為n,矢量瓦片的編碼采用[level,(x,y)]的形式,編碼順序為從上至下、從左至右,其中l(wèi)evel為瓦片所在的層數(shù),(x,y)分別為瓦片所在的行號和列號。對地圖建立金字塔模型的流程見圖3。
圖3 地圖金字塔建立流程
矢量數(shù)據(jù)包含幾何數(shù)據(jù)和屬性數(shù)據(jù),而在鐵路建設(shè)及運輸生產(chǎn)中的數(shù)據(jù)大多數(shù)為幾何數(shù)據(jù),所以對矢量數(shù)據(jù)壓縮的問題就轉(zhuǎn)變成了對幾何數(shù)據(jù)的壓縮。幾何數(shù)據(jù)壓縮可以從縮減數(shù)據(jù)信息量和簡化數(shù)據(jù)存儲結(jié)構(gòu)兩方面考慮。
2.2.1 Douglas-Peucker有損壓縮算法
數(shù)據(jù)信息量簡化即在保證圖像分辨率以及清晰度不變的前提下,對數(shù)據(jù)進行縮減。Douglas-Peucker 算法是矢量數(shù)據(jù)的有損壓縮算法。算法主要是對線要素和面要素的信息量進行縮減,在對線要素進行數(shù)據(jù)量壓縮時,采用Douglas-Peucker 算法,按照線要素的拓撲關(guān)系,將線要素轉(zhuǎn)換為曲線段,篩選出過濾后的坐標(biāo)點,組成新的線要素。在對面要素進行壓縮時,首先進行信息等效轉(zhuǎn)換,按邏輯規(guī)則將面要素轉(zhuǎn)換成線要素,并對轉(zhuǎn)換后的線要素采取Douglas-Peucker 算法進行壓縮,最后將線要素按照同樣邏輯規(guī)則生成新的面要素,實現(xiàn)對面要素的壓縮。經(jīng)Douglas-Peucker 壓縮算法對矢量數(shù)據(jù)處理后,數(shù)據(jù)信息得到了有效的縮減。
2.2.2 幾何坐標(biāo)變換
對于點數(shù)據(jù)的簡化,通過對數(shù)據(jù)進行重排,計算數(shù)據(jù)偏移量并進行存儲,而不是傳統(tǒng)的對原始坐標(biāo)的存儲。此方法可以在不改變地圖展示范圍和展示效果的情況下,調(diào)整數(shù)據(jù)的存儲結(jié)構(gòu),對數(shù)據(jù)進行無損壓縮,實現(xiàn)數(shù)據(jù)存儲空間的有效利用。
地理信息二維數(shù)據(jù)坐標(biāo)點包含經(jīng)度數(shù)據(jù)和緯度數(shù)據(jù),坐標(biāo)點的數(shù)量為total,初始序列為l0,坐標(biāo)點CO0(xi,yi)(i≥ 1),壓縮過程大體如下:
(1)對全部坐標(biāo)點按照xi的值進行從大到小排列,設(shè)此序列為l1,坐標(biāo)點CO1(xj,yj)(j≥ 1)。
(2) 設(shè)xj的偏移量為Cxk,Cxk=xj-xj-1(j≥ 2),
(3) 保持l1中第1 組坐標(biāo)(x1,y1)不變,對余下坐標(biāo)點按照yj的值進行從大到小排列,設(shè)排序后的序列為l2,坐標(biāo)點CO2(xn,yn)(n≥ 1)。
(4)記錄yn和yj的映射關(guān)系。
(5) 設(shè)yn的偏移量為Cyt,Cyt=yn-yn-1(n≥ 3),
(7)將(經(jīng)度Exi,緯度Eyi)作為坐標(biāo)的最終值。
經(jīng)過無損壓縮后,數(shù)據(jù)有效地減少了對空間的存儲占有量。對線要素進行此壓縮方式時,可按照一定的轉(zhuǎn)換規(guī)則將線轉(zhuǎn)換成等效點,再按原規(guī)則轉(zhuǎn)換回線要素;對面要素壓縮時,可按照由面化線、由線化點的思想實現(xiàn)面的壓縮。
2.2.3 LZW無損壓縮算法
改變矢量數(shù)據(jù)存儲結(jié)構(gòu)實現(xiàn)數(shù)據(jù)壓縮的另一種方法是串表壓縮算法(LZW),LZW 壓縮是基于數(shù)據(jù)字典編碼的一種壓縮算法,即可實現(xiàn)對幾何數(shù)據(jù)的壓縮,又可實現(xiàn)對屬性數(shù)據(jù)的壓縮,算法簡單快速、易于硬件實現(xiàn)、壓縮效果較好,且可通過一次性讀取全部數(shù)據(jù)實現(xiàn)數(shù)據(jù)的存儲[10]。首先建立1 個空字典,字典中存儲字符串前綴,將可能出現(xiàn)的字符依次存入字典中,并進行編號。在對數(shù)據(jù)讀取過程中,采用按位讀取,若字典中存在匹配的字符串,則繼續(xù)向下讀取;若字典中無匹配的字符串,則將當(dāng)前字符串作為新的字符串前綴存儲到字典中進行編碼,并記錄字符串前綴的編號,然后將該字符串的下一位字符設(shè)置為新的字符串前綴,并向下進行字符串匹配。反復(fù)重復(fù)此過程,直至數(shù)據(jù)全部讀取完畢,并將字典和編號組成的字符串存儲到數(shù)據(jù)庫中。
由于鐵路專業(yè)的矢量數(shù)據(jù)規(guī)模龐大,單采用LZW算法對于幾何坐標(biāo)點的壓縮存儲可能存在數(shù)據(jù)冗余的問題??上葘?shù)據(jù)采用BWT 算法,BWT 算法常用于基因序列的檢測,通過對字符串進行循環(huán)位移,使相同的字符位置連續(xù)或者相鄰,但是字符串的長度并沒有發(fā)生變化。經(jīng)BWT 算法處理后的矢量數(shù)據(jù),冗余度明顯降低,再通過LZW 算法對數(shù)據(jù)進行存儲,實現(xiàn)矢量數(shù)據(jù)的無損壓縮。
壓縮后的數(shù)據(jù)應(yīng)基于MBTiles 規(guī)范進行存儲并制作成離線包,通過服務(wù)器端生成地圖瓦片?;贛BTiles規(guī)范和SQLite 數(shù)據(jù)庫存儲的數(shù)據(jù)可滿足查詢和讀取速度快的要求,還具有可移植性好、操作簡便的特點[11]。
移動端電子地圖檢索系統(tǒng)應(yīng)實現(xiàn)鐵路專業(yè)電子地圖信息的查詢和獲取,以滿足鐵路線路規(guī)劃、運營管理、應(yīng)急救援、檢測維修等領(lǐng)域的需求。為了確保鐵路數(shù)據(jù)安全,系統(tǒng)在移動終端的安裝部署及使用均在無網(wǎng)絡(luò)連接的狀態(tài)下進行。同時,為保證數(shù)據(jù)及時更新,系統(tǒng)將通過內(nèi)置應(yīng)用與服務(wù)器進行交互,實現(xiàn)移動終端數(shù)據(jù)更新。
系統(tǒng)采用SQLite 數(shù)據(jù)庫對基于MBTiles 規(guī)則的地圖數(shù)據(jù)進行存儲,文件存儲形式見圖4。采用Android 平臺對系統(tǒng)進行檢測,經(jīng)系統(tǒng)測試,柵格地圖響應(yīng)速度為0.5 s,矢量地圖響應(yīng)速度為1.1 s,空間數(shù)據(jù)查詢響應(yīng)速度為3 s。同時,壓縮前的數(shù)據(jù)量為144 GB,壓縮后的數(shù)據(jù)量為19.2 GB,數(shù)據(jù)壓縮率為86.667%,實現(xiàn)了在保證可視化效果條件下對數(shù)據(jù)的輕量化存儲。移動端電子地圖檢索系統(tǒng)經(jīng)輕量化存儲后的數(shù)據(jù)最終展示效果見圖5。
通過選取基于MBTiles 規(guī)范的SQLite 數(shù)據(jù)庫,設(shè)計并建立基于四叉樹結(jié)構(gòu)的金字塔模型,實現(xiàn)數(shù)據(jù)的快速定位和檢索。采用Douglas-Peucker 算法、幾何坐標(biāo)變換、BTW 算法和LZW 算法對數(shù)據(jù)采取輕量化處理。壓縮后的數(shù)據(jù)量實現(xiàn)了較大縮減,滿足了離線地圖數(shù)據(jù)輕量化存儲的需求。
圖4 基于MBTiles規(guī)則的地圖數(shù)據(jù)存儲形式
圖5 系統(tǒng)展示效果