向澤君,薛梅
(重慶市勘測院,重慶 400020)
基于DirectX的三維地理信息引擎設(shè)計與實現(xiàn)
向澤君?,薛梅
(重慶市勘測院,重慶 400020)
通過分析國內(nèi)外三維地理信息系統(tǒng)技術(shù)現(xiàn)狀,提出了基于DirectX實現(xiàn)三維地理信息引擎的架構(gòu)設(shè)計,并在此基礎(chǔ)上自主開發(fā)了三維地理信息引擎Spatial3D,并成功應(yīng)用于沙盤展示、應(yīng)急演練、GPS跟蹤等多個業(yè)務(wù)領(lǐng)域。
三維地理信息系統(tǒng);DirectX;3DGIS
近年來,隨著三維可視化技術(shù)取得突破性進(jìn)展以及計算機(jī)硬件效率的大幅度提升,三維地理信息系統(tǒng)(3DGIS)逐漸走入人們視野,并成為地理信息業(yè)發(fā)展的新方向,在規(guī)劃、水利、應(yīng)急等領(lǐng)域發(fā)揮著越來越多的作用。國內(nèi)外地理信息平臺商紛紛推出了各種商用三維地理信息平臺,這些商用三維地理信息平臺普遍具有價格高昂、擴(kuò)展不易的問題,阻礙了三維地理信息系統(tǒng)在中小型應(yīng)用中的推廣。
本文通過分析國內(nèi)外三維地理信息系統(tǒng)技術(shù)現(xiàn)狀,提出了基于DirectX的三維地理信息引擎的架構(gòu)設(shè)計及關(guān)鍵技術(shù),并在此基礎(chǔ)上開發(fā)了可擴(kuò)展、易配置的自主三維地理信息引擎Spatial3D,成功應(yīng)用于沙盤展示、應(yīng)急演練、GPS等多個領(lǐng)域。
由于三維建模和繪制技術(shù)突破,現(xiàn)有的國內(nèi)外三維地理信息技術(shù)相對比較成熟,主要包括商用和開源兩大類。
代表性的商用三維地理信息平臺為Skyline和ArcGlobe。Skyline是美國Skyline公司為網(wǎng)絡(luò)運營三維地理信息提供的企業(yè)級解決方案,給客戶提供一站式服務(wù),并開放了所有的接口。ArcGlobe是ESRI公司開發(fā)的ArcGIS產(chǎn)品系列之一,它使用標(biāo)準(zhǔn)的ArcGIS數(shù)據(jù)源和圖層,提供了海量地理數(shù)據(jù)的交互式可視化,允許全球數(shù)據(jù)、本地數(shù)據(jù)和街道級數(shù)據(jù)間的無縫過渡。和Skyline相比,ArcGlobe的顯示效果有所不及,其主要長處在于強大后臺空間分析功能。
開源三維地理信息平臺中最具代表性的是World Wind。它是NASA(美國國家航空與航天管理局)發(fā)布的開源軟件,通過可視化的地球儀,將NASA、USGS(美國地質(zhì)局)以及其他WMS(基于網(wǎng)絡(luò)的地圖服務(wù))服務(wù)商提供的圖像通過一個三維的地球模型展現(xiàn)。軟件用C#編寫,調(diào)用微軟的SQL Server影像庫來進(jìn)行全球地形三維顯示。目前,包括國內(nèi)部分三維GIS軟件在內(nèi)的全球許多主流三維軟件都是以WorldWind為技術(shù)內(nèi)核發(fā)展而來。
3.1 總體目標(biāo)
由于人力和投入限制,在規(guī)模上,自主三維地理信息引擎不能和商用三維地理信息平臺相比,但具備成本低廉、應(yīng)用靈活的特點。自主三維地理信息引擎應(yīng)實現(xiàn)以下目標(biāo):
(1)低硬件配置:不需要獨立顯卡支撐,在普通臺式機(jī)或筆記本上也能瀏覽;
(2)低平臺依賴:在最小應(yīng)用情況下,不依賴任何第三方地理信息系統(tǒng)平臺,節(jié)約成本;
(3)高配置性:使用外部配置的方式,可在很短時間內(nèi)裝配出適用于不同區(qū)域的三維沙盤;
(4)高擴(kuò)展性:提供良好的插件機(jī)制,讓核心研發(fā)人員之外的技術(shù)人員擴(kuò)展引擎功能,如GPS跟蹤、視頻監(jiān)控、空間搜索等;
(5)高標(biāo)準(zhǔn)性:支持通用數(shù)據(jù)格式,并可擴(kuò)展這些輸入。例如Shape文件、GeoDatabase等。
3.2 架構(gòu)設(shè)計
經(jīng)過大量論證[1,3,5],自主三維地理信息引擎(Spatial3D)架構(gòu)主要包括基礎(chǔ)程序集、場景繪制程序集、數(shù)據(jù)加載程序集、場景管理程序集、界面程序集五個部分,其中場景繪制程序集和數(shù)據(jù)加載程序集是可以提供給二次開發(fā)者擴(kuò)展的(如圖1)。
圖1 Spatial3D引擎架構(gòu)圖
各程序集主要作用如下:
(1)基礎(chǔ)程序集。此部分是Spatial3D的基礎(chǔ),提供配置結(jié)構(gòu)定義、基礎(chǔ)空間模型定義、界面模型定義、三維要素模型定義、公共結(jié)構(gòu)定義、公共數(shù)據(jù)結(jié)構(gòu)及算法實現(xiàn)等內(nèi)容。
(2)數(shù)據(jù)加載程序集。依賴于基礎(chǔ)程序集,實現(xiàn)其中的數(shù)據(jù)加載接口。在Spatial3D中,每個圖層都配置了一個數(shù)據(jù)加載類,這為多數(shù)據(jù)源的程序部署提供了最大便利性。根據(jù)實際數(shù)據(jù)源格式,可對數(shù)據(jù)加載類進(jìn)行各種擴(kuò)充。考慮到軟件環(huán)境依賴性,還可將其拆分為不同的程序集。根據(jù)部署環(huán)境決定選用哪一個數(shù)據(jù)加載類。
(3)場景繪制程序集。此部分集中體現(xiàn)了對Direct3D技術(shù)的應(yīng)用,依賴于DirectX 9,是Spatial3D的核心。
(4)場景管理程序集:其中SceneManager起到工廠作用,它通過讀取配置,進(jìn)行場景的初始化以及各個圖層的組裝,并控制圖層加載、繪制及資源銷毀,保證非托管資源的有效釋放。同時對外提供地圖瀏覽、查詢等各種公用API接口。
(5)界面程序集:包括場景管理程序集基礎(chǔ)上封裝的用戶控件,使三維應(yīng)用變得更加簡單。
4.1 依賴倒置及可配置化
依賴倒置和可配置化是提高應(yīng)用程序擴(kuò)展性、伸縮性和配置性的主要方式??紤]到不同的數(shù)據(jù)源及應(yīng)用場景,有必要分離數(shù)據(jù)加載,而場景繪制的聲明與實現(xiàn),則通過配置進(jìn)行對象的創(chuàng)建和初始化。所有實現(xiàn)相關(guān)類都采用了無參數(shù)的構(gòu)造函數(shù),通過設(shè)置屬性的方式進(jìn)行注入,通過顯示實現(xiàn)Idisposable接口進(jìn)行資源釋放。Spatial3D中所有動態(tài)信息都可以通過配置進(jìn)行定義。在配置節(jié)中主要的配置節(jié)點包括:
(1)場景采用的核心繪制程序集定義
(2)環(huán)境設(shè)置,包括攝影機(jī)、燈光、天空盒、霧、參考坐標(biāo)系
(3)圖層集合,每個圖層包括數(shù)據(jù)源、顯示樣式及數(shù)據(jù)加載類和場景繪制類名稱
(4)所有數(shù)據(jù)加載類
(5)所有場景繪制類
(6)菜單
(7)狀態(tài)欄
4.2 圖層加載多線程化
在三維場景中,常常包含多個圖層(地形、道路、建筑、地標(biāo)…),如果采用單線程進(jìn)行順序的加載,用戶體驗將非常糟糕,如WorldWind采用單線程方式進(jìn)行加載和繪制,從進(jìn)入應(yīng)用系統(tǒng)到顯示場景,要等上數(shù)分鐘之久。
在Spatial3D中,場景管理器統(tǒng)一提供對外接口,包括導(dǎo)航、圖層管理和數(shù)據(jù)查詢定位,其中所有地物要素都是以圖層的方式進(jìn)行管理的,包含名稱、編碼、是否可見、最大最小顯示高度、數(shù)據(jù)來源、數(shù)據(jù)加載類、場景繪制類、圖層的顯示樣式等。圖層加載和繪制過程中,當(dāng)一個圖層創(chuàng)建后,它需要首先創(chuàng)建對應(yīng)的加載和繪制類,由數(shù)據(jù)加載類進(jìn)行數(shù)據(jù)加載,然后再根據(jù)數(shù)據(jù)類型進(jìn)行場景繪制,該過程使用多線程技術(shù),大大提高了數(shù)據(jù)加載和繪制速度,程序流暢、可操控性好。
4.3 界面設(shè)計定制化
Spatial3D參照成熟商用軟件界面要素,搭建了一套可擴(kuò)展、易配置的界面模型。將所有界面要素分為四種類型:菜單、側(cè)邊欄、狀態(tài)欄、對話框窗體。
圖2 Spatial3D界面構(gòu)成
菜單通常??吭诮缑娴纳戏健2藛沃邪粋€或多個按鈕。用于響應(yīng)用戶的各種操作。側(cè)邊欄通常??吭诮缑孀蠖耍W鳛椴僮髅姘迨褂?,例如圖層管理等。狀態(tài)欄通常停靠在界面下端,用于表現(xiàn)標(biāo)志、提供使用幫助以及記錄當(dāng)前位置等。對話框窗體通常浮動在界面中央,用于定位、查詢等相關(guān)操作,如圖2所示。
4.4 場景繪制技術(shù)擴(kuò)充化
不同的地物要素,所對應(yīng)的繪制方法也有所不同。在二維世界中同樣是線狀要素的管網(wǎng)和道路,在三維世界中有著很大的區(qū)別。例如道路不需要考慮管徑,而管網(wǎng)則必須考慮,它們算法的差異性是非常巨大的。Spatial3D為每種基礎(chǔ)地物要素編寫了單個的繪制算法,一個繪制算法代表一個場景繪制類。主要包括:
(1)簡單建筑物繪制
(2)地形繪制
(3)道路繪制
(4)三維地標(biāo)繪制
(5)3Dmax模型繪制
(6)GPS跟蹤及回放繪制
(7)統(tǒng)計繪制
圖3 主要繪制效果
隨著應(yīng)用范圍的擴(kuò)展,這些場景繪制類還可逐漸增加,出現(xiàn)管線繪制類、土地利用繪制類等多種繪制類。部分效果如圖3所示。
4.5 通用數(shù)據(jù)加載技術(shù)
Spatial3D默認(rèn)采用Shape文件格式讀取及其四叉樹的空間索引算法。Shape文件是已經(jīng)公開的格式,不需要依賴于任何地理信息平臺。同時,采用四叉樹空間索引算法,最快索引到某一范圍的空間數(shù)據(jù),大大提高加載速度。
基于DirectX的自主三維地理信息引擎Spatial3D由于其低廉的成本和靈活的配置性,已經(jīng)體現(xiàn)出一定的商業(yè)價值,滿足了中小型項目應(yīng)用的需要。目前已驗證可運行的最低硬件環(huán)境為:處理器:Intel?Pentium?4 CPU 2.40GHZ,內(nèi)存:1.00 GB,顯卡:GeForce4 MX 440-8X(顯存64MB),而運行的軟件環(huán)境為:WindowsXP Professional,.Net Framework 2.0,DirectX 9 Redist Pack。下一步,將繼續(xù)加強對場景繪制類的擴(kuò)充,使其更加廣泛地應(yīng)用于各個領(lǐng)域。
[1] Fletcher DunnParberryIan.3D Math Primer for Graphics and Game Development[M].Wordware Publishing,2005
[2] 吳軍,魚小剛,郭英.二維、三維GIS系統(tǒng)的結(jié)合研究與應(yīng)用[M].北京:數(shù)字石油和化工,2009
[3] 劉艷,馬勁松,張永玉.3DGIS中空間對象的存儲與快速查詢[J].測繪科學(xué),2009,34(4):147~149
[4] 宇林軍,孫丹峰,李紅.基于緊密型二三維結(jié)合的GIS構(gòu)架與系統(tǒng)實現(xiàn)[J].地理與地理信息科學(xué),2009,25(5): 17~20
[5] 蘇莉.三維GIS紋理坐標(biāo)數(shù)據(jù)管理方法的研究[J].科技信息,2009(5):125~127
Design AndImplementation of DirectX-based Three-demensial Geographic Information Engine
Xiang ZeJun,Xue Mei
(Chongqing Surveying Institute,Chongqing 400020,China)
By analyzing the domestic and international status of three-dimensional geographic information system technology,this paper propos architecture implemented by DirectX based on three-dimensional Geographic Information Engine,and self-developed three-dimensional Geographic Information Engine named Spatial3D,and successfully applied to sand table display,emergency drills,GPS tracking and other business areas.
Three-dimensional Geographic Information System;DirectX;3DGIS
1672-8262(2011)02-7-03
P208
A
2011—01—17
向澤君(1965—),男,正高職高級工程師,主要從事水利工程勘察設(shè)計、城市勘測管理和技術(shù)研究、及數(shù)字城市建設(shè)研究。
重慶市信息產(chǎn)業(yè)發(fā)展基金項目(2009-009)