王瀟媛等
摘要:針對(duì)當(dāng)前地下水污染調(diào)查信息記錄過(guò)程中存在的數(shù)據(jù)錄入慢、數(shù)據(jù)共享難等問(wèn)題,提出基于B/S模式的地下水污染調(diào)查系統(tǒng)的設(shè)計(jì)思路,并闡述其具體實(shí)現(xiàn)過(guò)程。系統(tǒng)設(shè)計(jì)實(shí)驗(yàn)采用.Net Framework作為開發(fā)平臺(tái),C#作為開發(fā)語(yǔ)言,SQL Server作為數(shù)據(jù)庫(kù),同時(shí)整合了Web GIS技術(shù),設(shè)計(jì)了地下水水點(diǎn)信息的數(shù)據(jù)錄入、查詢、分析、制圖、評(píng)價(jià)和報(bào)表等功能。通過(guò)實(shí)際使用該系統(tǒng)實(shí)現(xiàn)了預(yù)期目標(biāo)。
關(guān)鍵詞:地下水污染調(diào)查;信息系統(tǒng)設(shè)計(jì);.Net;數(shù)據(jù)庫(kù)設(shè)計(jì);GIS
DOIDOI:10.11907/rjdk.143710
中圖分類號(hào):TP319
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):16727800(2015)001008004
0 引言
隨著現(xiàn)代工農(nóng)業(yè)的發(fā)展和人類活動(dòng)的頻繁影響,不同種類的污染物通過(guò)各種渠道進(jìn)入地下水系統(tǒng),導(dǎo)致地下水水質(zhì)下降,特別在一些大中型城市,污染源直接威脅人們的正常生活[1]。與此同時(shí),人類對(duì)水資源的需求量日趨增長(zhǎng)。當(dāng)前,地下水源已占全國(guó)總給水量的20%,西北地區(qū)和華北平原某些相對(duì)缺水的城市,地下水開發(fā)利用比例達(dá)到72%和66%[2]。在許多城市,地下水幾乎是唯一的供水水源。
地下水污染調(diào)查評(píng)價(jià)是地下水污染防治的基礎(chǔ)[3],以準(zhǔn)確高效掌握地下水水質(zhì)和污染情況。本文設(shè)計(jì)了一個(gè)基于.Net的地下水污染調(diào)查信息系統(tǒng),利用現(xiàn)代信息技術(shù),為科研人員進(jìn)行地下水污染調(diào)查研究提供支撐。
1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
1.1 系統(tǒng)設(shè)計(jì)目標(biāo)
系統(tǒng)應(yīng)用GIS技術(shù)和空間數(shù)據(jù)處理技術(shù),建立一個(gè)基于.Net Framework框架的B/S 模式結(jié)構(gòu)的Web應(yīng)用程序[4]。系統(tǒng)在設(shè)計(jì)和開發(fā)過(guò)程中遵循軟件工程“時(shí)效性、易用性、可靠性、擴(kuò)展性、開發(fā)性”相統(tǒng)一的原則[5],采用三層架構(gòu)作為軟件設(shè)計(jì)框架,為系統(tǒng)功能擴(kuò)展奠定基礎(chǔ)。具體設(shè)計(jì)路線如圖1所示。
圖1 地下水污染調(diào)查信息系統(tǒng)研究技術(shù)路線
1.2 系統(tǒng)開發(fā)技術(shù)
1.2.1 .Net三層架構(gòu)
三層架構(gòu)將整個(gè)軟件框架分為“表示層—業(yè)務(wù)邏輯層—數(shù)據(jù)庫(kù)訪問(wèn)層”三層,各層分工合作,實(shí)現(xiàn)數(shù)據(jù)交互[6]。其目的在于實(shí)現(xiàn)軟件開發(fā)中所要求的“高內(nèi)聚、低耦合”,采用“分而治之”的方法,將軟件功能劃分開來(lái),從而有利于控制、延展和資源分配[7]。
1.2.2 AJAX技術(shù)
AJAX(Asynchronous JavaScript and XML)實(shí)現(xiàn)瀏覽器無(wú)需刷新整個(gè)頁(yè)面內(nèi)容,只需要根據(jù)用戶需求,完成網(wǎng)頁(yè)中部分控件與服務(wù)器之間的交互[8]。AJAX技術(shù)的標(biāo)準(zhǔn)化展示主要通過(guò)XHTML和CSS實(shí)現(xiàn),同時(shí)其動(dòng)態(tài)顯示和交互部分主要應(yīng)用DOM技術(shù)完成。異步數(shù)據(jù)讀取時(shí),AJAX通過(guò)XMLHttpRequest實(shí)現(xiàn),最后應(yīng)用JavaScript進(jìn)行數(shù)據(jù)綁定[9]。
1.2.3 JQuery技術(shù)
JQuery是輕量級(jí)JS庫(kù)[10],不僅兼容CSS3層疊樣式表,而且對(duì)主流瀏覽器也可兼容。JQuery能夠?qū)崿F(xiàn)動(dòng)畫效果,使開發(fā)人員更為簡(jiǎn)易地處理HTML Document,快速開發(fā)出交互性強(qiáng)、界面友好的Web應(yīng)用程序[11]。系統(tǒng)采用JQuery和JQuery封裝下的Easy UI架構(gòu),輔助以ASP.NET技術(shù),可大幅度優(yōu)化網(wǎng)站的前端顯示。訪問(wèn)過(guò)程如圖2所示。
圖2 JQuery前后臺(tái)處理流程
1.2.4 WebGIS技術(shù)
WebGIS技術(shù)簡(jiǎn)化了客戶端軟件,以瀏覽器作為客戶端應(yīng)用程序的運(yùn)轉(zhuǎn)平臺(tái),從而形成一個(gè)“客戶層—應(yīng)用層—數(shù)據(jù)庫(kù)”的三層結(jié)構(gòu)[12]。
與傳統(tǒng)的GIS相比,WebGIS具有以下優(yōu)點(diǎn)[13]:①提高信息共享效率;②保障信息的實(shí)時(shí)性[14];③多平臺(tái)的可擴(kuò)展性;④降低系統(tǒng)成本。
2 數(shù)據(jù)庫(kù)設(shè)計(jì)
地下水污染調(diào)查信息系統(tǒng)數(shù)據(jù)標(biāo)準(zhǔn)依據(jù)《地下水污染地質(zhì)調(diào)查評(píng)價(jià)規(guī)范》[2]制定。主要考慮地下水資源量的分布情況、水文地質(zhì)結(jié)構(gòu)信息以及地下水環(huán)境數(shù)據(jù)等3個(gè)方面的數(shù)據(jù)結(jié)構(gòu)[16]。數(shù)據(jù)庫(kù)完成后系統(tǒng)可根據(jù)這些數(shù)據(jù)進(jìn)一步完成制圖及地下水污染評(píng)估等工作。
依照《地下水污染地質(zhì)調(diào)查評(píng)價(jià)規(guī)范》[2],將數(shù)據(jù)庫(kù)劃分為原始資料數(shù)據(jù)庫(kù)、綜合成果數(shù)據(jù)庫(kù)、元數(shù)據(jù)庫(kù)和用戶信息庫(kù)。原始資料數(shù)據(jù)庫(kù)主要完成數(shù)據(jù)的整理、修改編輯、匯總?cè)霂?kù)等;綜合成果數(shù)據(jù)庫(kù)主要完成空間專題制圖等;元數(shù)據(jù)庫(kù)主要建立不同需求下的元數(shù)據(jù)記錄等;用戶信息庫(kù)則存儲(chǔ)用戶的個(gè)人信息以及記錄導(dǎo)出項(xiàng)等。
(1)原始資料數(shù)據(jù)表。
原始資料數(shù)據(jù)表可以分為4大類:綜合調(diào)查類、動(dòng)態(tài)數(shù)據(jù)監(jiān)測(cè)類、樣品分析測(cè)試類和綜合施工類。
(2)綜合成果數(shù)據(jù)表。
綜合研究成果數(shù)據(jù)庫(kù)只含有單一的屬性表,以線元及多邊形表示。
(3)元數(shù)據(jù)表。
根據(jù)不同需求和工作需要,可以對(duì)原始資料數(shù)據(jù)庫(kù)和綜合成果數(shù)據(jù)庫(kù)進(jìn)行元數(shù)據(jù)采集,并將采集后的元數(shù)據(jù)記錄保存到元數(shù)據(jù)表中。
(4)用戶信息表。
用戶信息表包含三大類:用戶登陸信息表、用戶詳細(xì)信息表和用戶導(dǎo)出項(xiàng)目表。
3 系統(tǒng)功能設(shè)計(jì)
系統(tǒng)主要功能模塊如圖3所示。
圖3 系統(tǒng)功能模塊
(1)數(shù)據(jù)管理模塊。
包括原始數(shù)據(jù)錄入、修改、存儲(chǔ)、查詢以及對(duì)原有數(shù)據(jù)進(jìn)行備份與恢復(fù)等功能。
(2)圖系制表模塊。
依照用戶需求,將野外采集數(shù)據(jù)或綜合分析數(shù)據(jù),繪制成圖表。根據(jù)《地下水污染調(diào)查評(píng)價(jià)規(guī)范》[2],利用數(shù)據(jù)庫(kù)中的數(shù)據(jù),制作匯總后的圖形化數(shù)據(jù),方便用戶查看。
(3)綜合分析模塊。
綜合分析模塊分為地下水質(zhì)量評(píng)價(jià)和地下水污染綜合評(píng)價(jià)兩個(gè)子模塊。地下水質(zhì)量評(píng)價(jià)方法一般采用水質(zhì)模糊評(píng)價(jià)方法[17],水質(zhì)評(píng)價(jià)標(biāo)準(zhǔn)采用《地下水質(zhì)量標(biāo)準(zhǔn)》[18]。地下水污染綜合評(píng)價(jià)方法國(guó)內(nèi)目前還沒有統(tǒng)一標(biāo)準(zhǔn)[19]。
首先通過(guò)原始資料數(shù)據(jù)表查找符合條件的數(shù)據(jù)記錄;然后根據(jù)地下水污染調(diào)查評(píng)價(jià)規(guī)范,對(duì)已查數(shù)據(jù)進(jìn)行進(jìn)一步分析;最后將綜合成果記錄、存儲(chǔ)到元數(shù)據(jù)表中。
(4)數(shù)據(jù)統(tǒng)計(jì)模塊。
數(shù)據(jù)統(tǒng)計(jì)模塊主要用于統(tǒng)計(jì)和整合原始數(shù)據(jù)表和元數(shù)據(jù)表中的所有數(shù)據(jù)。使用.Net Framework平臺(tái)的COM組件來(lái)實(shí)現(xiàn)統(tǒng)計(jì)功能[20],將數(shù)據(jù)以Excel文件的形式發(fā)送到客戶端。
(5)用戶模塊。
將所有用戶分為兩組:普通用戶組和管理員用戶組。普通用戶可以使用系統(tǒng)的大部分功能,包括對(duì)原始數(shù)據(jù)的錄入、查詢、修改、備份、恢復(fù)以及對(duì)數(shù)據(jù)進(jìn)行分析和制圖等,但不能查看其他用戶錄入的數(shù)據(jù)。
管理員組除了普通用戶組的功能之外,還可以查看所有用戶錄入的數(shù)據(jù),并且負(fù)責(zé)對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行維護(hù)。管理員可限定普通用戶的操作權(quán)限。
綜合上述思路,系統(tǒng)整體框架圖如圖4所示。
圖4 地下水污染調(diào)查信息系統(tǒng)整體框架設(shè)計(jì)
4 系統(tǒng)功能實(shí)現(xiàn)
本系統(tǒng)中最主要的部分是客戶端同服務(wù)器端、服務(wù)器端同數(shù)據(jù)庫(kù)的交互,需要使用大量的數(shù)據(jù)庫(kù)操作。同時(shí)為了優(yōu)化用戶體驗(yàn),提高輸入輸出效率,還在系統(tǒng)中加入了文件導(dǎo)入導(dǎo)出技術(shù)和查詢時(shí)的模糊查找功能。
4.1 讀取Excel文件數(shù)據(jù)
系統(tǒng)采用OLE DB的方式將Excel中的數(shù)據(jù)讀取到DataTable。首先設(shè)定連接字符串:
StringConnString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=; Extended Properties=Excel 8.0; HDR=No;IMEX=1;"。
完成設(shè)定后,使用OleDbConnection打開數(shù)據(jù)連接,用GetOleDbSchemaTable獲取Excel文件中的數(shù)據(jù),最后通過(guò)OleDbDataAdapter.Fill將數(shù)據(jù)填充Dataset。具體代碼部分,如下:
con = new OleDbConnection(ConnString);
schemaTable =con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
stringtableName = schemaTable.Rows[0][2].ToString().Trim();
cmd = new OleDbCommand(@"select * from [" + tableName + "]", con);
da = new OleDbDataAdapter();
da.SelectCommand = cmd;
da.Fill(dsModel);
con.Close();
4.2 文件導(dǎo)出功能
針對(duì)信息分析統(tǒng)計(jì)的導(dǎo)出功能,按照用戶要求,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行整合,然后以Excel文件的形式導(dǎo)出到用戶本地。具體實(shí)現(xiàn)代碼如下:
Application excel = new Application();
_Workbook xBk;
_Worksheet xSt;
excel= new ApplicationClass();
xBk = excel.Workbooks.Add(true);
xSt = (_Worksheet)xBk.ActiveSheet;
foreach(DataColumn col in dv.Table.Columns)
{
colIndex++;
excel.Cells[4,colIndex] = col.ColumnName;
}
foreach(DataRowView row in dv)
{
rowIndex ++;
colIndex = 1;
foreach(DataColumn col in dv.Table.Columns)
{
colIndex ++;
}
}
xBk.SaveCopyAs(Server.MapPath(".")+""+this.xlfile.Text+".xls");
ds = null;
xBk.Close(false, null,null);
excel.Quit();
4.3 文本框自動(dòng)填充功能
本文采用JQuery的AutoComplete控件。其中前后臺(tái)的交互機(jī)制,將使用ASP.NET的CallBack機(jī)制。通常,一個(gè)完整的回調(diào)過(guò)程包含以下幾個(gè)部分:①客戶端發(fā)出回調(diào)請(qǐng)求;②服務(wù)器端接收客戶端回調(diào)請(qǐng)求;③服務(wù)器端處理請(qǐng)求并回復(fù)請(qǐng)求給客戶端;④客戶端接收服務(wù)器的反饋結(jié)果并更新HTML。
觸發(fā)回調(diào)機(jī)制,首先需要在前端頁(yè)面編寫一個(gè)JavaScript函數(shù)觸發(fā)回調(diào)請(qǐng)求,具體語(yǔ)法結(jié)構(gòu)如下:
any_script_function(arg, context)
{
<%= ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context")%>;
}
利用GetCallbackEventReference(this,”arg”,”ReceiveServerData”)函數(shù),根據(jù)傳入的參數(shù),來(lái)調(diào)用實(shí)際的前臺(tái)腳本。其中this表示回調(diào)操作的控件處于當(dāng)前頁(yè)面。同時(shí),該頁(yè)面需要實(shí)現(xiàn)ICallbackEventHandler接口。此外,this參數(shù)也可以表示該頁(yè)面上某個(gè)Web控件,此時(shí)該控件需實(shí)現(xiàn)ICallbackEventHandler接口;Arg用來(lái)表示將要傳遞給RaiseCallbackEvernt的參數(shù)值;ReceiveServerData指前端頁(yè)面在回調(diào)之后將要執(zhí)行的前臺(tái)腳本。
回調(diào)機(jī)制完成之后,頁(yè)面將把數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)轉(zhuǎn)化為JSON格式并賦值到AutoComplete控件,具體語(yǔ)法如下:
autocomplete(url or data,[options])。
$(function () {
$("#" + "<%=this.控件ID%>").autocomplete({
source: function (request, response) {
$.ajax({
url: "Handler1.ashx",dataType: "jsonp",
jsonp: "callback",
data: "p1=" + escape(request.term) + "&callback= ",
success: function (data) {
response($.map(data, binditem));
}
});
},
}
5 結(jié)語(yǔ)
本文使用.Net Framework 作為開發(fā)平臺(tái),C#作為開發(fā)語(yǔ)言,利用計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)和WebGIS技術(shù),提出設(shè)計(jì)思路和實(shí)現(xiàn)方案。依托.Net Framework作為系統(tǒng)平臺(tái),有效提高了系統(tǒng)的穩(wěn)定性,使信息交互和維護(hù)更加便捷。本文系統(tǒng)設(shè)計(jì)開發(fā)對(duì)于其它類似信息系統(tǒng)的開發(fā),具有一定借鑒意義。