李 濤,畢京學(xué),高愿濡,王一凡
(1.山東省地質(zhì)測(cè)繪院,濟(jì)南 250000;2.山東建筑大學(xué),濟(jì)南 250101)
三維(3-dimension, 3D)地理信息數(shù)據(jù)主要由數(shù)字高程模型、衛(wèi)星影像、普通3D模型格式的實(shí)體模型和矢量數(shù)據(jù)組成,3D數(shù)據(jù)具有數(shù)據(jù)量大、客戶端渲染資源消耗多和結(jié)構(gòu)組成復(fù)雜等特點(diǎn),是3D地理信息系統(tǒng)應(yīng)用的基礎(chǔ)。現(xiàn)有的3D地理信息系統(tǒng)應(yīng)用客戶端存在緩存更新復(fù)雜、數(shù)據(jù)傳輸慢和渲染消耗資源大等問題。3D模型的完全渲染需要等待全部接收整個(gè)模型實(shí)體數(shù)據(jù)后加載,無法做到類似切片數(shù)據(jù)的“走哪看哪”。傳統(tǒng)的3D數(shù)據(jù)服務(wù)發(fā)布一般采用X86架構(gòu)服務(wù)器進(jìn)行發(fā)布,需要專業(yè)人員借助阿爾克地理信息系統(tǒng)服務(wù)器(ArcGIS Server)發(fā)布中間件、地理服務(wù)器(geography server, GeoServer)地圖服務(wù)發(fā)布中間件或恩吉克斯(Nginx)數(shù)據(jù)中間件進(jìn)行發(fā)布。如果外網(wǎng)使用,還需要申請(qǐng)公網(wǎng)互聯(lián)網(wǎng)協(xié)議(internet protocol, IP)地址,并制定互聯(lián)網(wǎng)數(shù)據(jù)傳輸安全方案,給數(shù)據(jù)使用帶來了極大不便。
傾斜攝影數(shù)據(jù)、建筑信息模型、新型地面模型數(shù)據(jù)、3D矢量模型數(shù)據(jù)和點(diǎn)云數(shù)據(jù)作為新型3D數(shù)據(jù)載體,在細(xì)節(jié)豐富度和數(shù)據(jù)采集效率等方面都具有較大優(yōu)勢(shì)。最近幾年,3D傾斜數(shù)據(jù)被大范圍地應(yīng)用到了生產(chǎn)實(shí)踐中,比如,房地一體化項(xiàng)目。然而,隨著3D數(shù)據(jù)應(yīng)用場(chǎng)景的增加、應(yīng)用環(huán)境更加復(fù)雜,3D數(shù)據(jù)服務(wù)技術(shù)已成為阻礙3D地理信息系統(tǒng)大范圍應(yīng)用的瓶頸。如何在兼顧效率的情況下,使用移動(dòng)端發(fā)布高性能 3D地理信息系統(tǒng)服務(wù),是一個(gè)巨大的挑戰(zhàn)。因而,本文提出了一種基于安卓移動(dòng)端發(fā)布 3D地理信息系統(tǒng)服務(wù)的方法,以期適用于多類、可移動(dòng)的復(fù)雜3D應(yīng)用場(chǎng)景,滿足日益增長(zhǎng)的高性能3D地理信息系統(tǒng)服務(wù)需求。
3D瓦片(3DTiles)是借鑒傳統(tǒng)二維地理信息系統(tǒng)(geographic information system, GIS)的網(wǎng)絡(luò)地圖瓦片服務(wù)(web map tile service, WMTS)規(guī)范,開發(fā)的大規(guī)模3D數(shù)據(jù)分發(fā)標(biāo)準(zhǔn),定義了分層數(shù)據(jù)結(jié)構(gòu)和可交付內(nèi)容的圖塊格式,用于流式傳輸和大型3D地理空間內(nèi)容渲染,例如,傾斜攝影模型、建筑信息模型和點(diǎn)云等。3DTiles數(shù)據(jù)格式由glTF格式模型數(shù)據(jù)發(fā)展而來,glTF格式模型數(shù)據(jù)主要為了解決3D模型的快速渲染問題,它不使用面向?qū)ο蟮乃季S存儲(chǔ)3D模型和貼圖紋理,而按照方便顯卡數(shù)據(jù)處理方式存儲(chǔ)模型數(shù)據(jù),進(jìn)而讓渲染的效率更高,glTF的結(jié)構(gòu)如圖1所示。

