SharpMap在供水管网调度系统分层处理中的应用

2015-03-26 11:56朱金良陈大东
科技创新导报 2015年1期

朱金良 陈大东

摘 要:SharpMap是一个基于.NET 2.0使用C#开发的Map渲染类库,可以渲染ESRI Shape、PostGIS、MS SQL等格式的GIS数据。利用开源GIS作为开发平台,这样不仅成本低廉,还可以开发具有完全版权且自主创新的软件产品。该文介绍了SharpMap在供水管网调度系统中的应用,对SharpMap的源代码进行消化开发,进而开发自来水管网GIS。重点论述了SharpMap图层方法的应用。

关键词:SharpMap 开源GIS 供水管网调度系统

中图分类号:TP27 文献标识码:A 文章编号:1674-098X(2015)01(a)-0063-02

近年来GIS被引入到供水行业,以GIS和SCADA为核心的供水管网调度系统在自来水公司信息化建设中很受欢迎。

大部分供水管网GIS的开发平台为ArcGIS和MapGIS,这些开发平台价格高,中小型供水企业接受不了。虽然这些平台功能强而全,可中小型供水企业不一定全用得上,但是却没有一些系统(如与SCADA、EpaNet)的集成功能,这些平台不是开源的,无法进行二次开发。利用开源GIS进行二次开发可以与其他系统充分进行资源共享,开发出技术含量高的软件。

1 SharpMap简介

利用开源GIS作为开发平台,这样不仅成本低廉,还可以开发具有完全版权且自主创新的软件产品。SharpMap是一个基于.NET 2.0使用C#开发的Map渲染类库,可以渲染ESRI Shape、PostGIS、MS SQL等格式的GIS数据。

选择SharpMap作为开发平台具以下优点:

(1)占用资源较少,响应比较快。

(2)它是基于.NET 2.0环境开发的,对于.NET环境支持较好,可利用资源多。

(3)使用简单,便于推广。只要在.NET项目中引用相应的dll文件即可,没有复杂的安装步骤。

2 供水管网的分层管理

供水管网调度系统分为几层:管道层、阀门层、水表层、流量监控层、压力监控层、节点层等,采用分层管理,方便对管道类型及附件(如阀门等)进行分类管理,在显示时可以单独显示,一目了然,便于突出重点。也可以叠加显示和综合考虑。以下是供水管网调度系统的界面,各个层可以分别显示,也可以重叠显示。

3 SharpMap图层对象概述

SharpMAP中所有图层(Layer)都是从ILayer接口派生的,采用了面向接口的编程思想。虽然各种不同的图层,如矢量图层和标注图层相差很大,但它们都有共同的特点:图层的名称、最大最小可视范围、是否渲染等,而且图层都使用Render方法来渲染自己。

与一般GIS软件不同,SharpMap的图层标注是以一类特殊的图层(LabelLayer)而存在的。

SharpMap.Layers.LabelLayer lLayer = new SharpMap.Layers.Label

Layer("labels");

lLayer.DataSource = vLayer.DataSource;

lLayer.Enabled = true;

lLayer.LabelColumn = "name";

mapBox1.Map.Layers.Add(lLayer);

以上代碼创建一个标注图层lLayer,然后指定标注图层的数据源,也就是指定对哪一个矢量图层做标注,再指定标注字段即可。

4 供水管网图层的具体实现

下面以压力监控层为例说明SharpMap

//Create WMS layers

var layerSCADAPress = new OpenLayers.Layer.WMS(

“SCADA压力监控”,

WMSURL,

{

version: WMSVERSION,

layers: ‘SCADA压力监控,

transparent: 'TRUE'

},

{

isBaseLayer: false,

singleTile: true ,

projection: CRS,

units: CRSUNITS,

visibility: false

}

);

//Create a vector layer

layerVectors=new OpenLayers.Layer.Vector(

"Vectors",

{

displayInLayerSwitcher: false

}

);

//Create styles of the vector layer

layer_style_warning=Open Layers.Util.extend({},OpenLayers.Feature.Vector.style[‘default]);

layer_style_warning.fillOpacity=1;

layer_style_warning.graphicOpacity = 1;

layer_style_warning.strokeColor = “red”;

layer_style_warning.fillColor = “red”;

layer_style_warning.graphicName = “star”;

layer_style_warning.pointRadius =10;

layer_style_warning.strokeWidth = 5;

layer_style_warning.rotation = 45;

layer_style_warning.strokeLinecap = “butt”;

//Create stylemap of sketch

var sketchSymbolizers = {

“Point”: {

pointRadius: 4,

graphicName: “square”,

fillColor: “white”,

fillOpacity: 1,

strokeWidth: 1,

strokeOpacity: 1,

strokeColor: “#333333”

},

“Line”: {

strokeWidth: 3,

strokeOpacity: 1,

strokeColor: “#666666”,

strokeDashstyle: “dash”

},

“Polygon”: {

strokeWidth: 2,

strokeOpacity: 1,

strokeColor: “#666666”,

fillColor: “white”,

fillOpacity: 0.3

}

};

var style = new OpenLayers.Style();

style.addRules([

new OpenLayers.Rule({symbolizer:sketchSymbolizers})

]);

var styleMap=new OpenLayers.StyleMap({“default”:style});

5 結语

该系统对SharpMap的源代码进行开发,使之成为自来水管网GIS的二次开发平台,进而开发自来水管网GIS。该文分析了SHarpMAP的图层技术,并给出了参照程序代码。对GIS技术的研究和应用有一定作用。

参考文献

[1] 伊学农.给水排水管网工程设计优化与运行管理[M].北京:化学工业出版社,2007.

[2] CJJ207-2013城镇供水管网运行、维护及安全技术规程[S].中华人民共和国住房和城乡建设部.

注释:

①本文根据2013年度福建水利科学技术奖二等奖项目《基于SharpMap的水务管理信息集成系统》的部分技术撰写。