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