廉光偉 ,寇付友,翟林,趙虎川
(天津市測(cè)繪院,天津 300381)
隨著城市的現(xiàn)代化進(jìn)程不斷加快,城市地下管網(wǎng)變得越來(lái)越復(fù)雜,與人們的生活也越來(lái)越密切,由于深埋于地下,且種類繁多,規(guī)模龐大,再加上經(jīng)常施工引發(fā)的變動(dòng)、記載資料不全等原因,城市地下管線具有隱蔽性、復(fù)雜性和多變性等特性,使得設(shè)計(jì)新的地下管線和維護(hù)現(xiàn)有管線比較困難。本文提出基于ArcEngine的管線碰撞分析算法為解決地下管網(wǎng)規(guī)劃設(shè)計(jì)和管線外業(yè)測(cè)量提供了技術(shù)保障。
近20 多年來(lái),國(guó)內(nèi)外的研究人員在碰撞檢測(cè)領(lǐng)域中做了很多的工作,取了一定的成果,提出了一些較成熟的算法,并開發(fā)了相應(yīng)的程序。碰撞分析算法總體上可以歸為兩類:①靜態(tài)碰撞檢測(cè)算法。主要用于檢測(cè)靜止?fàn)顟B(tài)中各物體之間是否發(fā)生碰撞,如管線碰撞檢測(cè),這類算法的實(shí)時(shí)性要求不高,但對(duì)精度要求較高。②動(dòng)態(tài)碰撞檢測(cè)算法。針對(duì)的是場(chǎng)景中物體的相對(duì)位置隨相間不斷變化的情況,如機(jī)械零件的加工過程以及機(jī)械系統(tǒng)的運(yùn)動(dòng)仿真等[1]。本文主要闡述靜態(tài)碰撞檢測(cè)算法的研究現(xiàn)狀。
Palmer、Hubbard[7]等提出基于層次包圍盒法的碰撞檢測(cè)算法,其目標(biāo)盡可能地減少需進(jìn)行相交測(cè)試的幾何對(duì)象的數(shù)目及提高算法的實(shí)時(shí)性。碰撞檢測(cè)領(lǐng)域研究最多的包圍盒有:包圍球,沿坐標(biāo)軸的軸向包圍盒,方向包圍盒,固定方向凸包等。
基于空間分割的碰撞檢測(cè)方法是將整個(gè)虛擬空間劃分成等體積的規(guī)則單元格,依此將場(chǎng)景中物體分割成更小的群組,并只對(duì)占據(jù)了同一單元格或者相鄰單元格的幾何對(duì)象進(jìn)行相交測(cè)試[3]。
張著豪[5]等提出基于矢量積的管線碰撞分析算法,該算法通過兩管線段的起始點(diǎn)坐標(biāo)建立矢量積,計(jì)算矢量積的值進(jìn)而判斷兩管線是否相交。
GIS 中管線是以二維圖形信息和屬性信息的數(shù)據(jù)結(jié)構(gòu)方式存儲(chǔ),本文分析了管線的碰撞的可能情況,然后根據(jù)不同的情況,結(jié)合圖形數(shù)據(jù)和屬性數(shù)據(jù)給出相應(yīng)的碰撞分析算法。
管線碰撞可能出現(xiàn)的情況有4 種,如圖1所示:
圖1 管線碰撞可能出現(xiàn)的情況
①如圖1(a)示,管線g1 與g2 相交,相交點(diǎn)o 處,兩條管線高程范圍有相交的情況,則兩管線會(huì)出現(xiàn)碰撞;
②如圖1(b)示,管線g1 與g2 平行,兩管線的空間最短距離小于兩管線的半徑之和(如管線截面為矩形則取矩形的外接圓半徑),則兩管線會(huì)出現(xiàn)碰撞;
③如圖1(c)示,管線g1 與g2 共線,兩管線相交或者平行空間距離小于半徑之和,則兩管線會(huì)出現(xiàn)碰撞;
④如圖1(d)示,管線g1 與g2 異面,管線g1 的起始點(diǎn)到管線g2 的空間距離小于兩管線的半徑之和,則兩管線會(huì)出現(xiàn)碰撞。
(1)管線相交
①判斷兩管線是否相交,如果相交則進(jìn)行步驟②;
②首先利用線性內(nèi)插計(jì)算兩管線交點(diǎn)處的中心高程值;
③比較高程差L 與兩管線半徑之和R1 +R2,如果L >R1 +R2,則兩管線不碰撞,否則兩管線碰撞。
算法流程如圖2所示:
圖2 管線相交碰撞分析算法流程
(2)管線平行
①如果有一條線段的端點(diǎn)到另一線段的垂足在另一線段內(nèi)或端點(diǎn)上,則計(jì)算兩平行線段的空間間距L,若該間距L 小于兩管線半徑之和,即L <R1 +R2,則發(fā)生碰撞。這通常發(fā)生在兩并排布置的管道,間距不符合設(shè)計(jì)要求。
②如果垂足均在線段外,則計(jì)算兩兩端點(diǎn)距離的最小值L,判斷L 是否小于兩管線半徑之和,若L <R1+R2,則發(fā)生碰撞;反之,則未發(fā)生碰撞。
算法流程如圖3所示:
圖3 管線平行碰撞分析算法流程
(3)管線共線
管線共線可以在空間垂直面上分析管線的碰撞情況,存在兩種可能碰撞情況:①空間垂直面上的相交,具體算法按照(1)節(jié);②空間垂直面上平行,具體算法按照(2)節(jié)。
(4)管線異面
首先計(jì)算兩管線的公垂線長(zhǎng)度L,若L >R1 +R2,不會(huì)碰撞,否則需要進(jìn)行以下分析:
①公垂線的兩個(gè)垂足均在管線段內(nèi),則發(fā)生碰撞;
②兩垂足至少有一個(gè)在一條管線段的外面,計(jì)算兩管線段兩兩端點(diǎn)的長(zhǎng)度(4 個(gè)),計(jì)算管線段兩端點(diǎn)到另一管線的垂距(4 個(gè)),取端點(diǎn)兩線長(zhǎng)度和垂距最小者L,若L >R1 +R2,不會(huì)碰撞,否則會(huì)出現(xiàn)碰撞。
算法流程如圖4所示:
圖4 管線異面碰撞分析算法流程
(1)ArcEngine
ArcEngine 是Esri 在ArcGIS 9 版本才開始推出的新產(chǎn)品,它是一套完備的嵌入式GIS 組件庫(kù)和工具庫(kù),建立在ArcObject 之上的,ArcObjects 是整個(gè)ArcGIS 軟件的核心功能庫(kù),它是由平臺(tái)獨(dú)立的COM 對(duì)象組成。ArcEngine 在核心ArcObjects 組件上又做了一次封裝,開發(fā)人員可以用來(lái)構(gòu)建自定義GIS 和制圖應(yīng)用程序。開發(fā)人員可以擴(kuò)展對(duì)象庫(kù),并且完全控制應(yīng)用軟件用戶界面的外形和感覺[6]。
ArcEngine 具有如下優(yōu)勢(shì)[8]:
①快速開發(fā)。ArcGIS Engine 提供了豐富的GIS組件方便用戶快速的定制開發(fā)一個(gè)GIS 應(yīng)用程序,無(wú)需寫代碼即可實(shí)現(xiàn)GIS 數(shù)據(jù)加載,地圖操作等功能甚至可以實(shí)現(xiàn)高級(jí)編輯以及空間分析功能。
②易于部署。使用ArcGIS Engine 開發(fā)的GIS 應(yīng)用程序可以脫離ArcGIS Desktop 而運(yùn)行,只需要安裝runtime 就可以運(yùn)行。
③高性能。ArcEngine 是基于ArcObject 之上進(jìn)行封裝,可以實(shí)現(xiàn)ArcGIS 大部分的空間操作功能。
④支持多種開發(fā)語(yǔ)言。支持多種開發(fā)語(yǔ)言(.net、java、C+ +等)和主流的操作系統(tǒng)(Windows、UNIX 和Linux)。
(2)軟硬件環(huán)境
硬件環(huán)境:Pentium(R)4,CPU 3.0 GHZ,內(nèi)存1 GB
系統(tǒng)運(yùn)行平臺(tái):Windows XP/Windows 7
系統(tǒng)開發(fā)平臺(tái):Microsoft Visual Studio.NET 2008
系統(tǒng)開發(fā)語(yǔ)言:Microsoft Visual c#
(1)判斷兩相交管線是否碰撞
①利用拓?fù)浞治鼋涌贗TopologicalOperator 判斷兩條管線是否相交,主要代碼為:
IGeometry intersectGeo =toplogicalOperator.Intersect(geometry);
//判斷兩管線是否相交,若相交則返回一個(gè)不為空的值,若不相交則返回值為空
②若兩管線相交,則通過線性內(nèi)插計(jì)算交點(diǎn)處的高程值,主要代碼為:
doubledis=Math.Sqrt((x- fromX)* (x - fromX)+ (y- fromY)* (y- fromY));
//獲取相交點(diǎn)到起始點(diǎn)的距離,返回一個(gè)雙精度類型的值
doublez= dis* (toPt.Z - fromPt.Z)/ line.Length +fromPt.Z;
//通過線性內(nèi)插方法獲取相交點(diǎn)高程,返回一個(gè)雙精度類型的值
③利用IFeature 接口的GetValue 函數(shù)獲取管線的半徑,并比較交點(diǎn)處高程差L 與半徑之和R1 +R2,若L <R1 +R2則管線碰撞。
(2)判斷兩平行管線
①利用ILine 接口的Angle 屬性得到管線與水平方向的夾角,如果兩條管線的夾角相同或相差180°,則兩條管線平行;
②利用IProximityOperator 接口的ReturnDistance函數(shù)獲取兩管線的最短距離,主要代碼為:
double dDistance = proximityOper.ReturnDistance(nextfeature.Shape);
//獲取兩條管線的最近距離,返回值為一個(gè)雙精度類型的數(shù)值
③比較最短距離L 與半徑之和R1 + R2,若L <R1 +R2則兩管線碰撞。
(3)判斷兩共線管線
①利用ITopologicalOperator 接口和ILine 接口的Angle 屬性判斷兩管線是否共線;
②若兩管線共線,則在垂直面上判斷兩管線的相交或平行;
③若垂直面上相交,則按照相交情況判斷是否碰撞;若垂直面上平行,則按照平行情況判斷是否碰撞。
(4)判斷兩異面管線是否碰撞
①利用ITopologicalOperator 的Buffer 函數(shù)獲取一定范圍內(nèi)的管線,排除相交、平行管線;
②利用IPolyline 的QueryPointAndDistance 獲取公垂線的長(zhǎng)度,進(jìn)而獲取最短垂線距離L,主要代碼為:
polyline.QueryPointAndDistance(esriSegmentExtension.esri-NoExtension,pFromPt_n,false,pPt,refdTemp,refdOF,refbRight);
//獲取點(diǎn)到一條折線的最近距離,并返回折線上到這一點(diǎn)的最近的點(diǎn),pFromPt_n 為折線外一點(diǎn),pPt 為折線上最近點(diǎn),dOF 為最近距離
③比較最短距離L 與半徑之和R1 + R2,若L <R1 +R2則兩管線碰撞。
(1)算法結(jié)果驗(yàn)證
本文利用天津市區(qū)某一區(qū)域的管線數(shù)據(jù)進(jìn)行系統(tǒng)測(cè)試,其分析結(jié)果如圖5所示,制作成管線三維模型如圖6所示,分析結(jié)果與模型進(jìn)行對(duì)比,驗(yàn)證了該算法的正確性。
圖5 碰撞分析結(jié)果(部分?jǐn)?shù)據(jù))
圖6 管線三維模型效果圖
(2)算法應(yīng)用
①管線規(guī)劃設(shè)計(jì)
規(guī)劃管理部門在進(jìn)行管線規(guī)劃路由設(shè)計(jì)時(shí),無(wú)法準(zhǔn)確判斷新設(shè)計(jì)的管線路由是否與周圍管線碰撞,進(jìn)而在施工時(shí)可能造成不必要的損失。該算法很好的解決了上述問題,為規(guī)劃管理部門管線規(guī)劃設(shè)計(jì)提供了保障。下圖7為利用該算法分析新設(shè)計(jì)的管線路由與周圍管線的碰撞情況,表格中的紅色表示與周圍管線有碰撞情況。
圖7 管線路由碰撞分析結(jié)果
②管線竣工測(cè)量成果驗(yàn)證
在管線竣工測(cè)量數(shù)據(jù)處理過程中,由于數(shù)據(jù)處理人員一時(shí)疏忽,可能會(huì)導(dǎo)致管線數(shù)據(jù)錯(cuò)誤,而出現(xiàn)管線碰撞情況,利用該算法可以很好的驗(yàn)證數(shù)據(jù),從而保證了管線測(cè)量結(jié)果的準(zhǔn)確性。
本文首先介紹了管線碰撞分析的典型算法,分析了幾何形狀下管線可能出現(xiàn)碰撞的情況,并針對(duì)每種情況給出了相應(yīng)的碰撞分析算法。基于ArcGIS 開發(fā)環(huán)境,進(jìn)行了管線碰撞分析的算法實(shí)現(xiàn),并用具體的實(shí)例數(shù)據(jù)進(jìn)行的實(shí)驗(yàn),分析結(jié)果與管線三維模型進(jìn)行了對(duì)比,從而驗(yàn)證了算法的正確性。
在地下管網(wǎng)錯(cuò)綜復(fù)雜的今天,該碰撞分析算法為規(guī)劃部門新管線的設(shè)計(jì)和管線測(cè)繪部門提供了有效的技術(shù)支撐,該算法已應(yīng)用到天津?yàn)I海高新區(qū)數(shù)字城市規(guī)劃管理系統(tǒng)、天津津南規(guī)劃管理系統(tǒng)等規(guī)劃管理系統(tǒng)中。
[1]肖翔.基于幾何的三維地下供水管網(wǎng)碰撞分析[J].華中科技大學(xué),2008.
[2]袁明.基于ArcEngine 的地下管網(wǎng)綜合應(yīng)用系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].成都理工大學(xué),2008.
[3]霍濱焱.基于圖像空間的碰撞檢測(cè)算法[D].哈爾濱:哈爾濱工程大學(xué),2005.
[4]于國(guó)清,湯廣發(fā),郭駿等.一種基于幾何的空間管道碰撞檢測(cè)算法[J].哈爾濱工業(yè)大學(xué)學(xué)報(bào),2003,35(11):1363~1365.
[5]張著豪,李隆方,鄭曉麗等.基于ArcEngine 的城市地下管網(wǎng)碰撞分析研究[J].測(cè)繪與空間地理信息,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.