一种考虑权重的管网索引构建及实时生成方法

2020-01-09 06:51姚春雨彭桂辉段梦琦
遥感信息 2019年6期
关键词:管网管线权重

姚春雨,彭桂辉,段梦琦

(中煤航测遥感集团有限公司技术发展研究院,西安 710199)

0 引言

城市地下管网是城市基础设施的重要组成部分,是确保城市经济、社会健康发展的重要物质基础[1]。随着经济的发展,城市规模越来越大,城市地下管网的规划和建设越来越受到社会各方面的重视。地下管网建设的高速发展,导致各类管线如蛛网般的分布于地下空间,构成了纵横交错的地下管网空间体系。获取和管理地下管网的数据信息,能为城市基础建设提供必要的地下数据信息资料,可以避免地下管线事故,保证城市建设和城市发展的正常进行[2]。

随着管网种类的日益增多,管网数据量的快速增长,传统的地下管网信息系统越来越不能满足地下管线数据信息处理。且传统地下管网信息系统多是二维的,在可视化、交互性、及空间查询分析等方面和三维的系统相比存在很大的劣势。因此地下管网的三维建模和调度渲染就显得尤其重要,也成为“智慧城市”建设一个不可或缺的方向[3-4]。

国内外针对城市地下管网三维建模及调度渲染的研究比较多,由于城市地下管网结构复杂、种类繁多、数据量庞大,给管网的三维建模及调度渲染带来了一些难题[5-7]。目前主流的解决方案是管网建模和渲染调度分别处理的策略。即对二维矢量管网数据进行三维建模,输出建模后的三维模型数据,然后对三维模型数据进行组织渲染调度。这种策略存在以下缺点:①二维数据生成三维模型数据是一步必需的步骤,使二维数据的三维渲染增加了一步处理流程。②二维数据生成三维模型之后导致数据量成几何级的急剧增加,增加数据占用空间。③数据量的增加势必增加输入输出流(I/O)的压力,导致数据加载时数据量的传输增大,影响渲染帧率。本文针对以上缺点,提出了一种地下管网三维模型实时生成及调度渲染方法。该方法不预先生成地下管网三维模型,将二维管线数据直接实时生成三维管线模型进行渲染,减少了管线可视化的处理流程;规避了二维数据生成三维模型导致的数据量增加的问题;提高了渲染效率。

1 基于权重的地下管网四叉树构建

地下管网种类多,数据量大,范围广,将地下管网数据一次性调入内存全部渲染显示是不现实的,尤其是在三维场景中渲染三维管线模型需要占用计算机资源更多。本文提出了一种地下管线特征四叉树索引构建和根据视点实时调度地下管线数据的方法。

四叉树是属于基于空间划分组织索引结构的一类索引机制,其数据存储结构为层次树状结构,由于其查询效率较高,目前在三维数字城市方面应用较为广泛[8-9]。其基本思想为:将三维数字城市所处范围四等分,得到4个相连接的空间范围,然后分别再对这4个空间范围继续四等分,每个空间又分别到4个相连接的空间范围。以此类推直至达到四叉树要求最大层数或者子节点的外接包围盒小于要求的最小外接包围盒,结束四等分。然后将空间模型对象根据外接包围盒信息插入到四叉树中。

传统的四叉树构建方法可以解决模型查询效率的问题,可以根据模型的地理位置快速检索到模型,但没有考虑到地下管网模型的复杂性。尤其在三维数字城市渲染层面,系统除了渲染地下管线之外,还要渲染地上三维建筑模型、地形地貌数据模型、其他二维矢量数据等,三维系统的渲染压力较大。为了降低三维系统的渲染压力,本文提出了一种基于权重的四叉树索引构建方法。

地下管线数据分为管线数据和管点数据,数据格式为access数据库表mdb格式,包括管线数据表和管点数据表,在地下管网数据四叉树索引构建的时候同样分为管点数据和管线数据分别考虑。本文中管点数据和管线数据结构如表1、表2所示。管点

表1 管点数据结构

表2 管线数据结构

数据为管线数据的连接点,若管点没有附属设施一般为拐点、三通四通等结构,所占的空间范围比较小,因此可以在距视点较近的距离再加载,若管点存在附属设施如检修井、阀门井、供电箱、控制柜等,所占空间范围较大,需要在距视点较远的距离加载。管线数据为线状数据,是管点与管点之间的连接线。因为其往往占据的地理距离较长,因此也需要较早地加载。

