朱秀麗,周治武,李 靜,趙 勇,彭云璐
(1. 國家基礎(chǔ)地理信息中心,北京100830; 2. 中南大學,湖南 長沙 410083)
?
網(wǎng)絡(luò)矢量地圖瓦片技術(shù)研究
朱秀麗1,周治武1,李 靜2,趙 勇1,彭云璐1
(1. 國家基礎(chǔ)地理信息中心,北京100830; 2. 中南大學,湖南 長沙 410083)
隨著WebGIS越來越深入人們的生活,人們對WebGIS的響應(yīng)效率、交互性、渲染效果等方面的要求越來越高?,F(xiàn)有的網(wǎng)絡(luò)地圖瓦片服務(wù)已不能完全滿足人們的需求,矢量地圖瓦片技術(shù)應(yīng)運而生。本文主要研究了矢量瓦片的圖形數(shù)據(jù)和要素數(shù)據(jù)的編碼、矢量瓦片的組織存儲方式并實現(xiàn)了對矢量瓦片的實時渲染,表明矢量地圖瓦片技術(shù)克服了傳統(tǒng)柵格瓦片的缺陷,在交互性、渲染效果及屬性查詢等方面具有很大的優(yōu)勢和很高的應(yīng)用價值。
網(wǎng)絡(luò)地圖服務(wù);矢量地圖瓦片;編碼;地圖樣式
地圖已經(jīng)成為人們工作、學習、生活不可缺少的科學工具[1]。隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展與完善,產(chǎn)生了一種全新的地圖應(yīng)用方式——網(wǎng)絡(luò)地圖。尤其是當?shù)貓D瓦片的概念被提出以來[2-3],地圖瓦片服務(wù)快速發(fā)展和壯大,Google map、Esri online、天地圖、百度地圖、高德地圖等在線地圖服務(wù)相繼出現(xiàn)。這些服務(wù)均采用相似的技術(shù),利用金字塔模型緩存多分辨率的柵格瓦片數(shù)據(jù),減少了網(wǎng)絡(luò)傳輸量,顯著提高了網(wǎng)絡(luò)地圖的響應(yīng)速度,促進了網(wǎng)絡(luò)地圖在人們?nèi)粘I钪械膹V泛應(yīng)用,改變了人們的生活方式。然而由于客戶端獲取到的是預(yù)生成的柵格瓦片圖像,在前端的交互性和空間分析等方面還不能完全滿足客戶的需求,隨著HTML5技術(shù)的發(fā)展,網(wǎng)絡(luò)地圖的矢量渲染克服了以往的瓶頸。矢量瓦片緩存技術(shù)開始發(fā)揮其優(yōu)勢,煥發(fā)新的活力,以Mapbox為代表的矢量地圖瓦片服務(wù)吸引著越來越多人的關(guān)注。本文對矢量地圖瓦片技術(shù)進行了探討,并通過試驗進行了驗證。
1. 基于網(wǎng)絡(luò)的地圖瓦片服務(wù)
網(wǎng)絡(luò)地圖瓦片服務(wù)(web map tile service),是一種基于瓦片的網(wǎng)絡(luò)地圖服務(wù),它以瓦片為單位組織地圖數(shù)據(jù)[3-4],用戶依據(jù)所需空間范圍獲取地圖瓦片數(shù)據(jù),實現(xiàn)對局部地圖的快速訪問。網(wǎng)絡(luò)地圖瓦片服務(wù)依據(jù)一定的數(shù)學規(guī)則,把地圖按照固定的多級比例尺分層,并從每層圖片的左上角開始,按照從左至右、從上到下的順序切割成相同大小(如256×256像素)的正方形地圖瓦片,形成一層一層的瓦片矩陣,構(gòu)成整個瓦片金字塔。瓦片金字塔(瓦片大小256×256像素)的組成關(guān)系見表1。
表1 瓦片金字塔的組成
tile(地圖瓦片)技術(shù)的出現(xiàn),將WebGIS向前推進了一大步。地圖瓦片技術(shù)地解決了客戶端請求地圖時的渲染效率問題和瀏覽器兼容問題。在繼谷歌地圖之后的其他WebGIS地圖服務(wù),基本都采用這種技術(shù)。矢量數(shù)據(jù)的瓦片技術(shù)也遵循同樣的思路,只是分塊的數(shù)據(jù)不是柵格圖像,而是矢量數(shù)據(jù)。當然不管是柵格數(shù)據(jù)的瓦片化,還是矢量數(shù)據(jù)的瓦片化,其目的都是通過分塊的方式減少網(wǎng)絡(luò)傳輸量,從而縮短響應(yīng)時間,提高用戶的體驗。而矢量數(shù)據(jù)的瓦片化,可以更好地實現(xiàn)客戶端和服務(wù)器的交互。
2. 矢量瓦片的編碼技術(shù)
柵格瓦片是將圖像切割成一個個JPEG或PNG圖片,而矢量圖層具有多種編碼格式,如shapefile、GeoJSON等。為了節(jié)省存儲空間和方便管理,Mapbox制定了一種矢量瓦片數(shù)據(jù)的編碼方法——Vector Tile規(guī)范[5],可以在節(jié)省空間的同時實現(xiàn)地圖的快速繪制與屬性數(shù)據(jù)的快速查詢。Vector Tile運用Google Protocol Buffers作為編碼方式,Google Protocol Buffers是一種支持多種語言(如C++、Python等)多平臺的可擴展的序列化結(jié)構(gòu)化數(shù)據(jù)存儲格式,通過自定義數(shù)據(jù)結(jié)構(gòu)可以跨平臺跨語言地實現(xiàn)矢量數(shù)據(jù)的存儲,而且它以二進制流形式進行存儲,大大節(jié)省了存儲空間。Vector Tile依據(jù)投影坐標及瓦片組織體系,實現(xiàn)地理區(qū)域范圍與瓦片編號的一一對應(yīng)關(guān)系。每個Vector Tile至少包含一個Layer,每個Layer中又包含其圖形要素和屬性信息,圖形信息被分解成一系列Line to、Move to、ClosePath繪圖命令,一個command id代表一種操作,其中1代表Move to,2代表Line to,7代表ColsePath。Line to和Move to均有兩個參數(shù),而且每個命令都有一個命令執(zhí)行次數(shù),參數(shù)采取zigzag的編碼方式,小的正值和負值的編碼均為小整數(shù),因此參數(shù)的編碼值ParameterInteger的計算公式是ParameterInteger = (value << 1) ^ (value >> 31)(value為參數(shù)的實際值)。
·MoveTo(3,6)
·LineTo(5,6)
·LineTo(12,22)
·ClosePath
以上命令的編碼如圖1所示。
圖1 命令的編碼
3. 瓦片存儲技術(shù)
瓦片化之后面臨的一個問題是如何合理存儲規(guī)模巨大的瓦片文件,如16級可能形成上億數(shù)量級的瓦片文件[6],此外還面臨快速遷移和離線利用問題。傳統(tǒng)文件系統(tǒng)磁盤存儲碎片化嚴重,影響IO性能,且數(shù)據(jù)可遷移性差,備份、遷移或恢復(fù)耗時都很漫長[7]。Mapbox公司制定了一種公開的瓦片管理和存儲規(guī)范——MBTiles[8]。MBTiles規(guī)定將生成的瓦片數(shù)據(jù)存儲在一個SQLite數(shù)據(jù)庫中,形成一個MBTiles文件,即一個瓦片數(shù)據(jù)集,實現(xiàn)存儲空間的集約化。由于SQLite數(shù)據(jù)庫兼容大多數(shù)主流平臺, 包括移動平臺Android、iOS,且具有遷移簡單、免安裝的特性[9],可以實現(xiàn)地圖瓦片的便捷使用、管理和遷移。將MBTiles文件存儲在本地,還可以實現(xiàn)地圖在移動終端的離線顯示。這是對于地圖瓦片存儲和服務(wù)的輕便、簡單文件解決方案。
MBTiles文件主要由元數(shù)據(jù)表(metadata)、tiles視圖和grid表組成。
metadata表采用鍵值對的形式來存儲地圖瓦片數(shù)據(jù)的相關(guān)設(shè)置,包括兩個文本類型的字段”name”和”value”。元數(shù)據(jù)表的各字段(keys)說明見表2。
tiles視圖由兩個表:map表和images表關(guān)聯(lián)得到,其結(jié)構(gòu)及說明見表3。
表2 metedata表的結(jié)構(gòu)及說明
表3 map表的結(jié)構(gòu)及說明
images表的結(jié)構(gòu)見表4。
表4 images表的結(jié)構(gòu)及說明
tile_data存儲PNG或JPG格式圖像的二進制流數(shù)據(jù)或矢量數(shù)據(jù)經(jīng)Vector Tile規(guī)范編碼的二進制流數(shù)據(jù)。
tiles視圖的結(jié)構(gòu)見表5。
表5 tiles視圖的結(jié)構(gòu)及說明
使用 tiles 視圖的優(yōu)勢在于可以減少冗余瓦片。地圖中海洋或空曠的土地等區(qū)域包含有成千上萬重復(fù)而冗余的純色瓦片,類似太平洋中蔚藍色的瓦片,在小比例尺中,它可能只有幾張,但在大比例尺(如1∶10 000)的地圖中,就會存在上百萬個單一顏色的藍色瓦片。MBTiles 通過拆分瓦片索引表map和瓦片數(shù)據(jù)表images,使用視圖的方式來關(guān)聯(lián)二者,這樣成千上萬的瓦片索引就可以指向同一個瓦片圖像,從而大大減少存儲冗余的純色瓦片,提升磁盤利用率及瓦片檢索效率。
4. UTFgrid技術(shù)和要素屬性的利用
在網(wǎng)絡(luò)地圖服務(wù)的應(yīng)用中,如果包含較多的鼠標交互操作,傳統(tǒng)做法是在地圖上疊加要素圖層,每個要素有自己的熱點和事件,用于完成鼠標交互。但在大數(shù)據(jù)量、高并發(fā)請求的環(huán)境中,客戶端尤其是移動終端上,就不能很好地渲染大數(shù)據(jù)量的地理要素,面臨嚴重的性能問題[10]。這種情況下,出現(xiàn)了一張地圖瓦片結(jié)合要素屬性信息的緩存方式,也就是在地圖瓦片之外,額外存儲了按照格網(wǎng)劃分的要素屬性信息。這種預(yù)先劃分的要素屬性信息,稱為屬性瓦片,目前最具代表性的是MBTiles規(guī)范附屬的UTFGrid規(guī)范[11]。
UTFGrid的解決方式是將這些點或多邊形網(wǎng)格化,在每個像素上存儲一個字符,不同的屬性用不同的字符表示,然后將這個字符表存到JSON結(jié)構(gòu)中。這樣,一個256×256像素的瓦片會附著一個256×256字符表,如果2×2像素對應(yīng)一個grid,那么就有128×128個字符表,每個不同的字符就像一個索引去關(guān)聯(lián)更完整的信息。
UTFGrid瓦片數(shù)據(jù)是一個便捷的查找表,包括三部分內(nèi)容:grid二維數(shù)組、keys一維數(shù)組及data對象。grid二維數(shù)組存儲了256×256個字符表或128×128個字符表或2n×2n字符表(n≤16),這些字符為unicode字符。keys存儲地理要素信息的密鑰key。data 是個對象,存儲了密鑰key對應(yīng)的地理要素信息。三者之間的關(guān)系為:grid中的每一個字符都對應(yīng)了一個地理要素的Key,通過 Key 才能在 data中找到地圖要素的信息,如圖2所示。
圖2 UTFGrid編碼
每個UTFGrid中的字符對應(yīng)keys映射的不同要素。在上述的格網(wǎng)中,字符映射如下:
! => Portugal(葡萄牙)
# => Spain (西班牙)
$ => Morocco(摩洛哥)
每個像素就是一個觸發(fā)點,通過與觸發(fā)點交互實現(xiàn)要素屬性的交互和顯示。如當鼠標移動到瓦片上時,根據(jù)鼠標在瓦片上的相對位置,獲取到字符表中相應(yīng)的字符,如在以上的格網(wǎng)中,4行、58列查找#字符。通過交互獲得的字符成為下一步關(guān)聯(lián)其他業(yè)務(wù)數(shù)據(jù)的索引,如人口、領(lǐng)土面積等。
5. 靈活地圖樣式配置
圖3所示為矢量瓦片地圖樣式設(shè)置的主要原理。
對于傳統(tǒng)的柵格地圖瓦片服務(wù),瓦片生成后,用戶只能見到一種風格的地圖,若要改變風格,必須重新配圖和切圖,費時費力。而運用矢量地圖瓦片服務(wù),用戶可以在切片以后,根據(jù)自己的需要實時改變地圖的樣式,并且獲得較高分辨率的輸出圖像,提升了用戶交互性和展現(xiàn)靈活性。
圖3 矢量瓦片地圖樣式配置原理
樣式化數(shù)據(jù)是瓦片數(shù)據(jù)的子集,而瓦片數(shù)據(jù)通常是用于切片數(shù)據(jù)源的子集,一套瓦片數(shù)據(jù)可以支持多種樣式化的地圖,從而形成多個地圖模板(可視化的展示)。
為了測試網(wǎng)絡(luò)矢量地圖瓦片技術(shù),本文下載OSM的中國數(shù)據(jù),基于開源代碼,研究了網(wǎng)絡(luò)矢量地圖瓦片的關(guān)鍵技術(shù):矢量瓦片切片、矢量瓦片存儲、矢量瓦片多終端顯示、矢量瓦片多樣式顯示、矢量瓦片高分辨率輸出等。圖4是將道路要素層實時更改其渲染樣式得到的結(jié)果。
圖4 道路圖層渲染效果對比
圖4的縮放層級為12級,圖4中(a)和(b)道路的填充顏色樣式不同。試驗表明網(wǎng)絡(luò)矢量地圖可以基于瓦片數(shù)據(jù),實時改變要素的視覺變量(形狀、尺寸、方向、顏色、亮度、密度等),并衍生多種地圖表達,數(shù)據(jù)與可視化是一對多的關(guān)系。
本文對網(wǎng)絡(luò)矢量地圖瓦片的部分技術(shù)進行了探索,由于其處于蓬勃發(fā)展時期,新方法新思想非?;钴S,其應(yīng)用也非常廣泛,如基于這些技術(shù)研制在線制圖系統(tǒng),實現(xiàn)矢量要素與制圖知識的1∶n關(guān)聯(lián),滿足多重制圖表達需求,以滿足人們靈性制圖要求,同時滿足網(wǎng)絡(luò)地圖高分辨率輸出的要求。
[1] 王家耀,成毅.論地圖學的屬性和地圖的價值[J].測繪學報,2015,44(3):237-241.
[2] 陳超,王亮,閆浩文,等.一種基于NoSQL的地圖瓦片數(shù)據(jù)存儲技術(shù)[J].測繪科學,2013,38(1):142-143.
[3] 王浩,喻占武,曾武,等.基于瓦片壽命和訪問熱度的海量空間數(shù)據(jù)緩存置換策略[J].武漢大學學報(信息科學版),2009,34(6):667-668.
[4] 張廣春,仲偉政.基于ArcGIS Engine組件實現(xiàn)瓦片地圖的應(yīng)用[J].測繪通報,2015(3):115-120.
[5] AGAFONKIN V,FIREBAUGH J,FISCHER E,et al.Mapbox Vector Tile Specification[EB/OL].[2016-03-09].https:∥github.com/mapbox/vector-tile-spec/blob/master/2.1/README.md.
[6] 郭明強,黃穎,謝忠.分布式環(huán)境下海量瓦片數(shù)據(jù)實時組織與調(diào)度策略研究[J].測繪通報,2013(4):25-28.
[7] 羅智勇,黎小東.基于數(shù)據(jù)庫存儲方案的高性能瓦片地圖服務(wù)研究[J].地理與地理信息科學,2013,29(3):48-51.
[8] MACWRIGHT T,WHITE W,KAEFER K,et al.MBTiles Specification[EB/OL].[2016-02-09].https:∥github.com/mapbox/mbtiles-spec.
[9] 胡菲菲.sqlite在嵌入式電子地圖中的應(yīng)用[J].工程地質(zhì)計算機應(yīng)用,2008(2):31-36.
[10] 周強,宋志峰,劉易鑫,等.一種適用于多移動終端的地圖瓦片格式的研究與應(yīng)用[J].測繪與空間地理信息,2013,36(S0):70-76.
[11] MACWRIGHT T,WHITE W,KAEFER K,et al.UTFGrid[EB/OL].[2016-02-09].https:∥github.com/mapbox/utfgrid-spec/blob/master/1.3/utfgrid.md.
[12] 蔡苑彬,劉露,陳犖,等.基于地圖制圖腳本的交互式圖例動態(tài)生成方法[J].地理空間信息,2014,12(5):154-157.
Research for Web Map Vector Tiles Technology
ZHU Xiuli,ZHOU Zhiwu,LI Jing,ZHAO Yong,Peng Yunlu
2016-03-11;
2016-05-09
科技基礎(chǔ)性工作專項(2013FY112800)
朱秀麗(1975—),女,碩士,高級工程師,主要研究方向為地理信息應(yīng)急、地理信息標準、GIS工程與地圖制圖。E-mail:zhuxiuli@nsdi.gov.cn
朱秀麗,周治武,李靜,等.網(wǎng)絡(luò)矢量地圖瓦片技術(shù)研究[J].測繪通報,2016(11):106-109.
10.13474/j.cnki.11-2246.2016.0377.
P28
B
0494-0911(2016)11-0106-04