圖1 gltf結(jié)構(gòu)
嚴(yán)格來講,3DTiles是一種規(guī)范,資源文件可以是散列的文件目錄,也可以是以二進(jìn)制存儲(chǔ)的數(shù)據(jù)庫文件。目前,3DTiles官方只發(fā)布了基于散列文件實(shí)現(xiàn),但是國內(nèi)已經(jīng)出現(xiàn)了基于斯克萊特(SQLite)數(shù)據(jù)庫和蒙戈德布(MongoDB)數(shù)據(jù)庫的實(shí)現(xiàn)。
3DTiles數(shù)據(jù)標(biāo)準(zhǔn)不記錄單個(gè)模型數(shù)據(jù),只記錄各級(jí)瓦片的邏輯關(guān)系,以及瓦片自身的屬性信息。模型數(shù)據(jù)指的是 3D模型的頂點(diǎn)、貼圖材質(zhì)、法線和顏色等信息。邏輯關(guān)系是指各級(jí)瓦片是在空間中如何保持連續(xù)的和多層次細(xì)節(jié)(levels of detail, LOD)是如何組織的。
普通的3D模型大部分是從易于編輯的角度對(duì)內(nèi)容進(jìn)行組織的,例如obj格式3D模型,其內(nèi)部組織形式依靠文本編輯器就可查看,判讀也非常簡(jiǎn)單,找到三角面信息后,根據(jù)組織信息即可大致分析其內(nèi)部構(gòu)成情況。但是對(duì)于3D渲染引擎而言,obj格式的3D文件是不利于渲染的,3D引擎需要先讀取obj 3D信息,然后進(jìn)行轉(zhuǎn)義后才能在計(jì)算機(jī)中進(jìn)行渲染展示,這就大大加重了3D引擎的渲染負(fù)擔(dān),所以將普通3D模型轉(zhuǎn)換為3DTiles標(biāo)準(zhǔn)模型是3D模型使用的必要步驟。
將普通3D模型轉(zhuǎn)換到3DTiles格式模型有許多工具,國內(nèi)比較成熟的轉(zhuǎn)換工具有北京西部世界公司的凱西烏姆·拉布(CesiumLab)轉(zhuǎn)換工具和北京超圖軟件股份有限公司的超圖(SuperMap)GIS10i軟件。模型轉(zhuǎn)換的基本原理為普通模型文件轉(zhuǎn)換成二進(jìn)制 glTF,作為文件體的一部分,與文件頭、特征表和批次表共同組成瓦片數(shù)據(jù)批量3D模型(batched 3D model, b3dm)文件,然后利用特定組織文件組織b3dm相關(guān)資源,構(gòu)成一個(gè)散列的3DTiles文件。
3DTiles數(shù)據(jù)的發(fā)布比較簡(jiǎn)單,只需把3DTiles散列文件放入Nginx的發(fā)布目錄,然后根據(jù)客戶端設(shè)置Nginx的相關(guān)跨域配置即可。以Cesium.js 3D框架的3D模型服務(wù)使用為例,所有客戶端的資源請(qǐng)求都由客戶端發(fā)起,用戶引入 3D引擎基礎(chǔ)資源后請(qǐng)求 3DTiles的賈瓦·斯克里普特根節(jié)點(diǎn)對(duì)象簡(jiǎn)譜(JavaScript object notation, Json)文件即可。
安卓服務(wù)器(Android server, AndServer)是基于安卓操作系統(tǒng)的網(wǎng)絡(luò)資源發(fā)布中間件,能夠提供靜態(tài)資源發(fā)布服務(wù)和動(dòng)態(tài)接口服務(wù),可以滿足 3D GIS服務(wù)發(fā)布需要,目前已經(jīng)在吉特·哈伯(GitHub)平臺(tái)上實(shí)現(xiàn)了開源。越來越強(qiáng)大的安卓移動(dòng)設(shè)備數(shù)據(jù)存儲(chǔ)和處理能力使得AndServer作為一款 3D地理信息系統(tǒng)服務(wù)發(fā)布中間件來使用。基于 AndServer的 3D地理信息系統(tǒng)數(shù)據(jù)發(fā)布服務(wù)框架如圖2所示,AndServer提供數(shù)據(jù)服務(wù)和應(yīng)用資源,并使用負(fù)載均衡中間件對(duì)AndServer的服務(wù)能力進(jìn)行增強(qiáng)擴(kuò)充。

