基於三維GIS技術的動態LOD渲染方法的實驗及驗證

針對透視投影下現有矢量地圖動態LOD渲染方法存在的不足,本文從渲染的客觀需求出發使用梯形格網統一了簡化與剖分的過程,並研究了透視投影下梯形格網的簡化算法。之後,分析了地圖簡化的影響因素,最終,針對GPU的渲染流程提出了一種基於三維GIS梯形格網的矢量地圖動態LOD渲染方法。在此基礎上,設計可視化平臺的渲染引擎以實現地圖渲染,並設計典型的實驗案例驗證本文方法的可行性與適用性。
1.可視化平臺的框架結構
本文設計的可視化平臺主要包括地圖組織模塊、地圖操作模塊和渲染執行模塊三大子模塊。以地理數據、符號庫和樣式數據確定地圖渲染樣式。地圖數據以圖層樣式和地理數據進行組織,針對矢量地圖的渲染需求設計地圖渲染模塊,同時添加地圖操作模塊用以支持用戶操作。可視化平臺的框架結構如下圖所示。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
(1)地圖組織模塊
地圖組織模塊用以對可視化平臺進行全局組織,包含圖層類、數據源類、渲染類和地圖類。數據源類包含頂點幾何數據和頂點索引數據,在數據源類進行構建梯形格網並添加空間索引,用戶操作時,依據地圖區域檢索相應數據,交給渲染模塊進行渲染。圖層類包含圖層ID、圖層可見比例範圍、圖層顏色、圖層透明度等相關屬性,每一個圖層類對應一個渲染模塊中的圖層渲染類,針對圖層屬性設置着色器程序完成對地圖的渲染。
(2)地圖操作模塊
地圖操作模塊用以實現用戶對地圖的基本操作。地圖操作模塊提供了諸多接口包含獲取地圖數據,設置地圖屬性如:俯仰角度、旋轉角度、地圖級別、地圖中心點等;通過地圖操作模塊用戶可以進行諸如平移、旋轉、縮放、俯仰等地圖操作。
(3)渲染執行模塊
渲染執行模塊用以執行地圖的渲染,在渲染執行模塊完成頂點數據的組織與傳輸,顯存中EBO數據的更新,地圖符號化渲染等操作。渲染執行模塊採用OpenGL 3.0接口,實現了對梯形格網線,面的純色填充。首先,通過仿射矩陣實現了地理座標到屏幕座標的仿射變換,針對圖層類設計相應圖層渲染類,針對圖層樣式設計相應的着色器程序完成地圖繪製。
2.實驗1:本文方法繪製效果實例
2.1 實驗數據
選擇四個即OpenStreetMap線和多邊形數據集(土地利用、建築物、自然要素和中國河流)作爲測試數據集,數據集包含總共42334個多邊形和3040條線,其中包括簡單多邊形、帶孔的多邊形、帶有島嶼的多邊形、單線和多線。這四個數據集被組織爲四個圖層並採用純色填充進行符號化。
2.2 實驗設計及分析
爲驗證本文方法的有效性,本實驗採用純色填充對地圖進行符號化,實現了縮放功能、平移功能、旋轉功能、俯仰功能、飛行功能以便於用戶進行地圖操作。本實驗通過模擬用戶放大操作得到地圖逐漸放大的效果,下圖(a)、(b)、(c)爲面狀幾何要素逐漸放大的結果,可以觀察到地圖上的面狀幾何要素隨着地圖的放大逐漸呈現越來越多的細節;下圖(d)、(e)、(f)爲線狀幾何要素逐漸放大的結果,可以觀察到地圖上的線狀幾何要素隨着地圖的放大逐漸展現越來越多的細節。經驗證,本文方法可以取得較好的LOD效果。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
爲驗證本文方法簡化的有效性,在不進行地圖要素可見性測試情況下,通過對簡化容差的倍率M的控制,在全局狀態下觀察地圖繪製效果及繪製節點數目N的變化。針對M值爲0、1、10分別進行測試。如下圖(a)、(b)、(c)所示,三種情況下面圖層的繪製節點數目分別爲2066480, 981240, 335032:如下圖(d)、(e)、(f)所示,三種情況下線圖層的繪製節點數目分別爲394244,104860, 12160。經驗證,本文方法可以在保證圖形繪製效果的基礎上有效的簡化線、面幾何要素,減少了繪製節點的數量。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
同時,本文設計了純色與3D面兩種渲染樣式,3D面渲染樣式用以支持建築物的渲染。其渲染效果如下圖所所示。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
3.實驗2:繪製效率對比實驗
本文的方法是使用OpenGL3.0進行實現的,所有測試均運行Windows 10系統下,在具備3.4GHz Intel Core 4 Quad CPU、8GB RAM和Nvidia GeForce GTX 960驅動程序版本10.6的PC上以1920*1080的蘋果木分辨率執行。
3.1 實驗數據
選擇四個OpenStreetMap線和多邊形數據集(土地利用、建築物、自然要素和中國河流)作爲測試數據集,數據集包含總共42334個多邊形和3040條線,其中包括簡單多邊形、帶孔的多邊形、帶有島嶼的多邊形、單線和多線。這四個數據集被組織爲四個圖層並採用純色填充進行符號化。
3.2 實驗設計及分析
爲了驗證本文方法的高效性,本文方法不和傳統動態LOD方法進行對比而高效的Mapbox矢量瓦片(實時切片)渲染方法進行對比,Mapbox矢量瓦片(實時切片)方法以Geojson數據格式進行加載,使用geojson-vt開源庫實時切片,包含了切片的過程,以下統稱Mapbox
矢量瓦片繪製方法。本文通過模擬用戶進行平移、縮放、俯仰和飛行四種地圖操作場景,針對相同數據分別採用本文方法和Mapbox矢量瓦片繪製方法進行多次測試,取其平均值得出實驗結果。
(1)平移測試
針對相同數據,使用本文方法和Mapbox矢量瓦片繪製方法進行平移測試,平移測試操作分爲小比例尺平移測試、中比例尺平移測試和大比例尺平移測試三個階段,期間有縮放操作,其效率整體對比如下圖所示。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
分析可知,小比例尺下(數據縮小至近乎不可見)採用兩種方法數據皆被極大簡化,繪製數據極少,Mapbox矢量瓦片繪製方法直接使用緩存的瓦片完成繪製,本文方法也採用緩存進行繪製,兩者繪製效率接近。中比例尺下(數據全局展示)對地圖進行拖動,Mapbox矢量瓦片繪製方法此時已經完成切片,但本文方法拖動過程可能出現數據的局部更新。大比例尺下(數據局部展示),Mapbox矢量瓦片繪製方法初期並未完成對周圍數據的切片,在地圖平移的過程可能發生實時切片,而本文方法簡化效率較高,相較於Mapbox矢量瓦片繪製方法切片初期繪製效率較高,在Mapbox矢量瓦片繪製方法切片完成後低於其繪製效率,如下圖所示。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
整體對比中,Mapbox矢量瓦片繪製方法的渲染效率高於本文方法。依據上文渲染示意圖可知,隨着Mapbox矢量瓦片切片完成,本文方法繪製效率逐漸低於Mapbox方法的繪製效率。但本文方法的平移時間整體測試均值爲2.65ms,大比例下局部測試均值爲3.44ms,本文方法實時簡化且達到了與Mapbox矢量瓦片繪製方法近的繪製效率,地圖繪製的幀率較高,可以滿足用戶實時性瀏覽的需求。
(2)縮放測試
針對相同數據,使用本文方法和Mapbox矢量瓦片繪製方法進行兩次連續放大縮小操作,其效率整體對比如下圖一所示。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
圖一
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
圖二
依據上圖分析可知,初次放縮時Mapbox矢量瓦片繪製方法在縮放過程中不斷發生地圖層級跳躍(比例尺變化)導致了大量地圖切片操作,如圖二中所見紅色波峯,而本文所提出的本文方法在地圖層級跳躍(比例尺變化)時進行簡化,其簡化效率遠遠高於Mapbox矢量瓦片繪製方法切片效率,如圖二中紫色波峯。兩種方法在層級之間皆採用緩存進行繪製,不同的是Mapbox矢量瓦片繪製方法採用了靜態的矢量金字塔而本文方法採用動態的緩存結構存儲數據。在初次放大的過程中,Mapbox矢量瓦片繪製方法的切片時長遠遠高於本文方法的漸進時長;但縮小的過程中,Mapbox矢量瓦片繪製方法己經完成了切片,而漸進方式需要進行實時簡化。依據圖二中放大過程中兩種波峯的數量可知在放大過程本文方法產生了多次簡化,相較於Mapbox矢量瓦片繪製方法生成了更多的層次細節。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
依據上圖分析可知,當Mapbox矢量瓦片方法完成切片後,將切片結果存儲至矢量瓦片金字塔,繪製時直接使用切片數據進行繪製繪製效率較高。但本文方法實時進行簡化,耗時相對較長。本文方法的縮放時間的均值約爲4.O5ms,Mapbox矢量瓦片繪製方法縮放時間的均值約爲2.38ms,但隨着Mapbox矢量瓦片繪製方法的切片完成,Mapbox矢量瓦片繪製方法的繪製效率會逐步提高直至穩定。如上圖中所示,切片完成後Mapbox矢量瓦片繪製方法縮放耗時的均值約爲1.21 ms,本文方法的均值約爲3.71ms。
但本文方法以較小的內存佔用可以取得與Mapbox矢量瓦片方法相近的繪製效率,且是一種無級比例尺的自適應簡化方法,層級之間更爲流暢,繪製效率較高,可以滿足用戶實時性瀏覽的需求。
(3)俯仰測試
針對相同數據,使用本文方法和Mapbox矢量瓦片繪製方法進行任意幀俯仰測試。本文測試數據全局展示狀態下傾角的連續變化,其效率如下圖所示。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
分析可知,大角度俯仰狀況下,Mapbox矢量瓦片繪製方法採用DP算法進行簡化構建矢量金字塔,其切片數量取決於地圖層級和可見數據範圍,不受視點遠近的影響。這種切片方式導致在大角度情況下,Mapbox矢量瓦片繪製方法切片數目劇增、切片時間極長如上圖中出現的紅色波峯(數字代表此節點切片時間),從而使得Mapbox矢量瓦片繪製方法繪製效率降低,其俯仰操作平均時間爲77.33ms。而本文方法簡化效率高於Mapbox矢量瓦片繪製方法切片效率且依據視點進行簡化,遠處的數據被最大限度的簡化使得相對於Mapbox矢量瓦片繪製方法效率較高,其俯仰操作平均時間爲21.05ms。可驗證,本文提出方法在俯仰操作相對於與Mapbox矢量瓦片繪製方法繪製效率得到極大提升。
(4)飛行測試
地圖的飛行操作是指從一個位置飛躍到另一個位置之間的過程,通過對兩個位置之間的點位進行平滑的插值實現。地圖飛行操作是一個包含平移,旋轉,縮放,俯仰等多個操作的組合操作。針對相同數據,使用本文方法和Mapbox矢量瓦片繪製方法進行任意幀飛行測試,飛行終點爲一極大傾角下的大比例尺地圖。效率如下圖一所示,CPU佔用率如下圖二所示,內存佔用如下表所示。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
圖一
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
圖二
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
分析可知,Mapbox矢量瓦片繪製方法在大傾角下切片時間較長、CPU佔用急劇升高,但其切片完成後採用矢量瓦片金字塔緩存了切片結果,直接使用緩存數據進行繪製,繪製效率整體較優,但內存和CPU佔用相對較大。而本文方法依據視點進行簡化,飛行過程中數據視點不斷變化導致地圖不斷進行簡化操作,繪製時間較長。但其以較小的內存和CPU佔用率,可以取得每秒50幀左右的繪製效率,可以滿足用戶實時性瀏覽的需求。
綜上實驗得出,本文方法在平移操作,縮放操作,以較小的CPU和內存佔用取得與Mapbox矢量瓦片繪製方法相近的效率,在俯仰操作可以取得優於Mapbox矢量瓦片繪製方法的繪製效率,在飛行操作可以取得每秒50幀左右的繪製效率。另外,由於俯仰操作中存在使用緩存繪製,而飛行過程中由於傾角較大、視點實時變動導致實時簡化,從而不可使用緩存繪製使得飛行操作的整體效率低於俯仰操作,其繪製平均時間如下表所示。
基於三維GIS技術的動態LOD渲染方法的實驗及驗證
4.結語
本文首先從地圖數據組織模塊,地圖操作模塊和繪製操作模塊三個方面介紹了本文設計的渲染引擎的框架結構。其次,通過渲染效果對比實驗,驗證了本文方法在保證繪製結果的基礎上可以有效的簡化矢量數據,驗證了本文方法的有效性。通過渲染效率對比實驗,驗證了本文方法的高效性,相較於Mapbox矢量瓦片繪製方法能以較小的內存和CPU佔用達到略低於Mapbox的繪製效率。同時,本文方法是一種無級比例尺的自適應方法,相較於Mapbox矢量瓦片繪製方法固定層級存在的跳躍問題具備更好的流暢性,可以保證較高幀率的繪製。
原文來自:http://www.ztmapinfo.com/blog/index.php/article/40.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章