1、理论算法2022.24500 引言目前地下管线的信息化水平发展不均衡,有些城市已建立了地下管线信息系统,而有些城市比较落后,地下管线数据精度不高、资料不完整,不能实现动态更新。因此建立一个较为完善的城市地下管线三维可视化系统1,是一个刻不容缓的问题。本文在前期对地下管线信息化建设情况调查研究的基础上2,重点针对地下管线三维可视化系统建设中的管线空间模型转换、空间衔接等几个关键技术进行了相关研究。1 管线空间模型转换管线可视化需要先对管线空间位置进行模型转换3,在 OpenGL 中,通 过 调 用 glRotate*()、glTranlate*()、glscale*()这三个进行模型转换的函数可
2、以实现对管线的移动、旋转或缩放等转换。其中函数 glRotate*(,x,y,z)的功能是在物体绕原点到点(x,y,z)的直线矢量逆时针旋转的过程中可以生成一个旋转矩阵。利用圆柱函数、球函数和3Dmax 模型分别来实现管线的直线部分、管线的结点和附属设施的显示。通过空间模型转换可以使管线两端点形成的向量与轴线相重合,如图 1 所示。首先将模型变换所需的参数(,x,y,z)的算出来:设管线段两端点的坐标为111(,)A x y z,222(,)B xy z;则圆柱的高度为:222121212()()()ABxxyyzz=+?;管线段矢量表达式为:212121(,)ABxx yy zz=?;进行单
3、位化得到:ABlAB=?。zBP x OBAy图 1 管线模型变换图1.1 计算函数 glRotate*(,x,y,z)中参数 x,y,z 的值将已知的两向量为(0,0,1),oz=?212121(,)ABxx yy zz=?212121(,)ABxx yy zz=?进行相乘,如式(1)所示:OP?(0,0,1)212121(,)xx yy zz 212121001xxyyzzijk(1)城市地下管线三维可视化系统关键技术研究赵亚蓓1,时建新2(1 河南测绘职业学院,河南郑州,450015;2 中铁七局集团广州工程有限公司,广东广州,510700)摘要:本文在对目前城市地下管线信息化建设现状的
4、研究与实践的基础上,对城市地下管线三维可视化系统建设中的关键技术进行了研究,并详细介绍了利用 OpenGL 和 GIS 平台软件进行管线空间的模型转换和空间衔接的思路和方法。关键词:地下管线;可视化;OpenGL;关键技术中图分类号:TP319 文献标识码:AResearchonKeyTechnologiesofUrbanUndergroundPipeline3DVisualizationSystem Zhao Yabei1,Shi Jianxin2(1.Henan Vocational College of Surveying and Mapping,Zhengzhou Henan,4500
5、15;2.Guangzhou Engineering Co.,Ltd.,of China Railway Seventh Bureau Group,Guangzhou Guangdong,510700)Abstract:Based on the research and practice of the current situation of urban underground pipeline informatization construction,this paper discusses the key points in the construction of urban underg
6、round pipeline 3D visualization system.Key technology is studied,and the idea and method of using OpenGL and GIS platform software to transform the pipeline space model and connect the space are introduced in detail.Keywords:underground pipeline;Visualization;OpenGL;key technologyDOI:10.16520/ki.100
7、0-8519.2022.24.010理论算法2022.2451以利用 OpenGL 中的 glutSolidTorus 函数实现。实现的步骤如下:AB 剪切面 M l0图 2 剪切面图2.2.1 模型转换首先对空间模型进行转换,如图 3 所示:在 OpenGL 中,圆环面所在的平面表达式为:z=0(7)O2 O1 M O xABy O P 图 3 圆环模型变换图设任意两管段的向量为111222(,)(,)a b ca b c、,其组成的平面方程为:110110110()()()()()()0bcbc xxa cacyyabab zz+=(8)将圆环面平移到平面 APB 中。联立方程(7)(8)
8、的交线方程:1111()()0bcbc xa cac y+=(9)两平面的夹角即为两平面垂线夹角,平面的垂线向量及夹角为:111111(),(),(),(0,0,1)bcbca cacabab 11222111111()arccos()()()()ababbcbca cacabab=+(10)平移量为:(,)(,)tttpppx y zxyzO P=+?(11)其中:(,)pppxyz为 P 点坐标;r 为圆环的内半径;12211221()()0(,0)yy ixxjkyy xx+=1.2 计算函数 glRotate*(,x,y,z)中的参数 cosoz loz l=?(2)212222121
9、21cos()()()()zzarxxyyzz=+(3)其中2 2(,);(当0时,180=+)1.3 空间显示如图 1 所示,先把圆柱旋转使圆柱的轴线与OB相重合,然后再将圆柱平移111,x y z,就和线 AB 相重合。管线的空间显示代码如下:DrawCylinder(const CPoint3D&cen,double r,const CVector3D&h)GLUquadricObj*quadObj;quadObj=gluNewQuadric();gluQuadricDrawStyle(quadObj,GLU_SMOOTH);glPushMatrix();glTranslatef(cen
10、.x,cen.y,cen.z);CVector3D vecNY(0,0,1);CVector3D axis=vecNY*h;double ang=_AngleBetween(vecNY,h);ang=ang*180/GL_PI;glRotatef(ang,axis.dx,axis.dy,axis.dz);gluCylinder(quadObj,r,r,h.GetLength(),80,80);glPopMatrix();2 管线的空间衔接对管线进行模型转换4后,再对其空间位置进行衔接。衔接的方法主要有以下两种。2.1 剪切面法剪切面法是首先延长进行空间衔接的管线的直线部分,再剪切掉多余的部分进
11、行衔接,如图 2 所示。剪切面的代数方程为:0AxByCzD+=(4)过 O 点求在 ABO 平面内与oOP?垂直的向量(,)l a b c,设O 点的坐标为000(,)xy z,则剪切面的方程为:000()()()0a xxb yyc zzd+=(5)2.2 圆环面法圆环面法的优势是可以平滑过渡管线进行自然衔接,可理论算法2022.24522121 21 2222222111222()1()()rO PRa abbccabcabc=+(12)2.2.2 剪切面的确定OpenGL 中,附加的剪切面可以通过函数 glClipPlane(Glenum plane,const Gldouble*eq
12、uation)来 实 现,其中参数 equation 可以表示一个数组,该数组包含四个元素;参数 plane 是用来指定剪切面的编号。剪切面方程为Ax+By+Cz+D=0,进行剪切时,调用函数 g1Enable(GL_CLIP_PLANEi)启用剪切面,使附加剪切面产生剪切作用,得到剪切面的四个参数 A、B、C 和 D。当不再使用某剪切面时,通过调用函数 g1Disable(GL_CLIP_PLANEi)来关闭该剪切面。当管道的管径不相同且管段之间没有附属物时,需要用无数圆环面进行拼接5,如图 4 所示。x yz O 图 4 圆环组相接图3 截面图的生成绘制截面图是为了研究管线的管径、埋深、走
13、向及相邻管线的空间位置关系,包括横断面图和纵断面图,横断面图是垂直于管线切线方向的截面图,纵断面图是沿着管线方向的截面图。3.1 横剖面数据计算绘制横断面图需要对横剖面数据进行计算,首先计算出剖面线与空间管线的交点坐标,然后按一定比例生成截面图。先将剖面线的起点、终点的屏幕坐标转换为世界坐标,然后再分别与各类管线求交点,通过图元ID 与数据库中的 ID 关联进行查询,可以得到管线两端点的埋深,管线两端点中任一点地埋深以及剖面线与管线交点处的地面高程、管底标高等数据可以通过线性内插求出。如果横断面图的横剖面线与 x 轴大致平行,将按每个数据的 x 坐标由小到大的顺序储存在数组中;如果与Y 轴大致
14、平行,则按数据的 Y 轴坐标从小到大的顺序储存在数组中。管径从数据库中取得,得到管线的三维坐标和管径后就可以以横断面线的起点作为原点,横断面线作为横坐标轴,以管线的埋深作为纵坐标建立坐标系来画剖面图了。3.2 纵剖面数据计算绘制纵断面图需要对纵剖面数据进行计算,重点是管线的坡度等数据的计算。具体计算方法是利用每条管线的两个端点地面标高计算出管线的坡度,这些标高数据可以从属性数据库中获取。以管线的埋深作为纵坐标,以管线的长度作为横坐标,纵轴的比例尺可以选取横轴比例尺的 K 倍,这样能清楚地反映出管线的埋深情况。3.3 原点及纵横轴坐标范围计算绘制断面图的关键是要确定出原点及纵横轴坐标范围,剖面线
15、起点的坐标即是剖面图原点的坐标,横轴坐标的范围是剖面线起点和终点之间的距离,所以要确定出剖面线起点的坐标和终点的坐标,断面图的纵轴坐标范围是剖面线与各类管线交点的地面高程的最大值。管线断面数据结构的设计需要获取管线的管径、管顶高、管底高等属性信息和交点的三维坐标。设计如下:structfloat x;/交点 x,y,z 坐标float y;float z;float gj;/管径float gtop;/管顶高float gbottom;/管底高pipe;4 B/S 与 C/S 相结合的体系结构B/S 与 C/S 两种架构都有各自的优缺点,本文提出将二IISWeb服务器地图应用服务器浏览器浏览器
16、HTTP请求返回包含地图信息的Web页面表示层逻辑层数据层Internet客户端中间件数据库SQLServer数据库服务器图 5 B/S 三层架构理论算法2022.2453者相结合,实现优势互补,充分发挥各自的优点。地下管线数据的入库、更新、利用、管理及空间分析等功能可以在 C/S 架构下实现;地下管线信息的浏览、查询、简单的统计分析等功能可以在 B/S 架构下实现。根据地下管线数据的特征,B/S架构采用三层结构,即前端浏览器、Web 服务器和地图应用服务器、数据库服务器,如图 5 所示。5 内外业一体化的数据库动态更新机制5.1 管线数据库的结构设计构成管线数据库数据结构的数据主要分为专业管线数据和辅助数据,专业管线数据根据管线种类进行分层管理6,主要分为给水层、排水层、电信层、暖气层、热力层、燃气层;辅助数据包括道路中线、边线及附属设施等。管线数据库的结构设计7如图 6 所示。5.2 管线数据动态更新的内外业一体化技术城市地下管线三维可视化系统在应用过程中应能实时将新增的管线、改管或拆除等管线的变动情况,传递到系统平台,利用动态更新机制把变化的管线信息在数据库中进行更新,使数据库的