畢玉玲 李成名 趙占杰
(1.華北計算技術研究所,北京100083;2.中國測繪科學研究院,北京100830)
智慧城市階段,對三維GIS的快速、高效、低成本構建提出了更嚴格的要求。三維GIS是指在計算機軟硬件及虛擬現實技術的基礎上,對三維空間數據進行提取、管理、處理等操作,實現三維GIS數據的可視化和三維空間分析,以便解決復雜的地學規劃和決策問題[1]。
然而,目前三維GIS系統大多存在制作周期長、數據量巨大、渲染效率緩慢等缺點,究其原因是因為其采用建模軟件制作場景模型,模型本身數據量龐大,影響了系統效率。而三維地理信息的符號化則是解決這一問題的一個有效手段[2]。符號化后的三維數據不僅空間占比小,而且也可以在數據管理和空間分析方面進行標準化和規范化操作,而如何將這些三維符號化數據進行更好的表達,實現三維空間場景的操作及分析,研發三維GIS符號化表達系統,也成為智慧城市階段三維GIS系統研究的重要方向。
本文就是在上述背景下,基于New Map三維符號化引擎,對三維GIS符號化表達系統的設計及實現,也從另一方面證明了三維符號化表達的可行性和可操作性。
系統總體設計采用單機系統,采用C++和C#語言開發,結合組件式GIS思想,將三維符號包含的功能模塊集成為一個控件,形成最終GIS應用系統[3]。系統總體架構如圖1所示。由下而上分為四層:
多源數據層包含二維矢量數據及紋理數據,其中二維矢量數據可以通過GDAL解析,得到用于自動生成道路、地下管網以及小區建筑的頂點數據和相關屬性值;紋理數據用于三維符號參數化生成的紋理貼圖。
依賴庫提供場景渲染、三維符號參數化、場景漫游、矢量數據解析、柵格數據處理等操作,是三維GIS符號化引擎的基礎,基于OSG、GDAL、OpenCV可以實現三維符號庫的構建、二三維一體化以及各種常用的空間分析功能。
三維GIS符號化引擎是用于三維符號化表達的引擎平臺,可以實現三維符號生成、二維數據符號化為三維符號數據(shp數據自動生成三維模型數據)、三維空間分析(緩沖區、通視性、可視域、距離、面積量算等)等功能。本文采用的是New Map三維符號化引擎。
三維GIS符號化表達系統是基于符號化引擎進行二次開發,搭建的用于符號化表達的系統。通過將引擎的動態庫封裝成ActiveX控件(osgSymbol Ax.ocx),使用C#語言調用相應的功能接口、編寫系統界面,實現三維符號化表達系統。
三維符號化表達依據地理要素的形態特征及其空間分布特征,采用參數化及放樣技術實現的三維符號庫,進行場景的三維符號化表達,以證明符號化的有效性和通用性。三維符號化表達可以用于二三維一體化及場景規劃,以實現道路、管線等數據自動生成以及各類空間要素的符號化表達。
2.2.1 二三維一體化
二三維一體化是指基于二維GIS數據自動生成三維模型數據,實現二三維關聯顯示,從而保證二三維數據在空間上的無縫銜接[4]。該符號化表達系統可以實現道路、管網以及建筑底圖的二三維一體化,采用的二維矢量數據包含道路和管網的點圖層、線圖層數據,以及建筑物地圖的多邊形圖層數據,如圖2所示。實現的基本思路為:首先,解析二維矢量數據,讀取幾何和屬性字段的值;其次,根據不同要素的二三維一體化表達方法和規則自動繪制三維模型,如圖3所示。
二三維一體化表達方法主要包含兩種:線狀要素符號化和面狀要素符號化。其中道路和地下管網等線狀要素的二三維一體化表達的實現流程如下(以道路為例):
1.讀取道路線圖層中每條路段的記錄,得到路段兩端的三維空間坐標、起點ID、終點ID、路寬,分別存儲到頂點列表、起點ID列表、終點ID列表及路寬列表中;
2.讀取道路點圖層中頂點的點號(即ID),存儲到ID列表中;
3.根據道路線圖層得到的起始點ID號進行道路ID標記,得到所有含有3個以上鏈接的ID號,同時將其按照長度(break Len)及路寬將三叉以上的叉路口打斷,如圖4所示,同時開始記錄新的路段列表;
4.根據得到的路段列表依次繪制道路并進行紋理貼圖,如圖5-6(a)所示,同時根據起點ID列表、終點ID列表及點號ID列表得到道路交叉點的連接順序,確定對應道路交叉口的形狀和空間姿態,進行紋理坐標計算及貼圖,如圖5(b)所示,組合效果如圖5(c)所示;
面狀地理要素的二三維一體化表達,可以基于二維矢量圖層實現操作區域內所有面狀要素的自動生成。本次試驗通過讀取建筑物底圖的高程屬性,經過高程拉伸實現建筑物輪廓線為基礎的三維建筑模型[5]。生成模型過程中可以根據要素類型,自定義需要符號的內容。
2.2.2 場景規劃
場景規劃可以用于三維場景的自定義規劃,通過點擊相應的符號即可在場景中指定位置繪制三維符號,同時可以對每個符號進行矩陣變換,從而實現三維符號的縮放、選擇和平移操作。
點符號模塊包含了常用的點狀地理要素的三維符號實現,通過單擊鼠標既可以選擇符號種類,通過鍵盤事件實現符號的矩陣操作,可以根據自己需要在任何位置添加三維符號,效果如圖6所示。
線符號模塊包含了常用線狀地理要素的三維符號實現,通過點擊鼠標可以實現線狀地理要素的三維實時繪制,效果如圖7所示。
面符號庫模塊包含面狀地理要素的三維符號實現,通過點擊鼠標繪制面狀符號,實現要素和紋理填充,效果如圖8所示。
采用三維符號搭建的場景渲染快速,效果突出。三維點狀和線狀符號可以通過矩陣變換和參數設置具備靈活性;面狀符號根據要素和紋理填充,實現了符號姿態的隨機性和動態水面的三維符號化表達。
場景編輯模塊包括場景操作和工具兩部分,如圖10,其中場景操作用于實現窗口的平移、場景縮放及節點的刪除,工具組用于實現漫游路徑的交互繪制及節點的選擇。
場景操作組中平移操作,通過視點的左右和上下來實現窗口的平移;放大操作,通過視點的拉近來實現窗口向前移動;縮小操作,通過拉遠視點來實現窗口向后移動;刪除操作,將當前處于選擇狀態的節點從父節點中移除。
場景漫游模塊包含常用的漫游模式:經典模式(如軌跡球、步行、駕駛、飛行模式)及用戶自定義模式(如設置路徑模式及節點跟隨模式),如圖11所示。其中經典模式通過對OSG自帶的漫游器的封裝、繼承實現,自定義模式通過對話框參數設置來實現自定義的場景漫游。
經典模式中軌跡球模式調用osgGA::Trackball Manipulator類實現,通過鼠標操作實現場景漫游;步行模式繼承自osgGA::Camera-Manipulator,通過點擊鍵盤和鼠標實現場景漫游;駕駛模式調用osgGA::Drive Manipulator類實現,通過鼠標實現位于地表的漫游;飛行模式調用osgGA::Flight Manipulator類實現,通過鼠標移動實現場景旋轉和移動。
空間分析模塊包含緩沖區分析、天際線分析、屬性查詢、空間量算及可視分析,同時可以根據專題應用,自主添加專題分析模塊,如圖12所示。三維GIS符號化系統的空間分析模塊是該系統區別于三維地圖的關鍵模塊,通過符號化的地理要素可以進行空間分析,從而證明三維符號是“活”的模型,具有編輯和分析的靈活性。
緩沖區分析可實現圓形緩沖區分析,根據鼠標左鍵點擊兩點,用來確定分析的圓心和分析半徑,同時使用著色器將圓內的所有頂點顏色指定為紅色,如圖13所示。
天際線分析用于實現當前視點及角度的可見區域分析,調用OpenCV的Canny邊緣檢測算子,同時使用Shader控制檢測初始面,將場景中所有要素的邊緣實時繪制在屏幕上,如圖14所示。
可視分析包含通視性分析和可視域分析兩部分,通視性分析通過鼠標點擊確定視線的起點(VStart)和終點(VEnd),運用碰撞檢測獲取首個交點(VPoint),分別采用綠色和紅色繪制VStart-VPoint及VPoint-VEnd兩條線段,其中綠色代表可視部分,紅色代表不可視部分,如圖15所示??梢曈蚍治鐾ㄟ^對話框進行參數輸入,是指視點位置、視角大小、視線方向及長度,其基本思路是:首先,將場景的深度渲染到紋理(RTT);其次在著色器中計算每個頂點的深度,同時讀取深度紋理圖對應的深度值,進行比較,如果計算的深度值大于深度圖的深度值,則當前頂點不可見,著色為紅色,反之則可見,著色為綠色,如圖16所示。
基于New Map三維引擎三維GIS符號化表達系統,實現了以三維符號為基礎的二三維一體化、場景快速搭建及場景操作和空間分析功能。
系統開發采用C#語言,運用COM組件編程,因此,系統具有可擴展性,能夠根據用戶需求添加專題地學分析庫,例如針對三維地下管網管理系統的地下管網分析庫。引擎控件支持二次開發,能夠應用于單機和網絡中,完成特定功能,實現按需服務和符號共享,同時可以靈活添加其他的功能接口。
本文的相關研究及試驗僅建立了單機版的符號化系統,還沒有實現網絡環境的調用,下一步將開展三維GIS符號化表達服務相關研究,方便網絡客戶端的調用,實現三維符號的共享使用。