前言
本文80%內容節選自:《WebGIS資料不切片或是時代必然》,後在其基礎上新增了部分內容。
資料切片是解決大規模大體積地理資料在Web前端輕量化傳輸和顯示的關鍵技術,是每一個開發者幾乎每天都在使用的技術,有時候將服務端底圖切成xyz圖片,有時候將大影像資料切成xyz圖片,也有時候將向量資料切成xyz的向量切片。
資料切片起源--影像切片時代(WMS → WMTS,服務端渲染+預處理)
Web上古時代,人們瀏覽線上地圖,一般是伺服器端將頁面地圖要顯示的地理範圍內的地理資料都查詢出來,然後在服務端按照專題地圖的配置樣式,渲染成地圖圖片,再返回客戶端瀏覽,這個時代誕生的OGC標準就是WMS(Web Map Service)服務,該服務一直沿用至今。
類似WMS這種服務存在很多致命的缺點:由於地理範圍的不可控,獲取範圍內的資料不可控,資料有時候會很大,資料通常在資料庫中,IO和網路傳輸就耗時很嚴重;服務端獲取資料後會進行資料渲染成地圖圖片,佔用大量CPU資源;克服一系列的困難終於成圖傳輸給前端瀏覽。可以想象,這個過程如此艱難,使用者可能等的花兒都開了。
為了解決這個痛點,谷歌地圖開創性提出了基於Web墨卡託投影,預先在服務端全量渲染,然後按照地圖不同的顯示級別(金字塔原理),切成了xyz的圖片。
該技術成為Web2.0時代使用最廣泛的技術,成為WebGIS標準,誕生了一系列如基於工業標準的TMS服務,基於OGC規範的WMTS服務。很快,百度地圖,高德地圖、天地圖都使用該技術原理建設了自己的切片地圖服務。廣大GIS從業者也開始了“專案一啟動,先把底圖切”的套路。
基於該技術原理,對大的影像資料如幾十G的GeoTiff資料也進行了切片,形成影像底圖給客戶端使用。
這個時期的開源GIS主要技術是基於GeoServer的WMS、WFS、TMS、WMTS服務。
核心技術:Web墨卡託投影、柵格金字塔
資料切片發展--向量切片時代(WMTS,客戶端渲染+預處理)
雖然基於XYZ的圖片切片技術很成功,但是也存在不少問題:
- 全圖預切耗時長:通常切圖zoom級別從0到20,透過金字塔原理圖可知,上一級別的一張圖片,下一級別會裂變成4張,級別越大,圖片越多,同時地理範圍越大,圖片也越多,圖片多了,切圖耗時就很長,資源無論是基礎底圖切片還是影像底圖切片都要耗時漫長。
- 資源要求高:需要龐大的服務端渲染和切圖的計算資源,滿足分散式渲染、切圖、儲存需求。
- 儲存冗餘:原始向量和柵格資料,同時冗餘儲存了資料切片,儲存壓力大,資料切片轉儲IO壓力大。ArcGIS為了提升轉儲效能,開創了離散性切片和緊湊型切片兩個格式,緊湊型切片在轉儲時效能較高。
- 資料更新不及時:由於切圖耗時長,通常很少會定期更新地圖切片資料,導致資料顯示落後於實際生活現狀,不能很好的服務使用者。
- 地圖千篇一律:這個時期專案最常採用的是天地圖地圖服務,不管啥專案,不管什麼地區,似乎地圖都長一個樣子。甲方可能審美疲憊了,他們希望底圖能是定製化的,能不能暗黑一點?科幻一點?
既然存在問題,自然有人想解決問題,從15年左右,Mapbox受夠了傳統地圖顯示風格了,它提出了MVT向量切片技術,該技術一經推出就大受歡迎,開啟了WebGIS底圖定製化時代。
很顯然,向量切片和影像切片最大的區別就是:渲染從服務端遷移到客戶端了,換句話說,服務端減負了,帶來的好處也是不言而喻:
- 資源要求降低:伺服器資源要求可見性降低,渲染很耗資源的。
- 資料更新比較及時:如果資料更新,簡單更新下區域性變更地區的資料的向量切片即可,由於不用全圖渲染,耗時極大減少,資料的有效性極大提高。
- 儲存冗餘降低:採用MbTiles的設計規範,將資料和序號索引剝離,複用重複區域資料,極大降低切片資料量。但是資料冗餘還是存在的。
- 地圖不再千篇一律:渲染是客戶端的,那麼甲方各種優秀的創意都能得到釋放了,配置大屏的感覺已經是很容易的事情了。各行各業的地圖五彩斑斕各有千秋,地圖設計者們的春天來了。高德、百度跟的很快,目前也都提供向量切片底圖定製化服務了
這個時期的開源GIS主要技術是基於GeoServer的向量切片服務,基於Mapbox的底圖切圖工具tippecanoe等。這個時期,3D GIS蓬勃發展,誕生了3DTiles、I3S等3D切片ogc規範,並大量在工程中使用。
向量切片解決了不少問題,但仍遺留問題是:全圖預切耗時長,切片資料冗餘佔用儲存空間。這個問題同樣也是柵格切片、3D切片共同的問題。於是有人問,能不能資料不切片?也就不存在預切耗時長,切片資料冗餘的問題了?答案是肯定的。
核心技術:向量金字塔,MVT
正所謂尾大不掉,雖然已經出現了向量切片技術,但是整體的工藝流程還是在預切路線。這可能和向量切片解決的問題相關,因為向量切片解決的是渲染的問題,可以更自由的進行渲染了,而且只需要提供一份切片資料即可。
資料切片方向--動態切片時代(WMTS,客戶端渲染)
那麼上一個階段遺留的問題還有什麼:預處理,也就是不管怎麼樣,我先切資料
筆者(原文作者:遙想公瑾當年)曾經大量使用PostGIS+平行計算+動態向量切片技術實現動態業務資料的快速前端向量呈現,PostGIS是目前開源架構裡唯一能支援動態向量切片的資料技術。
動態切片技術不再預先切圖,也不會有大量切片的檔案儲存,將切片技術誕生以來所遺留的問題都一次清空。由於通常資料量很大,動態向量切片技術基本上資料不出庫,而由資料庫彙總組織資料並直接生成切片結果出去,後臺幾乎啥也不做,時空資料庫的地位越來越重要。
這是一個嶄新的時代,預示著資料不切片時代的來臨,畢竟向量和柵格不切片技術理論上還是比較成熟的,未來3DTiles這些3D切片理論也會逐漸成熟的。
核心技術:動態向量切片+向量金字塔+MVT
在這裡我想要補充一下上面的示意圖,這裡不是說動態向量切片技術只能應用在資料庫中,前文中也提到當前開源架構中PostGIS是唯一能支援動態向量切片的資料技術。這裡是基於傳統向量切片技術與PostGIS的動態向量切片技術的對比,更多的是想表達流程的變化(預切 → 動態,以及切片產生的位置),以及流程變化帶來的效能提升和相關影響;還有就是原文作者認為的後續的發展方向,Based on spatial database。
關於動態向量切片技術
動態向量切片技術可以說是傳統向量切片的動態應用(更廣義的可以認為:是可以按需動態生成的,具備多層次模型,且每個層次包含適當選取及簡化的資料的切片技術)。強調不再預切,而是按需生成,且應該同時滿足可以快速顯示的要求。
- 按需動態生成(與資料來源是連結著的或是可連結的,即可達成隨時可訪問),不做預切
- 多層次結構(如:向量金字塔)
- 資料選取與簡化
- MVT支援
從發展程序上面看,技術的升級是為了解決此前存在的痛點問題。動態向量切片技術是為了解決預切耗時,且會產生大量的瓦片儲存(預切),資料越大,產生的瓦片越多。
從實際的應用上看,此前的向量切片技術我更願意將之稱為傳統向量切片技術,用以與向量切片做一定的區分。傳統向量切片技術還是走的預處理的路子,產生的是靜態向量瓦片資料,即在流程上是無法做到快速更新的。與之對應的便是動態實時生產的路線,可稱為動態向量瓦片技術。私以為,兩者更大的區別在於向量瓦片生產的思路,也就是是否需要預切。
所以,動態向量切片技術可以有各種各樣的實現,而PostGIS中的動態向量瓦片技術便是其中的一種。且到目前,GeoServer同樣實現了動態向量瓦片技術(只不過其歷史包袱過重 🫡)。
值得注意的是,基於資料庫的動態向量切片有一個很大的特點:縮短了切片的傳導路徑(也就是所謂的資料不出庫,出庫即為切片)。
參考
- WebGIS資料不切片或是時代必然
- PostGIS動態向量切片(原理+實現)