林志鵬,吳列
(四川電力設計咨詢有限責任公司,四川 成都 610041)
隨著電力建設及現代測繪技術的迅猛發展,電力勘測過程中所生產的各種工程數據資料也隨之無形增多[1],這些數據資料往往種類繁多、結構復雜,而當前的管理方式大多依靠人工,花費多、效率低,人力資源投入大。與此同時,工程應用中所涉及的基礎元數據資料,大多以正射影像、傾斜三維模型為主,如何高效地管理和利用海量元數據成為當前亟須解決的問題。通常的地理信息系統(Geographic Information System,GIS)客戶端主要由客戶機/服務器(Client/Server,C/S)和瀏覽器/服務器(Browser/Server,B/S)兩種架構組成[2~5],考慮到軟件平臺的易用性和適用性,筆者采用了B/S架構的網絡地理信息系統(WebGIS)數據管理模式:通過對工程數據及相關元數據文件的格式標準化處理和數據錄入,基于VUE的前端框架,以開源Cesium為技術核心,通過Ajax請求后端MongoDB數據庫,獲取數據的形式,實現了在瀏覽器的三維地球上加載顯示和查詢所有數據資源的功能,為用戶提供了一個集二三維一體化、跨平臺、開發效率高和易于擴展的高效管理平臺。
Cesium是一款面向三維地球和地圖的JavaScript開源引擎,支持2D、2.5D及3D形式的地圖展示和柵格、編輯矢量數據及三維模型的加載和編輯[7]。它通過WebGL技術實現圖形的硬件加速,不需要安裝插件即可實現跨平臺、跨瀏覽器、提供動態數據可視化展現的功能,在可視化精度、渲染質量以及多平臺的易用性上具有高質量的性能保證。
Cesium的體系結構架構按層次劃分,主要由基礎要素層(Primitives)、場景層(Scene)、渲染器層(Render)和核心層(Core)四部分組成[8~10],每一層的上層模塊依賴于下層所提供功能的同時,也對下層模塊進行了更高層次的抽象和封裝[11]。Cesium的體系結構如圖1所示。

圖1 Cesium體系結構圖
(1)系統框架體系設計
在研究分析現有工程數據文件的基礎上,結合系統需求分析,對系統進行總體架構設計,將本系統分為可視化展示層、渲染層、服務層、數據層和基礎設備層五個模塊,如圖2所示。
表達層設計:基于Vue的MVVM數據雙向綁定機制,在Web前端展示平臺系統界面及所有的二、三維可視化效果,主要包含了界面設計和功能插件設計。
渲染層設計:基于Cesium提供的TerrainProvider、ImageryProvider及3D Tiles二、三維模型渲染機制,對各種地圖數據、矢量數據表達、無人機獲取的正射影像(Digital Orthophoto Map,DOM)、數字高程模型(Digital Elevation Model,DEM)、激光點云和傾斜三維模型進行圖形渲染。

圖2 系統架構圖
服務層設計:一方面支持網絡要素服務(WebFeatureService,WFS)、網絡地圖服務(WebMapService,WMS)等網絡地圖及影像服務,包括GoogleMap、Bing地圖、OpenStreetMap及天地圖等網絡地圖服務資源;另一方面支持離線環境下利用GeoServer發布的本地二、三維地圖數據服務。
數據設備層設計:對輸變電工程中的桿塔坐標數據、場站址位置數據、工程相關的地址災害點、礦區、敏感地物點及基礎地理信息數據,例如控制點、圖幅等數據進行標準化處理,再利用數據庫、網絡等硬件設施,將各類數據進行整合和存儲。
(2)系統功能模塊劃分
Cesium無自帶插件,由此用戶可自定義滿足自身需求的功能菜單。系統的菜單包含了地圖基本操作模塊、數據查詢模塊、圖層管理和GIS功能模塊。系統的主要功能結構如圖3所示。

圖3 系統功能模塊構建
系統的電力勘測數據庫是核心數據資產,運行于后端服務器計算機上。用戶通過Web前端發送Ajax請求,以實現對服務器數據的存儲、組織和管理。
平臺選用基于開源非關系型的MongoDB數據庫作為后端服務器存儲機制。系統數據庫中的所有輸變電工程數據均存儲于各個數據表文件中,數據查詢模塊對數據進行查詢、添加、刪除及修改等操作必須立足于對數據庫表文件的合理設計。如表1所示,系統數據庫主要包含了transformer_Substation、transmission_Line、tower_Location和geologic_Hazard四個數據表,其分別存儲廠站位置數據、輸電線路數據、桿塔數據及地質災害點數據。

數據表清單 表1
其中,桿塔數據表是存儲各工程與桿塔數據相關信息,其表結構設計如表2所示,主要包括了桿塔樁號、塔號、線路等級等字段,在Web前端進行可視化查詢時為用戶提供必要的位置和屬性等數據支持。

