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