雷 瑛
(1.甘肅省基礎地理信息中心,甘肅 蘭州 730000)
地理國情數據要素的空間表達是基于“所見即所得”的表現形式[9],其矢量要素表達較為細碎和密集,給空間拓撲計算帶來指數級內存壓力,同時隨著數據量的劇增及客戶端服務訪問需求的加大,會影響服務器端對矢量切片數據的訪問性能[1-10]。
針對以上問題,本文結合項目實踐,從3個方面改進技術,優化流程,提升矢量地圖服務的訪問效率,實現地理國情海量空間數據快速高效的展示。
空間矢量數據壓縮本質上是利用地圖綜合概念,采用道格拉斯—普克算法(douglas–peucker algo?rithm)[11],通過線要素化簡方式,有選擇性地去掉線上的點,并對其他點進行合理位移,以盡可能地保持曲線的形狀特征,最終實現矢量瓦片地圖在客戶端高效的多尺度漸進式可視化[12-13]。
道格拉斯-普克算法是將曲線近似表示為一系列點,并減少點的數量的一種算法。算法的基本思路是對每一條曲線的首末點虛連一條直線,求所有點與直線的距離,并找出最大距離值(dmax),用dmax與限差D相比:若dmax<D,這條曲線上的中間點則全部舍去;若dmax≥D,則保留dmax對應的坐標點,并以該點為界,把曲線分為兩部分,對這兩部分重復使用該方法[14-15]。
1.1.1 設置最大距離值
對線面圖形采用道格拉斯-普克算法進行空間壓縮,不同地圖級別設置不同的最大距離值,如表1所示。最大距離值設置以經緯度坐標系為例說明。

表1 最大距離設置樣例
1.1.2 空間數據壓縮
壓縮方法如下:
1)在曲線首尾兩點間虛連一條直線,求出其余各點到該直線的距離,如圖1a。

圖1 空間數據壓縮算法
2)選其最大者與閾值相比較,若大于閾值,則離該直線距離最大的點保留,否則將直線兩端點間的各點全部舍去,如圖1b,第4點保留。
3)依據所保留的點,將已知曲線分成兩部分處理,重復第a、b步迭代操作,即仍選距離最大者與閾值比較,依次取舍,直到無點可舍去,最后得到滿足給定精度限差的曲線點坐標,如圖1c、d依次保留第6點、7點,舍去其他點,即完成線的化簡。
通過訪問數據庫的方式來實時獲取切片數據查詢時間較長,將已獲取的切片數據通過MongoDB進行緩存處理,以減少數據庫訪問次數。MongoDB是一個基于分布式文件存儲的數據庫,與傳統文件存儲比較,具有高可用的二級索引(文本搜索和地理位置)、高聚合數據分析框架、高性能、存儲數據方便、支持查詢、使用高效的二進制數據存儲、自動處理碎片、文件存儲格式為BSON等特點。為了防止單點故障,當發生硬件故障或者其他原因造成的宕機時,需要使用副本進行恢復,建立MongoDB副本集群。
1.2.1 集群架構
不同場景下需要建立不同方式的集群,此處建立副本集群,共3個節點,一個主節點,另外2個副本節點,如圖2所示。

圖2 集群架構圖
1.2.2 地圖服務數據集合
將每個地圖服務的矢量切片緩存數據存儲在MongoDB中的一個數據集合中。集合元素如表2所示。

表2 矢量切片緩存集合元素
復雜的圖形相交時,直接使用Java-vec?tor-tile-master開源算法計算切片會出現切片數據錯誤,導致前端頁面渲染出現異常,此時,應對算法進行優化[16],剔除錯誤情況。
1.3.1 錯誤情況
由于單張矢量切片的范圍是4 096×4 096的矩形面,地理國情監測空間矢量線圖形與單張切片矩形范圍面相交有可能會出現相交結果為線或者點的情況;地理國情監測空間矢量面圖形與切片矩形面相交有可能會出現相交結果為點的情況。如果產生的圖形類型與輸入的圖形類型不一致,會導致前端展示部分切片缺失的情況,如圖3所示。

圖3 Java-vector-tile-master算法錯誤情況
1.3.2 源碼優化
原始開源代碼僅支持單部分要素的處理,不支持多部分要素,如遇到多部分要素,生成的矢量切片數據在前端展示時會出現切片缺失的情況,需修改開源代碼以支持多部分要素的情況。
為驗證優化效果,選取某縣的地表覆蓋數據作為測試數據,在相同軟硬件環境下,記錄優化前和優化后不同級別下單張切片的請求時間、切片大小和前端顯示結果來分析優化效果,數據情況見表3。

表3 實驗數據說明
通過采用優化前后的2個不同的矢量切片地圖服務,在相同的軟硬件環境下,對相同的數據調用,客戶端的響應時間優化前見表4和圖4,優化后見表5和圖5。

表4 優化前效率表

圖4 優化前效果圖

表5 優化后效率

圖5 優化后效果圖
采用Douglas–Peucker算法對地理國情監測空間矢量數據進行壓縮,確保空間圖形基本形狀不變的前提下,剔除圖形中多余的點,降低圖形的空間大小和空間復雜度,提升了切片計算的效率,降低了切片大小。
采用MongoDB集群持久化切片,將已獲取的切片數據進行緩存處理,降低了訪問數據庫的次數,減少了獲取切片的時間,增強了獲取切片緩存數據的穩定性。
采用優化后的Java-vector-tile-master算法,剔除圖形在復雜相交情況下獲取切片數據錯誤的情況,確保切片數據的正確性,避免了前端頁面渲染出現異常的問題。
綜上所述,本文針對地理國情監測海量數據高效可視化所提出的優化矢量數據空間壓縮算法和Ja?va-vector-tile-master算法,結合MongoDB集群持久化切片技術,使得優化后較優化前不同級別請求響應時間提升了50%~80%,不同級別切片大小壓縮了35%~60%,極大地提升了矢量瓦片地圖的訪問效率,實現了客戶端海量空間數據的高效可視化。