圖2 基于AndServer數(shù)據(jù)分發(fā)框架
AndServer可以發(fā)布3D模型資源,也可以發(fā)布3D地理信息系統(tǒng)應(yīng)用服務(wù),特別是單頁應(yīng)用程序(single-page application, SPA)應(yīng)用,不但可以方便安卓操作系統(tǒng)上的萬維網(wǎng)(world wide web,Web)應(yīng)用調(diào)試,而且可以減少服務(wù)端邏輯運(yùn)行負(fù)載。如圖3所示,手機(jī)可以作為3D模型資源服務(wù)器和3D地理信息系統(tǒng)應(yīng)用服務(wù)器,使用者把編譯好的單頁應(yīng)用程序部署文件和3D模型切片散列文件放到AndServer發(fā)布目錄內(nèi)即可。

圖3 三維模型和應(yīng)用服務(wù)
開源GIS工具包(GeoTools)是一個(gè)開源的用于提供空間分析的賈瓦(Java)程序庫。基于AndServer的動(dòng)態(tài)服務(wù)接口,在完成3D模型數(shù)據(jù)發(fā)布和 3D地理信息系統(tǒng)應(yīng)用服務(wù)發(fā)布的基礎(chǔ)上,使用 GeoTools可以實(shí)現(xiàn)基于AndServer的數(shù)據(jù)分析,此功能類似于 ArcGIS的地理數(shù)據(jù)處理服務(wù)。AndServer的相關(guān)配置完全采用標(biāo)準(zhǔn)包管理工具和標(biāo)準(zhǔn)的注解規(guī)范,所以在GeoTools引入和使用上也非常方便,GeoTools的處理結(jié)果可以通過伊森(Json)格式數(shù)據(jù)傳輸?shù)娇蛻舳耍员WC數(shù)據(jù)在服務(wù)端和客戶端的標(biāo)準(zhǔn)傳輸。如圖4所示,在3D地理信息系統(tǒng)客戶端,借助客戶端的空間地理數(shù)據(jù)處理能力對(duì)讀取的矢量數(shù)據(jù)再次進(jìn)行相應(yīng)分析處理工作,并把修改或分析過的地理信息數(shù)據(jù)傳回到AndServer服務(wù)器的動(dòng)態(tài)接口,完成存儲(chǔ)或進(jìn)行進(jìn)一步的分析工作,從而在業(yè)務(wù)邏輯上形成一個(gè)閉環(huán)。

