吳 鋒,毛新光
(杭州電子科技大學信息與控制研究所,浙江 杭州310018)
三維地理信息系統(GIS)的應用領域十分廣泛,如城市交通調度、地質災害定位、地下管線、廠礦生產過程模擬等,相比二維GIS不僅能再現直觀的、真實的事物間縱橫交錯、上下起伏的空間關系,具有較強的立體感和逼真感,而且能對構建中的三維場景進行三維空間的分析和操作等功能??梢哉f三維GIS的應用開發已成為當前GIS研究中的重點[1-3]。
縱觀國內外三維GIS的研發現狀,有3種途徑實現三維GIS:一是基于底層庫函數開發實現,如OpenGL和VC++的開發方式[4];二是在三維可視化系統上以插件形式加載數據顯示和查詢功能模塊,如Vega工具軟件[5];三是在現有GIS平臺提供的API上進行二次開發,如ArcGIS的ArcObjects組件[6]。底層庫函數開發方式效率較高,但代碼編程量較大。三維可視化系統在模型制作方面具有較好的逼真性,但在GIS方面的功能較弱。現有GIS平臺軟件中,三維可視化方面的功能較為欠缺,但隨著三維空間分析功能的日趨完善,在現有GIS軟件中進行二次開發將是三維GIS系統研究、開發的主流方式。
要實現三維GIS,必須解決三維場景如何建模和應用支撐平臺的模型數據管理。從研究現狀來看,目前三維場景的快速動態建模主要有統一規范法、標準模型符號法、非仿真功能寫景法、二維GIS法和CAD方法等[7-11]。通過比較分析,這些方法或建模工作量大、效率低,或要求編寫大量的程序代碼,或建立的三維場景缺乏較好的空間查詢和分析功能。
本文提出一種基于ArcGIS Engine組件技術和數據庫技術的快速動態建模方法,即預先建立對應的三維場景模型庫并保存在ArcGIS Engine組件的數據庫中,通過地理描述和數據管理獲取模型構件、組裝構件而成需要的三維場景,從而大大降低三維場景建模的工作量;另外,將地理描述信息與場景精確模型結合起來,大大提高了場景模型的真實感,而且數據編輯、空間分析能力也得到了體現。
目前三維場景中的實體,大部分都是通過外部三維制作軟件制作好后以點、線、面的形式導入到三維場景中來,如3ds Max制作的三維實體。這種數據集成要求CAD模型與GIS二者之間的數據能夠相互轉換或在GIS中可以直接讀寫CAD文件。
目前常見的數據集成有文件轉換、數據庫共享和直接訪問3種方式。文件轉換方式是指數據文件格式從一種到另一種的轉換,如ArcGISEngine的控件SceneControl支持SHP文件,3ds Max支持*.dwg文件,*.dwg和*.shp可以通過*.dxf(CAD格式)進行轉換。數據庫共享方式通過在系統中嵌入應用程序API接口訪問其他系統的數據,如ArcSDE就具有識別CAD文件的擴展程序,允許用戶在數據庫管理系統中存儲、提取CAD文件要素或GIS特征,這是一種新型方式。直接訪問方式則是直接讀入另一系統的數據而無須經過中介,如ArcGIS直接讀取3ds Max制作的*.3ds文件來構建三維場景,從而實現CAD與GIS的數據集成。直接訪問方式也是本文采用的主要集成方式。
三維場景中的實體結構可以分為單一模型和組合模型。單一模型就是該模型結構復雜,不能拆分為單一模型的組合,在向三維場景中添加模型時,作為單一的模型;組合模型就是場景中的三維模型可以拆分為單一的組合,從模型庫中調用該單一模型,組成該組合模型。
依據三維場景中實體的分類表達規則和組成要素的不同,三維對象模型數據庫可分為以下幾類:建筑物模型庫、建筑物紋理庫、地面覆蓋模型庫、獨立對象模型庫。建筑物模型庫主要存儲以3ds Max軟件導出的*.3ds文件;建筑物紋理庫主要存儲建筑物墻面紋理、窗戶紋理等;地面覆蓋模型庫主要存儲地面江河、道路、植被的紋理庫;獨立對象模型庫主要存儲一些地面上設施如樹木、路燈、交通站臺、電話亭等標志性建筑物。三維對象模型庫的組成結構如圖1所示。

