周正 王星東 劉碩
(1.河南省時(shí)空大數(shù)據(jù)產(chǎn)業(yè)技術(shù)研究院,河南 鄭州 450046;2.河南大學(xué) 環(huán)境與規(guī)劃學(xué)院,河南 開(kāi)封 475004;3. 河南工業(yè)大學(xué) 信息科學(xué)與工程學(xué)院,河南 鄭州 450001)
隨著新興技術(shù)的不斷發(fā)展,對(duì)于GIS 的研究開(kāi)始向三維領(lǐng)域擴(kuò)展,三維可視化的發(fā)展成為了必要需求。為了滿足人們的生活需要,桌面端的三維GIS 日益豐富。但隨著手機(jī)、平板電腦的普及,對(duì)移動(dòng)端的三維GIS 產(chǎn)品的需求日益增大。目前,國(guó)內(nèi)外移動(dòng)三維GIS的產(chǎn)品較少[1]。與桌面端的三維GIS 相比,移動(dòng)端的三維GIS 具有如下優(yōu)點(diǎn):
(1)移動(dòng)端的三維GIS,任何聯(lián)網(wǎng)的手機(jī)只需下載一個(gè)APP 即可瀏覽三維場(chǎng)景,系統(tǒng)除了平移縮放、距離測(cè)量等基本操作外,還添加了查詢定位、興趣點(diǎn)推薦、二三維地圖導(dǎo)航等功能,可以幫助用戶解決一些實(shí)際問(wèn)題[2]。
(2)能夠快速導(dǎo)入、編輯、獲取三維場(chǎng)景數(shù)據(jù),幫助用戶壓縮制作成本,具有很高的安全性,操作簡(jiǎn)單,使用方便。
(3)移動(dòng)端三維場(chǎng)景制作成本低,操作簡(jiǎn)單,易于上手,界面簡(jiǎn)易又不失美觀,實(shí)用性也較強(qiáng),可以吸引大量用戶,獲得明顯收益[3]。移動(dòng)端的三維GIS可應(yīng)用于智慧旅游、智慧校園以及智慧城市等領(lǐng)域,在空間地理位置信息服務(wù)中有很大的發(fā)展?jié)摿ΑR虼?,基于Cesium 的三維移動(dòng)端GIS 系統(tǒng)的開(kāi)發(fā)具有深遠(yuǎn)的研究意義。
本系統(tǒng)開(kāi)發(fā)的目的就是要讓三維場(chǎng)景流暢地在移動(dòng)端運(yùn)行,滿足用戶真實(shí)需求,保證用戶空間位置的真實(shí)性,切實(shí)為用戶提供空間位置信息服務(wù)。
基于Cesium 的三維移動(dòng)端GIS 系統(tǒng)的開(kāi)發(fā)框架采用了手機(jī)端和Web 端相結(jié)合的方式,減少了對(duì)原生Android 開(kāi)發(fā)的依賴,增強(qiáng)了軟件的可移植性。前端基于Node.js 框架采用CesiumJS 進(jìn)行開(kāi)發(fā),Node.js 可以讓網(wǎng)頁(yè)加載和訪問(wèn)速度更快,與Tomcat 服務(wù)器相比,Node.js 具有更高的并發(fā)性[4]。只需要一個(gè)Node.js 服務(wù)器,就可以完成網(wǎng)站以及數(shù)據(jù)庫(kù)的開(kāi)發(fā),不必再去搭建JavaWeb 項(xiàng)目,減少了資源的消耗,提高了開(kāi)發(fā)效率[5]。在手機(jī)端的開(kāi)發(fā)中,本系統(tǒng)用到了TBS 的WebView 開(kāi)發(fā)框架,可以實(shí)現(xiàn)在軟件內(nèi)加載和瀏覽網(wǎng)頁(yè),節(jié)省了成本和時(shí)間。在加載模型方面,本系統(tǒng)采用了批量加載模型的框架,讓模型的渲染更加迅速,更好地展示在移動(dòng)端頁(yè)面。
本系統(tǒng)的開(kāi)發(fā)是為用戶提供移動(dòng)端三維場(chǎng)景的瀏覽和空間位置信息服務(wù)。根據(jù)用戶需求,系統(tǒng)在二維地圖中提供了二維地圖基本瀏覽、路徑規(guī)劃及導(dǎo)航等功能,在三維場(chǎng)景中提供了場(chǎng)景瀏覽、查詢定位、二三維地圖聯(lián)動(dòng)、興趣點(diǎn)推薦、三維地圖導(dǎo)航等功能。為了滿足用戶不同場(chǎng)景需求,系統(tǒng)在界面右上角提供了二維地圖和三維場(chǎng)景的切換選擇。
在二維地圖中,系統(tǒng)除了基本的地圖操作外,還為用戶提供了路徑規(guī)劃導(dǎo)航功能。當(dāng)用戶不需要三維場(chǎng)景時(shí),可選擇二維地圖來(lái)滿足需求。
在三維場(chǎng)景中,興趣點(diǎn)推薦功能需要獲取用戶當(dāng)前位置,然后為用戶推薦興趣熱點(diǎn),進(jìn)而提供一定三維場(chǎng)景范圍內(nèi)的信息服務(wù)。三維場(chǎng)景的路徑規(guī)劃及導(dǎo)航功能是通過(guò)獲取用戶的空間位置實(shí)現(xiàn)的。二三維地圖聯(lián)動(dòng)及場(chǎng)景切換是在不同場(chǎng)景下,為用戶提供不同的選擇,更好地為用戶服務(wù)。三維場(chǎng)景的查詢定位是為了用戶快速獲取周圍建筑物的信息。其中,本模塊為用戶提供了文字和語(yǔ)音輸入兩種操作方式,滿足不同用戶不同場(chǎng)景的需求。
在完成需求分析后,需要對(duì)系統(tǒng)進(jìn)行概要設(shè)計(jì)。概要設(shè)計(jì)是整個(gè)系統(tǒng)完成的總體框架,在系統(tǒng)開(kāi)發(fā)前必須進(jìn)行軟件的概要設(shè)計(jì)。根據(jù)用戶需求分析以及軟件開(kāi)發(fā)的實(shí)際情況,將系統(tǒng)分為二維地圖和三維場(chǎng)景兩個(gè)主要開(kāi)發(fā)模塊。進(jìn)行概要設(shè)計(jì)時(shí)除了明確要進(jìn)行開(kāi)發(fā)的功能模塊外,也要考慮系統(tǒng)的UI 交互設(shè)計(jì)。一個(gè)良好的用戶交互設(shè)計(jì)是一個(gè)軟件必須具備的。有了概要設(shè)計(jì),各功能模塊之間的耦合度才會(huì)更高,軟件的穩(wěn)定性才會(huì)更高。
本系統(tǒng)的功能主要分為二維地圖瀏覽、二維地圖路徑規(guī)劃及導(dǎo)航、三維場(chǎng)景加載及瀏覽、三維場(chǎng)景定位查詢、三維場(chǎng)景興趣點(diǎn)推薦、二維地圖與三維場(chǎng)景聯(lián)動(dòng)、三維場(chǎng)景路徑規(guī)劃及導(dǎo)航。系統(tǒng)模塊劃分如圖1 所示。
圖1 系統(tǒng)模塊劃分
系統(tǒng)的概要設(shè)計(jì)完成后,要進(jìn)行詳細(xì)設(shè)計(jì)。詳細(xì)設(shè)計(jì)不僅要對(duì)各功能模塊之間的調(diào)用接口進(jìn)行明確,還要對(duì)各個(gè)功能模塊的具體實(shí)現(xiàn)流程以及實(shí)現(xiàn)過(guò)程中發(fā)生的時(shí)間進(jìn)行設(shè)計(jì)。本部分的設(shè)計(jì)也包含了系統(tǒng)運(yùn)行出錯(cuò)時(shí)要進(jìn)行的操作。有了完整的詳細(xì)設(shè)計(jì),才能進(jìn)行系統(tǒng)下一步的開(kāi)發(fā)與實(shí)現(xiàn)。
進(jìn)入系統(tǒng)后,首先是可以展示用戶當(dāng)前位置的二維地圖,用戶可以瀏覽查看地圖。二維地圖的基本操作有放大、縮小、移動(dòng)以及旋轉(zhuǎn)。在該地圖界面,用戶可以查看自己的實(shí)時(shí)位置。系統(tǒng)的開(kāi)發(fā)用到了高德二維地圖,為用戶提供二維地圖相關(guān)服務(wù)。二維地圖瀏覽展示如圖2 所示。
查看完二維地圖后,用戶可以點(diǎn)擊下方藍(lán)色的橢圓形“選取終點(diǎn)”按鈕,在二維地圖上隨機(jī)點(diǎn)擊選取一點(diǎn)作為終點(diǎn)。選取完畢后,點(diǎn)擊“路徑規(guī)劃”,系統(tǒng)會(huì)把用戶最后點(diǎn)擊的點(diǎn)作為終點(diǎn),規(guī)劃一條步行導(dǎo)航路徑。點(diǎn)擊“開(kāi)始導(dǎo)航”后,系統(tǒng)開(kāi)始為用戶導(dǎo)航,二維地圖路徑規(guī)劃及導(dǎo)航如圖3 所示。
圖2 二維地圖瀏覽展示
圖3 二維地圖路徑規(guī)劃及導(dǎo)航
用戶可以點(diǎn)擊右上角的三維地圖切換按鈕,進(jìn)入三維場(chǎng)景。同樣,如果用戶想要回到二維地圖界面,可在相同位置點(diǎn)擊二維地圖。在三維場(chǎng)景內(nèi),用戶在頂部的搜索欄手動(dòng)或語(yǔ)音輸入要查詢模型的關(guān)鍵字。系統(tǒng)查詢完成后,會(huì)以氣泡顯示框的形式將查詢到的信息展示在手機(jī)客戶端界面,三維場(chǎng)景查詢定位如圖4 所示。
考慮到用戶無(wú)法在三維場(chǎng)景內(nèi)查看對(duì)應(yīng)的二維地圖信息,因此,系統(tǒng)在三維場(chǎng)景界面左下方設(shè)計(jì)展示對(duì)應(yīng)的二維地圖,滿足用戶在某些特定場(chǎng)景的需求。二三維地圖聯(lián)動(dòng)是靠監(jiān)聽(tīng)二維地圖以及三維場(chǎng)景當(dāng)前中心點(diǎn)來(lái)實(shí)現(xiàn)的。在二維地圖或三維場(chǎng)景的移動(dòng)過(guò)程中,兩者的中心點(diǎn)始終保持同一位置。為了保證數(shù)據(jù)的準(zhǔn)確性和真實(shí)性,系統(tǒng)在實(shí)現(xiàn)時(shí)用到了空間坐標(biāo)轉(zhuǎn)換。其中,二維地圖的坐標(biāo)系是GCJ02 坐標(biāo)系,三維場(chǎng)景用到的坐標(biāo)系是WGS84 坐標(biāo)系。二三維聯(lián)動(dòng)如圖5 所示。
圖4 三維場(chǎng)景查詢定位
圖5 二三維聯(lián)動(dòng)
興趣點(diǎn)推薦類似于購(gòu)物軟件的智能推薦。本系統(tǒng)的興趣點(diǎn)推薦是基于用戶當(dāng)前位置實(shí)現(xiàn)的。系統(tǒng)會(huì)自動(dòng)獲取用戶首次進(jìn)入三維場(chǎng)景的位置信息,并將位置返回至后臺(tái)服務(wù)器。后臺(tái)服務(wù)器會(huì)進(jìn)行計(jì)算,并將計(jì)算結(jié)果以對(duì)話框的形式展示在系統(tǒng)界面的正中央。為了讓用戶快速定位到興趣點(diǎn),系統(tǒng)還增加了信息框的點(diǎn)擊功能。只要用戶點(diǎn)擊對(duì)應(yīng)的信息框,系統(tǒng)就會(huì)定位到該興趣點(diǎn)。用戶如果想要前往該興趣點(diǎn),可以選擇導(dǎo)航到該位置。同時(shí),如果用戶想要語(yǔ)音輸入,也可以點(diǎn)擊語(yǔ)音圖標(biāo)輸入該興趣點(diǎn)的關(guān)鍵字信息,系統(tǒng)就會(huì)為用戶進(jìn)行路徑規(guī)劃和導(dǎo)航。興趣點(diǎn)推薦如圖6所示。
三維導(dǎo)航是為用戶在小范圍的精細(xì)場(chǎng)景內(nèi)設(shè)計(jì)的。在一些比較偏僻的地方,二維地圖往往不能夠?yàn)橛脩籼峁┚_導(dǎo)航,導(dǎo)致用戶體驗(yàn)較差。為了解決這一問(wèn)題,在三維場(chǎng)景的基礎(chǔ)上,系統(tǒng)進(jìn)行了三維導(dǎo)航功能的開(kāi)發(fā)。與二維導(dǎo)航相比,系統(tǒng)獲取的是用戶當(dāng)前的空間位置信息。結(jié)合用戶選取的終點(diǎn)信息,經(jīng)過(guò)空間分析的最短路徑算法和優(yōu)路徑算法為用戶進(jìn)行三維場(chǎng)景的路徑規(guī)劃。路徑規(guī)劃完成后,點(diǎn)擊“開(kāi)始導(dǎo)航”,系統(tǒng)開(kāi)始調(diào)用場(chǎng)景相機(jī)為用戶提供導(dǎo)航視角,其中,場(chǎng)景相機(jī)的視角是根據(jù)用戶在三維真實(shí)世界里的視角以及每段關(guān)鍵路徑的方向來(lái)確定三維場(chǎng)景的視角,三維導(dǎo)航如圖7 所示。
圖6 興趣點(diǎn)推薦
圖7 三維導(dǎo)航
基于Cesium 的三維移動(dòng)端GIS 系統(tǒng)的開(kāi)發(fā)與應(yīng)用具有如下特點(diǎn):
(1)將虛擬三維場(chǎng)景與真實(shí)三維世界相結(jié)合,為用戶提供三維場(chǎng)景的地理位置信息服務(wù)。
(2)動(dòng)態(tài)加載場(chǎng)景資源,減少對(duì)硬件設(shè)備資源的消耗,優(yōu)化用戶體驗(yàn)。
(3)用戶在真實(shí)三維世界的位置空間信息都可以在三維場(chǎng)景體現(xiàn)。
(4)二維地圖和三維場(chǎng)景結(jié)合使用,滿足用戶不同場(chǎng)景的需求,同時(shí)也可以減少系統(tǒng)對(duì)設(shè)備內(nèi)存的占用,確保系統(tǒng)不影響用戶其他應(yīng)用的使用體驗(yàn)。