汪俊峰 王星東 閆明洋
摘? 要: 文中將Web技術(shù)與World Wind開源軟件結(jié)合起來(lái),通過(guò)三維建模技術(shù)和三維GIS技術(shù)開發(fā)設(shè)計(jì)一個(gè)具有交互功能的Web三維可視化平臺(tái)。該平臺(tái)采用B/S架構(gòu),應(yīng)用空間數(shù)據(jù)庫(kù)PostgreSQL儲(chǔ)存管理三維數(shù)據(jù)和二維屬性數(shù)據(jù),使用Web World Wind軟件實(shí)現(xiàn)三維數(shù)據(jù)的顯示,開發(fā)完成了模型加載、空間量測(cè)、模型搜索、屬性顯示、飛行漫游和二三維聯(lián)動(dòng)等功能。利用該平臺(tái)用戶只需使用瀏覽器就能訪問查看場(chǎng)景的三維效果,從而達(dá)到三維可視化目的。
關(guān)鍵詞: World Wind; 三維可視化; 平臺(tái)設(shè)計(jì); 三維建模; 功能開發(fā); 空間分析
中圖分類號(hào): TN911?34? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼: A? ? ? ? ? ? ? ? ? ? ? ?文章編號(hào): 1004?373X(2020)08?0015?04
Design and implementation of 3D visualization platform based on World Wind
WANG Junfeng, WANG Xingdong, YAN Mingyang
(College of Information Science and Engineering, Henan University of Technology, Zhengzhou 450001, China)
Abstract: In combination of the Web technology and World Wind open source software in this paper, a Web 3D visualization platform with interactive function is developed and designed by means of 3D modeling technology and 3D GIS technology. This platform is constructed with B/S architecture, from which the spatial database PostgreSQL is used to store and manage 3D data and 2D attribute data, and the Web World Wind software is used to display the 3D data. The functions of model loading, space measurement, model search and attribute display, flight roaming and two?three dimensional linkage are developed and accomplished. With this platform, users only need to use a browser to access the 3D effect of the scene, so as to achieve the purpose of 3Dvisualization.
Keywords: World Wind; 3D visualization; platform design; 3D modeling; functional development; spatial analysis
0? 引? 言
World Wind由美國(guó)航天宇航局開發(fā)的三維GIS開源軟件,它可以將多顆衛(wèi)星的影像數(shù)據(jù)及其他方式提供的影像通過(guò)三維地球的形式展現(xiàn)出來(lái)。Web World Wind是World Wind所支持的瀏覽器端的開發(fā)端口[1]。它作為一個(gè)使用JavaScript編寫的開源的Web頁(yè)面虛擬地球儀,使開發(fā)人員能夠在交互式3D虛擬地球儀或2D地圖上快速創(chuàng)建地理信息的交互式三維可視化[2]。它提供的API可以讓JavaScript程序控制模型的三維可視化和交互。Web World Wind可以運(yùn)行在所有主流的操作系統(tǒng)、桌面和移動(dòng)設(shè)備以及Web瀏覽器上[3]。Web World Wind在客戶端和服務(wù)器端之間傳輸影像圖片和XML文件,這種技術(shù)大大減少了信息傳輸量,提高了系統(tǒng)的運(yùn)行速度。
目前,國(guó)外對(duì)三維可視化技術(shù)進(jìn)行了持續(xù)性研究。1987年Kavouras和Masry開發(fā)用于礦山資源評(píng)估的三維可視化系統(tǒng)[4]。1994年,Breuning,Bobe和Cremers開發(fā)三維GIS系統(tǒng),解決了空間分析等諸多問題[5]。美國(guó)國(guó)家地理信息開發(fā)的三維地理信息系統(tǒng),對(duì)三維空間數(shù)據(jù)進(jìn)行了全面的比較[6]。2006年James D等基于ArcScene3D軟件,開發(fā)了用于對(duì)地下鉆孔數(shù)據(jù)的三維可視化和空間操作的三維GIS系統(tǒng)。荷蘭的ITC實(shí)現(xiàn)了三維Web?GIS數(shù)字城市[7]。與國(guó)外相比,國(guó)內(nèi)由于國(guó)家對(duì)三維可視化技術(shù)研究的重視和相關(guān)人才的培養(yǎng),在該研究領(lǐng)域內(nèi)已經(jīng)取得了很大的發(fā)展。1998年朱英浩基于MapInfo開發(fā)了三維可視化GIS軟件[8]。國(guó)防科技大學(xué)開發(fā)了具有空間查詢和分析等功能的三維軍事電子地圖系統(tǒng)[9]。常歌在2001年基于OpenGL平臺(tái)利用城市三維景觀數(shù)據(jù)開發(fā)了數(shù)字城市景觀系統(tǒng)(City View)[10]。2006年朱慶開發(fā)了多模式三維可視化的文化遺產(chǎn)系統(tǒng)[11]。2008年EV?Globe開發(fā)的“四川省地理信息中心?遨游天府”三維可視化系統(tǒng),將四川省矢量數(shù)據(jù)、影像數(shù)據(jù)和DEM數(shù)據(jù)合并在一起,在汶川大地震后的救援工作中起到了舉足輕重的作用[12]。
基于World Wind開源軟件、三維建模技術(shù)和三維GIS平臺(tái)技術(shù),本文設(shè)計(jì)了基于World Wind三維可視化平臺(tái),實(shí)現(xiàn)了模型加載、空間量測(cè)、模型搜索、屬性顯示、飛行漫游和二三維聯(lián)動(dòng)等功能。該平臺(tái)采用B/S結(jié)構(gòu),用戶只需打開瀏覽器即可實(shí)時(shí)查看三維可視化平臺(tái)。
1? 基于World Wind三維可視化平臺(tái)
1.1? 需求分析
傳統(tǒng)意義上,現(xiàn)實(shí)世界的展示僅僅以二維地圖的形式描述現(xiàn)實(shí)世界物體的相對(duì)位置關(guān)系,但是對(duì)于具體地物的細(xì)節(jié)等屬性并不能直觀的表現(xiàn)出來(lái)。本文設(shè)計(jì)基于World Wind三維可視化平臺(tái),可形象直觀地展示整個(gè)三維場(chǎng)景,使用戶仿佛置身于真實(shí)的世界中進(jìn)行漫游。
基于World Wind三維可視化平臺(tái)實(shí)現(xiàn)了模型加載、空間量測(cè)、模型搜索、屬性顯示、飛行漫游和二三維聯(lián)動(dòng)等功能,較好地展現(xiàn)了真實(shí)的三維場(chǎng)景效果。
1.2? 架構(gòu)設(shè)計(jì)
平臺(tái)采用B/S架構(gòu),應(yīng)用空間數(shù)據(jù)庫(kù)PostgreSQL儲(chǔ)存管理三維數(shù)據(jù)和屬性數(shù)據(jù),使用Web World Wind實(shí)現(xiàn)地圖數(shù)據(jù)的顯示,完成了客戶端和服務(wù)器的溝通。平臺(tái)的總體框架示意圖如圖1所示,由應(yīng)用層、服務(wù)層和數(shù)據(jù)層三部分構(gòu)成。
1) 數(shù)據(jù)層。數(shù)據(jù)層是平臺(tái)支持的基礎(chǔ),也是平臺(tái)構(gòu)建的核心。平臺(tái)設(shè)計(jì)了數(shù)據(jù)庫(kù)和文件兩種存儲(chǔ)方式,屬性數(shù)據(jù)儲(chǔ)存到小型的關(guān)系型數(shù)據(jù)庫(kù)PostgreSQL中,實(shí)現(xiàn)了關(guān)系型數(shù)據(jù)庫(kù)的存儲(chǔ)、管理、查詢檢索等功能。而對(duì)于圖片、文字、音頻等資料,平臺(tái)通過(guò)文件管理的方式進(jìn)行儲(chǔ)存和管理,數(shù)據(jù)庫(kù)里只需保存相應(yīng)的路徑信息。該設(shè)計(jì)能夠減少數(shù)據(jù)庫(kù)對(duì)電腦資源的占用,方便數(shù)據(jù)的調(diào)用和管理。
2) 服務(wù)層。服務(wù)層主要包括基礎(chǔ)地圖服務(wù)、空間查詢和定位服務(wù)等。平臺(tái)通過(guò)Web World Wind和Tomcat服務(wù)器軟件發(fā)布地理空間數(shù)據(jù),用戶操作平臺(tái)利用網(wǎng)絡(luò)瀏覽器客戶端向Tomcat服務(wù)器發(fā)出空間數(shù)據(jù)查詢的請(qǐng)求,Tomcat服務(wù)器向PostgreSQL數(shù)據(jù)庫(kù)發(fā)出請(qǐng)求并且完成數(shù)據(jù)的搜索,最后將搜索的結(jié)果通過(guò)網(wǎng)絡(luò)返回給用戶的客戶端瀏覽器,實(shí)現(xiàn)了客戶端和服務(wù)器的數(shù)據(jù)交互,支持多用戶的訪問。
3) 應(yīng)用層。應(yīng)用層主要包括模型操作、場(chǎng)景瀏覽、信息查詢、空間量測(cè)等功能,開發(fā)人員通過(guò)對(duì)這些功能實(shí)現(xiàn)人機(jī)交互。
2? 功能模塊開發(fā)
2.1? 模型加載
該平臺(tái)支持批量加載dae格式的三維模型,能夠?qū)?chǎng)景模型加載到World Wind三維地球上指定的位置。
三維模型的加載主要是基于Web World Wind軟件提供的模型加載接口實(shí)現(xiàn)的,通過(guò)提供給接口模型的路徑信息和模型要加載的位置信息(三維地球上的經(jīng)緯度以及高程)即可在相應(yīng)位置加載模型,并且可以修改模型的大小、透明度等一些屬性。在進(jìn)行大量三維模型加載的時(shí)候要注意模型的數(shù)據(jù)量大小不要超過(guò)系統(tǒng)設(shè)置的緩沖區(qū)大小,否則會(huì)出現(xiàn)瀏覽器崩潰。因此緩沖區(qū)大小要適應(yīng)模型的數(shù)據(jù)量。
模型的加載主要是由ColladaLoader類控制的,為了實(shí)現(xiàn)批量模型的加載,對(duì)模型加載的相關(guān)代碼進(jìn)行了封裝和重構(gòu)處理,封裝成一個(gè)名為addAnyModel(renderLayerName, position, dirPath, fileName, scale, opacity, config)的函數(shù),其參數(shù)分別代表圖層名字、模型位置、模型文件路徑、模型文件名稱、縮放系數(shù)和透明度。通過(guò)調(diào)用該函數(shù)解析三維模型加載相關(guān)的xml文件即可實(shí)現(xiàn)模型批量加載的功能。三維模型批量加載到該平臺(tái)如圖2所示。
2.2? 空間量測(cè)
在工具欄窗口可點(diǎn)擊選擇測(cè)量按鈕,如距離測(cè)量、面積測(cè)量、高程測(cè)量等。以距離測(cè)量為例,選擇距離測(cè)量按鈕后開始取點(diǎn),點(diǎn)擊要測(cè)量的位置即可。如圖3所示,依次選取7個(gè)點(diǎn),平臺(tái)會(huì)自動(dòng)把選取點(diǎn)的路徑通過(guò)黃色實(shí)線繪制出來(lái),從第二個(gè)點(diǎn)開始每次多選一個(gè)點(diǎn),測(cè)量結(jié)果會(huì)實(shí)時(shí)顯示在標(biāo)簽上,取點(diǎn)完成后通過(guò)點(diǎn)擊鼠標(biāo)右鍵即可結(jié)束測(cè)量,并將最終的測(cè)量結(jié)果顯示在標(biāo)簽上。
空間量測(cè)功能主要通過(guò)鼠標(biāo)點(diǎn)擊事件依此獲取到要測(cè)量的點(diǎn)位信息,并把這些信息存儲(chǔ)在一個(gè)數(shù)組中。在記錄存儲(chǔ)點(diǎn)位信息時(shí)會(huì)同時(shí)啟動(dòng)“畫線”功能,即把要測(cè)量的軌跡實(shí)時(shí)顯示出來(lái),通過(guò)鼠標(biāo)右鍵結(jié)束點(diǎn)位信息的獲取。量測(cè)結(jié)果的計(jì)算是將位置信息數(shù)組傳給平臺(tái)提供的計(jì)算函數(shù)。測(cè)量路徑顯示功能是把位置信息通過(guò)平臺(tái)的多邊形生成算法重新生成點(diǎn)位信息,然后通過(guò)平臺(tái)的多邊形繪制接口進(jìn)行繪制。
Web World Wind平臺(tái)的基本場(chǎng)景是三維地球,地球上每個(gè)點(diǎn)都有其唯一確定的位置信息(經(jīng)緯度或者三維坐標(biāo)系坐標(biāo))。由于每一個(gè)經(jīng)緯度代表的距離是確定的,三維坐標(biāo)系的距離單位也是確定的,故可以根據(jù)點(diǎn)的坐標(biāo)信息通過(guò)相應(yīng)算法計(jì)算多點(diǎn)之間的距離和面積。
2.3? 模型搜索
在搜索框中輸入模型名稱,點(diǎn)擊確認(rèn)即可從當(dāng)前視角通過(guò)飛行自動(dòng)到達(dá)目的地點(diǎn),并且會(huì)高亮顯示該模型。
模型搜索主要利用GoToAnimator類實(shí)現(xiàn),即根據(jù)輸入數(shù)據(jù)的關(guān)鍵字匹配對(duì)應(yīng)模型信息,然后根據(jù)讀取到的模型位置信息進(jìn)行飛行。該功能涉及到兩個(gè)技術(shù):一個(gè)是搜索關(guān)鍵字的模糊匹配;另一個(gè)是數(shù)據(jù)的存儲(chǔ)。因?yàn)槟P偷臄?shù)據(jù)量大,所以應(yīng)該將模型的基本信息存儲(chǔ)在數(shù)據(jù)庫(kù)中。另外,在使用GoToAnimator之前,平臺(tái)會(huì)自動(dòng)將相機(jī)鏡頭方向調(diào)整為豎直向下,以便于用戶查看目標(biāo)的位置。
2.4? 屬性顯示
鼠標(biāo)點(diǎn)擊模型,平臺(tái)會(huì)根據(jù)此模型的id信息在數(shù)據(jù)庫(kù)中查找其對(duì)應(yīng)的屬性信息,然后通過(guò)Annotation標(biāo)簽顯示出來(lái)。
屬性顯示功能主要是將屬性信息和位置信息傳遞給Annotation類來(lái)實(shí)現(xiàn)的,同時(shí)可以通過(guò)annotationAttributes類對(duì)屬性信息進(jìn)行修改并保存到數(shù)據(jù)庫(kù)中。為了更方便地使用該功能,對(duì)其進(jìn)行了再次封裝,使用過(guò)程中只需調(diào)用AddAnnotations(label, position, config)函數(shù)即可。其中,參數(shù)label代表屬性信息的內(nèi)容,position代表屬性信息顯示的位置。
每個(gè)模型加載時(shí)都有唯一確定的名字(編號(hào)id),根據(jù)這個(gè)名字在數(shù)據(jù)庫(kù)中查找相應(yīng)的label和position,然后調(diào)用AddAnnotations函數(shù)將屬性信息在指定位置顯示出來(lái)。模型屬性顯示如圖4所示。
2.5? 飛行漫游
飛行漫游功能可以實(shí)現(xiàn)第一人稱視角的三維場(chǎng)景漫游。用戶可以通過(guò)自助取點(diǎn)的方式,即在要飛行的路線上通過(guò)鼠標(biāo)左鍵選取一系列關(guān)鍵點(diǎn),然后點(diǎn)擊開始飛行按鈕后平臺(tái)會(huì)按照設(shè)定好的點(diǎn)位自動(dòng)規(guī)劃路線進(jìn)行飛行漫游。此外也可以通過(guò)直接加載提前規(guī)劃好的路線進(jìn)行飛行漫游。
該功能是基于官方api提供的GotoAnimator類改造的。原有的飛行功能只適合于相機(jī)在高空中鳥瞰地球,其飛行主要靠控制相機(jī)視點(diǎn)和相機(jī)距離,沒有方位角、傾斜角等參數(shù)的變化,不適用于三維場(chǎng)景中的飛行漫游。因此,在GotoAnimator類基礎(chǔ)上進(jìn)行了改進(jìn),封裝成了一個(gè)新的功能類,實(shí)現(xiàn)了三維場(chǎng)景中的飛行漫游。其原理主要是根據(jù)兩個(gè)點(diǎn)間相機(jī)參數(shù)的漸變,改進(jìn)主要體現(xiàn)在相機(jī)漸變參數(shù)的增加以及對(duì)完整飛行路線的支持。
基于GoToAnimator類封裝成了FlyManager類,GoToAnimator類只是能夠做到定位飛行到一個(gè)指定點(diǎn),而FlyManager類能夠?qū)崿F(xiàn)多點(diǎn)間真正意義上相機(jī)平滑無(wú)抖動(dòng)的飛行漫游。FlyManager類添加了updateHeading和updateTilt兩個(gè)方法,并對(duì)轉(zhuǎn)彎進(jìn)行了優(yōu)化。updateHeading和updateTilt是分別控制相機(jī)的heading參數(shù)和tilt參數(shù),F(xiàn)lyManager通過(guò)動(dòng)態(tài)控制這些參數(shù)在兩個(gè)點(diǎn)間漸變,同時(shí)更新系統(tǒng)的視圖矩陣,最終呈現(xiàn)出“飛行”的效果。
FlyManager有兩種具體的飛行漫游方式:一種是普通飛行漫游;另一種是專門進(jìn)行轉(zhuǎn)彎的飛行漫游。選擇哪一種方式是由平臺(tái)的算法自動(dòng)確定的,即需要轉(zhuǎn)彎的使用第二種方式飛行漫游,否則使用第一種方式飛行漫游。
2.6? 二三維聯(lián)動(dòng)
二三維聯(lián)動(dòng)即在屏幕上顯示三維場(chǎng)景的同時(shí)在右下角位置顯示一個(gè)二維的地圖窗口,兩個(gè)窗口可相互關(guān)聯(lián),即對(duì)其中任意一個(gè)窗口進(jìn)行平移或縮放操作時(shí),另一個(gè)窗口也會(huì)同時(shí)進(jìn)行相應(yīng)的平移和縮放操作。
二三維聯(lián)動(dòng)的主要原理是通過(guò)對(duì)二維地圖窗口和三維場(chǎng)景窗口的各種操作事件進(jìn)行綁定實(shí)現(xiàn)的。當(dāng)一個(gè)窗口事件觸發(fā)時(shí),將會(huì)調(diào)用對(duì)應(yīng)的事件函數(shù)對(duì)另一個(gè)窗口也做出相應(yīng)的操作。比如:一個(gè)二維地圖窗口中心點(diǎn)通過(guò)平移改變位置,程序?qū)?huì)自動(dòng)更新新的窗口中心點(diǎn)位置,并將三維場(chǎng)景窗口中心點(diǎn)也移動(dòng)到該位置;二維地圖窗口的scale發(fā)生改變,程序則會(huì)自動(dòng)控制三維場(chǎng)景窗口中的相機(jī)高度發(fā)生相應(yīng)的改變。
該功能對(duì)兩個(gè)窗口都添加了鼠標(biāo)按下、平移、松開事件。例如,默認(rèn)情況下在沒觸發(fā)鼠標(biāo)操作的時(shí)候,程序直接將二維地圖的中心點(diǎn)設(shè)置為三維窗口的中心點(diǎn)。Web World Wind的中心是通過(guò)navigator類控制的,而天地圖的中心是通過(guò)centerAndZoom類實(shí)現(xiàn)的。
3? 結(jié)? 語(yǔ)
本文基于開源軟件World Wind 設(shè)計(jì)和開發(fā)完成了具有模型加載、空間量測(cè)、模型搜索、屬性顯示、飛行漫游和二三維聯(lián)動(dòng)等功能的三維可視化平臺(tái),實(shí)現(xiàn)了現(xiàn)實(shí)世界展示的三維化、智能化。利用該平臺(tái)用戶只需使用瀏覽器就能查看三維場(chǎng)景的效果,從而達(dá)到三維可視化目的。
參考文獻(xiàn)
[1] 張霽,熊偉.基于World Wind的糧倉(cāng)三維可視化平臺(tái)[J].電子設(shè)計(jì)工程,2016,24(20):78?81.
[2] 楊磊,高素青.基于World Wind的三維GIS研究[J].電腦知識(shí)與技術(shù),2010,6(22):6331?6334.
[3] 李濤,張志剛.基于World Wind的三維Web GIS結(jié)構(gòu)研究[J].煤炭技術(shù),2010,29(10):153?155.
[4] 于翔,姜仁貴,李建勛,等.基于三維可視化平臺(tái)的水資源監(jiān)控主題服務(wù)研究[J].水利信息化,2015(6):32?36.
[5] 王穆一雄,吳政漾,張新秀,等.校園建筑物三維可視化查詢系統(tǒng)研究與開發(fā)[J].蘭州交通大學(xué)學(xué)報(bào),2013,32(1):120?123.
[6] 孫赫,馮仲科,王海平,等.基于Sketch Up和Arc GIS的校園樹木三維可視化[J].林業(yè)調(diào)查規(guī)劃,2011(6):17?20.
[7] 郝文霞,劉萬(wàn)龍,李學(xué)剛,等.基于World Wind的三維電網(wǎng)資源管理平臺(tái)技術(shù)研究[J].電力信息與通信技術(shù),2014,12(1):90?95.
[8] 譚征.基于三維虛擬的農(nóng)村景觀設(shè)計(jì)系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2018,41(22):38?41.
[9] 吳文靜.Sketch Up與Arc GIS在三維數(shù)字校園中的應(yīng)用研究[D].哈爾濱:東北林業(yè)大學(xué),2012.
[10] 洪清鋒.基于Google Sketch Up和Arc GIS建立校園三維可視化的方法探討[J].數(shù)字技術(shù)與應(yīng)用,2011(11):174?175.
[11] 張森崗.基于Web GIS的三維智慧校園的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京建筑大學(xué),2014.
[12] 鮑艷紅,武明.基于虛擬現(xiàn)實(shí)的森林公園景觀的節(jié)能設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2018,41(4):124?126.