基于ArcEngine的管线碰撞分析算法设计与实现

2014-06-26 07:41廉光伟寇付友翟林赵虎川
城市勘测 2014年6期
关键词:碰撞检测共线平行

廉光伟 ,寇付友,翟林,赵虎川

(天津市测绘院,天津 300381)

1 引 言

随着城市的现代化进程不断加快,城市地下管网变得越来越复杂,与人们的生活也越来越密切,由于深埋于地下,且种类繁多,规模庞大,再加上经常施工引发的变动、记载资料不全等原因,城市地下管线具有隐蔽性、复杂性和多变性等特性,使得设计新的地下管线和维护现有管线比较困难。本文提出基于ArcEngine的管线碰撞分析算法为解决地下管网规划设计和管线外业测量提供了技术保障。

2 国内外研究现状

近20 多年来,国内外的研究人员在碰撞检测领域中做了很多的工作,取了一定的成果,提出了一些较成熟的算法,并开发了相应的程序。碰撞分析算法总体上可以归为两类:①静态碰撞检测算法。主要用于检测静止状态中各物体之间是否发生碰撞,如管线碰撞检测,这类算法的实时性要求不高,但对精度要求较高。②动态碰撞检测算法。针对的是场景中物体的相对位置随相间不断变化的情况,如机械零件的加工过程以及机械系统的运动仿真等[1]。本文主要阐述静态碰撞检测算法的研究现状。

Palmer、Hubbard[7]等提出基于层次包围盒法的碰撞检测算法,其目标尽可能地减少需进行相交测试的几何对象的数目及提高算法的实时性。碰撞检测领域研究最多的包围盒有:包围球,沿坐标轴的轴向包围盒,方向包围盒,固定方向凸包等。

基于空间分割的碰撞检测方法是将整个虚拟空间划分成等体积的规则单元格,依此将场景中物体分割成更小的群组,并只对占据了同一单元格或者相邻单元格的几何对象进行相交测试[3]。

张著豪[5]等提出基于矢量积的管线碰撞分析算法,该算法通过两管线段的起始点坐标建立矢量积,计算矢量积的值进而判断两管线是否相交。

3 管线碰撞分析算法

GIS 中管线是以二维图形信息和属性信息的数据结构方式存储,本文分析了管线的碰撞的可能情况,然后根据不同的情况,结合图形数据和属性数据给出相应的碰撞分析算法。

3.1 管线碰撞的情况分析

管线碰撞可能出现的情况有4 种,如图1所示:

图1 管线碰撞可能出现的情况

①如图1(a)示,管线g1 与g2 相交,相交点o 处,两条管线高程范围有相交的情况,则两管线会出现碰撞;

②如图1(b)示,管线g1 与g2 平行,两管线的空间最短距离小于两管线的半径之和(如管线截面为矩形则取矩形的外接圆半径),则两管线会出现碰撞;

③如图1(c)示,管线g1 与g2 共线,两管线相交或者平行空间距离小于半径之和,则两管线会出现碰撞;

④如图1(d)示,管线g1 与g2 异面,管线g1 的起始点到管线g2 的空间距离小于两管线的半径之和,则两管线会出现碰撞。

3.2 管线碰撞分析算法

(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 管线异面碰撞分析算法流程

4 管线碰撞分析算法程序实现

4.1 开发环境

(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#

4.2 基于ArcEngine 的管线碰撞分析算法程序实现

(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则两管线碰撞。

4.3 算法结果验证及应用

(1)算法结果验证

本文利用天津市区某一区域的管线数据进行系统测试,其分析结果如图5所示,制作成管线三维模型如图6所示,分析结果与模型进行对比,验证了该算法的正确性。

图5 碰撞分析结果(部分数据)

图6 管线三维模型效果图

(2)算法应用

①管线规划设计

规划管理部门在进行管线规划路由设计时,无法准确判断新设计的管线路由是否与周围管线碰撞,进而在施工时可能造成不必要的损失。该算法很好的解决了上述问题,为规划管理部门管线规划设计提供了保障。下图7为利用该算法分析新设计的管线路由与周围管线的碰撞情况,表格中的红色表示与周围管线有碰撞情况。

图7 管线路由碰撞分析结果

②管线竣工测量成果验证

在管线竣工测量数据处理过程中,由于数据处理人员一时疏忽,可能会导致管线数据错误,而出现管线碰撞情况,利用该算法可以很好的验证数据,从而保证了管线测量结果的准确性。

5 总 结

本文首先介绍了管线碰撞分析的典型算法,分析了几何形状下管线可能出现碰撞的情况,并针对每种情况给出了相应的碰撞分析算法。基于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.

猜你喜欢
碰撞检测共线平行
向量的共线
向量的平行与垂直
平行
全新预测碰撞检测系统
平面几何中三点共线的常见解法
逃离平行世界
共线向量题型例析
基于BIM的铁路信号室外设备布置与碰撞检测方法
空间遥操作预测仿真快速图形碰撞检测算法
再顶平行进口