朱金良 陳大東
摘 要:SharpMap是一個基于.NET 2.0使用C#開發(fā)的Map渲染類庫,可以渲染ESRI Shape、PostGIS、MS SQL等格式的GIS數(shù)據(jù)。利用開源GIS作為開發(fā)平臺,這樣不僅成本低廉,還可以開發(fā)具有完全版權且自主創(chuàng)新的軟件產(chǎn)品。該文介紹了SharpMap在供水管網(wǎng)調(diào)度系統(tǒng)中的應用,對SharpMap的源代碼進行消化開發(fā),進而開發(fā)自來水管網(wǎng)GIS。重點論述了SharpMap圖層方法的應用。
關鍵詞:SharpMap 開源GIS 供水管網(wǎng)調(diào)度系統(tǒng)
中圖分類號:TP27 文獻標識碼:A 文章編號:1674-098X(2015)01(a)-0063-02
近年來GIS被引入到供水行業(yè),以GIS和SCADA為核心的供水管網(wǎng)調(diào)度系統(tǒng)在自來水公司信息化建設中很受歡迎。
大部分供水管網(wǎng)GIS的開發(fā)平臺為ArcGIS和MapGIS,這些開發(fā)平臺價格高,中小型供水企業(yè)接受不了。雖然這些平臺功能強而全,可中小型供水企業(yè)不一定全用得上,但是卻沒有一些系統(tǒng)(如與SCADA、EpaNet)的集成功能,這些平臺不是開源的,無法進行二次開發(fā)。利用開源GIS進行二次開發(fā)可以與其他系統(tǒng)充分進行資源共享,開發(fā)出技術含量高的軟件。
1 SharpMap簡介
利用開源GIS作為開發(fā)平臺,這樣不僅成本低廉,還可以開發(fā)具有完全版權且自主創(chuàng)新的軟件產(chǎn)品。SharpMap是一個基于.NET 2.0使用C#開發(fā)的Map渲染類庫,可以渲染ESRI Shape、PostGIS、MS SQL等格式的GIS數(shù)據(jù)。
選擇SharpMap作為開發(fā)平臺具以下優(yōu)點:
(1)占用資源較少,響應比較快。
(2)它是基于.NET 2.0環(huán)境開發(fā)的,對于.NET環(huán)境支持較好,可利用資源多。
(3)使用簡單,便于推廣。只要在.NET項目中引用相應的dll文件即可,沒有復雜的安裝步驟。
2 供水管網(wǎng)的分層管理
供水管網(wǎng)調(diào)度系統(tǒng)分為幾層:管道層、閥門層、水表層、流量監(jiān)控層、壓力監(jiān)控層、節(jié)點層等,采用分層管理,方便對管道類型及附件(如閥門等)進行分類管理,在顯示時可以單獨顯示,一目了然,便于突出重點。也可以疊加顯示和綜合考慮。以下是供水管網(wǎng)調(diào)度系統(tǒng)的界面,各個層可以分別顯示,也可以重疊顯示。
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);
以上代碼創(chuàng)建一個標注圖層lLayer,然后指定標注圖層的數(shù)據(jù)源,也就是指定對哪一個矢量圖層做標注,再指定標注字段即可。
4 供水管網(wǎng)圖層的具體實現(xiàn)
下面以壓力監(jiān)控層為例說明SharpMap
//Create WMS layers
var layerSCADAPress = new OpenLayers.Layer.WMS(
“SCADA壓力監(jiān)控”,
WMSURL,
{
version: WMSVERSION,
layers: ‘SCADA壓力監(jiān)控,
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 結語
該系統(tǒng)對SharpMap的源代碼進行開發(fā),使之成為自來水管網(wǎng)GIS的二次開發(fā)平臺,進而開發(fā)自來水管網(wǎng)GIS。該文分析了SHarpMAP的圖層技術,并給出了參照程序代碼。對GIS技術的研究和應用有一定作用。
參考文獻
[1] 伊學農(nóng).給水排水管網(wǎng)工程設計優(yōu)化與運行管理[M].北京:化學工業(yè)出版社,2007.
[2] CJJ207-2013城鎮(zhèn)供水管網(wǎng)運行、維護及安全技術規(guī)程[S].中華人民共和國住房和城鄉(xiāng)建設部.
注釋:
①本文根據(jù)2013年度福建水利科學技術獎二等獎項目《基于SharpMap的水務管理信息集成系統(tǒng)》的部分技術撰寫。