空間資料的三維可視化。全球角度的空間資料模型
投影理論解決了球面或橢球面不可展的難題(儘管不完美),從而建立了二維平面與實際球面三維空間的對應關係,球面網格理論則構建了全球空間資料高效訪問的應用分析模型。
(一)、球面網格
球面網格的基本原理是將球面(參考橢球面)遞迴剖分為面積、形狀近似相等且具有多解析度階層的網格單元,採用單元對應的地址編碼代替地理座標在球面上進行操作。
全球網格主要分為經緯線網格和多面體網格。
經緯度網格符合人們的思維習慣,計算簡單直觀且與現有各類資料轉換比較方便,容易進行紋理座標的計算和座標轉換(地理座標到三維直角座標),在添加地理資料時,所做的工作也最少。缺點是網格單元形狀不均勻,接近極點的時候,網格扭曲,資料浪費嚴重。
多面體網格多限於學術研究,少有工程化的實現。其最大優點是每個網格單元扭曲很小,沒有太大的資料浪費。這個特性有利於三維球面繪製。但缺點是在球面繪製時紋理映射比較複雜,另外在與地理座標的轉換上也比較麻煩。
(二)、基於經緯度的球面網格
基於經緯度的球面本身就隱含了一個矩形網格系統,為了改進在高緯度地區單元變形嚴重的缺陷,GeoFusion(2005)將全球劃分為6個地區,其中4個處於南北緯45度之間,採用矩形網格,兩個處於高緯度地區,採用三角形網格,避免了高緯度地區使用矩形網格帶來的變形,但數學模型較複雜。
目前主流的虛擬地球瀏覽器均採用基於經緯度的球面網格系統,其中GoogleEarth、NASA WorldWind採用統一的矩形網格,ArcGlobe則採用GeoFusion的全球網格技術。
(world wind網格)
(geofgeofushion網格)
(三)、全球地形網格
全球地形是虛擬地球的可視化基礎。地形網格可以分為規則網格(RSG)和不規則三角網格(TIN)兩類。
1.規則網格
2.不規則三角網格
空間資料組織與管理
虛擬地球的資料主要包括地形資料、二維向量資料和模型資料。
(一)、地形資訊的管理
地形資料又分為高程資料和影像資料,他們多採用分級組織、分Block Storage。
1.多解析度金字塔
多解析度金字塔就是用一系列網格表示統一地區的地形,相鄰上下層次之間的網格的採樣精度一般為1:4,因此在大範圍地形顯示時,採用較低精度的資料能大幅度縮短資料訪問時間。
如果在每層網格上採用“分塊策略”,則資料訪問時間可進一步縮短,其基本思想就是將各層網格都細分為大小相等的矩形“瓦片”(Tile),這種資料結構也稱為“瓦片金字塔”。其優點是一次讀/寫操作就能訪問一個瓦片,並且經過甄別可以只訪問所需的瓦片;缺點是資料冗餘更多。
2.瓦片四叉樹
多解析度的TIN不具備簡單的跨越式空間結構,在執行諸如視景體裁減、碰撞檢測等操作時顯得更為複雜,並且對TIN的壓縮演算法也比較複雜,不利於資料的快速存取。
採用“分層分塊”策略的瓦片金字塔不但大大縮短了資料訪問時間而且能夠表示多解析度資料,是海量地形資料群組織的理想結構,通過與樹結構的結合,具備了快速資料索引的功能,從而形成了大範圍空間資料組織方式——瓦片四叉樹。採用四叉樹描述的瓦拓撲關係簡單,其索引只涉及加、減、加倍和減半操作,可以通過效率較高的位元運算實現。
基於經緯的球面網格的瓦片的資料採用經緯度加高程描述,符合人們的習慣,也比較直觀,而在顯示時,則要轉換為空白間直角座標系。
目前流行的虛擬地球軟體的資料群組織方式,均採用瓦片四叉樹結構。
(二)、模型資料的管理
在實現模型資料的管理時一般有兩種方式,一是整合式儲存,這種方式多用於儲存自動建模或精細建模所產生的模型檔案;另一種是以三維空間資料模型實現的模型資料(二維向量資料是3D 模型資料的一個子集),多以資料庫的方式管理,其中三維空間資料模型由包含點、線、面、體這四類空間對象的空間實體構成,其索引可以採用三維R樹來實現 。
三維可視化
在與地形、影像等柵格資料相關的各類應用中,大範圍三維地形即時瀏覽對資料群組織和呈現方式的要求較高,主要體現在兩方面:海量資料處理和球面模型建立。
(一)、可視化關鍵技術
在電腦互動式圖形處理中,即時動畫往往要求每秒25~30幀的圖形重新整理頻率,對資料調度機制和圖形繪製策略都提出了很高要求。
為了在保證地形外觀平滑的前提下盡量減少需要渲染的資料,有多種圖形產生加速方法被提出,資料裁減、多細節層次技術(Level of Detail ,LOD)、非同步資料載入、資料緩衝、請求預測已經被廣泛用於各種大規模地形情境的快速繪製演算法中。
1.資料裁減
資料裁減主要是視景體裁減(View Frustum Culling),視景體裁減的核心是計算視場的錐體裁減範圍,即由視場角定義的上下左右四個面(類似照相機的視角)和由投影矩陣定義的遠近剪下平面(類似照相機的景深),而後看三維實體(對於球面瓦片,可用其包容圓柱體)是否與視景體的相交或被視景體所包含。
2.多細節層次技術
LOD技術是在不影響畫面視覺效果的前提條件下,通過逐次簡化景物的表面細節來減少情境的幾何複雜性,從而提高繪製演算法的效率,其所遵循的原則就是能夠類比“越遠越模糊,越近越清楚”這一視覺現象,通常利用視角高度(Eyealt)與瓦片尺寸的比來判定當前顯示的瓦片是否需要分解為更高解析度的子瓦片。
3.非同步資料載入
非同步資料載入就是通過不同的線程載入瓦片資料,線程之間相互獨立而又彼此關聯,其工作原理是:主線程通過LOD演算法與資料裁減計算出所需瓦片,如果瓦片不在資料緩衝中,則將其添加到請求隊列,當資料載入完畢,通知主線程瓦片可以使用,重新整理視圖。為了在資料載入時不影響顯示的流暢性,主線程會先採用其上一級直至頂級的資料來繪製。非同步資料載入還需剔除請求隊列中因情境變換已不再需要載入的瓦片,避免資源的浪費。
4.資料緩衝
資料緩衝有磁碟緩衝和記憶體緩衝,磁碟緩衝用於將遠端資料下載到本地硬碟,以提高資料載入速度,一般情況下磁碟緩衝的大小是被限定的。
記憶體緩衝也叫快取,是已經載入了的資料,可直接用於情境顯示。快取的大小設有上下限,用以控制緩衝的瓦片數量不致太少也不要太多,快取資料的置換演算法可以用最近最少使用演算法(Least Recent Use, LRU),LRU的主要出發點就是,如果某個瓦片被訪問了,則它可能馬上還會被訪問。
5.請求預測
資料緩衝機制可以提高系統的效能,當地形情境連續運動時,如果應用程式能夠提前預測系統即將需要的資料,並能提前把這些資料讀到緩衝區,那麼當應用程式真正需要這些資料的時候,便可以直接從緩衝區讀取,從而省去了從資料來源讀取這些資料的時間。在海量地形漫遊時,資料調度和情境繪製需要同時進行,因此,可以設立一個獨立的線程來進行資料的預測調度。
(二)、地形的三維可視化
1.地形網格的構造
地形資料多採用地理座標(如經緯度)加高程資訊的地形資料,這需要轉換為對電腦而言表達簡單,處理效率較高的空間直角座標。
大地座標系是統一的,能準確、唯一地描述地球上任一點的位置,並能動態適應曆史的、現代的越來越精密的各種參考橢球體,是虛擬地球最為適當的座標系。
三維地形模型的幾何構造要素多為三角形,即每個瓦片根據地形點陣資料,再構成三角形網格,這一過程是動態即時進行的,構造好的地形網格被存入地形快取以備調用。
(地形網格)
(geofusion地形網格)
2.紋理映射
紋理映射能夠有效增強映像的真實感,在地形可視化中,衛星影像是最能提高地形真實性紋理。目前,幾乎所有支援紋理映射的圖形處理硬體都在其硬體系統中設定了紋理記憶體來緩衝紋理資料以提高紋理映射的效率。紋理記憶體的容量有限,圖形處理硬體可能無法緩衝全部紋理資料,每次紋理映射時都需從主存中傳輸部分紋理資料,因此也需要設定紋理快取中以備調用。
(三)、模型的三維可視化
模型資料也可以用瓦片為單位建立快取,來提高系統效能。
在3D 模型的展示上,點狀對象(如樹、路燈、管線點等)常採用3D 模型符號來表示;線狀對象(如管線)也是先建立三維線狀符號(如圓柱體),擷取線狀對象的走向、長度、半徑、高度方面的資訊後,經過縮放、旋轉、平移操作實現線狀對象的繪製;面狀對象繪製需建立模型並配以紋理貼圖。
(四)、三維註記
註記是虛擬地球中一個不可缺少的要素,有了註記,才能保證對地理資訊的正確認識和方便地進行查詢分析。漢字的顯示與單位元組文字的顯示不一樣,在OpenGL中是以輪廓文本的方式輸出的。
測試程式設計與實現(一)、三維平台簡介
1.三維引擎
主要有OpenGL和Driect3D。
2.現有的虛擬地球產品
基於OpenGL的虛擬地球產品主要有:NASA WorldWind Java版、OssimPlanet(以開源的Open Scene Graph為基礎),ArcGlobe;基於Driect3D的虛擬地球產品主要有:NASA WorldWind C#版、Skyline。GoogleEarth則支援OpenGL、Driect3D兩種三維引擎渲染方式。
上述平台都支援二次開發,國內的一些虛擬地球產品多以開源的平台為基礎進行二次研發。
3.測試程式開發平台的選擇
作為一個測試程式,在三維平台上主要參考開源的NASA WorldWind Java版和基於OSG的OssimPlanet。
NASAWorldWind Java版基於JOGL開發,是一款架構優秀的虛擬地球開源軟體,其資料模型針對橢球球面網格而建,而在城市3D 模型展示以及向量資料處理上目前支援不足,且在渲染時需要由Java到C語言的一次記憶體拷貝,效能上會打折扣。
(nasa world wind)
OssimPlanet繼承了OSG的情境資料管理結構且實現了與NASA WorldWind類似的全球網格模型,OSG基於C++語言,大量運用了C++模版技術,因而開發難度較大,在資料結構中主要運用樹結構組織資料,用C++智能指標來實現資料的共用,用仿函數類(重載()操作符的C++類)實現事件映射。
(二)、測試資料群組織
在全球高程和影像資料瓦片金字塔構建上,各虛擬地球產品基本一致,不同的是最上層(0層)的瓦片大小(Level Zero Tile Size),第0層可以是一個瓦片,經度跨360度,緯度跨180度,也可以是多個瓦片,NASA World Wind的第0層影像瓦片有10×5個,經緯度跨36度,其高程資料第0層瓦片為18×9個,經緯度跨20度。
1.瓦片金字塔模型構建
在構建地形金字塔時,首先把原始地形資料作為金字塔的底層(圖5-4),第2 層,並對其進行分塊,形成第2 層瓦片矩陣。在第2 層的基礎上,按每2×2個像素合成為一個像素的方法產生第1 層,並對其進行分塊,形成第1 層瓦片矩陣。如此下去,構成整個瓦片金字塔。
對於全球的高程和瓦片資料,分多少級是合適的呢?三維引擎的透視原理是類比相機在標準視角下拍攝物體的情形,相機的標準視角約為25度,此時的視角高度與瓦片尺寸的比值為2,根據這一原理,如果原始映像是1米精度,視角高度為500米的衛星影像,則赤道上每一瓦片的寬度應為250米,對於周長為40000公裡的地球,如果第0層是1個瓦片的話,要建0至17總計為18層的瓦片金字塔。
2.瓦片四叉樹
四叉樹是一種每個非葉子節點最多隻有四個分支的樹型結構,也是一種層次資料結構,其特性是能夠實現空間遞迴分解。是瓦片金字塔模型的四叉樹結構,其中矩形符號代表葉子節點,圓形符號代表非葉子節點。
(瓦片四叉樹)
四叉樹的層與瓦片的層對應,四叉樹的節點編號是瓦片所在層的層號加上瓦片的網格座標。因此,瓦片的拓撲關係包括同一層內鄰接關係和上下層之間的父與子關係兩個方面。鄰接關係有邊鄰接和角鄰接,上下層間有向上繼承和向下分解。
3.瓦片金字塔的編程實現
在瓦片金字塔的編程實現上,可以有兩種方式,一種是建立一個四叉樹資料結構,儲存瓦片上下層之間的拓撲關係,在一個節點中儲存父節點和四個子節點的指標,另一種是用散列映射(hash_map)資料結構,其中瓦片的索引作為鍵,瓦片的智能指標作為值。
四叉樹資料結構在調入一個瓦片時必須先產生其父瓦片指標,在刪除一個瓦片時必須先刪除其所有子瓦片指標,不利於LRU演算法的有效實施,而散列映射資料結構則要靈活得多。
(三)、資料的調度與可視化
地形網格的調度過程和紋理影像的調度過程是一樣的,一先一後,假設地形資料與影像資料是一起載入,則資料調度與可視化流程表示為圖所示。
系統運行效果。