虛擬地球原理與實現

相關文章鏈接1
相關文章鏈接2
一、引言

  目前與地理信息相關的信息絕大多數也是通過投影變換以平面的方式管理和使用,這已不能滿足大範圍甚至全球多分辨率海量數據管理的要求。

  2005年,美國谷歌公司推出了一款免費的虛擬地球瀏覽軟件GoogleEarth(谷歌地球),給了人們一種全新的感受,數據動態裝載、地形漸進描繪、多重細節層次(LOD: Levels of Detail)和虛擬現實表現等已成爲虛擬地球的典型技術特徵。

  因而構建一個虛擬地球,需要解決以下幾個問題:全球角度空間數據模型的構造,海量地理空間數據(包括地形、影像)的組織、管理和調度,空間數據的三維可視化。

二、全球角度的空間數據模型
  投影理論解決了球面或橢球面不可展的難題(儘管不完美),從而建立了二維平面與實際球面三維空間的對應關係,球面網格理論則構建了全球空間數據高效訪問的應用分析模型。

(一)、球面網格
  球面網格的基本原理是將球面(參考橢球面)遞歸剖分爲面積、形狀近似相等且具有多分辨率層次結構的網格單元,採用單元對應的地址編碼代替地理座標在球面上進行操作。

  全球網格主要分爲經緯線網格和多面體網格。

  經緯度網格符合人們的思維習慣,計算簡單直觀且與現有各類數據轉換比較方便,容易進行紋理座標的計算和座標轉換(地理座標到三維直角座標),在添加地理數據時,所做的工作也最少。缺點是網格單元形狀不均勻,接近極點的時候,網格扭曲,數據浪費嚴重。(圖2-1)

  圖2-1 經緯度網格

  多面體網格僅限於學術研究,鮮有工程化的實現。其最大優點就是每個網格單元扭曲很小,沒有太大的數據浪費。這個特性非常有利於三維球面繪製。但缺點是在球面繪製時紋理映射比較複雜,另外在與地理座標的轉換上也是比較麻煩(圖2-4)。

  圖2-2 多面體網格

(二)、基於經緯度的球面網格
  基於經緯度的球面本身就隱含了一個矩形網格系統,爲了改進在高緯度地區單元變形嚴重的缺陷,GeoFusion(2005)將全球劃分爲6個區域,其中4個處於南北緯45度之間,採用矩形網格,兩個處於高緯度地區,採用三角形網格,避免了高緯度地區使用矩形網格帶來的變形,但數學模型較複雜。

  目前主流的虛擬地球瀏覽器均採用基於經緯度的球面網格系統,其中GoogleEarth、NASA WorldWind採用統一的矩形網格(圖2-3),ArcGlobe則採用GeoFusion的全球網格技術(圖2-4)。

  圖2-3 World Wind網格系統系統

  圖2-4 GeoFusion網格系統

(三)、全球地形網格
  全球地形是虛擬地球的可視化基礎。地形網格可以分爲規則網格(Regular Surface Grid,RSG)和不規則三角網格(Triangulated Irregular Network,TIN)兩類(圖2-5)。

1.規則網格

  RSG是最簡單、最直接的數據模型,只需將覆蓋區域劃分爲規則排列的矩形單元,數據實際上就是規則間隔的網格點或經緯網點陣列,每個網格點與其他相鄰網格點之間的拓撲關係都隱含在該陣列的行列號中。根據該區域的原點座標、網格間距和行列號,經過簡單運算即可求得任意網格點的地理座標。

  由於RSG存儲量小、結構簡單、操作方便、因而非常適合大規模使用和管理。但是,RSG對複雜地形特徵難以確定合適的網格大小,在地形簡單地區容易產生大量冗餘數據,而在地形比較複雜的地區,又不能準確表示地形的各種微小起伏。

2.不規則三角網格

  若將地形特徵根據一定規則連接成覆蓋整個區域且互不重疊的三角形則構成一個不規則三角網格。TIN較好地顧及了地貌特徵,能逼真地表示覆雜地形的起伏,同時還能克服地形起伏變化不大的地區產生的數據冗餘問題。但由於數據量大、數據結構複雜且構網困難,TIN一般只適合表示小範圍大比例尺高精度的地形。TIN不僅要存儲每個網格點的高程,還要存儲點之間的拓撲關係,因而數據量較大。

  圖2-5 RSG和TIN

三、空間數據組織與管理
  三維空間數據是虛擬地球的基礎。虛擬地球的數據主要包括地形數據、二維矢量數據和模型數據。

(一)、地形信息的管理
  地形數據又分爲高程數據和影像數據,他們多采用分級組織、分塊存儲。