圖4 GIS分析服務(wù)
傳統(tǒng)的矢量服務(wù)通常依賴于服務(wù)端的數(shù)據(jù)庫處理能力,雖然在大數(shù)據(jù)量的使用上存在優(yōu)勢(shì),但同時(shí)也帶來了服務(wù)端臃腫和服務(wù)條件苛刻等問題。現(xiàn)在使用最多的開放地理信息空間聯(lián)盟(Open Geospatial Consortium, OGC)的網(wǎng)絡(luò)要素服務(wù)(web feature service, WFS),采用的是可拓展標(biāo)記語言(extensible markup language, XML)格式的數(shù)據(jù)傳輸方案,在網(wǎng)絡(luò)傳輸上存在一定的數(shù)據(jù)冗余。基于3D地理信息系統(tǒng)應(yīng)用的客戶端處理能力,可以在服務(wù)端借助 AndServer部署一個(gè)靜態(tài)矢量數(shù)據(jù)資源服務(wù),發(fā)布靜態(tài)的矢量數(shù)據(jù),利用客戶端的矢量數(shù)據(jù)管理能力來加載靜態(tài)矢量數(shù)據(jù)。客戶端可以在讀取矢量數(shù)據(jù)后,把相應(yīng)矢量信息加載到3D場(chǎng)景中,而且可以在加載的過程中設(shè)置矢量數(shù)據(jù)的符號(hào)樣式等屬性。
對(duì)于大體積和高并發(fā)的資源請(qǐng)求,多個(gè)AndServer可以組成一個(gè)分布式服務(wù)網(wǎng)絡(luò),從資源拆分和負(fù)載均衡的角度來優(yōu)化資源服務(wù)。結(jié)合AndServer的動(dòng)態(tài)服務(wù)接口,可以使用心跳機(jī)制來監(jiān)測(cè)服務(wù)節(jié)點(diǎn)的健康狀況,讓宕機(jī)的服務(wù)節(jié)點(diǎn)退出服務(wù)網(wǎng)絡(luò),并實(shí)時(shí)更新服務(wù)節(jié)點(diǎn)列表。通過 AndServer的負(fù)載均衡能力,可以大大縮減AndServer的服務(wù)響應(yīng)時(shí)間。移動(dòng)端負(fù)載均衡服務(wù)可以使用安卓應(yīng)用程序特穆克斯(Termux)來代替 X86環(huán)境下的 Nginx中間件,結(jié)構(gòu)如圖5所示。

圖5 負(fù)載均衡網(wǎng)絡(luò)
基于AndServer的3D資源發(fā)布方法的最顯著優(yōu)勢(shì)就是其發(fā)布的靈活性和便捷性,不需要配置專業(yè)地理信息系統(tǒng)服務(wù)器,只需要一臺(tái)手機(jī)即可進(jìn)行相應(yīng)3D地理信息系統(tǒng)資源發(fā)布,而且發(fā)布簡(jiǎn)單,不需要特殊配置。在外業(yè)工作中,可以一站式解決網(wǎng)絡(luò)信號(hào)差和局域網(wǎng)數(shù)據(jù)分享問題。AndServer提供了豐富的地理信息系統(tǒng)服務(wù)發(fā)布場(chǎng)景,可以有效地發(fā)布3D模型資源、矢量資源、客戶端應(yīng)用程序和影像資源等多種服務(wù),而且可以滿足多節(jié)點(diǎn)、多場(chǎng)景應(yīng)用需求,滿足絕大部分3D地理信息系統(tǒng)應(yīng)用服務(wù)發(fā)布場(chǎng)景和需求。基于AndServer的移動(dòng)端3DGIS服務(wù)效果如圖6所示。

圖6 基于AndServer的移動(dòng)端3D GIS服務(wù)
AndServer與Nginx的測(cè)試環(huán)境數(shù)據(jù)如表1所示。使用的測(cè)試數(shù)據(jù)分別為3D Tiles數(shù)據(jù),包括6個(gè)b3dm文件(1號(hào)至6號(hào))和3個(gè)Json文件(1號(hào)至3號(hào)),共4.88 MB;以及Json數(shù)據(jù),包括1個(gè)Json面文件(1號(hào)),共 6.53 MB。測(cè)試結(jié)果如圖7至圖9所示。

