向澤君,薛梅
(重慶市勘測院,重慶 400020)
基于DirectX的三維地理信息引擎設計與實現
向澤君?,薛梅
(重慶市勘測院,重慶 400020)
通過分析國內外三維地理信息系統技術現狀,提出了基于DirectX實現三維地理信息引擎的架構設計,并在此基礎上自主開發了三維地理信息引擎Spatial3D,并成功應用于沙盤展示、應急演練、GPS跟蹤等多個業務領域。
三維地理信息系統;DirectX;3DGIS
近年來,隨著三維可視化技術取得突破性進展以及計算機硬件效率的大幅度提升,三維地理信息系統(3DGIS)逐漸走入人們視野,并成為地理信息業發展的新方向,在規劃、水利、應急等領域發揮著越來越多的作用。國內外地理信息平臺商紛紛推出了各種商用三維地理信息平臺,這些商用三維地理信息平臺普遍具有價格高昂、擴展不易的問題,阻礙了三維地理信息系統在中小型應用中的推廣。
本文通過分析國內外三維地理信息系統技術現狀,提出了基于DirectX的三維地理信息引擎的架構設計及關鍵技術,并在此基礎上開發了可擴展、易配置的自主三維地理信息引擎Spatial3D,成功應用于沙盤展示、應急演練、GPS等多個領域。
由于三維建模和繪制技術突破,現有的國內外三維地理信息技術相對比較成熟,主要包括商用和開源兩大類。
代表性的商用三維地理信息平臺為Skyline和ArcGlobe。Skyline是美國Skyline公司為網絡運營三維地理信息提供的企業級解決方案,給客戶提供一站式服務,并開放了所有的接口。ArcGlobe是ESRI公司開發的ArcGIS產品系列之一,它使用標準的ArcGIS數據源和圖層,提供了海量地理數據的交互式可視化,允許全球數據、本地數據和街道級數據間的無縫過渡。和Skyline相比,ArcGlobe的顯示效果有所不及,其主要長處在于強大后臺空間分析功能。
開源三維地理信息平臺中最具代表性的是World Wind。它是NASA(美國國家航空與航天管理局)發布的開源軟件,通過可視化的地球儀,將NASA、USGS(美國地質局)以及其他WMS(基于網絡的地圖服務)服務商提供的圖像通過一個三維的地球模型展現。軟件用C#編寫,調用微軟的SQL Server影像庫來進行全球地形三維顯示。目前,包括國內部分三維GIS軟件在內的全球許多主流三維軟件都是以WorldWind為技術內核發展而來。
3.1 總體目標
由于人力和投入限制,在規模上,自主三維地理信息引擎不能和商用三維地理信息平臺相比,但具備成本低廉、應用靈活的特點。自主三維地理信息引擎應實現以下目標:
(1)低硬件配置:不需要獨立顯卡支撐,在普通臺式機或筆記本上也能瀏覽;
(2)低平臺依賴:在最小應用情況下,不依賴任何第三方地理信息系統平臺,節約成本;
(3)高配置性:使用外部配置的方式,可在很短時間內裝配出適用于不同區域的三維沙盤;
(4)高擴展性:提供良好的插件機制,讓核心研發人員之外的技術人員擴展引擎功能,如GPS跟蹤、視頻監控、空間搜索等;
(5)高標準性:支持通用數據格式,并可擴展這些輸入。例如Shape文件、GeoDatabase等。
3.2 架構設計
經過大量論證[1,3,5],自主三維地理信息引擎(Spatial3D)架構主要包括基礎程序集、場景繪制程序集、數據加載程序集、場景管理程序集、界面程序集五個部分,其中場景繪制程序集和數據加載程序集是可以提供給二次開發者擴展的(如圖1)。