1.多分辨率金字塔

  所謂多分辨率金字塔就是用一系列網格表示統一地區的地形,相鄰上下層次之間的網格的採樣精度一般爲1:4,因此在大範圍地形顯示時,採用較低精度的數據能大幅度縮短數據訪問時間(圖2-5a)。

  如果在每層網格上採用“分塊策略”,則數據訪問時間可進一步縮短,其基本思想就是將各層網格都細分爲大小相等的矩形“瓦片”(Tile),這種數據結構也稱爲“瓦片金字塔”。其優點是一次讀/寫操作就能訪問一個瓦片,並且經過甄別可以只訪問所需的瓦片;缺點是數據冗餘更多(圖2-5b)。

  圖3-1 多分辨率金字塔

2.瓦片四叉樹

  多分辨率的TIN不具備簡單的跨越式空間結構,在執行諸如視景體裁減、碰撞檢測等操作時顯得更爲複雜,並且對TIN的壓縮算法也比較複雜,不利於數據的快速訪問。

  採用“分層分塊”策略的瓦片金字塔不但大大縮短了數據訪問時間而且能夠表示多分辨率數據,是海量地形數據組織的理想結構,通過與樹結構的結合,具備了快速數據索引的功能,從而形成了大範圍空間數據組織方式——瓦片四叉樹。採用四叉樹描述的瓦拓撲關係簡單,其索引只涉及加、減、加倍和減半操作,可以通過效率較高的位運算實現(圖3-2)。

  圖3-2 瓦片四叉樹

  基於經緯的球面網格的瓦片的數據採用經緯度加高程描述,符合人們的習慣,也比較直觀,而在顯示時,則要轉換爲空間直角座標系。

  目前流行的虛擬地球軟件的數據組織方式,均採用瓦片四叉樹結構。

(二)、模型數據的管理
  在實現模型數據的管理時一般有兩種方式,一是集成式存儲,這種方式多用於存儲自動建模或精細建模所生成的模型文件;另一種是以三維空間數據模型實現的模型數據(二維矢量數據是三維模型數據的一個子集),多以數據庫的方式管理,其中三維空間數據模型由包含點、線、面、體這四類空間對象的空間實體構成,其索引可以採用三維R樹來實現 。

四、三維可視化
  在與地形、影像等柵格數據相關的各類應用中,大範圍三維地形實時瀏覽對數據組織和呈現方式的要求較高,主要體現在兩方面:海量數據處理和球面模型建立。

(一)、可視化關鍵技術
  在計算機交互式圖形處理中,實時動畫往往要求每秒25~30幀的圖形刷新頻率(至少每秒15~20幀),也就是說所有的建模、光照和繪製等處理任務必須在大約17微妙的時間內完成,對數據調度機制和圖形繪製策略都提出了高的要求。

  爲了在保證地形外觀平滑的前提下儘量減少需要渲染的數據,有多種圖形生成加速方法被提出,數據裁減、多細節層次技術(Level of Detail ,LOD)、異步數據加載、數據緩存、請求預測已經被廣泛用於各種大規模地形場景的快速繪製算法中。

1.數據裁減

  數據裁減主要是視景體裁減(View Frustum Culling),視景體裁減的核心是計算視場的錐體裁減範圍,即由視場角定義的上下左右四個面(類似照相機的視角)和由投影矩陣定義的遠近剪切平面(類似照相機的景深),而後看三維實體(對於球面瓦片,可用其包容圓柱體)是否與視景體的相交或被視景體所包含(圖4-1)。

  圖4-1 視景體(View Frustum)

2.多細節層次技術

  LOD 技術是在不影響畫面視覺效果的前提條件下,通過逐次簡化景物的表面細節來減少場景的幾何複雜性,從而提高繪製算法的效率,其所遵循的原則就是能夠模擬“越遠越模糊,越近越清楚”這一視覺現象,通常利用視角高度(Eyealt)與瓦片尺寸的比來判定是否當前顯示的瓦片是否需要分解爲更高分辨率的子瓦片(圖4-2)。

  圖4-2 瓦片層次

3.異步數據加載

  異步數據加載就是通過不同的線程加載瓦片數據,線程之間相互獨立而又彼此關聯,其工作原理是:主線程通過LOD算法與數據裁減計算出所需瓦片,如果瓦片不在數據緩存中,則將其添加到請求隊列,當數據加載完畢,通知主線程瓦片可以使用,刷新視圖。爲了在數據加載時不影響顯示的流暢性,主線程會先採用其上一級直至頂級的數據來繪製。異步數據加載還需剔除請求隊列中因場景變換已不再需要加載的瓦片,避免資源的浪費。

