基于ArcEngine与GDI+的管线横断面分析程序开发

2018-05-04 07:25:38于中伟
城市勘测 2018年2期
关键词:横断面交点绘制

于中伟

(沈阳市勘察测绘研究院,辽宁 沈阳 110004)

1 引 言

地理信息系统以其强大的数据管理和空间分析能力,在城市管网信息化建设中得到广泛应用[1]。目前,北京、太原等城市相继建立了城市地下管线信息系统[2],随着管线信息化建设的推进,诸多基于GIS的管线信息系统也应运而生,如王军等提出的基于ArcEngine的管线信息系统[3],李花提出的基于Arcengine的供水管网三维可视化系统[4],李姗姗提出的基于GIS的地下管线查询与应急管理系统[5],这些系统均实现了地下管网的信息查询与分析,然而多数系统在横截面信息查询与可视化方面比较粗糙,难以与管网业务模型相结合,属性信息不专业,尤其是单纯运用ArcEngine的二次开发在可视化方面受限,在纵横断面分析中略显不足[6]。为了解决以上问题,ArcEngine组件需要与其他绘图方法相结合,才能实现更精准的纵横断面分析。本文在C#语言开发环境下,基于ArcEngine组件和GDI+,实现了城市地下管网的横断面分析,旨在提高管线信息系统横断面分析的科学性和专业性,为管线管理提供一种科学有效的分析方法。

2 数据结构与算法设计

2.1 横断面分析算法

横断面分析是利用一条横断面线确定横断面,该面与多条地下管线相交并产生交点,通过该断面分析地下管线分布状况,进而获取管线断面的尺寸、高程、管线的间距等数据[8]。如图1所示,展示了横断面分析算法图,其过程是先绘制断面线,然后依次与相交的管线确定相交关系,之后进行断面分析计算,并调用相交管线的属性表,绘制横断面图。

图1 横断面分析算法图

2.2 横断面图绘制

根据2.1所描述的横断面算法与已有数据,在ArcEngine组件中绘制横断面图需要解决三个问题,第一是绘制断面线并求出与其相交的管线,提取属性信息;第二是计算管线间距、地面高程和管线高程;第三是利用GDI+绘制管线横断面图。

(1)求取断面相交集

在ArcEngine中,绘制断面线绘制可采用IPolyLine接口实现,通过ITopologicalOperator拓扑操作符,实现其与IPolyLine对象的交点求取,再利用这些交点,实现各种不同类型管线属性信息的提取,这些属性包括表1所示的种类、埋深等。需要指出的是,地面高程、管线高程、间距三个属性不是直接获取的,而是通过计算获得。

(2)属性计算

在ArcEngine组件技术编程中,地面高程、管线高程、间距的计算过程是,首先建立一个IFeature对象与IPolyLine对象,其中IPolyLine对象表示断面线,由鼠标点击拾取,IFeature对象用于存储与IPolyLine对象相交的所有管线对象,然后获得各交点坐标集合(xj,yj),据此搜索数据库,获得各类管线的起点与终点,并获取对应的起点高程(Hq)和终点高程(Hz)以及起始管线(顶或底)高程(Gq)和终止管线(顶或底)高程(GZ)。根据内插原理[9],由(xj,yj)、(xq,yq)、(xz,yz)、Hq、HzGq、GZ,利用式(1)分别计算地面高程Hj和管线高程Gj。最后,根据IPolyLine对象的起终点坐标及坐标集合(xj,yj),根据坐标反算原理计算管线间距。

(1)

(3)GDI+横面图绘制

管线横断面图绘制关键点是坐标轴绘制与管线截面图绘制。由于管线的埋深一般小于管线间距,如果绘制时横、纵轴采用相同比例,会形成狭长带状图面,视觉效果较差。因此,横断面图绘制时必须设计纵横坐标不同比例,增强视觉效果。管线的截面绘制同样重要,由于在ArcEngine中交点是以坐标串形式存在的,因此管线的截面必须以此坐标为几何中心,应用GDI+函数绘制出规则几何图形,该图形可依据实际管径绘制,为了便于可视化,也可将管径放大绘制。

赫芬顿邮报采用A/B测试,确立网站头条新闻标题的写法。读者的请求达到服务器后,服务器会通过自动分流技术,为不同的用户分配不同的版本。同一新闻内容的报道,读者会被随机分配到不同的标题版本,服务器会记录和收集读者的阅读行为数据,阅读行为数据优异的标题将成为这条新闻的最终标题。“进行A/B测试时,测试用户的选取是十分关键的环节,为保证试验结果的准确性,一是要保证一定的样本数量,二是要考虑用户细分”。[8]

