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