4.數據緩存

  數據緩存有磁盤緩存和內存緩存,磁盤緩存用於將遠程數據下載到本地硬盤,以提高數據加載速度,一般情況下磁盤緩存的大小是被限定的。

  內存緩存也叫高速緩存,是已經加載了的數據,可直接用於場景顯示。高速緩存的大小設有上下限,用以控制緩存的瓦片數量不致太少也不要太多,緩存數據的置換算法可以用最近最少使用算法(Least Recent Use, LRU),LRU的主要出發點就是,如果某個瓦片被訪問了,則它可能馬上還會被訪問。

5.請求預測

  數據緩存機制可以提高系統的性能,當地形場景連續運動時,如果應用程序能夠提前預測系統即將需要的數據,並能提前把這些數據讀到緩存區,那麼當應用程序真正需要這些數據的時候,便可以直接從緩存區讀取,從而省去了從數據源讀取這些數據的時間。在海量地形漫遊時,數據調度和場景繪製需要同時進行,因此,可以設立一個獨立的線程來進行數據的預測調度。

(二)、地形的三維可視化
1.地形網格的構造

  地形數據多采用地理座標(如經緯度)加高程信息的地形數據,這需要轉換爲對計算機而言表達簡單,處理效率較高的空間直角座標(圖4-3)。

  圖4-3 地形數據球面映射

  大地座標系是統一的,能準確、唯一地描述地球上任一點的位置,並能動態適應歷史的、現代的越來越精密的各種參考橢球體,是虛擬地球最爲適當的座標系(圖4-4)。

  圖4-4 地形數據投影模型

  三維地形模型的幾何構造要素多爲三角形(圖4-5),即每個瓦片根據地形點陣數據,再構成三角形網格,這一過程是動態實時進行的,構造好的地形網格被存入地形高速緩存以備調用(圖4-6)。

  圖4-5 地形網格

  圖4-6 ArcGlobe的GeoFusion地形網格

2.紋理映射

  紋理映射能夠有效增強圖像的真實感,在地形可視化中,衛星影像是最能提高地形真實性紋理。目前,幾乎所有支持紋理映射的圖形處理硬件都在其硬件系統中設置了紋理內存來緩存紋理數據以提高紋理映射的效率。紋理內存的容量有限,圖形處理硬件可能無法緩存全部紋理數據,每次紋理映射時都需從主存中傳輸部分紋理數據,因此也需要設置紋理高速緩存中以備調用。

(三)、模型的三維可視化
  模型數據也可以用瓦片爲單位建立高速緩存,來提高系統性能。

  在三維模型的展示上,點狀對象(如樹、路燈、管線點等)常採用三維模型符號來表示;線狀對象(如管線)也是先建立三維線狀符號(如圓柱體),獲取線狀對象的走向、長度、半徑、高度方面的信息後,經過縮放、旋轉、平移操作實現線狀對象的繪製;面狀對象繪製需建立模型並配以紋理貼圖。

(四)、三維註記
  註記是虛擬地球中一個不可缺少的要素,有了註記,才能保證對地理信息的正確認識和方便地進行查詢分析。漢字的顯示與單字節文字的顯示不一樣,在OpenGL中是以輪廓文本的方式輸出的。

五、測試程序設計與實現
(一)、三維平臺簡介
1.三維引擎

  三維引擎主要是OpenGL(OpenGraphicsLib)和Driect3D。

  OpenGL是Silicon Graphics公司(SGI)開發的一個工業標準,它靈活方便地實現了二維和三維的高級圖形技術,具有建模,變換,光線處理,色彩處理,動畫等。OpenGL獨立於硬件設備,窗口系統和操作系統。

  Direct 3D是基於微軟的通用對象模式COM(Common Object Mode)的3D圖形API,主要爲遊戲開發而設計,是DirectX的一個組成部分。以COM接口形式提供的API,較爲複雜,穩定性差,另外,目前只在Windows平臺上可用。

  在遊戲領域,DirectX的影響力已漸漸超越OpenGL並被大多數PC遊戲開發商所採用,但在專業高端繪圖中,OpenGL因爲功能更豐富且圖象質量更高,仍然主宰這一領域。

2.現有的虛擬地球產品

  基於OpenGL的虛擬地球產品主要有:NASA WorldWind Java版、OssimPlanet(以開源的Open Scene Graph爲基礎),ArcGlobe;基於Driect3D的虛擬地球產品主要有:NASA WorldWind C#版、Skyline。GoogleEarth則支持OpenGL、Driect3D兩種三維引擎渲染方式。

  上述平臺都支持二次開發,國內的一些虛擬地球產品大多以開源的平臺爲基礎進行二次研發。

