SuperMap iObject入门开发系列之四管线长度统计

本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢。

上一期文章主要写了管线系统的标注功能,结合代码简单讲解了一些超图.NET开发框架气泡Bubble的使用方法,这期的文章介绍一下管线长度统计功能,效果如下图:

功能介绍:通过指定的管线图层获取不同的管线类型,针对不同类型对其进行长度统计,统计可以设置最大最小范围,并提供导出excel表格功能。功能内容并不复杂,主要是要对管线数据进行规范整理,统一数据标准,首先必不可少的是一个分类的字段,在本票的代码里对应的数据字段为Note,存储的字段信息值为上图的污水管_CW,污水管_ZNW等分类名称,其次统计长度用的字段是线要素矢量数据集自带的SmLength字段。下面进行功能代码分块讲解:

具体功能实现思路:

(1)加载管线图层时,获取管线分类字段进行管线类型分类显示,添加到复选框列表CheckListBox中,如下图所示

首先在管线图层的ComboBox的SelectedIndexChanged事件里获取当前的管线矢量数据集DatasetVector,然后设置QueryParameter查询参数进行唯一值查询,主要是设置查询结果字段集合ResultFields这个属性,设置为”DISTINCT” + 字段名,即可获得唯一值记录集合,再将管线分类的唯一值添加到下面的复选框列表中。

核心代码如下:

(2)上面讲了获取唯一值功能,这里第二部分再讲解一下最值的获取,加载管线图层时,获取默认的长度范围最大值功能,如下图所示:

这里的获取方法,首先获取全部管线的长度信息,为了防止获取过多,首先用了上一步的唯一值获取方法减少重复的长度,然后将唯一值长度存储在double类型的数组中,再通过double数组的max ()方法返回最大值。在后来重新整理代码的过程中,发现有另一个方法更简单,效率也更高,这里分享一下,通过矢量数据集的DatasetVector.Statistic方法进行统计,第一个参数为String类型的字段名,第二个为参数为统计函数,这里用的是Max类型,即可获取该字段的最大值。StatisticMode 枚举提供了6种统计功能,分别为统计字段的最大值(Max),最小值(Min),平均值(Average),总和(Sum),标准差(StdDeviation),以及方差(Variance)。

核心代码如下:

(3)最后一块是统计功能,这个功能是统计用户设定的长度范围内,该类管线的个数和总长度,然后加载到datagirdview表格中。

这里统计个数功能主要通过矢量数据集的Query方法,通过设置查询过滤器SQL查询语句filter进行查询,例如上图第一行的查询语句为 “Note = ‘污水管_CW’ and SmLength >0 and SmLength <48″。最后返回的结果记录集,通过记录集的RecordCount属性即可得到管线类型【污水管_CW】在0到48米范围内的个数。统计总长度的功能,一开始也走了一些弯路,后来整理代码时发现,Recordset也有Statistic方法,通过设置StatisticMode为Sum进行统计即可。

核心代码如下:

总结:在开发完成后,对自己的代码进行整理和总结反思,往往能获得一些新东西,优化代码提高效率。这期文章写的是管线长度统计的功能,涉及到统计功能在其他项目的查询统计开发中也可能会经常用到,例如获取字段唯一值,最值,均值,求和统计个数的方法,希望可以帮助到有需要的朋友。

好友“托马斯”技术交流QQ:519926200

作者: GIS之家

GIS之家微信号:gishome;GIS之家拥有自己的GIS开发团队,均是高校GIS研究生,具备丰富的webgis开发项目工作经验,专注以及热爱研究webgis技术的团队

发表评论

电子邮件地址不会被公开。 必填项已用*标注