張嘯雷,王冬
(1.天津市公安局經濟技術開發區分局,天津 300457; 2.天津市測繪院,天津 300381)
從 20世紀 80年代末以來,由于二維地理信息系統將實際的三維事物采用二維的方式表示,具有很大的局限性,大量的多維空間信息無法得到利用,這就需要研究三維地理信息系統,于是三維地理信息系統成為GIS領域中的一個研究熱點。而三維地理信息系統的實現必須首先解決場景可視化問題,其中房屋作為場景中重要的組成部分,它的可視化建模技術的發展和研究一直很引人關注。
使用常用的三維可視化開發工具,如Direct3D、Java3D、VRML和OpenGL等進行三維GIS的實現時,都需要從底層編寫代碼,工作量巨大,而且通常功能上不能滿足實際需要。ESRI公司基于COM技術構建的ArcEngine是一套強大的GIS二次開發組件庫,使用戶可以根據需要對原有的系統軟件功能進行功能擴展,其中的擴展模塊ArcScene模塊完全可以實現三維GIS的開發。用其進行二次開發,一方面可簡化代碼的編寫;另一方面它的代碼執行速度快,占用內存小,所以越來越得到三維地理信息系統應用開發者的青睞 。
ArcGIS 3D分析模塊是ArcEngine組件的一部分,它內含3D對象模型、3D幾何模型以及3D Viewer對象,其核心應用是ArcScene。同時它支持具有Z值的幾種3D幾何要素,點(Point)、線(Line)、面(Polygon)和多面片(MultiPatch)。其中多面片是由三角條帶(Triangle Strip)、三角扇(Triangle Fan)和環(Ring)組成,整個面片是由二維平面圖形向 Z方向拉伸而形成。因此可以方便地將原有的ArcGIS地理信息數據增加三維Z值數據然后在ArcScene中實現三維GIS的功能。

圖1 ArcScene 3D對象模型
圖1中的SceneGraph對象主要用來處理3D可視化,如:實現3D圖形繪制方法、管理不同Viewer中的渲染、為方便快速繪制而管理內部的緩存、為交互操作優化性能等;Viewer對象主要實現影像的導出和快照等;Camera對象則定義了每個Viewer的視角方向和位置。
通常,要實現三維GIS,都要從數據準備開始進行。將三維GIS需要表現的數據分為兩類:分別是三維地形數據和三維管線數據。
在系統的實現過程中,如果將全部的二維地理信息數據都實現三維轉換,不僅需要很長的轉換時間,而且三維地理信息瀏覽的過程中由于數據量和運算量巨大,導致系統運行速度緩慢。因此在三維 GIS的實現時采用了較實用的方法,先在傳統GIS系統中進行地理信息數據操作,然后對目標區域進行選擇生成三維地理信息數據,進而實現三維GIS功能。
如圖2是三維GIS的實現過程:

圖2 三維GIS的實現過程
通常,三維地形的實現主要采用模擬的形式來實現,比如房屋建筑數據通過系統的樓層等屬性來虛擬出房屋的大概高度,植被數據通過生成三維符號,然后用三維符號來表示。
(1)三維房屋的實現
ArcScene中提供了面片(MultiPatch)、三角條帶(TriangleStrip)對象建模。由此可以利用這些對象來構建房屋模型。其中一個最簡單的三維房屋模型是一個火柴盒式的六面體,在利用ArcScene建立三維房屋模型時,建筑物的各個面是由不規則三角形組成,即構成墻體的多面片(MultiPatch)是由三角條帶(TriangleStrip)組成的。建立的房屋模型是由底面、幾個墻體側面和房頂組成。
具體實現步驟是:根據選擇的二維地面數據圖層中的房屋數據,取得這些房屋的樓層數屬性,根據樓層假設一個單層樓層的高度值,然后用樓層數乘以單層樓高,即獲得該房屋的高程(Z值),如:一個5層的房屋,假定一層為 3 m,最后系統將算得的 15m存入三維數據的Z值;接下來將該房屋的二維面(Polygon)圖形作為建筑物的底面,根據 Z方向的拉伸值將各個邊拉伸,拉伸后形成的面為墻體,最后為建筑物創建一個平的房頂;為了使建筑模型更有真實感,可以將拍攝的紋理貼在建筑物的表面。
(2)三維植被的實現
ArcScene本身提供豐富的符號庫支持,而且還可以在ArcScene中導入利用3DMax等三維建模工具建立的三維模型,利用這一特性,可以將各種二維地理信息數據用三維符號表示。植被,水系等具有類別性質的地理信息數據就可以用代表性強的三維模型和符號來表示。
三維植被的實現步驟比較簡單,根據植被的點或者面的特性,分別配置不同的三維符號,如:在行樹這類數據中,可以根據數據的屬性,分別為不同種類的行樹配置不同的符號,屬性是楊樹的可以配置一類符號,屬性是松樹的可以再配置一類符號。例如:用圖 3來表示楊樹,用圖 4來表示松樹。