为了让重要的地下管网模型被更早加载,以及拥有更远的可视距离,我们将不同的地下管网模型设置不同权重。权重设置可以根据管网的附属设施类型、地理位置、外接包围盒、顶点数量、纹理数量及大小等方面依据不同权重配比按照一定的规则打出该模型的权重,然后将模型渲染重要性等级划分为低级、中级、高级、顶级等4个等级。除了自动计算模型权重以外,如果有需要也可以人工制定某些模型的权重。模型的渲染等级划分并不是一成不变的,可以根据场景的具体情况具体制定。但本文所制定的低级渲染等级,一般是体积较小、顶点数量小、纹理简单的城市部件,该等级模型一般为在距离视点一定距离最先被卸载的一类模型,同时也是最晚被加载的一类模型。顶级渲染模型一般是极其重要的管网模型,需要在整个场景大部分时间都是加载状态的模型。

基于权重的管网模型四叉树构建步骤如图1所示:①计算出能够包含所有管网的外接包围盒,或者人工指定所需的外接包围盒,将其作为四叉树根节点的外接包围盒。②遍历所有地下管点数据,将根节点作为当前所需插入的节点,检测管点和当前节点的子节点的外接包围盒的拓扑关系,若管点在某个子节点内,则将该子节点设为当前节点,重复检测管点和当前节点的子节点的外接包围盒的拓扑关系,直到子节点外接包围盒小于规定值或者层数大于规定值。③遍历所有地下管网模型模型,计算模型外接包围盒和渲染等级。将根节点作为当前所需插入的节点,模型的渲染等级为顶级直接将模型加入根节点,否则检测模型外接包围盒和当前节点的子节点外接包围盒的拓扑关系。若模型外接包围盒与子节点外接包围盒相交并且模型的渲染等级为低级及中级,将模型加入当前节点,若模型外接包围盒与子节点外接包围盒相交并且模型的渲染等级为高级且当前节点存在父节点,将模型加入当前节点的父节点,否则加入当然节点。如果模型在某个子节点内,则将该子节点设为当前节点。

图1 基于权重的地下管网四叉树构建流程

本文提出的基于权重的地下管网四叉树索引构建方法,能在三维数字城市渲染时对管网数据快速检索,减轻内存和显卡的负担,同时又考虑了地下管网数据和普通城市三维模型的不同点,为三维数字城市渲染调度提供了底层支持。

2 地下管网的调度

图2 基于权重的管网模型调度流程

空间数据调度就是确定在什么时间采用什么方式调入还是调出空间数据的一个过程。在开源的OpenSceneGraph(osg)中,基于动态调度技术对一些类进行了设计与封装,在一定程度上满足了三维海量数据模型动态调度的需要。但是对于海量的城市地下管网数据,单纯地利用OSG分页数据库技术,会导致场景节点树的过度庞大,导致场景更新时遍历场景树效率较低,甚至发生系统崩溃的问题。本文采用第1节中建成的地下管网四叉树索引,提出了一种考虑地下管网特征的地下管网动态调度算法。整个过程如下:①整个场景需要更新时,根据第1节建立的基于模型权重的空间四叉树结构和当前视点位置做模型拣选,取小于当前视点距离一定值的所有最底层四叉树节点及其所对应的所有上层节点,取得所有四叉树节点包含的模型数据做为当前可见的模型子集M。②将子集M里每个模型实体作为一个分页细节层次节点(PagedLOD)加入到系统场景树中。若模型渲染权重为中等设置精细模型中模粗模的可见距离分别为L、L1、L2;若模型渲染权重为低级设置精细模型中模粗模的可见距离分别为L/2、L1/2、L2/2;若模型渲染权重为高级设置精细模型中模粗模的可见距离分别为2L、2L1、2L2;若模型渲染权重为顶级设置精细模型中模粗模的可见距离分别为4L、4L1、4L2。③遍历模型子集M模型判断模型权重和当前视点距离。若该模型满足加载精模或中模条件并没有加载顶点数据则加载精模顶点和纹理数据,若已存在顶点数据则只加载纹理数据,同时将该模型顶点数据标记为已加载,若满足加载粗模条件则加载粗模数据。

3 地下管网三维模型的实时自动生成

三维管网的自动生成分为管线自动生成和管点自动生成。

3.1 管线自动生成

本文采用多边形折线逼近法构建三维管线,即用足够多的直线段表示模型的棱边,用平面表示模型表面的方法。在管网二维数据中,管线一般以实际管线中心线来表示,一段管线为一条直线,管段之间以管点连接;而在三维场景中,管线用圆柱面表示,中心线即为圆柱面的轴心,截面半径为圆柱面半径[10-12]。

一段管线中心线由起始点和终止点2个管点数据组成,这2个点与管线半径可以确定一条三维管线。现假设有2个管点Pt1和Pt2,管线半径为R,可按照如下步骤生成一段三维管线模型:①计算出以Pt1,Pt2为法线,经过Pt1的平面M1,经过Pt2的平面M2;②分别在M1、M2内以Pt1、Pt2为圆心,管线半径为半径做圆C1和C2。③在C1中每隔一定角度(本文为1°)计算出一个特征点,并依次存储在数据Array1中。同理C2中计算出特征点存储在Array2中。④分别依次从数组Array1和数组Array2中取2个点,4个点可以构成一个矩形。遍历整个数据,就可获得所有矩形模拟管线。