桿塔數據表結構設計 表2
(1)Web前端的基本功能實現
平臺結合系統設計的總體目標,在框架結構、交互性與視覺效果三方面最大化滿足用戶需求,在Web前端的展示層引用Element等多種插件優化用戶界面(UI),為用戶提供了良好的交互界面,如圖4所示。

圖4 系統平臺界面
平臺在基本地圖操作方面完成了一系列基礎地圖操作:底圖控制、坐標定位、測量、標繪、卷簾、飛行漫游等功能。其中,標繪、測量功能主要依靠Cesium提供的Primitive和CesiumMath類實現,用戶在交互操作的同時,依靠DrawHander類完成回調,以實現動態標繪及量測操作。
(2)多數據源加載與圖層管理
平臺基于Ztree插件,利用viewer.scene.open()直接加載整個數據集,再根據需求,利用layer.visible屬性值設定數據集內每個圖層的顯隱,進而完成對二三維及多源數據的加載與管理,如圖5所示。利用OGC標準定制的WMS、WPS及WCS等網絡在線服務[12],可通過在線服務的方式請求加載服務器端的多種數據源,包括:GoogleMaps、Bing地圖、ArcGIS等不同數據源的衛星影像及街景地圖,同時還可以支持不同等級的離線瓦片數據格式的影像加載功能,以此實現二維矢量數據與三維場景一體化展示查詢的可視化表達。

圖5 圖層與底圖管理
為更好地支持當前主流數據,需首先對系統中所包含的各類型數據進行一系列數據格式標準化處理,制作成不同空間要素層的矢量數據:所有的桿塔數據、廠站數據、地質相關等信息均轉換為基于Javascript對象表示法(JavaScript Object Notation,GeoJSON)存儲,而傾斜三維模型則以Cesium提供的標準3D Tiles形式表達。其中,平臺中的3D Tiles瓦片集以tileset.json文件和一系列對應單個瓦片的b3dm文件構成,在加載的時候,首先讀取tileset.json中的配置,再調用實際瓦片中的數據,進而完成三維模型的渲染和可視化(如圖6)。傾斜攝影模型加載關鍵代碼如下:
vartilesetBdzOSGB = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url:′3DTITLES/Scene/BDZ/ZH/tileset.json′,
maximumNumberOfLoadedTiles:1000,
skipLevelOfDetail:true,//優化選項。確定遍歷期間是否應用細節級別跳過
baseScreenSpaceError:1024,
skipScreenSpaceErrorFactor:16,//定義要跳過的最小屏幕空間錯
immediatelyLoadDesiredLevelOfDetail:false,
loadSiblings:false,
cullWithChildrenBounds:true,//使用其子對象邊界體積的聯合來剔除瓦片
dynamicScreenSpaceError:true,//減少離相機較遠的磁貼的屏幕空間錯誤
dynamicScreenSpaceErrorFactor:4.0,//用于增加計算的動態屏幕空間誤差的系數
dynamicScreenSpaceErrorHeightFalloff:0.25 //密度開始下降時的高度比率
});

圖6 圖層控制加載傾斜攝影三維模型
平臺在加載管理傾斜攝影數據模型的同時,涵蓋了對建筑信息模型(Building Information Modeling,BIM)數據的管理和表現形式(三維模型)。由于Cesium在三維模型的加載上,僅支持3DTiles,而常用的BIM數據若以ifc格式表達則不能完全保持BIM模型本身的相關屬性,因此需同樣以切片的形式對BIM數據進行處理,并發布為3dtiles服務完成加載,圖7為切片后在平臺加載的BIM模型。

圖7 圖層控制加載BIM模型
(3)后端服務器的矢量數據解析加載
Cesium支持地理標記語言(Geographic Markup Language,GML)、標記語言(Keyhole Markup Language,KML)、GeoJson等多種類型的矢量數據[13],本系統主要以GeoJSON形式完成矢量數據的解析和表達,如圖8所示,為GeoJSON數據源的解析和加載流程。首先,Web前端通過AJAX異步請求服務器端GeoJSON格式矢量數據,隨后,依據矢量數據所包含的要素信息依層次進行解析,并創建一個動態對象(DynamicObject);接著,將動態對象存儲于GeoJSON數據源的動態對象集合中;最后,再設置動態對象的樣式和頂點信息,并將其加入渲染循環幀當中,進而以幾何圖形的形式展示于用戶面前。

圖8 GeoJSON數據源解析加載過程
本文以當前對電力勘測數據的管理方式為背景,深入研究了與WebGIS相關的系統結構、實現方式及數據管理。在此基礎上,利用Web前端作為數據可視化平臺,結合開源3D地圖引擎Cesium,在MongoDB數據庫支撐下,設計了一套集數據存儲管理與可視化操作的電力勘測數據管理平臺。平臺實現了基礎地圖操作、數據查詢、圖層管理與可視化表達的功能,實現了對電力勘測資料及數據的存儲、加工、分析和利用,達到了資源整合的目的。隨著今后基礎數據的不斷變化和技術的不斷更新,本平臺將在加載海量三維模型及UC交互方面有所完善,使其在輸變電三維設計中發揮更大作用。