圖3 楊樹3D符號

圖4 松樹 3D符號
三維地形數據的實現結果如圖 5所示。

圖5 三維地形的實現
三維管線的生成是一個復雜的工作,由于管線的埋設方式分為兩類:一類為直接埋設,例如污水管線;另一類為管溝埋設,例如電信管線。因此,在選擇管線三維顯示方式時,應先判斷管線的埋設方式。對于直埋方式的管線,由于要求不高,所以可用圓柱體代替,在ArcScene中直接選擇相應的線型圓柱符號即可。而對于管溝埋設的方式管線,如在系統中的電信管線,由于采用的是方管,在ArcScene中沒有直接的符號可以用,因此需要自己生成。
三維管線的實現主要是通過向二維管線數據中添加三位高程值Z值來實現的。
(1)直埋式管線的實現
在系統中為直埋式管線設定了線型圓柱符號,但是在系統中還需要將管徑這一屬性進行視覺表達,因此用分類符號渲染的方法對管線進行不同粗細的渲染。如下是實現管線分類渲染的方法:

首先定義分類渲染接口,然后設定每種分類線型符號,如管徑,顏色等值,最后利用分類渲染接口,將這些不同類的管線進行分類渲染。三維顯示效果如圖 6所示。

圖6 三維管線圖
(2)電信管線的實現
由于電信管線的線型采用方管,在ArcScene中沒有直接的符號可以利用,需要進行動態生成。
首先,可以得到管線的三維坐標,比如:直線(X1, Y1,Z1)-(X2,Y2,Z2)。
然后,將該三維管線的三維坐標作方管的地中心線,按照方形的對角線方向分別平移,一條線的兩個坐標,經過平移后得到 4條新線,這 4條新線分別是方管的4條邊,例如新生成的 4條邊的坐標為:(設方管的半徑為:r)
第1條:(X1+r/2,Y1,Z1+r/2)-(X2+r/2,Y2,Z2+r/2)
第2條:(X1+r/2,Y1,Z1-r/2)-(X2+r/2,Y2,Z2-r/2)
第3條:(X1-r/2,Y1,Z1+r/2)-(X2-r/2,Y2,Z2+r/2)
第4條:(X1-r/2,Y1,Z1-r/2)-(X2-r/2,Y2,Z2-r/2)
最后由平移的坐標分別生成方管的 4個面,在系統中的視覺看到的方管其實就是4個方管的三維面組成的。
經計算生成的方管顯示效果如圖 7所示,綠色管為電信管線。

圖7 三維管線圖電信管線
在實際的項目實現過程中,通過二維GIS選定目標區域,然后進行三維渲染,利用上面介紹的方法很好解決了由于大范圍顯示三維場景而導致的系統速度緩慢的問題。利用ArcScene已有的功能快速實現三維場景的建造,對于ArcScene沒有的功能,可以采用其他的方法來實現,上面介紹的電信管線的實現僅僅是一個簡單的示例。總之,實現一套完整的三維GIS是一項很龐大的工程,需要更多的努力,采用更新的技術來最終實現真正的三維系統。
[1] 李清泉,嚴勇,楊必勝等.地下管線的三維可視化研究[J].武漢大學學報(信息科學版),2003(03)
[2] 鄭淑榮,楊國東.信息系統中三維管線的顯示問題探討[J].現代測繪,2003(6)
[3] 朱慶.三維動態交互式可視化模型[J].武漢測繪科技大學學報,1998,23(2):124~127
[4] 肖樂斌,鐘耳順,劉紀遠等.三維 GIS的基本問題探討[J].中國圖像圖形學報,2001(09)