圖7 3D Tiles b3dm數(shù)據(jù)的響應(yīng)時(shí)間對(duì)比

圖9 GeoJson數(shù)據(jù)的響應(yīng)時(shí)間對(duì)比

表1 AndServer與Nginx測(cè)試環(huán)境
通過以上數(shù)據(jù)統(tǒng)計(jì)結(jié)果發(fā)現(xiàn),AndServer服務(wù)一般會(huì)有一個(gè)服務(wù)“預(yù)熱期”,特別是小體積文件,前期請(qǐng)求的數(shù)據(jù)文件一般會(huì)有一個(gè)延遲效應(yīng)。AndServer的響應(yīng)時(shí)間在3DTiles這種切片散列文件上性能是 Nginx的 30%左右,單個(gè)大文件的性能是 Nginx性能的 50%以上,文本文件的服務(wù)效率上好要好于二進(jìn)制文件。從響應(yīng)時(shí)間上來看,AndServer的響應(yīng)時(shí)間普遍要小于500 ms,滿足3D地理信息系統(tǒng)客戶端使用要求,從性能硬件上對(duì)比發(fā)現(xiàn)AndServer要好于Nginx。考慮到AndServer的低功耗架構(gòu)限制,AndServer可以說是一款非常優(yōu)秀的服務(wù)器組件。

圖8 3D Tiles Json數(shù)據(jù)的響應(yīng)時(shí)間對(duì)比
移動(dòng)端作為 GIS服務(wù)器是一個(gè)非常新的研究領(lǐng)域,國內(nèi)外研究資料都比較匱乏,AndServer的出現(xiàn)恰逢其時(shí),基本滿足3D地理信息系統(tǒng)應(yīng)用的需要,架構(gòu)上適合移動(dòng)端設(shè)備安裝,使用上簡(jiǎn)單靈活,使用場(chǎng)景多樣,非常適合在復(fù)雜環(huán)境和網(wǎng)絡(luò)環(huán)境不好的工作場(chǎng)景中作為地理信息系統(tǒng)數(shù)據(jù)發(fā)布中間件使用,而且可以組成分布式網(wǎng)絡(luò)來增強(qiáng)服務(wù)性能,進(jìn)而彌補(bǔ)單個(gè)移動(dòng)設(shè)備性能上的不足和降低服務(wù)響應(yīng)時(shí)間。本文僅從服務(wù)發(fā)布效率上進(jìn)行測(cè)試,移動(dòng)端3D GIS服務(wù)還應(yīng)該進(jìn)行更攝入的測(cè)試,如多個(gè)AndServer服務(wù)器和多個(gè)終端訪問的測(cè)試,不同手機(jī)硬件配置的AndServer服務(wù)器性能測(cè)試,穩(wěn)定性測(cè)試。
AndServer不但可以安裝在手機(jī)上,從架構(gòu)上來講可以安裝在所有安卓設(shè)備上,移動(dòng)互聯(lián)網(wǎng)時(shí)代,安卓操作系統(tǒng)作為裝機(jī)量最大的操作系統(tǒng),未來移動(dòng)設(shè)備即服務(wù)(mobile as a server, MAAS)的時(shí)代正在到來,每個(gè)人的移動(dòng)設(shè)備和智能硬件就是一個(gè)地理信息服務(wù)發(fā)布設(shè)備,真正做到讓地理信息服務(wù)無處不在。此外,伴隨著安卓設(shè)備性能的不斷提升,AndServer的服務(wù)性能也將會(huì)顯著提高。相比于Nginx這類靜態(tài)服務(wù)組件而言,AndServer具備動(dòng)靜服務(wù)一體化能力和靈活的移動(dòng)化部署能力,得益于此,AndServer將會(huì)大大降低地理信息系統(tǒng)服務(wù)的架設(shè)復(fù)雜度,并助力地理信息服務(wù)發(fā)布技術(shù)的快速發(fā)展。