王星捷,李春花
(成都理工大學(xué) 工程技術(shù)學(xué)院,四川 樂山 614007)
隨著信息技術(shù)與三維引擎技術(shù)的發(fā)展,Web三維GIS技術(shù)的需求也變得越來越大,在不動(dòng)產(chǎn)登記中的房產(chǎn)數(shù)據(jù)涉及到的房產(chǎn)分層分戶管控,需將房產(chǎn)建筑按高程分布來分層展示和分析;城鄉(xiāng)建設(shè)中的填挖方計(jì)算和洪水淹沒分析通過三維可視化來展示實(shí)際影響的范圍以模擬演算;環(huán)境氣象監(jiān)控不同高程的大氣質(zhì)量分析需要更加直觀的三維效果展示。因此三維GIS的研究具有重大意義。
WebGL具有以下優(yōu)點(diǎn)[1-2]:不用安裝額外的插件程序就可以直接在網(wǎng)頁中加載和渲染三維場景;可以直接調(diào)用設(shè)備的硬件來加速渲染三維場景;開發(fā)Web三維場景時(shí)調(diào)用Web的3D圖形庫非常方便。
國內(nèi)基于WebGL技術(shù)[3-4]實(shí)現(xiàn)Web三維GIS效果較好的產(chǎn)品是超圖的SuperMap平臺(tái)的iClient產(chǎn)品,但是它還是借助國外開源的js插件庫Cesiumjs來實(shí)現(xiàn),實(shí)現(xiàn)的GIS功能僅僅是屬性顯示、查詢和基本的瀏覽功能,目前該技術(shù)在國內(nèi)仍處于研究探索階段。Cesiumjs是一個(gè)用JavaScript編寫的基于WebGL的三維GIS引擎插件庫,專門針對地理信息數(shù)據(jù)開發(fā),可以很方便地將影像圖和二維地圖數(shù)據(jù)加載到三維地球模型中,也可加載在線地形數(shù)據(jù),能夠很好地實(shí)現(xiàn)地理坐標(biāo)向WebGL坐標(biāo)的轉(zhuǎn)換。但是它僅僅作為一個(gè)將GIS數(shù)據(jù)進(jìn)行三維可視化的插件[5-6],沒有GIS分析功能,而且目前支持的數(shù)據(jù)來源有限。
文中結(jié)合WebGL技術(shù)和ArcServer平臺(tái)提出一種三維數(shù)字城市的實(shí)現(xiàn)方法,實(shí)現(xiàn)了二三維同步、定位查詢、緩沖分析、三維路徑分析等多項(xiàng)功能。
技術(shù)框架采用了面向資源服務(wù)的模式,以異步通信處理方式設(shè)計(jì),分為四層:二維地圖服務(wù)層、二維業(yè)務(wù)層、三維業(yè)務(wù)層和展示層。具體設(shè)計(jì)如圖1所示。
圖1 技術(shù)框架
二維地圖服務(wù)層主要利用ArcGIS Server平臺(tái),該平臺(tái)主要是為系統(tǒng)提供二維地圖數(shù)據(jù)服務(wù),將二維電子地圖矢量圖數(shù)據(jù)、空間數(shù)據(jù)信息、網(wǎng)絡(luò)分析圖、地理分析等數(shù)據(jù)發(fā)布為WebGIS數(shù)據(jù)服務(wù)。提供了地理查詢、緩沖區(qū)分析、網(wǎng)絡(luò)路徑分析等WebGIS服務(wù),同時(shí)提供了可訪問的REST資源服務(wù),通過REST的URL方式進(jìn)行訪問,可以實(shí)現(xiàn)二維地圖的各項(xiàng)功能。
二維業(yè)務(wù)層主要利用ArcGIS API For JavaScript進(jìn)行二次開發(fā),通過調(diào)用ArcGIS Server服務(wù)中的REST資源,實(shí)現(xiàn)相關(guān)的二維地圖基本操作,調(diào)用服務(wù)中提供的網(wǎng)絡(luò)分析、緩沖分析等功能實(shí)現(xiàn)二維地圖的相關(guān)的空間分析功能。該層是地圖業(yè)務(wù)實(shí)現(xiàn)的基礎(chǔ)層,也是二、三維業(yè)務(wù)實(shí)現(xiàn)的基礎(chǔ)層。
三維層主要實(shí)習(xí)三維場景的加載以及二、三維數(shù)據(jù)的聯(lián)動(dòng)。三維場景方面主要是利用WebGL提供的標(biāo)準(zhǔn)JavaScript庫Three.js來創(chuàng)建三維場景,通過場景坐標(biāo)轉(zhuǎn)換和模型UV處理,可以讓模型和坐標(biāo)無誤地加載到三維場景中。三維數(shù)據(jù)上的操作處理分為兩個(gè)部分,第一部分是獲取二維地圖操作的基本信息,可以通過二維業(yè)務(wù)層得到;第二部分是讓二維信息在三維中進(jìn)行顯示,從而實(shí)習(xí)三維空間操作的業(yè)務(wù)功能,需要通過二、三維視圖同步處理,將二維的業(yè)務(wù)無誤地聯(lián)動(dòng)到三維中,從而實(shí)現(xiàn)三維GIS功能。在路徑分析方面,設(shè)計(jì)了三維路徑分析算法,對二維的路徑分析進(jìn)行了優(yōu)化處理,實(shí)現(xiàn)了三維路徑分析功能。
展示層主要是三維顯示和業(yè)務(wù)操作在三維中的展現(xiàn),利用Three.js技術(shù)實(shí)現(xiàn),并且無需任何插件可以瀏覽三維場景和模型。在沒有任何處理的情況下,三維模型、三維漫游和三維場景旋轉(zhuǎn)顯得比較生硬,運(yùn)動(dòng)軌跡不平滑,需要通過三維對象運(yùn)動(dòng)控制算法進(jìn)行處理。
文中研究的三維GIS平臺(tái)實(shí)現(xiàn)的三維路徑分析算法[7]是基于ArcGIS的最短路徑分析完善A-Star(A*)算法實(shí)現(xiàn)的。A*算法是一種靜態(tài)路網(wǎng)中求解最短路徑最有效的直接搜索算法,也是在交通網(wǎng)絡(luò)分析中尋找最優(yōu)路徑用得最多的啟發(fā)式搜索算法。它的原理是通過從起點(diǎn)開始遍歷網(wǎng)絡(luò)中的每一個(gè)節(jié)點(diǎn)并計(jì)算其到起點(diǎn)和終點(diǎn)所需要的代價(jià)直到遍歷到終點(diǎn)時(shí),所遍歷出的路徑就是需要找出的最優(yōu)路徑。A*算法計(jì)算代價(jià)的估價(jià)函數(shù)表達(dá)式為:
F(n)=G(n)+H(n)
(1)
其中,F(xiàn)(n)表示估計(jì)經(jīng)過n節(jié)點(diǎn)所花費(fèi)的總的代價(jià)的估價(jià)函數(shù);G(n)表示起點(diǎn)到n節(jié)點(diǎn)所花費(fèi)的實(shí)際代價(jià);H(n)表示n節(jié)點(diǎn)到終點(diǎn)的估價(jià)值。
以D(n)表示狀態(tài)n到目標(biāo)狀態(tài)的距離,那么H(n)的選取大致有如下三種情況:如果H(n)
從式1可以看出G(n)為已知的,關(guān)鍵在于對H(n)的設(shè)計(jì),H(n)的取值決定了算法的簡化程度。對于H(n)的設(shè)計(jì)有多種方法,常見的有曼哈頓距離、歐幾里得距離、對角線距離等。其中,歐幾里得距離最短,但是運(yùn)行的時(shí)間較長。為了簡化查詢,提高算法執(zhí)行的速度,在文中研究的三維GIS平臺(tái)中,結(jié)合空間分析的緩沖分析算法,其中G(n)為起點(diǎn)到n節(jié)點(diǎn)所經(jīng)過的道路邊長度總和,H(n)為n節(jié)點(diǎn)到終點(diǎn)的直線距離[8]。在尋找節(jié)點(diǎn)時(shí),結(jié)合緩沖分析算法,得出附近的節(jié)點(diǎn),簡化遍歷搜索的范圍。
首先,需要對每一個(gè)道路邊和節(jié)點(diǎn)進(jìn)行遍歷,在制作網(wǎng)絡(luò)分析數(shù)據(jù)集時(shí)需要將每條道路路線[9]進(jìn)行打斷相交線處理,建立網(wǎng)絡(luò)路徑,以保證每個(gè)道路節(jié)點(diǎn)通暢[10],方便路徑分析算法遍歷[11]。當(dāng)執(zhí)行最短路徑分析功能時(shí),服務(wù)器將從起點(diǎn)開始向周圍節(jié)點(diǎn)進(jìn)行啟發(fā)式搜索,以設(shè)定的H(n)值作為參考,進(jìn)行緩沖分析,得出附近的節(jié)點(diǎn),遍歷節(jié)點(diǎn),估算F(n),得出代價(jià)值,求出最小代價(jià)節(jié)點(diǎn)。優(yōu)先遍歷估算代價(jià)最小道路節(jié)點(diǎn)和道路邊,并進(jìn)行標(biāo)記。通過不斷的遞歸判斷,當(dāng)搜索到終點(diǎn)時(shí),所標(biāo)記經(jīng)過的路徑即為需要的最優(yōu)路徑,這時(shí)只需要返回將標(biāo)記過的道路邊遍歷出來就得到了路徑分析的結(jié)果。具體的算法過程如圖2所示。
圖2 基于A*算法的最優(yōu)路徑分析過程
(1)平臺(tái)搭建過程。
文中研究的基于WebGL搭建的Web三維數(shù)字城市平臺(tái)采用B/S架構(gòu),使用強(qiáng)大的GIS數(shù)據(jù)處理軟件進(jìn)行GIS基礎(chǔ)數(shù)據(jù)的制作與處理,使用3DsMax進(jìn)行部分人工建模,利用可靠、安全、高性能的IIS服務(wù)建立站點(diǎn),使平臺(tái)的性能進(jìn)一步提升。借助ArcGIS Server地理信息服務(wù)實(shí)現(xiàn)強(qiáng)大的地理分析功能,使用WebGL技術(shù)通過將ArcGIS Service的地理信息數(shù)據(jù)和分析服務(wù)在網(wǎng)頁進(jìn)行三維可視化,從而搭建出一個(gè)功能強(qiáng)大、安全可靠的Web三維GIS分析基礎(chǔ)平臺(tái)。
(2)數(shù)據(jù)發(fā)布。
數(shù)據(jù)發(fā)布的工作是將準(zhǔn)備好的數(shù)據(jù)通過服務(wù)發(fā)布到互聯(lián)網(wǎng)上,使互聯(lián)網(wǎng)中的終端設(shè)備能夠調(diào)用到本機(jī)(即服務(wù)器)發(fā)布的服務(wù)。主要分為兩種:地理信息服務(wù)和基礎(chǔ)數(shù)據(jù)服務(wù)。地理信息服務(wù)包含GIS數(shù)據(jù)服務(wù)和GIS分析服務(wù)兩種。數(shù)據(jù)服務(wù)以及網(wǎng)絡(luò)分析服務(wù)的發(fā)布方法比較簡單,直接將制作好的基礎(chǔ)地圖和網(wǎng)絡(luò)分析地圖文檔在ArcMap或者ArcCatalog中的目錄樹中使用右鍵的共享為服務(wù)功能將地圖文檔發(fā)布到ArcGIS Server站點(diǎn)即可,發(fā)布參數(shù)按ArcGIS默認(rèn)的參數(shù)即可滿足平臺(tái)需求?;A(chǔ)數(shù)據(jù)服務(wù)發(fā)布包括系統(tǒng)的模型數(shù)據(jù)、貼圖文件以及系統(tǒng)的影像地圖數(shù)據(jù)的發(fā)布,這些數(shù)據(jù)可以直接放在平臺(tái)對應(yīng)的IIS站點(diǎn)根目錄下,待平臺(tái)調(diào)用。
(3)坐標(biāo)轉(zhuǎn)換。
ArcGIS Server數(shù)據(jù)服務(wù)提供的矢量數(shù)據(jù)為ArcGIS特有的數(shù)據(jù)格式,也就是包含基本的點(diǎn)、線、面等信息。這些點(diǎn)、線、面都是由一系列的點(diǎn)集合組成,點(diǎn)、線、面都屬于空間信息,空間信息都具有坐標(biāo)信息的特性,在數(shù)據(jù)導(dǎo)入和加載時(shí),因空間參考的因素而造成空間位置的變化和發(fā)送偏移,因此需要Three.js場景坐標(biāo)轉(zhuǎn)換算法將這些點(diǎn)集中的每一個(gè)點(diǎn)轉(zhuǎn)換為平臺(tái)場景中的坐標(biāo)點(diǎn),以便平臺(tái)可以利用Three.js使用這些矢量數(shù)據(jù)。
(4)模型創(chuàng)建。
經(jīng)過坐標(biāo)轉(zhuǎn)換算法處理后,場景數(shù)據(jù)與對應(yīng)的地理要素坐標(biāo)保持一一對應(yīng)的關(guān)系,三維模型都是利用三維建模軟件制作的外部模型,需要針對具體的點(diǎn)位置進(jìn)行導(dǎo)入和加載,對于點(diǎn)數(shù)據(jù)可以直接按照屬性數(shù)據(jù)中的模型物理路徑字段指定的位置加載模型[12]。道路、廣場等矢量面數(shù)據(jù)需要根據(jù)具體的位置、寬度進(jìn)行紋理貼圖;粗模建筑矢量面數(shù)據(jù)需要根據(jù)高度字段對其進(jìn)行拉伸形成立體的建筑,同時(shí)按照貼圖物理路徑字段指向的貼圖對模型進(jìn)行貼圖;精細(xì)模型則要根據(jù)具體的建筑面的長寬,建立尺寸一致的模型,從外部數(shù)據(jù)中進(jìn)行導(dǎo)入。
(5)二、三維地圖同步。
二、三維同步是實(shí)現(xiàn)三維數(shù)字城市技術(shù)的關(guān)鍵,通過二、三維同步可以將二維數(shù)據(jù)直接在三維模型中進(jìn)行實(shí)時(shí)同步。該技術(shù)的實(shí)現(xiàn)簡化了三維數(shù)字城市開發(fā)的步驟,降低了開發(fā)難度,而且實(shí)現(xiàn)的效果好。該系統(tǒng)采用視圖同步的方法實(shí)現(xiàn)了二、三維地圖數(shù)據(jù)的同步。視圖同步實(shí)現(xiàn)方法是在二維地圖的地圖控件的地圖范圍變化事件中注冊三維場景的相機(jī)同步控制函數(shù)。相機(jī)同步控制函數(shù)中利用二、三維視圖同步算法計(jì)算出二維地圖當(dāng)前顯示范圍場景中相機(jī)對應(yīng)的位置,同時(shí)利用三維對象運(yùn)動(dòng)控制算法對相機(jī)的運(yùn)動(dòng)過程進(jìn)行插值計(jì)算。讓場景中的相機(jī)能夠動(dòng)畫過渡到根據(jù)二維地圖顯示范圍計(jì)算出的相機(jī)位置,從而實(shí)現(xiàn)視圖的同步[13]。
(6)GIS服務(wù)三維可視化。
利用ArcGIS Server發(fā)布的GIS分析服務(wù)來實(shí)現(xiàn)平臺(tái)的三維GIS分析功能[14]。實(shí)現(xiàn)過程如下:平臺(tái)業(yè)務(wù)層使用AJAX異步請求ArcGIS Server的GIS分析服務(wù),ArcGIS Server返回瀏覽器請求的數(shù)據(jù),平臺(tái)根據(jù)結(jié)果數(shù)據(jù)的ID映射出三維場景中的建筑或街道等對象,最后將這些對象模型在Three.js場景中進(jìn)行高亮顯示,從而實(shí)現(xiàn)GIS服務(wù)的三維可視化。三維路徑分析服務(wù)返回結(jié)果可根據(jù)二維數(shù)據(jù)的三維可視化方法在場景中創(chuàng)建相應(yīng)的路徑對象。
文中研究的數(shù)據(jù)是來自于某一城市某城鎮(zhèn)的數(shù)據(jù),范圍大小為10平方公里。模型數(shù)量超過5 000個(gè)。城市建筑多樣,道路情況較為復(fù)雜,交通網(wǎng)絡(luò)圖密度大。分別對定位查詢、緩沖分析查詢和最短路徑等三維功能進(jìn)行了測試。
三維定位查詢功能,針對不同的地址名,在搜索框中輸入地名關(guān)鍵字,系統(tǒng)客戶端向后臺(tái)服務(wù)器系統(tǒng)發(fā)送中執(zhí)行地址查詢關(guān)鍵字,查詢結(jié)果將通過JSON的數(shù)據(jù)格式返回到客戶端,將查詢結(jié)果同步展示在二維地圖和三維場景中,如圖3所示。
圖3 三維定位查詢
緩沖查詢主要是通過緩沖分析來實(shí)現(xiàn)區(qū)域范圍內(nèi)的數(shù)據(jù)??稍诙S地圖界面中繪制矢量的點(diǎn)、線、面來設(shè)置緩沖參數(shù)對建筑物進(jìn)行緩沖查詢,后臺(tái)服務(wù)器接收到數(shù)據(jù)參數(shù),通過調(diào)用幾何服務(wù)執(zhí)行幾何查詢,并生成相應(yīng)的幾何緩沖區(qū)域。將緩沖區(qū)范圍內(nèi)的所有目標(biāo)類型對象查詢出來,通過JSON的格式返回給客戶端,將分析數(shù)據(jù)在二維地圖上進(jìn)行顯示,通過視圖同步處理,將二維空間數(shù)據(jù)同步在三維地圖對應(yīng)的三維模型中顯示,如圖4和圖5所示。
圖4 緩沖查詢結(jié)果在二維地圖中的高亮顯示
圖5 緩沖查詢結(jié)果在三維地圖中的高亮顯示
三維路徑分析的實(shí)現(xiàn)是通過ArcGIS Server獲取二維的網(wǎng)絡(luò)路徑圖,將節(jié)點(diǎn)和各個(gè)節(jié)點(diǎn)的聯(lián)通網(wǎng)絡(luò)構(gòu)成矩陣網(wǎng)絡(luò),通過文中提出的路徑算法進(jìn)行實(shí)現(xiàn)。用戶在場景中選中一系列需要設(shè)置為途徑站點(diǎn)的建筑物,然后點(diǎn)擊路徑分析,分析結(jié)果將展示在二維地圖和三維場景中。采用WebGL技術(shù)還可以實(shí)現(xiàn)三維的路徑漫游,在三維路徑分析中,可以設(shè)計(jì)漫游小車,進(jìn)行路徑模擬。三維場景中的展示效果如圖6所示。
圖6 三維路徑分析
將WebGL與ArcGIS Server相結(jié)合,以ArcGIS Server實(shí)現(xiàn)空間數(shù)據(jù)和空間分析數(shù)據(jù)的傳輸,以WebGL實(shí)現(xiàn)在客戶端三維數(shù)據(jù)的加載和處理,而二者結(jié)合實(shí)現(xiàn)的三維數(shù)字城市系統(tǒng),很好地實(shí)現(xiàn)了空間數(shù)據(jù)與三維模型的快速加載,二、三維數(shù)據(jù)聯(lián)動(dòng),三維屬性查詢,三維緩存分析和三維路徑分析等功能。測試數(shù)據(jù)的三維加載和三維功能實(shí)驗(yàn)證明了該技術(shù)方案先進(jìn)、實(shí)用、擴(kuò)展性好、算法完善;實(shí)現(xiàn)的三維系統(tǒng)界面友好,功能完備,解決了數(shù)據(jù)加載和瀏覽需要額外插件的問題。為基于Web的三維數(shù)字城市平臺(tái)的建設(shè),提供了一種新的框架方案和技術(shù)參考。