圖1 Spatial3D引擎架構圖
各程序集主要作用如下:
(1)基礎程序集。此部分是Spatial3D的基礎,提供配置結構定義、基礎空間模型定義、界面模型定義、三維要素模型定義、公共結構定義、公共數據結構及算法實現等內容。
(2)數據加載程序集。依賴于基礎程序集,實現其中的數據加載接口。在Spatial3D中,每個圖層都配置了一個數據加載類,這為多數據源的程序部署提供了最大便利性。根據實際數據源格式,可對數據加載類進行各種擴充。考慮到軟件環境依賴性,還可將其拆分為不同的程序集。根據部署環境決定選用哪一個數據加載類。
(3)場景繪制程序集。此部分集中體現了對Direct3D技術的應用,依賴于DirectX 9,是Spatial3D的核心。
(4)場景管理程序集:其中SceneManager起到工廠作用,它通過讀取配置,進行場景的初始化以及各個圖層的組裝,并控制圖層加載、繪制及資源銷毀,保證非托管資源的有效釋放。同時對外提供地圖瀏覽、查詢等各種公用API接口。
(5)界面程序集:包括場景管理程序集基礎上封裝的用戶控件,使三維應用變得更加簡單。
4.1 依賴倒置及可配置化
依賴倒置和可配置化是提高應用程序擴展性、伸縮性和配置性的主要方式。考慮到不同的數據源及應用場景,有必要分離數據加載,而場景繪制的聲明與實現,則通過配置進行對象的創建和初始化。所有實現相關類都采用了無參數的構造函數,通過設置屬性的方式進行注入,通過顯示實現Idisposable接口進行資源釋放。Spatial3D中所有動態信息都可以通過配置進行定義。在配置節中主要的配置節點包括:
(1)場景采用的核心繪制程序集定義
(2)環境設置,包括攝影機、燈光、天空盒、霧、參考坐標系
(3)圖層集合,每個圖層包括數據源、顯示樣式及數據加載類和場景繪制類名稱
(4)所有數據加載類
(5)所有場景繪制類
(6)菜單
(7)狀態欄
4.2 圖層加載多線程化
在三維場景中,常常包含多個圖層(地形、道路、建筑、地標…),如果采用單線程進行順序的加載,用戶體驗將非常糟糕,如WorldWind采用單線程方式進行加載和繪制,從進入應用系統到顯示場景,要等上數分鐘之久。
在Spatial3D中,場景管理器統一提供對外接口,包括導航、圖層管理和數據查詢定位,其中所有地物要素都是以圖層的方式進行管理的,包含名稱、編碼、是否可見、最大最小顯示高度、數據來源、數據加載類、場景繪制類、圖層的顯示樣式等。圖層加載和繪制過程中,當一個圖層創建后,它需要首先創建對應的加載和繪制類,由數據加載類進行數據加載,然后再根據數據類型進行場景繪制,該過程使用多線程技術,大大提高了數據加載和繪制速度,程序流暢、可操控性好。
4.3 界面設計定制化
Spatial3D參照成熟商用軟件界面要素,搭建了一套可擴展、易配置的界面模型。將所有界面要素分為四種類型:菜單、側邊欄、狀態欄、對話框窗體。

圖2 Spatial3D界面構成
菜單通常停靠在界面的上方。菜單中包含一個或多個按鈕。用于響應用戶的各種操作。側邊欄通常停靠在界面左端,常作為操作面板使用,例如圖層管理等。狀態欄通常停靠在界面下端,用于表現標志、提供使用幫助以及記錄當前位置等。對話框窗體通常浮動在界面中央,用于定位、查詢等相關操作,如圖2所示。
4.4 場景繪制技術擴充化
不同的地物要素,所對應的繪制方法也有所不同。在二維世界中同樣是線狀要素的管網和道路,在三維世界中有著很大的區別。例如道路不需要考慮管徑,而管網則必須考慮,它們算法的差異性是非常巨大的。Spatial3D為每種基礎地物要素編寫了單個的繪制算法,一個繪制算法代表一個場景繪制類。主要包括:
(1)簡單建筑物繪制
(2)地形繪制
(3)道路繪制
(4)三維地標繪制
(5)3Dmax模型繪制
(6)GPS跟蹤及回放繪制
(7)統計繪制

圖3 主要繪制效果
隨著應用范圍的擴展,這些場景繪制類還可逐漸增加,出現管線繪制類、土地利用繪制類等多種繪制類。部分效果如圖3所示。
4.5 通用數據加載技術
Spatial3D默認采用Shape文件格式讀取及其四叉樹的空間索引算法。Shape文件是已經公開的格式,不需要依賴于任何地理信息平臺。同時,采用四叉樹空間索引算法,最快索引到某一范圍的空間數據,大大提高加載速度。
基于DirectX的自主三維地理信息引擎Spatial3D由于其低廉的成本和靈活的配置性,已經體現出一定的商業價值,滿足了中小型項目應用的需要。目前已驗證可運行的最低硬件環境為:處理器:Intel?Pentium?4 CPU 2.40GHZ,內存:1.00 GB,顯卡:GeForce4 MX 440-8X(顯存64MB),而運行的軟件環境為:WindowsXP Professional,.Net Framework 2.0,DirectX 9 Redist Pack。下一步,將繼續加強對場景繪制類的擴充,使其更加廣泛地應用于各個領域。
[1] Fletcher DunnParberryIan.3D Math Primer for Graphics and Game Development[M].Wordware Publishing,2005
[2] 吳軍,魚小剛,郭英.二維、三維GIS系統的結合研究與應用[M].北京:數字石油和化工,2009
[3] 劉艷,馬勁松,張永玉.3DGIS中空間對象的存儲與快速查詢[J].測繪科學,2009,34(4):147~149
[4] 宇林軍,孫丹峰,李紅.基于緊密型二三維結合的GIS構架與系統實現[J].地理與地理信息科學,2009,25(5): 17~20
[5] 蘇莉.三維GIS紋理坐標數據管理方法的研究[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—),男,正高職高級工程師,主要從事水利工程勘察設計、城市勘測管理和技術研究、及數字城市建設研究。
重慶市信息產業發展基金項目(2009-009)