圖1 三維對象模型庫的組成結構
各個對象模型庫的建立方法如下:
1)典型建筑物模型庫和獨立對象模型庫:該模型庫主要存儲一些不能分解的結構模型,對于結構復雜的典型三維建筑和獨立對象,反復調用模型庫中的一些簡單實體,并通過組合方法建立起三維場景中的實體,從而達到簡捷、快速建模的目的。
2)紋理庫的設計:對于一些結構簡單、規則幾何體的三維實體如長方體、正方體等,利用多片來建立三維場景。但利用多片建立的只是三維場景幾何模型,還需要進一步對模型的表面進行貼圖、渲染。針對這種情況,需要建立建筑物紋理庫。該庫以大量圖片為基礎,并配合圖片處理軟件如PhotoShop工具對圖片進行預處理。
3)地面覆蓋模型庫的設計:三維場景的地面覆蓋物模型庫主要存儲地表中的綠地、地形、水系類別的地面覆蓋物紋理。入庫的紋理數據文件,必須存在數據庫的表中,當編輯或更新地面覆蓋物紋理時,直接從數據庫的數據表中調用相應的數據紋理。
在完成建筑物數據庫、建筑物紋理庫、地面覆蓋紋理庫、獨立對象數據庫和數據采集的基礎上,結合.NET的編程環境與ArcGIS Engine中的Scene-Control、ToCControl、ToolbarControl、MapControl等控件進行二次開發,實現三維數據模型的快速建模。
在三維場景構建時,針對場景三維實體模型的不同,需要采取不同的模型方法。針對典型的模型,可直接調用典型模型數據庫中的典型模型;用組合模型構建復雜三維建筑模型時,調用建筑模型數據庫中*.3ds中的數據模型;對于簡單的模型,可以Multipatch來構建,調用紋理數據庫中的紋理圖片,進行紋理貼圖,可以建模逼真的三維場景中的實體。根據三維場景中三維實體的不同情況,調用不同模型庫,起到快速建模三維場景的效果。三維場景快速建模流程如圖2所示。

圖2 三維場景快速建模流程
在ArcGIS Engine中可以通過二維的點、線、面二維要素和坐標Z經過拉伸來建模三維場景中的三維模型。通過對Z坐標或要素屬性字段值進行拉伸,點要素構成三維場景中垂直的線,線要素構成面,面要素構成塊。而Multipatch對象,則通過該實體頂點在三維場景中X、Y、Z坐標值來構建三維實體各個面,再經過貼圖來構建三維場景中的實體。以下是二維矢量數據如何生成三維模型的算法:
1)獲取三維場景要拉伸的圖層。
2)添加紋理,即定義地理要素圖層對象并獲取圖層對象、創建要渲染的符號、創建要填充的紋理符號、從path變量中填充要填充紋理符號的紋理、設置要渲染的psimplerenderer的紋理符號。
3)對要渲染的地理要素圖層對象pGeoFeature-Layer,設置為psimplerenderer并進行渲染。
4)設置矢量圖層基準高,得到頂點空間坐標

