周运彬,郑文青,郑睿博,王亚巍
(1.中煤航测遥感集团有限公司,陕西 西安 710199; 2.陕西省地理空间信息工程技术研究中心,陕西 西安 710199)
地下管线是一个城市重要的基础设施,是保障城市正常运行的“生命线”。近年来,随着城市快速发展,地下管线管理水平不高问题凸显,一些城市发生大雨内涝、管线泄漏爆炸、路面塌陷等事件,严重影响了人民群众生命财产安全和城市运行秩序[1]。为此,建立地下管线综合管理信息系统势在必行。
鉴于传统的二维管线在一定程度上限制了信息的表达,而管线三维模型能直观地描述管线的三维特征及管线间的空间关系,能真实地反映地下管线的空间分布状况[2],所以建立三维管线管理系统或者二三维一体化管线管理系统已成为当前研究的热点。无论是三维管线管理系统还是二三维一体化管线管理系统,创建管线三维模型都是建立系统过程中必不可少的一步。在查阅了国内外现有的一些研究成果基础上[2~6],本文提出了一种基于SuperMap平台批量创建管线三维模型的方法,使用该方法,可以大大减少人工的参与,高效创建管线三维模型,节省了成本,提高了效率。
基于SuperMap平台批量创建管线三维模型的流程,如图1所示。
管线由管线段和管线点两大类组成,管线段分为方形管和圆形管,管线点分为特征点和附属设施,其中特征点包括弯头、直通、三通、四通、五通、多通、变径、盖堵、管帽等,附属设施包括阀门、水表、消防栓、控制柜、变压器、分线箱等。
图1 基于SuperMap平台批量创建管线三维模型的流程
针对三维管线场景中的不同元素,可采用不同方式实现快速构建三维管线场景。通常采用线型符号构建三维管线,自适应管点符号构建三维管点,而部分特殊特征点和附属设施采用模型符号展示。创建这三类符号的步骤参见超图相关技术文档,本文不再赘述。最终得到如图2和图3所示的线型符号库和点符号库。
图2 三维管线符号库
图3 三维管点符号库
为了保证在生成管线三维模型的过程中不会出现异常,数据检查将对管线数据自动生成三维模型数据产生影响的各个方面进行检查。数据检查的内容包括:检查管点数据是否包括TYPE、EXPNO、FEATURE、SUBSID、X、Y、SELEV等字段,管线数据是否包括TYPE、S_POINT、E_POINT、S_DEEP、E_DEEP、DSIZE等字段;检查上述字段值是否缺失及其值填写是否正确;检查是否存在点号缺失的现象,即管线数据的S_POINT、E_POINT字段中存在该点号,但管点数据EXPNO字段中不存在该点号。以上各字段代表的含义如表1和表2所示。
部分管点字段及其含义 表1
部分管线字段及其含义 表2
在三维管线场景中,包含地面精细建模数据、DEM和DOM构建的地球表面模型数据、三维管线模型数据,这三类数据各成体系,其各自的内符合精度较好,但与另外两类数据却相互矛盾。尤其是管线数据,若不进行适当的处理,本来埋藏于地下,由于另外两类数据精度较低,往往会出露到地面以上,对管线综合管理系统造成影响。因此,需要对管线数据做如下处理。
(1)首先,把管点数据(名称为子类代码+Point)和管线数据(子类代码+Line)复制一份,作为临时数据,管点临时数据名称为子类代码+Point_Tmp,管线临时数据名称为子类代码+Line_Tmp),在后续的处理中以临时数据为操作对象,以保证不会对原始数据造成破坏。
(2)然后,对临时数据添加必要的字段。管点临时数据增加PtID、SymbolID、PtZ、ScaleX、ScaleY、SacleZ、RotateX、RotateY、RotateZ、PtLon、PtLat字段;管线临时数据增加LnID、SymbolID、StID、EndID、StZ、EndZ、ScaleX、ScaleY、LnWidth、LnCentLon、LnCentLat字段。以上各字段代表的含义如表3和表4所示。
管点数据增加的字段及其含义 表3
管线数据增加的字段及其含义 表4
(3)最后,对管点、管线临时数据进行处理,处理的过程主要包括:
①将管点X,Y坐标转换为经纬度坐标,给PtLon、PtLat字段赋值;
②通过管点的经纬度PtLon、PtLat,结合场景中的DEM,获得管点的高程值,给PtZ字段赋值;
③根据管点地面高程、管线起点埋深、管线终点埋深、管径,计算管线起终点管中心的高程,给管线的StZ、EndZ字段赋值;
④根据管线的StZ、EndZ更新管线要素的几何信息;
⑤根据管点X,Y坐标和高程更新管点要素的几何信息;
⑥根据管点的特征、附属设施获得对应的管点符号编码,给管点SymbolID赋值;
⑦根据管点的地面高程,管径,管点的特征、附属设施,计算管点Z方向的缩放,给ScaleZ字段赋值;
⑧根据管线类型,管径(断面尺寸)获得对应的管线符号编码,给管线SymbolID赋值;
⑨根据管径(断面尺寸),计算管线X方向和Y方向的缩放,给ScaleX、ScaleY字段赋值;
⑩根据管线的几何信息,计算管线中心点的经纬度坐标,给LnCentLon、LnCentLat字段赋值。
爆管分析、关阀分析、最佳路径分析、单要素追踪分析、关键设施分析等网络分析是地下管线综合管理信息系统中常用的分析功能。使用这些三维网络分析必须首先构建三维网络数据集,三维网络数据集是进行三维网络分析的数据基础[7]。另外,要使用自适应管点符号,也必须首先构建三维网络数据集。因此,我们需要构建三维网络数据集。利用2.3节中处理后的管点临时数据集和管线临时数据集,来构建我们需要的三维网络数据集。
在SuperMap中专题地图实质上是地图图层的符号化显示,即用各种图形渲染风格(大小,颜色,线型,填充等)来图形化地表现要素的某方面特征[8]。专题制图是对数据进行分析和可视化的一种很有效的方式。三维自定义专题图允许用户为图层指定若干字段,利用图层中每个对象的字段值表示这个对象的显示特征,可设置其模型符号、旋转、缩放、颜色等属性。基于三维网络数据集,创建管线三维自定义专题图,然后将其保存为管线场景。创建管线三维自定义专题图主要代码如下:
///
/// 创建三维管线专题图
///
/// 三维网络数据集
/// 三维场景
private void Add3DPipeLayer(Dataset pDatasetNet,Scene pipeScene)
{
Theme3DCustom theme3DPoint = new Theme3DCustom();
theme3DPoint.MarkerSymbolIDExpression = "SYMBOLID";
theme3DPoint.Marker3DRotateXExpression = "ROTATEX";
theme3DPoint.Marker3DRotateYExpression = "ROTATEY";
theme3DPoint.Marker3DRotateZExpression = "ROTATEZ";
theme3DPoint.Marker3DScaleXExpression = "SCALEX";
theme3DPoint.Marker3DScaleYExpression = "SCALEY";
theme3DPoint.Marker3DScaleZExpression = "SCALEZ";
Theme3DCustom theme3DLine = new Theme3DCustom();
theme3DLine.LineSymbolIDExpression = "SYMBOLID";
theme3DLine.LineWidthExpression = "LnWidth";
//添加图层
Layer3DDataset lnLayer3D = pipeScene.Layers.Add(pDatasetNet,theme3DLine,true);
Layer3DDataset ptLayer3D = pipeScene.Layers.Add((pDatasetNet as DatasetVector).ChildDataset,theme3DPoint,true);
Layer3DSettingVector lnLayer3DSettingVector = lnLayer3D.AdditionalSetting as Layer3DSettingVector;
lnLayer3DSettingVector.SymbolScaleXField = "ScaleX";
lnLayer3DSettingVector.SymbolScaleYField = "ScaleY";
lnLayer3DSettingVector.Style.AltitudeMode = AltitudeMode.Absolute;
lnLayer3D.AdditionalSetting = lnLayer3DSettingVector;
Layer3DSettingVector ptLayer3DSettingVector = ptLayer3D.AdditionalSetting as Layer3DSettingVector;
ptLayer3DSettingVector.Style.AltitudeMode = AltitudeMode.Absolute;
lnLayer3D.UpdateData();
ptLayer3D.UpdateData();
}
当应用程序处理的地理数据量比较庞大时,不仅操作速度缓慢,同时也非常耗机器资源。为了提高整体操作性能,在使用前先对三维数据进行预处理,预处理的本质是为地形、影像、模型数据创建分层缓存,能够极大地提升数据显示和浏览的速度。
生成三维场景缓存是指基于整个场景生成缓存,通过一次操作,即可将已加载到场景中的不同类型的数据生成对应类型的缓存。通过对整个场景生成缓存,能极大提高整个场景的显示和浏览速度。
依据第2节介绍的创建管线三维模型方法,笔者在Microsoft Visual Studio 2013开发环境下,采用C#语言开发了煤航管线三维模型生成工具,工具运行界面如图4所示。通过该工具生成的三维管线模型,已成功应用于笔者参与的多个工程项目,取得了较好的生产效益。生成的管线三维模型加载到系统中的效果如图5所示。
图4 管线三维模型批量生成工具 图5 管线三维模型效果图
本文阐述了基于SuperMap平台批量创建管线三维模型的方法,并使用C#语言实现了该方法。使用该方法可以快速地基于管线二维数据创建管线三维模型数据,解决了管线综合管理信息系统所需的管线三维模型数据问题。但是该方法还存在一些问题,比如某些城市DEM数据精度很差,与管线数据叠加时,管线及其特征点、附属设施会裸露在地面上,为了实现较好的视觉效果,需要对个别数据进行手动处理,以使其贴合到地面或显示到地面下。