基于ArcEngine的管线系统最大优点是管线的属性保存在数据库中,在绘图时,这些属性也相应绘制成图表。在管线种类、埋深、管径、地面高程、管线高程、间距六类属性中,后三者为隐含属性,需利用式(1)计算后求取,因此ArcEngine的属性表不能直接导出表格,需要对该表重新读入,加入地面高程、管线高程、间距属性信息,形成地下管线截面属性表。

3 绘图实现

在Visual Studio集成开发环境中,选择C#作为开发语言,基于ArcEngine组件进行横断面图绘制。首先在某市实验区数据手动创建一个IPolyLine对象,利用ITopologicalOperator的Intersect方法接收交点点集,根据点集提取管线属性信息,点集获取的部分代码如下所示:

ITopologicalOperator Op = Line1 as ITopologicalOperator; // Line1为断面线

IGeometry geometry = Op.Intersect(pLine2 ,esriGeometryDimension.esriGeometry0Dimension); //获取交点集合图集,pLine2为相交管线

if (!geometry.IsEmpty)

{

IPoint Point = pCollection.get_Point(0);

} //交点图集转化为点集

由于管线属性信息一部分存在于Geodatabase中,一部分存在于计算结果中,因此需要一个数据结构接收所有属性信息,并以表格的形式绘制于绘图程序界面中。本研究中,定义了一个接收管线属性信息类,其声明如下所示:

Class AttributeReceive

{

Private string ID;

Private double DEPTH;

Private double DIRAMITER;

Private double ELEVATION;

Private double pipe_ELEVATION;

Private double DISTANCE;

};

考虑到区分各类管线,运用GDI+绘制管线横断面图时将管线截面绘制为圆形、方形等不同形状,同时依据管径比例进行了夸张放大。为了进一步增强识图,各管线以不同颜色表示,绘制管线点到起算高程面的连线,属性表格文字颜色与管线截面颜色保持一致,并且均与地图上管线颜色相同,这样各类管线被明显区分出来,识图效果良好,如图2所示。

4 结 论

基于ArcEngine与GDI+,本文实现了城市地下管线横断面分析算法,该方法最大特点是与Esri的Geodatabase数据相结合,为基于GIS的管线系统提供了一种精细的管线横断面分析方法。通过开发实验可知,本文提出的横断面图绘图方法具有信息专业、区分度好、属性计算正确率高的优点,同时,该方法所绘的断面图,能够反映各管线的绝对空间关系和相对空间关系,易于与管线业务模型结合,分析出更多专业信息,为管线信息化建设和管理提供一种可靠方法。然而,由于客观世界管线交错复杂,单一靠横断面分析有时难以满足所有分析需求,因此该法尚需改进,例如结合纵断面对管线进行综合分析。

图2横断面分析图

[1] HJ Scholten,J Stillwell. Geographical information systems for urban and regional planning[M]. Netherlands:Springer Science & Business Media,2013.

[2] 路玲玲,吴晓明,任杰. 城市地下管网信息管理问题研究[J]. 地域研究与开发,2008,27(2):47~50.

[3] 王军,戴建祥,姜芸. 基于ArcEngine的管线系统的实现[J]. 测绘工程,2007,16(3):63~66.

[4] 李花. 基于ArcEngine的供水管网三维模块的开发研究[J]. 城市勘测,2007(4):19~22.

[5] 李姗姗. 基于GIS的地下管线查询与应急管理系统的研究[D]. 南京:南京农业大学,2009.

[6] 谢瀚,黄泽纯,汤家法. 利用ArcEngine和C#实现地下管线断面分析[J]. 地理空间信息,2014,12(4):98~102.

[7] CJJ 61-2003. 城市地下管线探测技术规程[S] . 北京:中国建筑工业出版社,2003.

[8] 李万辉,杨晓丽. 基于GIS的城市地下管线横纵断面分析[J]. 测绘与空间地理信息,2010(3):58~62.

[9] 张旭. 基于ArcEngine的城市地下管线信息系统的设计与实现[D]. 济南:山东大学,2012.

猜你喜欢
横断面交点绘制
Art on coffee cups
城市道路横断面设计研究
阅读理解
放学后
童话世界(2018年17期)2018-07-30 01:52:02
借助函数图像讨论含参数方程解的情况
试析高中数学中椭圆与双曲线交点的问题
青年时代(2017年3期)2017-02-17 01:40:47
广州市健康体检人群种植修复情况的横断面研究
2014年某院医院感染横断面调查
中医院医院感染横断面调查分析
在转变中绘制新蓝图
中国卫生(2014年9期)2014-11-12 13:02:00