式中,R為圓弧半徑;α為圓弧上各頂點與原點連線到x軸的角度;ProLayer3D.Zfactor為使矢量數據拉伸到某一固定值的拉伸因子。
5)應用三維屬性到ppLayer矢量圖層,使圖層具有三維顯示效果。
(1)典型單一模型和對象模型的重建方法
針對三維場景中的獨立對象實體、典型標志性建筑、結構復雜而風格獨特的建筑物,通過三維制作軟件3ds Max制作獨立的和典型的三維模型,包括相關紋理信息,一塊導出為*.3ds文件,然后入庫。在建立三維場景時,可以反復從建筑數據庫中調用該模型,加載到SceneControl控件中,從而達到快速建模的目的。具體算法的基本流程如下:
1)創建一個新圖層,然后把新圖層添加到三維場景的SceneControl控件對象中。
2)設立一個點的新元素,該點就是三維模型要加載的位置。
3)利用IMarker3DSymbol創建一個接口對象,然后利用該對象方法CreateFromFile讀取數據庫中建筑物和獨立對象的模型對象。
4)創建一個SceneControl控件容器對象,然后將該對象加載到在圖層對應的容器中,起到動態加載三維場景的目的。
(2)利用模型庫組合模型的建模方法
在三維場景構建中,非典型的建筑物具有相似的結構和紋理。針對這種情況,先建立一個可以組成這種三維場景中建筑物的基本實體單位,并將這樣的單位實體入庫。在建模這樣的三維實體時,可直接調用模型庫中的單位實體模型。通過組合建模方法,達到快速構建三維場景的目的。
具體算法的基本流程如下:
1)創建一個新圖層,然后把新圖層添加到三維場景的SceneControl控件對象中。
2)設定一個點的新元素,該點就是三維模型要加載的位置。
3)確定底層元素顯示的Symbol和Geometry:
IPoint pt=new PointClass();
double longtitude=double.Parse(textBox1.Text);
double latitude=double.Parse(textBox2.Text);
pt.PutCoords(longtitude,latitude);
4)再分別確定中間層、頂層元素顯示的Symbol和Geometry。
對于結構簡單的、規則的、逼真度要求不是很高的三維場景中的實體,可以通過對規則三維模型如長方體、正方體等進行貼圖來表示現實世界中的三維實體。通過多片Multipatch制作規則實體的大致模型,模型的位置通過輸入規則模型在平面的投影坐標和實體模型的長、寬、高3個參數來確定三維實體模型各個頂點的坐標,然后通過對三維實體模型的前面、后面、左面、右面、頂部進行紋理貼圖來構造三維模型。
用Multipatch構建三維實體模型的基本算法如下:
1)指定紋理對象。
2)創建材質列表。
3)創建Multipatch第一面的各個頂點及其紋理頂點:
IPoint pPoint1=new PointClass();
pPoint1.X=x;
pPoint1.Y=y;
pPoint1.Z=0;
4)繼續創建Multipatch其余面的各個頂點及其紋理頂點。
5)給各個頂點的坐標(X,Y,Z)賦值。
6)創建其余的紋理坐標頂點并賦值。
7)創建其余面的頂點及其紋理頂點并賦值。
8)給各個面的頂點指定頂點坐標和需要紋理貼圖的各個頂點坐標:
IGeneralMultiPatchCreator PCreator=new GeneralMulti-PatchCreatorClass();
PCreator.Init(30,6,false,false,false,24,materialList);
PCreator.SetPatchType(0,esriPatchType.esriPatchTypeRing);
PCreator.SetPatchPointIndex(0,0);
PCreator.SetMaterialIndex(0,0);
PCreator.SetPatchTexturePointIndex(0,0);
PCreator.SetPoint(0,pPoint1);
利用規則幾何體如正方體、立方體,對三維幾何體的各個面進行貼圖,利用Multipatch向三維場景添加幾何體。
隨著石化能源產業的高速增長、石化產品運輸量的不斷增高,石化產品交通運輸事故也日益增多。針對運輸安全問題,筆者以ArcGIS Engine為工具,結合GIS、GPS、3G等技術,研發了基于GIS/GPS/3G的危險品運輸車輛監控三維GIS系統。該系統提供了一個三維可視化平臺,幫助用戶從不同的角度來監控三維場景中的地物,并實時獲取車輛的軌跡。
對危險品車輛的監控即實時跟蹤車輛位置。GPS發送的經緯度存入數據庫,系統需要從數據庫實時解析GPS數據并顯示在三維虛擬場景中,如圖3所示的小圓點。根據圓點軌跡即可實時監控危險品車輛在三維場景中的行駛狀況。