3.測試程序開發平臺的選擇

  作爲一個測試程序,在三維平臺上主要參考開源的NASA WorldWind Java版和基於OSG(Open Scene Graph)的OssimPlanet。

  NASA WorldWind Java版基於JOGL(Java OpenGL,Java對OpenGL API綁定)開發,是一款架構優秀的虛擬地球開源軟件(圖5-1),其數據模型針對橢球球面網格而建,而在城市三維模型展示以及矢量數據處理上目前支持不足,且在渲染時需要由Java到C語言的一次內存拷貝,性能上會打折扣。

  圖5-1 NASA WorldWind Java架構圖

  OssimPlanet繼承了OSG的場景數據管理結構且實現了與NASA WorldWind類似的全球網格模型(圖5-2),OSG基於C++語言,大量運用了C++模版技術,因而開發難度較大,在數據結構中主要運用樹結構組織數據,用C++智能指針來實現數據的共享,用仿函數類(重載()操作符的C++類)實現事件映射。

  圖5-2 ossimPlanet架構圖

(二)、測試數據組織
  在全球高程和影像數據瓦片金字塔構建上,各虛擬地球產品基本一致,不同的是最上層(0層)的瓦片大小(Level Zero Tile Size),第0層可以是一個瓦片,經度跨360度,緯度跨180度,也可以是多個瓦片,NASA World Wind的第0層影像瓦片有10×5個,經緯度跨36度(圖5-3),其高程數據第0層瓦片爲18×9個,經緯度跨20度。

  圖5-3 NASA World Wind第0層瓦片

1.瓦片金字塔模型構建

  在構建地形金字塔時,首先把原始地形數據作爲金字塔的底層(圖5-4),如圖第2 層,並對其進行分塊,形成第2 層瓦片矩陣。在第2 層的基礎上,按每2×2個像素合成爲一個像素的方法生成第1 層,並對其進行分塊,形成第1 層瓦片矩陣。如此下去,構成整個瓦片金字塔。

  圖5-4 瓦片金字塔的構建

  對於全球的高程和瓦片數據,分多少級是合適的呢?三維引擎的透視原理是模擬相機在標準視角下拍攝物體的情形,相機的標準視角約爲25度,此時的視角高度與瓦片尺寸的比值爲2,根據這一原理,如果原始圖像是1米精度,視角高度爲500米的衛星影像,則赤道上每一瓦片的寬度應爲250米,對於周長爲40000公里的地球,如果第0層是1個瓦片的話,要建0至17總計爲18層的瓦片金字塔。

2.瓦片四叉樹

  四叉樹是一種每個非葉子節點最多隻有四個分支的樹型結構,也是一種層次數據結構,其特性是能夠實現空間遞歸分解。圖5-5 是瓦片金字塔模型的四叉樹結構示意圖,其中矩形符號代表葉子節點,圓形符號代表非葉子節點。

  圖5-5 瓦片四叉樹

  四叉樹的層與瓦片的層對應,四叉樹的節點編號是瓦片所在層的層號加上瓦片的網格座標(見圖3-2)。因此,瓦片的拓撲關係(圖5-6)包括同一層內鄰接關係和上下層之間的父與子關係兩個方面。鄰接關係有邊鄰接和角鄰接,上下層間有向上繼承和向下分解。

  圖5-6 瓦片的拓撲關係

3.瓦片金字塔的編程實現

  在瓦片金字塔的編程實現上,可以有兩種方式,一種是建立一個四叉樹數據結構,保存瓦片上下層之間的拓撲關係,在一個節點中保存父節點和四個子節點的指針,另一種是用散列映射(hash_map)數據結構,其中瓦片的索引作爲鍵,瓦片的智能指針作爲值。

  四叉樹數據結構在調入一個瓦片時必須先生成其父瓦片指針,在刪除一個瓦片時必須先刪除其所有子瓦片指針,不利於LRU算法的有效實施,而散列映射數據結構則要靈活得多。

(三)、數據的調度與可視化
  地形網格的調度過程和紋理影像的調度過程是一樣的,一先一後,假設地形數據與影像數據是一起加載,則數據調度與可視化流程表示爲圖5-7所示。系統運行效果如圖5-8所示。

  圖5-7 數據調度與可視化流程圖

  圖5-8 測試程序運行效果圖(廣州大學城)

六、結束語
  本文從原理、工程實現以及具體編程幾個方面分析和探討了全球角度空間數據模型的構造,海量地理空間數據的組織、管理和調度,空間數據的三維可視化這三個在虛擬地球實現中所面臨的難題,並在測試程序中實現了主要的功能,但在二維地理數據以及模型的可視化上,測試程序還沒有實現。隨着三維技術的發展,基於三維平臺的地理信息應用會越來越多,這將是本文中測試程序擴展的方向。

參考文獻
  [1] 張永生,賁進,童曉衝.地球空間信息球面離散網格——理論、算法及應用.科學出版社,2007:第一章,第二章

  [2] 李成名,王繼周,馬照亭.數字城市三維地理空間框架原理與方法.科學出版社,2008:第五章

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章