廉光偉 ,寇付友,翟林,趙虎川
(天津市測繪院,天津 300381)
隨著城市的現代化進程不斷加快,城市地下管網變得越來越復雜,與人們的生活也越來越密切,由于深埋于地下,且種類繁多,規模龐大,再加上經常施工引發的變動、記載資料不全等原因,城市地下管線具有隱蔽性、復雜性和多變性等特性,使得設計新的地下管線和維護現有管線比較困難。本文提出基于ArcEngine的管線碰撞分析算法為解決地下管網規劃設計和管線外業測量提供了技術保障。
近20 多年來,國內外的研究人員在碰撞檢測領域中做了很多的工作,取了一定的成果,提出了一些較成熟的算法,并開發了相應的程序。碰撞分析算法總體上可以歸為兩類:①靜態碰撞檢測算法。主要用于檢測靜止狀態中各物體之間是否發生碰撞,如管線碰撞檢測,這類算法的實時性要求不高,但對精度要求較高。②動態碰撞檢測算法。針對的是場景中物體的相對位置隨相間不斷變化的情況,如機械零件的加工過程以及機械系統的運動仿真等[1]。本文主要闡述靜態碰撞檢測算法的研究現狀。
Palmer、Hubbard[7]等提出基于層次包圍盒法的碰撞檢測算法,其目標盡可能地減少需進行相交測試的幾何對象的數目及提高算法的實時性。碰撞檢測領域研究最多的包圍盒有:包圍球,沿坐標軸的軸向包圍盒,方向包圍盒,固定方向凸包等。
基于空間分割的碰撞檢測方法是將整個虛擬空間劃分成等體積的規則單元格,依此將場景中物體分割成更小的群組,并只對占據了同一單元格或者相鄰單元格的幾何對象進行相交測試[3]。
張著豪[5]等提出基于矢量積的管線碰撞分析算法,該算法通過兩管線段的起始點坐標建立矢量積,計算矢量積的值進而判斷兩管線是否相交。
GIS 中管線是以二維圖形信息和屬性信息的數據結構方式存儲,本文分析了管線的碰撞的可能情況,然后根據不同的情況,結合圖形數據和屬性數據給出相應的碰撞分析算法。
管線碰撞可能出現的情況有4 種,如圖1所示:

圖1 管線碰撞可能出現的情況
①如圖1(a)示,管線g1 與g2 相交,相交點o 處,兩條管線高程范圍有相交的情況,則兩管線會出現碰撞;
②如圖1(b)示,管線g1 與g2 平行,兩管線的空間最短距離小于兩管線的半徑之和(如管線截面為矩形則取矩形的外接圓半徑),則兩管線會出現碰撞;
③如圖1(c)示,管線g1 與g2 共線,兩管線相交或者平行空間距離小于半徑之和,則兩管線會出現碰撞;
④如圖1(d)示,管線g1 與g2 異面,管線g1 的起始點到管線g2 的空間距離小于兩管線的半徑之和,則兩管線會出現碰撞。
(1)管線相交
①判斷兩管線是否相交,如果相交則進行步驟②;
②首先利用線性內插計算兩管線交點處的中心高程值;
③比較高程差L 與兩管線半徑之和R1 +R2,如果L >R1 +R2,則兩管線不碰撞,否則兩管線碰撞。
算法流程如圖2所示:

圖2 管線相交碰撞分析算法流程
(2)管線平行
①如果有一條線段的端點到另一線段的垂足在另一線段內或端點上,則計算兩平行線段的空間間距L,若該間距L 小于兩管線半徑之和,即L <R1 +R2,則發生碰撞。這通常發生在兩并排布置的管道,間距不符合設計要求。
②如果垂足均在線段外,則計算兩兩端點距離的最小值L,判斷L 是否小于兩管線半徑之和,若L <R1+R2,則發生碰撞;反之,則未發生碰撞。
算法流程如圖3所示:

圖3 管線平行碰撞分析算法流程
(3)管線共線
管線共線可以在空間垂直面上分析管線的碰撞情況,存在兩種可能碰撞情況:①空間垂直面上的相交,具體算法按照(1)節;②空間垂直面上平行,具體算法按照(2)節。
(4)管線異面
首先計算兩管線的公垂線長度L,若L >R1 +R2,不會碰撞,否則需要進行以下分析:
①公垂線的兩個垂足均在管線段內,則發生碰撞;
②兩垂足至少有一個在一條管線段的外面,計算兩管線段兩兩端點的長度(4 個),計算管線段兩端點到另一管線的垂距(4 個),取端點兩線長度和垂距最小者L,若L >R1 +R2,不會碰撞,否則會出現碰撞。
算法流程如圖4所示:

圖4 管線異面碰撞分析算法流程
(1)ArcEngine
ArcEngine 是Esri 在ArcGIS 9 版本才開始推出的新產品,它是一套完備的嵌入式GIS 組件庫和工具庫,建立在ArcObject 之上的,ArcObjects 是整個ArcGIS 軟件的核心功能庫,它是由平臺獨立的COM 對象組成。ArcEngine 在核心ArcObjects 組件上又做了一次封裝,開發人員可以用來構建自定義GIS 和制圖應用程序。開發人員可以擴展對象庫,并且完全控制應用軟件用戶界面的外形和感覺[6]。
ArcEngine 具有如下優勢[8]:
①快速開發。ArcGIS Engine 提供了豐富的GIS組件方便用戶快速的定制開發一個GIS 應用程序,無需寫代碼即可實現GIS 數據加載,地圖操作等功能甚至可以實現高級編輯以及空間分析功能。
②易于部署。使用ArcGIS Engine 開發的GIS 應用程序可以脫離ArcGIS Desktop 而運行,只需要安裝runtime 就可以運行。
③高性能。ArcEngine 是基于ArcObject 之上進行封裝,可以實現ArcGIS 大部分的空間操作功能。
④支持多種開發語言。支持多種開發語言(.net、java、C+ +等)和主流的操作系統(Windows、UNIX 和Linux)。
(2)軟硬件環境
硬件環境:Pentium(R)4,CPU 3.0 GHZ,內存1 GB
系統運行平臺:Windows XP/Windows 7
系統開發平臺:Microsoft Visual Studio.NET 2008
系統開發語言:Microsoft Visual c#
(1)判斷兩相交管線是否碰撞
①利用拓撲分析接口ITopologicalOperator 判斷兩條管線是否相交,主要代碼為:
IGeometry intersectGeo =toplogicalOperator.Intersect(geometry);
//判斷兩管線是否相交,若相交則返回一個不為空的值,若不相交則返回值為空
②若兩管線相交,則通過線性內插計算交點處的高程值,主要代碼為:
doubledis=Math.Sqrt((x- fromX)* (x - fromX)+ (y- fromY)* (y- fromY));
//獲取相交點到起始點的距離,返回一個雙精度類型的值
doublez= dis* (toPt.Z - fromPt.Z)/ line.Length +fromPt.Z;
//通過線性內插方法獲取相交點高程,返回一個雙精度類型的值
③利用IFeature 接口的GetValue 函數獲取管線的半徑,并比較交點處高程差L 與半徑之和R1 +R2,若L <R1 +R2則管線碰撞。
(2)判斷兩平行管線
①利用ILine 接口的Angle 屬性得到管線與水平方向的夾角,如果兩條管線的夾角相同或相差180°,則兩條管線平行;
②利用IProximityOperator 接口的ReturnDistance函數獲取兩管線的最短距離,主要代碼為:
double dDistance = proximityOper.ReturnDistance(nextfeature.Shape);
//獲取兩條管線的最近距離,返回值為一個雙精度類型的數值
③比較最短距離L 與半徑之和R1 + R2,若L <R1 +R2則兩管線碰撞。
(3)判斷兩共線管線
①利用ITopologicalOperator 接口和ILine 接口的Angle 屬性判斷兩管線是否共線;
②若兩管線共線,則在垂直面上判斷兩管線的相交或平行;
③若垂直面上相交,則按照相交情況判斷是否碰撞;若垂直面上平行,則按照平行情況判斷是否碰撞。
(4)判斷兩異面管線是否碰撞
①利用ITopologicalOperator 的Buffer 函數獲取一定范圍內的管線,排除相交、平行管線;
②利用IPolyline 的QueryPointAndDistance 獲取公垂線的長度,進而獲取最短垂線距離L,主要代碼為:
polyline.QueryPointAndDistance(esriSegmentExtension.esri-NoExtension,pFromPt_n,false,pPt,refdTemp,refdOF,refbRight);
//獲取點到一條折線的最近距離,并返回折線上到這一點的最近的點,pFromPt_n 為折線外一點,pPt 為折線上最近點,dOF 為最近距離
③比較最短距離L 與半徑之和R1 + R2,若L <R1 +R2則兩管線碰撞。
(1)算法結果驗證
本文利用天津市區某一區域的管線數據進行系統測試,其分析結果如圖5所示,制作成管線三維模型如圖6所示,分析結果與模型進行對比,驗證了該算法的正確性。

