朱金良 陈大东
摘 要: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的水务管理信息集成系统》的部分技术撰写。