張 芳,吳 思,陳 勇,張金花,杜 凱
(國家測繪地理信息局第六地形測量隊(duì),四川 成都 610500)
地下管線是保障城市運(yùn)行的重要基礎(chǔ)設(shè)施和“生命線”。面對(duì)近年大雨內(nèi)澇、管線泄漏爆炸、路面塌陷等災(zāi)害頻發(fā)[1],加之基礎(chǔ)設(shè)施容量的不斷擴(kuò)大,城市管線數(shù)據(jù)精細(xì)化管理和動(dòng)態(tài)調(diào)控的需求越來越高,傳統(tǒng)的地下管網(wǎng)二維數(shù)據(jù)表達(dá)模式難以對(duì)錯(cuò)綜復(fù)雜的地下管網(wǎng)綜合信息進(jìn)行有效的空間描述和信息表達(dá)[2-3]。地下管網(wǎng)三維可視化能夠提高管線的立體感和逼真感,有利于全面、真實(shí)反映地下管網(wǎng)縱橫交錯(cuò)、上下起伏的空間關(guān)系[4-6],因而成為新興的管線數(shù)據(jù)展示與管理方式。
目前,我國已有多個(gè)城市建立了三維可視化的地下管網(wǎng)信息管理系統(tǒng),這些系統(tǒng)研發(fā)的基礎(chǔ)平臺(tái)大多以商業(yè)地理信息平臺(tái)Skyline為主[7-8],但由于Skyline平臺(tái)昂貴,且限于該平臺(tái)本身的技術(shù)瓶頸,現(xiàn)有的地下管網(wǎng)三維可視化系統(tǒng)仍存在管網(wǎng)附屬物
表達(dá)失真、成果加載和顯示效率欠佳等問題。隨著虛擬仿真技術(shù)的快速發(fā)展,OpenSceneGraph(OSG)作為一個(gè)開源的三維圖形渲染引擎,正逐漸被應(yīng)用于水利工程[9]、校園漫游[10]、地下管網(wǎng)[11]等多個(gè)行業(yè)。其中,以O(shè)SG為基礎(chǔ)平臺(tái)的地下管網(wǎng)三維可視化平臺(tái)研發(fā),現(xiàn)階段也僅實(shí)現(xiàn)了地下管網(wǎng)管體本身的立體展示,不包含地表及地上建筑、景觀等模型,且缺乏專業(yè)的空間查詢與分析功能。
因此,本文以O(shè)SG為基礎(chǔ)平臺(tái),采用OpenGL和標(biāo)準(zhǔn)C++語言設(shè)計(jì)的三維渲染引擎,從底層自主構(gòu)建地上地下一體化的管網(wǎng)三維可視化平臺(tái),通過調(diào)用天地圖數(shù)據(jù)服務(wù),實(shí)現(xiàn)地下管網(wǎng)與多源地上數(shù)據(jù)的無縫集成、聯(lián)動(dòng)和高效展示,并提供了豐富的專業(yè)管網(wǎng)分析功能,為地下管線普查成果的即時(shí)展示與管理奠定了良好的基礎(chǔ)。
OSG是一個(gè)開源的三維圖形渲染引擎,它包含了一系列的開源圖形庫,主要為圖形圖像應(yīng)用程序的開發(fā)提供場景管理和圖形渲染優(yōu)化的功能,讓程序員能夠更加快速、便捷地創(chuàng)建高性能、跨平臺(tái)的交互式圖形程序。它作為中間件為應(yīng)用軟件提供了各種高級(jí)渲染特性、IO,以及空間結(jié)構(gòu)組織函數(shù)。OSG以場景樹結(jié)構(gòu)對(duì)三維模型進(jìn)行組織與管理,場景中的模型、地形、陰影等均以場景樹節(jié)點(diǎn)的形式存在。OSG運(yùn)行體系由OSG核心庫、NodeKits庫、OSG插件、互操作庫、擴(kuò)展程序和示例5大動(dòng)態(tài)鏈接庫(或共享對(duì)象)及可執(zhí)行文件組成[12]。其采用標(biāo)準(zhǔn)C++和OpenGL編寫而成,可運(yùn)行在所有的Windows平臺(tái)、OSX、GNU/Linux、IRIX、Solaris、HP-Ux、AIX、Android和FreeBSD操作系統(tǒng)之上,具有廣泛的應(yīng)用前景。
1.2.1 數(shù)據(jù)分層分塊高效加載
由于管網(wǎng)三維可視化平臺(tái)涉及地下管網(wǎng)、地表高程及地面遙感影像等數(shù)據(jù),數(shù)據(jù)量大,直接影響系統(tǒng)運(yùn)行效率。為使系統(tǒng)運(yùn)行更為流暢,用于制作三維地形場景的遙感影像及高程數(shù)據(jù)采用傳統(tǒng)的數(shù)字城市分塊數(shù)據(jù)動(dòng)態(tài)加載。地下管網(wǎng)則采用分層動(dòng)態(tài)加載,即:將視窗顯示比例尺分為小中大3個(gè)層次,不同地下管網(wǎng)類型逐層加載和調(diào)度。第1層,僅僅加載長度占比大的排水管網(wǎng);第2層,加載通信管線及供水管線;第3層,加載顯示其他所有剩余管線,從而實(shí)現(xiàn)地下管網(wǎng)由簡單到復(fù)雜的逐層加載和調(diào)度。
1.2.2 基于GPU的管網(wǎng)實(shí)時(shí)建模與渲染
平臺(tái)突破了目前基于Open GL算法實(shí)現(xiàn)管網(wǎng)建模的現(xiàn)狀,利用現(xiàn)代的GPU強(qiáng)大的可編程性,通過編寫高級(jí)著色程序控制渲染管線中的各個(gè)模塊,極大地?cái)U(kuò)展了GPU的功能[13],將管網(wǎng)建模的計(jì)算任務(wù)全部交由GPU完成,大大減輕了CPU的計(jì)算負(fù)載,顯著提高了管網(wǎng)建模的速度。同時(shí),利用GPU提供的幾何著色器自動(dòng)批量生成管線的頂點(diǎn)數(shù)據(jù),構(gòu)建管線三角網(wǎng),進(jìn)一步提高了管網(wǎng)建模效率,并能夠完成各類不同材質(zhì)、紋理、陰影的地下管線實(shí)時(shí)建模和真實(shí)感渲染,確保了地上地下一體化的高效展示。
1.2.3 基于Arcball的瀏覽交互
三維場景中的交互漫游通過改變觀察者在三維場景中的位置實(shí)現(xiàn)。當(dāng)交互對(duì)象是一個(gè)三維物體時(shí),二維屏幕與三維物體之間的交互動(dòng)作則受到限制。平臺(tái)交互設(shè)計(jì)中將數(shù)學(xué)與人機(jī)交互相結(jié)合,采用基于四元數(shù)理論的ArcBall算法[14],實(shí)現(xiàn)二自由度的鼠標(biāo)表達(dá)三自由度的空間旋轉(zhuǎn)。其特點(diǎn)在于將鼠標(biāo)的拖曳運(yùn)動(dòng)想象成在一個(gè)投影球面上繪制弧線,并將這一運(yùn)動(dòng)弧線映射到實(shí)際三維場景中,通過改變視點(diǎn)和視角實(shí)現(xiàn)交互漫游的動(dòng)作,從而靈活、穩(wěn)定、方便地表達(dá)三維對(duì)象的自由旋轉(zhuǎn)或受約束旋轉(zhuǎn)。
平臺(tái)架構(gòu)設(shè)計(jì)以“先把復(fù)雜問題簡單化,再把簡單問題深入細(xì)化”為指導(dǎo)思想[15],采用成熟的面向?qū)ο筌浖O(shè)計(jì)方法,在遵循業(yè)務(wù)可擴(kuò)展、兼容、穩(wěn)定、安全和保密等原則下,采用統(tǒng)一的矩陣式體系結(jié)構(gòu),包括硬件層、數(shù)據(jù)層、服務(wù)層、應(yīng)用層和用戶層5個(gè)層次,平臺(tái)架構(gòu)設(shè)計(jì)如圖1所示。
(1) 硬件層:包括輸入輸出設(shè)備、存儲(chǔ)備份設(shè)備及網(wǎng)絡(luò)設(shè)備等,是平臺(tái)有效運(yùn)行的基礎(chǔ)。
(2) 數(shù)據(jù)層:平臺(tái)采用Oracle 11g大型關(guān)系型數(shù)據(jù)庫和文件數(shù)據(jù)庫實(shí)現(xiàn)基礎(chǔ)地理數(shù)據(jù)、三維模型、實(shí)景影像等的高效存儲(chǔ)和管理。
(3) 服務(wù)層:應(yīng)用服務(wù)器采用微軟公司的IIS網(wǎng)絡(luò)信息服務(wù),WebService通過C#語言搭建而成。
(4) 應(yīng)用層:提供地上地下一體化的三維展示、聯(lián)動(dòng)交互和專業(yè)分析等功能。
(5) 用戶層:為平臺(tái)用戶提供整潔美觀、簡單易用的用戶界面,為系統(tǒng)研發(fā)者組織管理應(yīng)用服務(wù)提供良好的界面。
為滿足三維可視化的展示效果,并結(jié)合用戶業(yè)務(wù)需求,自上而下設(shè)計(jì)平臺(tái)功能模塊,平臺(tái)主要模塊與功能如圖2所示。
平臺(tái)以微軟公司的Visual Studio 2010為集成開發(fā)環(huán)境、.NET Framework 4.0框架為運(yùn)行環(huán)境,采用MFC框架進(jìn)行平臺(tái)界面的建設(shè),以C/C++/VC++為主要語言進(jìn)行功能的編碼實(shí)現(xiàn)。
場景瀏覽與交互是三維地理信息平臺(tái)最直觀的功能,主要包括:放大、縮小、環(huán)繞、地表透明度及聯(lián)動(dòng)交互等。其中,放大、縮小、環(huán)繞均可通過控制Camera類進(jìn)行矩陣變換,從而達(dá)到場景的動(dòng)態(tài)瀏覽;地表透明度為幫助用戶查看地下管線三維場景而設(shè)置,可以通過控制osgNode:setTransparent實(shí)現(xiàn);聯(lián)動(dòng)交互主要包括二三維和實(shí)景虛擬聯(lián)動(dòng)等功能,可以通過osgViewer設(shè)計(jì)多個(gè)分屏,將各個(gè)分屏的視圖矩陣進(jìn)行相關(guān)性操作達(dá)到多屏聯(lián)動(dòng)的效果。如圖3—圖5所示。
圖1 平臺(tái)總體架構(gòu)
圖2 主要模塊與功能
圖3 地上地下一體化場景瀏覽
圖4 地下管網(wǎng)三維場景
圖5 二三維聯(lián)動(dòng)
查詢統(tǒng)計(jì)模塊是根據(jù)用戶的請(qǐng)求,將數(shù)據(jù)服務(wù)器中用戶感興趣的地下管線數(shù)據(jù)提取出來并進(jìn)行文字、表格或圖形化展示。管線類型、權(quán)屬單位、管線材質(zhì)、所屬道路、埋設(shè)類型、管點(diǎn)類型、附屬物類型的查詢統(tǒng)計(jì)是通過將用戶的請(qǐng)求轉(zhuǎn)化為SQL語句,傳遞給COracleService類,由COracleService類向服務(wù)器發(fā)送數(shù)據(jù)請(qǐng)求,將返回的結(jié)果傳遞給CPipeData類進(jìn)行解析所得;管線信息查詢通過osgUtil獲取用戶屏幕點(diǎn)擊點(diǎn)與三維場景的交點(diǎn),獲取場景中的單根管線或單個(gè)管點(diǎn)的信息;管線標(biāo)注是通過osgText及osgWidget將場景中所有的管線或管點(diǎn)信息轉(zhuǎn)換為文字進(jìn)行顯示。如圖6—圖7所示。
圖6 任意區(qū)域內(nèi)管點(diǎn)類型查詢
圖7 管線信息查詢
基本分析模塊可以計(jì)算并展示用戶所需的三維場景空間信息,主要包括:水平距離、垂直距離、空間距離及投影面積的量算。該模塊基于osgUtil:LineSegmentIntersector類進(jìn)行設(shè)計(jì),通過用戶交互事件,選擇場景中的兩個(gè)(距離量算)或多個(gè)(面積量算)點(diǎn),將其轉(zhuǎn)換為osgVec3d對(duì)象,在確定線或面的位置后根據(jù)距離、面積公式進(jìn)行計(jì)算,并將計(jì)算結(jié)果通過osgText及osgWidget類進(jìn)行展示實(shí)現(xiàn)。如圖8—圖9所示。
平臺(tái)作為地下管網(wǎng)的應(yīng)用軟件,具有豐富的專業(yè)管網(wǎng)分析功能。凈距分析、埋深分析、斷面分析功能分別基于osgUtil:LineSegmentIntersector類、osgGA:GUIEventHandler、CPipeData類進(jìn)行設(shè)計(jì),將用戶選擇的管線信息存入CPipeData中進(jìn)行計(jì)算所得;碰撞分析通過獲取用戶在區(qū)域內(nèi)選擇的管線類型信息及多邊形信息,將其轉(zhuǎn)換為SQL語言,由COracleService類向應(yīng)用服務(wù)器發(fā)送請(qǐng)求,并通過osgFX:Scribe類將碰撞點(diǎn)、碰撞管線進(jìn)行高亮顯示;地形開挖通過osgTerrain:TerrainTile類,更換用戶劃定范圍內(nèi)的地形場景,從而實(shí)現(xiàn)模擬開挖。如圖10—圖12所示。
圖8 空間量測
圖9 面積量測
圖10 垂直凈距分析
圖11 斷面分析
圖12 碰撞分析
在地下管網(wǎng)三維可視化需求越來越大的形勢下,平臺(tái)充分利用場景性能優(yōu)越的OSG引擎進(jìn)行系統(tǒng)研發(fā),不僅能夠?qū)崿F(xiàn)管網(wǎng)本體與多源地上數(shù)據(jù)的一體化三維高效展示,而且具備專業(yè)的管網(wǎng)分析功能,脫離了長期依賴國外商業(yè)軟件的弊端,具有顯著的經(jīng)濟(jì)效益和實(shí)用推廣價(jià)值。下一步將結(jié)合管網(wǎng)的業(yè)務(wù)需求,深入研究管網(wǎng)在城市規(guī)劃與災(zāi)害應(yīng)急管理領(lǐng)域的功能研發(fā)。