圖5 碰撞分析結果(部分數據)

圖6 管線三維模型效果圖
(2)算法應用
①管線規劃設計
規劃管理部門在進行管線規劃路由設計時,無法準確判斷新設計的管線路由是否與周圍管線碰撞,進而在施工時可能造成不必要的損失。該算法很好的解決了上述問題,為規劃管理部門管線規劃設計提供了保障。下圖7為利用該算法分析新設計的管線路由與周圍管線的碰撞情況,表格中的紅色表示與周圍管線有碰撞情況。

圖7 管線路由碰撞分析結果
②管線竣工測量成果驗證
在管線竣工測量數據處理過程中,由于數據處理人員一時疏忽,可能會導致管線數據錯誤,而出現管線碰撞情況,利用該算法可以很好的驗證數據,從而保證了管線測量結果的準確性。
本文首先介紹了管線碰撞分析的典型算法,分析了幾何形狀下管線可能出現碰撞的情況,并針對每種情況給出了相應的碰撞分析算法。基于ArcGIS 開發環境,進行了管線碰撞分析的算法實現,并用具體的實例數據進行的實驗,分析結果與管線三維模型進行了對比,從而驗證了算法的正確性。
在地下管網錯綜復雜的今天,該碰撞分析算法為規劃部門新管線的設計和管線測繪部門提供了有效的技術支撐,該算法已應用到天津濱海高新區數字城市規劃管理系統、天津津南規劃管理系統等規劃管理系統中。
[1]肖翔.基于幾何的三維地下供水管網碰撞分析[J].華中科技大學,2008.
[2]袁明.基于ArcEngine 的地下管網綜合應用系統設計與實現[J].成都理工大學,2008.
[3]霍濱焱.基于圖像空間的碰撞檢測算法[D].哈爾濱:哈爾濱工程大學,2005.
[4]于國清,湯廣發,郭駿等.一種基于幾何的空間管道碰撞檢測算法[J].哈爾濱工業大學學報,2003,35(11):1363~1365.
[5]張著豪,李隆方,鄭曉麗等.基于ArcEngine 的城市地下管網碰撞分析研究[J].測繪與空間地理信息,2012.
[6]ArcGISDevelopeHelp,ESRI Product Document,2004.
[7]Hubbard PM.Real-time collision detection and time-critical computing.In SIVE95,The First Workshop on Simulation and Interaction in Virtual EnvironmentsI,owaCityI,owa.University of Iowa,informal proceedings,1995(1):92 ~96.
[8]http://www.esrichina-bj.cn.