03. 一種稠稀向量瓦片的構建方法
摘要
針對向量瓦片之間的資料不均衡影響瀏覽器載入與渲染效率的問題,提出了一種顧及向量資料空間分佈的向量瓦片構建演算法。首先利用平衡樹的思想進行資料分割;其次構建顧及要素空間分佈的稠稀瓦片並對瓦片進行編號;然後構建四維 Kd 樹索引模型;最後開展稠稀向量瓦片構建與視覺化對比試驗。試驗表明,與傳統格網向量瓦片相比,稠稀向量瓦片之間的資料量標準差較低,具有瓦片資料均衡性好、響應時間快、載入效率高等優點。
關鍵詞
向量瓦片; 金字塔; 空間分佈; 資料分簇; Kd 樹
目前,向量地圖多借助瓦片技術 [1-2] 實現Web 地圖渲染展示,向量瓦片技術主要是將向量資料分割成預定義大小的瓦片 [3] 進行網路傳輸。與柵格瓦片[4] 相比,向量瓦片具有網路頻寬消耗小、資料體積小、壓縮率高和樣式可定製等優勢,是未來網路地圖的發展趨勢。
向量瓦片技術主要包括向量資料的空間劃分、瓦片編碼和排程渲染等流程 [5] 。瓦片空間劃分和瓦片編碼可分為格網法、稠稀瓦片法和多層次分塊法這 3 種方法。格網法通過均勻分佈的經緯線網格對向量資料進行分割 [6] ,形成具有多解析度金字塔結構[7]的格網向量瓦片。稠稀瓦片法參考要素的資料權重或資料的空間分佈來構建
稠稀瓦片[8-9] 。文獻[8]提出了一種參照資料權重和要素重要度的瓦片劃分與組織模型,該模型構建的瓦片資料均衡,但存在相鄰瓦片之間要素重疊的侷限。文獻[9]提出了基於簇模型的瓦片模型,該模型考慮了要素的空間分佈,瓦片資料量基本一致,但存在分片過細和併發過多的侷限。多層次分塊法基於層次增量分塊向量模型 [10],對瓦片按點、線、面型別進行再分層。該模型利於網路傳輸,但是破壞了單個瓦片的整體性,增加了並
發請求數目。
向量瓦片的組織、編碼索引、儲存與渲染是影響瓦片效率的關鍵因素 [11-12] 。由於向量要素的空間分佈不均,因此傳統格網向量瓦片間的資料大小不均衡,影響了前端載入渲染效率與併發一致性。綜上,提出一種顧及向量資料空間分佈密度的向量瓦片構建方法。該方法藉助空間索引平衡樹[13] 構建向量瓦片,建立瓦片編號與索引並使用 Kd 樹進行查詢,以此提高瓦片的網路傳輸效能。並以資源三號鑲嵌線資料為例,開展向量瓦片前端載入效能對比試驗。
1. 稠稀瓦片演算法依據
對於海量瓦片,需要先標識每一個瓦片,以此為基礎建立相應的瓦片組織與索引模型。
1.1 向量瓦片的空間劃分
空間劃分是將向量資料按規則分割為較小的資料塊,不同的空間劃分方法會影響瓦片索引的選擇和單個瓦片的資料量,進而影響網路傳輸效率。向量瓦片多采用均勻分佈的格網分割法,將向量資料分割成一個個資料塊,每個資料塊以檔案形式單獨儲存,常用的瓦片儲存格式有 MVT、Pbf 和 geojson 等。
1.2 基於 Kd 樹的瓦片索引模型
Kd 樹最早由 Bentley 提出[14] ,是一種檢索 K維空間點的二叉樹。基於二維平面的 Kd 樹的基本原理是對於在該二維平面上的所有座標點,統計它們在兩個維度上的資料方差。方差最大的維度就是分割域,座標點集按照該分割域進行排序,中間值被選為分割線,將該域分為左右子空間。在子空間上繼續以上操作直到滿足要求。
Kd 樹要求用平行於座標軸的縱橫分界線將平面分成若干區域,使每個區域中的點數不超過某一值。Kd 樹構建流程如圖 1 所示。
2. 稠稀瓦片構建方法
稠稀向量瓦片要求對向量資料進行空間劃分,得到資料量均衡的向量瓦片。稠稀瓦片構建的關鍵問題包括瓦片的空間劃分與瓦片構建。瓦片的空間劃分是使用已經確定好的劃分面,對點、線、面不同向量資料分別進行裁切,然後合併為geojson 格式的稠稀瓦片。
2.1 空間劃分方案
稠稀瓦片空間劃分需要保持同層級下瓦片之間資料量的均衡,同時確定不同瓦片層級下的瓦片數目。演算法核心是依據向量資料的空間分佈確定稠稀瓦片分割方案。向量資料包括屬性資料與幾何資料,屬性資料依附於幾何資料,故屬性資料也存在一定的空間聚集特性。屬性資料的空間分佈特性與向量要素型別有關。對於點要素,其屬性的空間分佈與幾何要素的空間分佈呈正相關;對於線、面要素,其由多個座標單位構成,情況較為複雜,暫不考慮屬性值的影響。稠稀瓦片分割方案是首先獲得待分割向量資料的座標點集合並進行分割槽操作;將集合中的座標按照規則劃分成兩部分;對劃分結果重複以上步驟,直到滿足要求結束遞迴,得到劃分好的空瓦片;以空瓦片為基礎對向量資料進行裁切與合併操作,最終得到稠稀向量瓦片。具體步驟如下。
-
確定瓦片層級。在瓦片構建時確定每一層級瓦片數量,瓦片層級一般為 0~23 級。設級數為 n,則第 n 級瓦片數為 4 n ,稠稀向量瓦片每一層級瓦片數量為前一層級的 4 倍。
-
瓦片劃分方案。座標集合構成了一個二維平面。如果該集合中縱座標方向方差最大,則將平行於橫軸的橫向線作為起始分割方向。記錄該層級縱座標方向中位數,該中位數將二維平面分成點數相等的兩部分子空間集合 d 1 和 d 2 ,第 0層級的劃分結束。以 d 1 和 d 2 為新的集合進行遞迴操作,直到滿足劃分層級,遞迴結束。圖 2 為德國德累斯頓市建築區的空間劃分。
2.2 瓦片構建方法
-
確定 h 的初始值。以 D 為基礎,分別計算經度方向和緯度方向的方差大小,將方差較大的方向作為初始分割方向。若方向為經度方向,則h=0,得到中位數 Y,y=Y 為分割線;若方向為緯度方向,則 h=1,得到 X,x=X 為分割線。
-
分割。在分割方向上將座標集合 D 以分割線為界劃分為左子空間集合 D L 和右子空間集合 D R ,得到均分空間 D 的中位數。同時 DL 編號N L 末尾增加一位 0,變為 00;D R 編號 N R 末尾增加一位 1,變為 01,兩者都為二進位制碼。
-
遞迴。每劃分一次,h 就增加 1。對子空間集合選擇經度或緯度方向輪流進行劃分,得到劃分中位數 X、Y 和左右子空間 D L 、D R ,左右子空間編號末尾增加 0 和 1。
-
遞迴結束。若 h≤2l,則遞迴結束,得到由中位數分割點構成的分割區域。對完成抽稀的向量資料進行分割,得到稠稀向量瓦片。
稠稀向量瓦片構建演算法如圖 3 所示。
3. 瓦片組織方法
完成空間劃分的稠稀向量瓦片數量巨大,需要建立高效的索引,確定索引與瓦片編號以及縮放級別的數學關係。這就需要對每一個瓦片建立唯一標識碼,構建海量瓦片的空間索引模型,以進行瓦片的儲存與查詢。
3.1 瓦片編號
將稠稀向量瓦片存放在本地檔案系統中,向量瓦片的層級作為目錄。在稠稀向量瓦片構建時將層級目錄下的每一個層級瓦片進行索引編號。瓦片編號方法如下。
- 在上節的稠稀向量瓦片構建方法中,可知N 為構建遞迴操作中的 D L 的編號 N L 或 D R 的編號 N R ,其初始碼為 0。第 1 次遞迴 N 的位數將增加 1 位,左子節點 N 變為二進位制碼 00,右子節點N 變為二進位制碼 01。稠稀向量瓦片構建時二進位制碼的變化規則如圖 4 所示,樹的第 1 層表示第0 層級的 N 編號。
- 在稠稀瓦片構建遞迴結束後,獲得一系列不同位數的二進位制碼 N,如圖 5 所示。若 N = 4^h(h 為分割深度),將 N 轉為十進位制數值 I,將 I 作為向量瓦片的檔名。
圖5 所示為第1、2 層級的 N 編號在分割區域上的分佈情況。將 N 按照其十進位制碼 I 的大小進行連線,得到類似於 Z 曲線[15] 的 N 值分佈。由 Z曲線的空間臨近特性可知,數值相近的編號表示其地理位置相近,因此 I 值也有類似的空間分佈特性。
3.2 瓦片的索引查詢
當瀏覽器請求地圖服務時,前端引擎會先獲取視窗的實際地理範圍,然後解析出該地理範圍內瓦片索引號併發送請求至後臺伺服器,伺服器將相應的向量瓦片傳送至前端供其逐一載入渲染。基於各層級向量瓦片的頂點座標、索引號和瓦片層級(L o ,L a ,l,L)構建四維 Kd 樹,將視窗地理範圍和瓦片層級作為輸入量,利用四維 Kd 樹進行範圍查詢瓦片,Web 端進行網路載入傳輸。
4. 試驗分析
向量瓦片的效率由查詢呼叫、網路傳輸和符號化等部分組成。本文對前兩者進行研究與驗證。由於符號化渲染涉及到各瓦片在網頁端的無縫拼接與渲染引擎選擇,因此在試驗中需要排除無關因素的干擾。
在實際試驗中,對於傳統格網向量瓦片與本文稠稀向量瓦片,使用 OpenLayer 直接載入,預設點、線、面為藍色,保持資料來源和瀏覽器一致。首先構建稠稀向量瓦片與格網向量瓦片,進行瓦片的載入與顯示、縮放、平移等試驗操作,並在此基礎上對比兩者在瓦片資料均衡程度、網路傳輸效率和瓦片載入渲染效率上的優劣。試驗的向量瓦
片基於 geojson,每一個向量瓦片是一個單獨的geojson 檔案,包含點、線、面多個圖層。
4.1 試驗資料與測試環境
試驗資料採用資源三號衛星影像全國覆蓋範圍 2015 版鑲嵌線成果資料。試驗座標系採用CGCS2000,資料型別為 shapefile 面數據,一共有19 207 條記錄,資料包括景號、衛星名稱等屬性資料和幾何資料,資料量為 193.4 Mb。將向量資料進行座標系轉換,轉為 WGS1984 投影系。程式語言為 Java 1.8,使用開源庫 GDAL 2.0,前端使用OpenLayers 4.6。
測試環境為聯想桌上型電腦處理器 Intel(R)Core(TM)i7-870 CPU 2.93 GHz,記憶體16 Gb;作業系統為 Windows 764 位;Web 伺服器為 Tomcat 8.5;開發平臺為 Myeclipse;瀏覽器為 Chrome 67.0。將獲取的 15 461 張 0~6 層級的瓦片進行預處理,得到由其頂點縱橫座標、索引號和瓦片層級構成的四維 Kd 樹。設計一個 600 畫素 ×800 畫素大小的範圍,用來模擬瀏覽器視窗顯示資料。
4.2 瓦片效率測試
4.2.1 不同索引型別瓦片資料對比
瓦片資料情況如表 1 所示。兩種瓦片同一層級下資料量標準差對比如圖 6 所示。
對於稠稀向量瓦片,如 2.1 節所述,由於屬性資料的存在,稠稀向量瓦片之間的資料存在較小的差異;而傳統格網瓦片的幾何資料與屬性資料都存在空間分佈差異性,極易造成瓦片資料量的不均衡。因此,相比於傳統的格網瓦片劃分方式,稠稀向量瓦片之間的資料量差異更小,分佈更均衡,在網路傳輸時能保持一致的載入時間。
4.2.2 同一地理範圍查詢
為了儘量降低瀏覽器和機器效能變化所帶來的影響,同一地理空間範圍內對不同級別瓦片進行 15 次載入,得到兩種瓦片在同一層級下每次載入所需的時間。同一地理範圍兩種瓦片時間載入和載入資料總量對比如圖 7 所示。
由圖 7 可以看出,兩種型別瓦片資料載入量基本一致,每一層級載入的瓦片數相同。由圖 6可知,傳統格網瓦片之間資料標準差差異很大,瓦片資料量的差異較高,Web 端載入時會使某一網路傳輸執行緒耗時較多,增加了整體瓦片的總載入時間;但是稠稀瓦片在總資料量、瓦片數與前者基本一致的條件下瓦片大小更為均衡,網路傳輸執行緒與渲染耗時更短,因此稠稀向量瓦片載入耗時更短,說明稠稀向量瓦片前端載入效率更高。
4.2.3 同一視窗查詢效能
針對稠稀瓦片的疏密特性,隨機選擇 10 個不重疊視窗進行視窗查詢。同一視窗範圍內對兩種瓦片分別進行 15 次載入,得到不同層級下瓦片載入耗時與載入數。同一視窗範圍不同層級下兩種瓦片載入數與載入時間對比如圖 8 所示。
由圖 8 可以看出,不同層級下格網向量瓦片載入數差異很小,每次載入瓦片數基本為 6;而稠稀向量瓦片在資料密集區載入的瓦片數較多,在稀疏區載入的瓦片數較少,瓦片數為 4~17,普遍多於格網向量瓦片載入數。由於在視窗範圍內兩者所載入的總資料量基本相同,因此稠稀向量瓦片載入耗時小於格網向量瓦片,說明稠稀向量瓦片載入效率較傳統格網瓦片更好一些。
通過以上試驗,可以得到如下兩點結論。
- 稠稀向量瓦片的資料量平衡性高於格網向量瓦片,同一比例尺層級下瓦片之間資料偏差更小,在網路傳輸和瀏覽器載入顯示上更具優勢。
- 實際應用更廣泛的視窗查詢上,稠稀向量瓦片也優於格網向量瓦片。稠稀向量瓦片隨著視窗改變其載入的瓦片數也不斷改變,在網路傳輸端耗時優於格網瓦片,但是在渲染時耗時比格網瓦片稍多。
5. 結論
針對現今向量瓦片查詢呼叫和網路傳輸的侷限,提出了一種稠稀向量瓦片構建方法。通過構建稠稀向量瓦片,進行瓦片編號並藉助 Kd 樹索引查詢,與格網向量瓦片相比,在瓦片資料的均衡性上有較好的效果,在網路傳輸上具有基本一致的網路傳輸時間,在渲染時間上略有差別。
本文為向量瓦片的研究應用提供了一個新的思路,考慮了向量資料中幾何資料的聚集特性,降低了稠稀向量瓦片構建的難度。但演算法要花大量時間對向量資料的空間座標點做排序分割,導致資料量越大,演算法耗時越高。在接下來的研究中,考慮使用 MapReduce 模型進行改進,提高向量瓦片的構建效率。