3.2 管点自动生成

管点三维模型是多种类型不同规格的管点的三维模型的集合,是管网三维建模的关键。本文总结不同规格管点的特征,为了管点的三维自动建模,本文将管点分为两类:一类是不含附属结构的普通连接点,如拐点、三通、四通等;另一类是含有附属结构的管点,如消防栓、人孔井、排污阀、路灯、操作柜等。

不含附属结构的管点为管线段之间的连接点,因此管点可以看做是和其连接的各个管线方向上一定长度的圆柱求交所产生的几何体,为了防止裂缝的出现在各个管线放线的终点添加球体求交之后的最终结果。具体步骤如下:①获取该管点连接的所有管线,并计算出各个管线的向量。②从该管点开始沿各个管线方向一定长度(本文为2倍管径)计算出创建三维管点所需要延伸长度之后的点坐标。③利用管线自动生成算法生成相应的管线。④在自动生成管线的两端分别生成半径等于管径的球体,将所有几何体求交得出管点三维模型。

含附属结构的管点本文采用预设管点模型库方式进行建模,图3分别展示了管线自动建模效果、管点(三通)自动建模效果、管点管线自动渲染效果。

图3 管网模型效果图

4 实验结果及分析

基于本文的研究,开发了一套管网二三维管理系统,该系统在二维管网信息系统的基础上利用三维可视化技术,融合高清航摄影像DOM、数字地面高程DEM、精细三维模型Model,旨在以直观地、投入式地、可互动地、全方位地展示管网建设现状,利用科学手段将地下管网实景通过软件的方式真实地呈现出来,为管网规划以及市政管理提供辅助决策功能,减少因信息交互不及时造成的损失。

为了验证本文算法的可行性,本文选取西京医院做测试。西京医院数据包含了地上建筑和地形数据DEM、DOM及地下管线数据。其中医院管线长度105.428 km,管线点个数12 053个。采集纹理数据量30 GB,5 669幅真实照片,建立各类地上精细模型562个。图4为西京医院管网渲染图。

图4 地面透明后地下管网渲染图

本文测试用机为普通PC用机,其配置参数为:CPU为Intel(R)Core(TM)i5-3470,4核3.20 GHz;内存为8 GB;显卡为NVIDIA GeForce GTX 960;显存为2 GB;操作系统为WIN7 64位操作系统。

三维应用程序的效率可以用帧率来衡量,帧率表示系统在处理场景时每秒钟可绘制的次数。帧率越高说明绘制效果更流畅。一般来说三维应用帧率在25左右是可以接受的。由于本文的算法设计在场景移动时会实时生成新的管线和管点模型,故场景移动和静止时的帧率略有不同,本文将同时测试场景移动和静止时的帧率。三维数字城市中有的地方建筑物密集,有的地方建筑物稀少,在相同的条件下2个区域的渲染压力也是截然不同的。本文在进行实验的时候将分为3种区域进行测试:模型密集区域、模型中等区域、模型稀疏区域。其中每帧渲染面片数超过400万的划为密集区域,200万到300万的划为中等区域。低于200万的划为稀疏区域。最终测试结果如表3所示,表3中所列帧率为每种区域及状态下取样20次求取的平均帧率。

表3 西京医院数据帧率统计

从表3中可以看出,系统的帧率在较为稀疏的地方渲染没有任何压力,任何情况下都可以保持在50以上帧率。在中等密集的地方帧率降到30以上,渲染也没有压力。当在城市三维模型较为密集的地方,系统在场景静止和移动的时候帧率的差距开始拉大,当场景在移动的时候帧率平均比静止的降低了4,但是帧率仍能保持在25帧以上。通过上述测试可以看出本文提出的算法可以很好地实时生成和渲染地下管网,使系统维持在25帧率以上。

5 结束语

本文考虑了地下管网的特点,提出了一套更加适应地下管网的数据索引方法和渲染调度算法,可以更高效地对地下管网数据实现可视化,并且不用提前生成地下管网三维模型。通过实验证明本文提出的算法是可行高效的调度渲染方法。

但是由于本文实时生成算法需要大量的计算,尤其是在场景移动时,巨大的计算量导致场景帧率下降。下一步的研究方向应该是如何优化自动化生成算法,降低计算量。或原本通过CPU实现的算法,改为通过GPU编程重新实现,达到更好的可视化效果。

猜你喜欢
管网管线权重
权重常思“浮名轻”
高级别管线钢X80的生产实践
管网独立是妥协还是改革
从管网独立看国企改革
管网改革虚实
为党督政勤履职 代民行权重担当
织起一张共管网
浅谈通信管线工程建设
浅谈通信管线工程建设
基于局部权重k-近质心近邻算法