圖3 實時顯示車輛軌跡的三維場景效果
在車輛監控三維GIS系統的開發中充分運用了快速動態建模方法:
1)地形建模:地形表面主要由矢量數據生成的不規則三角網數據模型生成,為其他地物提供一個模擬表面。由于三維車輛監控場景的地形高程為0,地形場景模擬可以用衛星掃描的圖片進行柵格配準。
2)復雜地物建模:對于典型而復雜的地表人工實體和獨立對象,采用建模軟件3ds Max來構建三維實體模型,然后轉換為ArcGISEngine支持的格式來建模三維模型。
3)規則幾何體建模:通過多片構建規則三維實體模型,然后對三維外表進行貼圖,逼真構建三維場景中的對象實體。
本文提出了一種基于ArcGIS Engine的三維場景快速動態建模方法,該方法根據場景的地物分為點、線、面3類不同的特點,提出了聯合拉伸、模型庫、多片Multipatch等多種快速建模方法,從而實現了三維場景的快速生成和渲染。該方法的關鍵在于GIS組件技術的利用和基于數據庫技術的對象、紋理等模型庫的建立,它是快速建模三維場景的基礎。為大規模開發三維可視化系統提供了一種新的思路。該方法成功應用于危險品運輸車輛監控三維GIS的快速開發,有效地提高了開發效率,降低了勞動強度和開發成本。
本文主要側重基于ArcGIS組件的三維建模和數據顯示研究,下一步的工作是基于ArcGIS的空間分析工作。隨著現代空間數據定位與分析的需要,三維快速建模技術的應用會越來越廣泛,相信基于GIS組件技術和數據庫技術的三維實體速建模方法會為其他行業三維GIS應用提供一定的借鑒和參考。
[1] 王金宏,朱軍,尹靈芝,等.基于線性參照系統的虛擬高速鐵路場景建模方法簡述[J].地球信息科學學報,2014,16(1):23-30.
[2] TANG A Y,ADAMST M,USERY E L.A Spatial Data Model Design for Feature-based Geographical Information Systems[J].IJGIS,1996,10(5):643-659.
[3] ROYAN J.Network-based Visualization of 3DLandscapes and City Models[J].IEEE Computer Graphics and Applications,2007,27(6):70-79.
[4] SUN W T,LI Q,QIAN B.Track Simulation of Flexible Roll Forming Based on VC++and OpenGL[J].Advanced Materials Research,2012,457-458:304-307.
[5] ZHOU X N.3D Campus Simulation Based on Vega and Creator[C]∥2010 International Conference on Computer and Communication Technologies in Agriculture Engineering,2010,3(12-13):512-514.
[6] 張文元,付仲良.基于ArcGISEngine的綜合管線三維可視化研究[J].測繪通報,2008(8):28-31.
[7] TIAN X.Quick 3D Modeling of Machining Environment by Means of On-machine Stereo Vision with Digital Decomposition[J].CIRP Annals-Manufacturing Technology,2007,56(1):411-414.
[8] 何垂杰,鄧克裹,袁懷月.基于ArcGIS Engine的工業廠區快速三維建模與可視化[C]∥現代空間定位技術應用研討交流會論文集.廣州:中國測繪學會,2007:264-274.
[9] 高睿,劉修國,熊威.城市三維景觀可視化研究與應用[J].計算機應用研究,2005,22(3):160-164.
[10] 劉玉春.應急指揮信息系統中三維模型快速構建方法研究[J].測繪科學,2008,33(S1):117-119.
[11] 鄧非,張祖勛,張劍清.基于序列影像的城市三維建模[J].計算機工程,2007,33(8):208-210.