周運彬,鄭文青,鄭睿博,王亞巍
(1.中煤航測遙感集團有限公司,陜西 西安 710199; 2.陜西省地理空間信息工程技術研究中心,陜西 西安 710199)
地下管線是一個城市重要的基礎設施,是保障城市正常運行的“生命線”。近年來,隨著城市快速發(fā)展,地下管線管理水平不高問題凸顯,一些城市發(fā)生大雨內澇、管線泄漏爆炸、路面塌陷等事件,嚴重影響了人民群眾生命財產(chǎn)安全和城市運行秩序[1]。為此,建立地下管線綜合管理信息系統(tǒng)勢在必行。
鑒于傳統(tǒng)的二維管線在一定程度上限制了信息的表達,而管線三維模型能直觀地描述管線的三維特征及管線間的空間關系,能真實地反映地下管線的空間分布狀況[2],所以建立三維管線管理系統(tǒng)或者二三維一體化管線管理系統(tǒng)已成為當前研究的熱點。無論是三維管線管理系統(tǒng)還是二三維一體化管線管理系統(tǒng),創(chuàng)建管線三維模型都是建立系統(tǒng)過程中必不可少的一步。在查閱了國內外現(xiàn)有的一些研究成果基礎上[2~6],本文提出了一種基于SuperMap平臺批量創(chuàng)建管線三維模型的方法,使用該方法,可以大大減少人工的參與,高效創(chuàng)建管線三維模型,節(jié)省了成本,提高了效率。
基于SuperMap平臺批量創(chuàng)建管線三維模型的流程,如圖1所示。
管線由管線段和管線點兩大類組成,管線段分為方形管和圓形管,管線點分為特征點和附屬設施,其中特征點包括彎頭、直通、三通、四通、五通、多通、變徑、蓋堵、管帽等,附屬設施包括閥門、水表、消防栓、控制柜、變壓器、分線箱等。
圖1 基于SuperMap平臺批量創(chuàng)建管線三維模型的流程
針對三維管線場景中的不同元素,可采用不同方式實現(xiàn)快速構建三維管線場景。通常采用線型符號構建三維管線,自適應管點符號構建三維管點,而部分特殊特征點和附屬設施采用模型符號展示。創(chuàng)建這三類符號的步驟參見超圖相關技術文檔,本文不再贅述。最終得到如圖2和圖3所示的線型符號庫和點符號庫。
圖2 三維管線符號庫
圖3 三維管點符號庫
為了保證在生成管線三維模型的過程中不會出現(xiàn)異常,數(shù)據(jù)檢查將對管線數(shù)據(jù)自動生成三維模型數(shù)據(jù)產(chǎn)生影響的各個方面進行檢查。數(shù)據(jù)檢查的內容包括:檢查管點數(shù)據(jù)是否包括TYPE、EXPNO、FEATURE、SUBSID、X、Y、SELEV等字段,管線數(shù)據(jù)是否包括TYPE、S_POINT、E_POINT、S_DEEP、E_DEEP、DSIZE等字段;檢查上述字段值是否缺失及其值填寫是否正確;檢查是否存在點號缺失的現(xiàn)象,即管線數(shù)據(jù)的S_POINT、E_POINT字段中存在該點號,但管點數(shù)據(jù)EXPNO字段中不存在該點號。以上各字段代表的含義如表1和表2所示。
部分管點字段及其含義 表1
部分管線字段及其含義 表2
在三維管線場景中,包含地面精細建模數(shù)據(jù)、DEM和DOM構建的地球表面模型數(shù)據(jù)、三維管線模型數(shù)據(jù),這三類數(shù)據(jù)各成體系,其各自的內符合精度較好,但與另外兩類數(shù)據(jù)卻相互矛盾。尤其是管線數(shù)據(jù),若不進行適當?shù)奶幚?,本來埋藏于地下,由于另外兩類?shù)據(jù)精度較低,往往會出露到地面以上,對管線綜合管理系統(tǒng)造成影響。因此,需要對管線數(shù)據(jù)做如下處理。
(1)首先,把管點數(shù)據(jù)(名稱為子類代碼+Point)和管線數(shù)據(jù)(子類代碼+Line)復制一份,作為臨時數(shù)據(jù),管點臨時數(shù)據(jù)名稱為子類代碼+Point_Tmp,管線臨時數(shù)據(jù)名稱為子類代碼+Line_Tmp),在后續(xù)的處理中以臨時數(shù)據(jù)為操作對象,以保證不會對原始數(shù)據(jù)造成破壞。
(2)然后,對臨時數(shù)據(jù)添加必要的字段。管點臨時數(shù)據(jù)增加PtID、SymbolID、PtZ、ScaleX、ScaleY、SacleZ、RotateX、RotateY、RotateZ、PtLon、PtLat字段;管線臨時數(shù)據(jù)增加LnID、SymbolID、StID、EndID、StZ、EndZ、ScaleX、ScaleY、LnWidth、LnCentLon、LnCentLat字段。以上各字段代表的含義如表3和表4所示。
管點數(shù)據(jù)增加的字段及其含義 表3
管線數(shù)據(jù)增加的字段及其含義 表4
(3)最后,對管點、管線臨時數(shù)據(jù)進行處理,處理的過程主要包括:
①將管點X,Y坐標轉換為經(jīng)緯度坐標,給PtLon、PtLat字段賦值;
②通過管點的經(jīng)緯度PtLon、PtLat,結合場景中的DEM,獲得管點的高程值,給PtZ字段賦值;
③根據(jù)管點地面高程、管線起點埋深、管線終點埋深、管徑,計算管線起終點管中心的高程,給管線的StZ、EndZ字段賦值;
④根據(jù)管線的StZ、EndZ更新管線要素的幾何信息;
⑤根據(jù)管點X,Y坐標和高程更新管點要素的幾何信息;
⑥根據(jù)管點的特征、附屬設施獲得對應的管點符號編碼,給管點SymbolID賦值;
⑦根據(jù)管點的地面高程,管徑,管點的特征、附屬設施,計算管點Z方向的縮放,給ScaleZ字段賦值;
⑧根據(jù)管線類型,管徑(斷面尺寸)獲得對應的管線符號編碼,給管線SymbolID賦值;
⑨根據(jù)管徑(斷面尺寸),計算管線X方向和Y方向的縮放,給ScaleX、ScaleY字段賦值;
⑩根據(jù)管線的幾何信息,計算管線中心點的經(jīng)緯度坐標,給LnCentLon、LnCentLat字段賦值。
爆管分析、關閥分析、最佳路徑分析、單要素追蹤分析、關鍵設施分析等網(wǎng)絡分析是地下管線綜合管理信息系統(tǒng)中常用的分析功能。使用這些三維網(wǎng)絡分析必須首先構建三維網(wǎng)絡數(shù)據(jù)集,三維網(wǎng)絡數(shù)據(jù)集是進行三維網(wǎng)絡分析的數(shù)據(jù)基礎[7]。另外,要使用自適應管點符號,也必須首先構建三維網(wǎng)絡數(shù)據(jù)集。因此,我們需要構建三維網(wǎng)絡數(shù)據(jù)集。利用2.3節(jié)中處理后的管點臨時數(shù)據(jù)集和管線臨時數(shù)據(jù)集,來構建我們需要的三維網(wǎng)絡數(shù)據(jù)集。
在SuperMap中專題地圖實質上是地圖圖層的符號化顯示,即用各種圖形渲染風格(大小,顏色,線型,填充等)來圖形化地表現(xiàn)要素的某方面特征[8]。專題制圖是對數(shù)據(jù)進行分析和可視化的一種很有效的方式。三維自定義專題圖允許用戶為圖層指定若干字段,利用圖層中每個對象的字段值表示這個對象的顯示特征,可設置其模型符號、旋轉、縮放、顏色等屬性?;谌S網(wǎng)絡數(shù)據(jù)集,創(chuàng)建管線三維自定義專題圖,然后將其保存為管線場景。創(chuàng)建管線三維自定義專題圖主要代碼如下:
///
/// 創(chuàng)建三維管線專題圖
///
/// 三維網(wǎng)絡數(shù)據(jù)集
/// 三維場景
private void Add3DPipeLayer(Dataset pDatasetNet,Scene pipeScene)
{
Theme3DCustom theme3DPoint = new Theme3DCustom();
theme3DPoint.MarkerSymbolIDExpression = "SYMBOLID";
theme3DPoint.Marker3DRotateXExpression = "ROTATEX";
theme3DPoint.Marker3DRotateYExpression = "ROTATEY";
theme3DPoint.Marker3DRotateZExpression = "ROTATEZ";
theme3DPoint.Marker3DScaleXExpression = "SCALEX";
theme3DPoint.Marker3DScaleYExpression = "SCALEY";
theme3DPoint.Marker3DScaleZExpression = "SCALEZ";
Theme3DCustom theme3DLine = new Theme3DCustom();
theme3DLine.LineSymbolIDExpression = "SYMBOLID";
theme3DLine.LineWidthExpression = "LnWidth";
//添加圖層
Layer3DDataset lnLayer3D = pipeScene.Layers.Add(pDatasetNet,theme3DLine,true);
Layer3DDataset ptLayer3D = pipeScene.Layers.Add((pDatasetNet as DatasetVector).ChildDataset,theme3DPoint,true);
Layer3DSettingVector lnLayer3DSettingVector = lnLayer3D.AdditionalSetting as Layer3DSettingVector;
lnLayer3DSettingVector.SymbolScaleXField = "ScaleX";
lnLayer3DSettingVector.SymbolScaleYField = "ScaleY";
lnLayer3DSettingVector.Style.AltitudeMode = AltitudeMode.Absolute;
lnLayer3D.AdditionalSetting = lnLayer3DSettingVector;
Layer3DSettingVector ptLayer3DSettingVector = ptLayer3D.AdditionalSetting as Layer3DSettingVector;
ptLayer3DSettingVector.Style.AltitudeMode = AltitudeMode.Absolute;
lnLayer3D.UpdateData();
ptLayer3D.UpdateData();
}
當應用程序處理的地理數(shù)據(jù)量比較龐大時,不僅操作速度緩慢,同時也非常耗機器資源。為了提高整體操作性能,在使用前先對三維數(shù)據(jù)進行預處理,預處理的本質是為地形、影像、模型數(shù)據(jù)創(chuàng)建分層緩存,能夠極大地提升數(shù)據(jù)顯示和瀏覽的速度。
生成三維場景緩存是指基于整個場景生成緩存,通過一次操作,即可將已加載到場景中的不同類型的數(shù)據(jù)生成對應類型的緩存。通過對整個場景生成緩存,能極大提高整個場景的顯示和瀏覽速度。
依據(jù)第2節(jié)介紹的創(chuàng)建管線三維模型方法,筆者在Microsoft Visual Studio 2013開發(fā)環(huán)境下,采用C#語言開發(fā)了煤航管線三維模型生成工具,工具運行界面如圖4所示。通過該工具生成的三維管線模型,已成功應用于筆者參與的多個工程項目,取得了較好的生產(chǎn)效益。生成的管線三維模型加載到系統(tǒng)中的效果如圖5所示。
圖4 管線三維模型批量生成工具 圖5 管線三維模型效果圖
本文闡述了基于SuperMap平臺批量創(chuàng)建管線三維模型的方法,并使用C#語言實現(xiàn)了該方法。使用該方法可以快速地基于管線二維數(shù)據(jù)創(chuàng)建管線三維模型數(shù)據(jù),解決了管線綜合管理信息系統(tǒng)所需的管線三維模型數(shù)據(jù)問題。但是該方法還存在一些問題,比如某些城市DEM數(shù)據(jù)精度很差,與管線數(shù)據(jù)疊加時,管線及其特征點、附屬設施會裸露在地面上,為了實現(xiàn)較好的視覺效果,需要對個別數(shù)據(jù)進行手動處理,以使其貼合到地面或顯示到地面下。