林志鵬,吳列
(四川電力設(shè)計咨詢有限責(zé)任公司,四川 成都 610041)
隨著電力建設(shè)及現(xiàn)代測繪技術(shù)的迅猛發(fā)展,電力勘測過程中所生產(chǎn)的各種工程數(shù)據(jù)資料也隨之無形增多[1],這些數(shù)據(jù)資料往往種類繁多、結(jié)構(gòu)復(fù)雜,而當(dāng)前的管理方式大多依靠人工,花費多、效率低,人力資源投入大。與此同時,工程應(yīng)用中所涉及的基礎(chǔ)元數(shù)據(jù)資料,大多以正射影像、傾斜三維模型為主,如何高效地管理和利用海量元數(shù)據(jù)成為當(dāng)前亟須解決的問題。通常的地理信息系統(tǒng)(Geographic Information System,GIS)客戶端主要由客戶機/服務(wù)器(Client/Server,C/S)和瀏覽器/服務(wù)器(Browser/Server,B/S)兩種架構(gòu)組成[2~5],考慮到軟件平臺的易用性和適用性,筆者采用了B/S架構(gòu)的網(wǎng)絡(luò)地理信息系統(tǒng)(WebGIS)數(shù)據(jù)管理模式:通過對工程數(shù)據(jù)及相關(guān)元數(shù)據(jù)文件的格式標準化處理和數(shù)據(jù)錄入,基于VUE的前端框架,以開源Cesium為技術(shù)核心,通過Ajax請求后端MongoDB數(shù)據(jù)庫,獲取數(shù)據(jù)的形式,實現(xiàn)了在瀏覽器的三維地球上加載顯示和查詢所有數(shù)據(jù)資源的功能,為用戶提供了一個集二三維一體化、跨平臺、開發(fā)效率高和易于擴展的高效管理平臺。
Cesium是一款面向三維地球和地圖的JavaScript開源引擎,支持2D、2.5D及3D形式的地圖展示和柵格、編輯矢量數(shù)據(jù)及三維模型的加載和編輯[7]。它通過WebGL技術(shù)實現(xiàn)圖形的硬件加速,不需要安裝插件即可實現(xiàn)跨平臺、跨瀏覽器、提供動態(tài)數(shù)據(jù)可視化展現(xiàn)的功能,在可視化精度、渲染質(zhì)量以及多平臺的易用性上具有高質(zhì)量的性能保證。
Cesium的體系結(jié)構(gòu)架構(gòu)按層次劃分,主要由基礎(chǔ)要素層(Primitives)、場景層(Scene)、渲染器層(Render)和核心層(Core)四部分組成[8~10],每一層的上層模塊依賴于下層所提供功能的同時,也對下層模塊進行了更高層次的抽象和封裝[11]。Cesium的體系結(jié)構(gòu)如圖1所示。
圖1 Cesium體系結(jié)構(gòu)圖
(1)系統(tǒng)框架體系設(shè)計
在研究分析現(xiàn)有工程數(shù)據(jù)文件的基礎(chǔ)上,結(jié)合系統(tǒng)需求分析,對系統(tǒng)進行總體架構(gòu)設(shè)計,將本系統(tǒng)分為可視化展示層、渲染層、服務(wù)層、數(shù)據(jù)層和基礎(chǔ)設(shè)備層五個模塊,如圖2所示。
表達層設(shè)計:基于Vue的MVVM數(shù)據(jù)雙向綁定機制,在Web前端展示平臺系統(tǒng)界面及所有的二、三維可視化效果,主要包含了界面設(shè)計和功能插件設(shè)計。
渲染層設(shè)計:基于Cesium提供的TerrainProvider、ImageryProvider及3D Tiles二、三維模型渲染機制,對各種地圖數(shù)據(jù)、矢量數(shù)據(jù)表達、無人機獲取的正射影像(Digital Orthophoto Map,DOM)、數(shù)字高程模型(Digital Elevation Model,DEM)、激光點云和傾斜三維模型進行圖形渲染。
圖2 系統(tǒng)架構(gòu)圖
服務(wù)層設(shè)計:一方面支持網(wǎng)絡(luò)要素服務(wù)(WebFeatureService,WFS)、網(wǎng)絡(luò)地圖服務(wù)(WebMapService,WMS)等網(wǎng)絡(luò)地圖及影像服務(wù),包括GoogleMap、Bing地圖、OpenStreetMap及天地圖等網(wǎng)絡(luò)地圖服務(wù)資源;另一方面支持離線環(huán)境下利用GeoServer發(fā)布的本地二、三維地圖數(shù)據(jù)服務(wù)。
數(shù)據(jù)設(shè)備層設(shè)計:對輸變電工程中的桿塔坐標數(shù)據(jù)、場站址位置數(shù)據(jù)、工程相關(guān)的地址災(zāi)害點、礦區(qū)、敏感地物點及基礎(chǔ)地理信息數(shù)據(jù),例如控制點、圖幅等數(shù)據(jù)進行標準化處理,再利用數(shù)據(jù)庫、網(wǎng)絡(luò)等硬件設(shè)施,將各類數(shù)據(jù)進行整合和存儲。
(2)系統(tǒng)功能模塊劃分
Cesium無自帶插件,由此用戶可自定義滿足自身需求的功能菜單。系統(tǒng)的菜單包含了地圖基本操作模塊、數(shù)據(jù)查詢模塊、圖層管理和GIS功能模塊。系統(tǒng)的主要功能結(jié)構(gòu)如圖3所示。
圖3 系統(tǒng)功能模塊構(gòu)建
系統(tǒng)的電力勘測數(shù)據(jù)庫是核心數(shù)據(jù)資產(chǎn),運行于后端服務(wù)器計算機上。用戶通過Web前端發(fā)送Ajax請求,以實現(xiàn)對服務(wù)器數(shù)據(jù)的存儲、組織和管理。
平臺選用基于開源非關(guān)系型的MongoDB數(shù)據(jù)庫作為后端服務(wù)器存儲機制。系統(tǒng)數(shù)據(jù)庫中的所有輸變電工程數(shù)據(jù)均存儲于各個數(shù)據(jù)表文件中,數(shù)據(jù)查詢模塊對數(shù)據(jù)進行查詢、添加、刪除及修改等操作必須立足于對數(shù)據(jù)庫表文件的合理設(shè)計。如表1所示,系統(tǒng)數(shù)據(jù)庫主要包含了transformer_Substation、transmission_Line、tower_Location和geologic_Hazard四個數(shù)據(jù)表,其分別存儲廠站位置數(shù)據(jù)、輸電線路數(shù)據(jù)、桿塔數(shù)據(jù)及地質(zhì)災(zāi)害點數(shù)據(jù)。
數(shù)據(jù)表清單 表1
其中,桿塔數(shù)據(jù)表是存儲各工程與桿塔數(shù)據(jù)相關(guān)信息,其表結(jié)構(gòu)設(shè)計如表2所示,主要包括了桿塔樁號、塔號、線路等級等字段,在Web前端進行可視化查詢時為用戶提供必要的位置和屬性等數(shù)據(jù)支持。
桿塔數(shù)據(jù)表結(jié)構(gòu)設(shè)計 表2
(1)Web前端的基本功能實現(xiàn)
平臺結(jié)合系統(tǒng)設(shè)計的總體目標,在框架結(jié)構(gòu)、交互性與視覺效果三方面最大化滿足用戶需求,在Web前端的展示層引用Element等多種插件優(yōu)化用戶界面(UI),為用戶提供了良好的交互界面,如圖4所示。
圖4 系統(tǒng)平臺界面
平臺在基本地圖操作方面完成了一系列基礎(chǔ)地圖操作:底圖控制、坐標定位、測量、標繪、卷簾、飛行漫游等功能。其中,標繪、測量功能主要依靠Cesium提供的Primitive和CesiumMath類實現(xiàn),用戶在交互操作的同時,依靠DrawHander類完成回調(diào),以實現(xiàn)動態(tài)標繪及量測操作。
(2)多數(shù)據(jù)源加載與圖層管理
平臺基于Ztree插件,利用viewer.scene.open()直接加載整個數(shù)據(jù)集,再根據(jù)需求,利用layer.visible屬性值設(shè)定數(shù)據(jù)集內(nèi)每個圖層的顯隱,進而完成對二三維及多源數(shù)據(jù)的加載與管理,如圖5所示。利用OGC標準定制的WMS、WPS及WCS等網(wǎng)絡(luò)在線服務(wù)[12],可通過在線服務(wù)的方式請求加載服務(wù)器端的多種數(shù)據(jù)源,包括:GoogleMaps、Bing地圖、ArcGIS等不同數(shù)據(jù)源的衛(wèi)星影像及街景地圖,同時還可以支持不同等級的離線瓦片數(shù)據(jù)格式的影像加載功能,以此實現(xiàn)二維矢量數(shù)據(jù)與三維場景一體化展示查詢的可視化表達。
圖5 圖層與底圖管理
為更好地支持當(dāng)前主流數(shù)據(jù),需首先對系統(tǒng)中所包含的各類型數(shù)據(jù)進行一系列數(shù)據(jù)格式標準化處理,制作成不同空間要素層的矢量數(shù)據(jù):所有的桿塔數(shù)據(jù)、廠站數(shù)據(jù)、地質(zhì)相關(guān)等信息均轉(zhuǎn)換為基于Javascript對象表示法(JavaScript Object Notation,GeoJSON)存儲,而傾斜三維模型則以Cesium提供的標準3D Tiles形式表達。其中,平臺中的3D Tiles瓦片集以tileset.json文件和一系列對應(yīng)單個瓦片的b3dm文件構(gòu)成,在加載的時候,首先讀取tileset.json中的配置,再調(diào)用實際瓦片中的數(shù)據(jù),進而完成三維模型的渲染和可視化(如圖6)。傾斜攝影模型加載關(guān)鍵代碼如下:
vartilesetBdzOSGB = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url:′3DTITLES/Scene/BDZ/ZH/tileset.json′,
maximumNumberOfLoadedTiles:1000,
skipLevelOfDetail:true,//優(yōu)化選項。確定遍歷期間是否應(yīng)用細節(jié)級別跳過
baseScreenSpaceError:1024,
skipScreenSpaceErrorFactor:16,//定義要跳過的最小屏幕空間錯
immediatelyLoadDesiredLevelOfDetail:false,
loadSiblings:false,
cullWithChildrenBounds:true,//使用其子對象邊界體積的聯(lián)合來剔除瓦片
dynamicScreenSpaceError:true,//減少離相機較遠的磁貼的屏幕空間錯誤
dynamicScreenSpaceErrorFactor:4.0,//用于增加計算的動態(tài)屏幕空間誤差的系數(shù)
dynamicScreenSpaceErrorHeightFalloff:0.25 //密度開始下降時的高度比率
});
圖6 圖層控制加載傾斜攝影三維模型
平臺在加載管理傾斜攝影數(shù)據(jù)模型的同時,涵蓋了對建筑信息模型(Building Information Modeling,BIM)數(shù)據(jù)的管理和表現(xiàn)形式(三維模型)。由于Cesium在三維模型的加載上,僅支持3DTiles,而常用的BIM數(shù)據(jù)若以ifc格式表達則不能完全保持BIM模型本身的相關(guān)屬性,因此需同樣以切片的形式對BIM數(shù)據(jù)進行處理,并發(fā)布為3dtiles服務(wù)完成加載,圖7為切片后在平臺加載的BIM模型。
圖7 圖層控制加載BIM模型
(3)后端服務(wù)器的矢量數(shù)據(jù)解析加載
Cesium支持地理標記語言(Geographic Markup Language,GML)、標記語言(Keyhole Markup Language,KML)、GeoJson等多種類型的矢量數(shù)據(jù)[13],本系統(tǒng)主要以GeoJSON形式完成矢量數(shù)據(jù)的解析和表達,如圖8所示,為GeoJSON數(shù)據(jù)源的解析和加載流程。首先,Web前端通過AJAX異步請求服務(wù)器端GeoJSON格式矢量數(shù)據(jù),隨后,依據(jù)矢量數(shù)據(jù)所包含的要素信息依層次進行解析,并創(chuàng)建一個動態(tài)對象(DynamicObject);接著,將動態(tài)對象存儲于GeoJSON數(shù)據(jù)源的動態(tài)對象集合中;最后,再設(shè)置動態(tài)對象的樣式和頂點信息,并將其加入渲染循環(huán)幀當(dāng)中,進而以幾何圖形的形式展示于用戶面前。
圖8 GeoJSON數(shù)據(jù)源解析加載過程
本文以當(dāng)前對電力勘測數(shù)據(jù)的管理方式為背景,深入研究了與WebGIS相關(guān)的系統(tǒng)結(jié)構(gòu)、實現(xiàn)方式及數(shù)據(jù)管理。在此基礎(chǔ)上,利用Web前端作為數(shù)據(jù)可視化平臺,結(jié)合開源3D地圖引擎Cesium,在MongoDB數(shù)據(jù)庫支撐下,設(shè)計了一套集數(shù)據(jù)存儲管理與可視化操作的電力勘測數(shù)據(jù)管理平臺。平臺實現(xiàn)了基礎(chǔ)地圖操作、數(shù)據(jù)查詢、圖層管理與可視化表達的功能,實現(xiàn)了對電力勘測資料及數(shù)據(jù)的存儲、加工、分析和利用,達到了資源整合的目的。隨著今后基礎(chǔ)數(shù)據(jù)的不斷變化和技術(shù)的不斷更新,本平臺將在加載海量三維模型及UC交互方面有所完善,使其在輸變電三維設(shè)計中發(fā)揮更大作用。