王劍秋 陳觀林 李真楠
摘 要: 結合城市防汛預警決策的信息化建設,開發(fā)了數(shù)字城管防汛決策支持系統(tǒng)。介紹了開發(fā)該系統(tǒng)的意義、所使用的關鍵性技術、設計模式和開發(fā)工具。該系統(tǒng)應用了基于MVC模式的SSH2框架技術,以及目前主流的JavaScript技術等。分析和展望了數(shù)字城管防汛決策支持系統(tǒng)的使用前景。
關鍵詞: 數(shù)字城管; 防汛決策支持系統(tǒng); J2EE; SSH2框架; Oracle
中圖分類號:TP31 文獻標志碼:B 文章編號:1006-8228(2013)02-63-05
Design and development of flood control decision-making support system for digital urban management
Wang Jianqiu1, Chen Guanlin2, Li Zhennan2
(1. China Telecom Corporation Ltd. Hangzhou Branch, Hangzhou, Zhejiang 310003, China;
2. School of Computer and Computing Science, Zhejiang University City College)
Abstract: With deepening of city-oriented development, the impact of floods become more serious so the information construction of flood control decision-making support system has been paid more and more attention. The way of how to use the J2EE platform with SSH2 (the Struts2+Spring+Hibernate) framework for the development of flood control decision-making support system is introduced, including the significance of developing the system, the key technology of the system, the system design model, development tools. SSH2 framework technology with MVC pattern and the current mainstream JavaScript technology are implemented in this system. A summarized analysis of how to better meet the needs of the flood control decision-making support system is presented for digital urban management.
Key words: digital urban management; flood control decision-making support system; J2EE; SSH2; Oracle
0 引言
數(shù)字城管意為數(shù)字化城市管理,是指用信息化手段和移動通信技術手段來處理、分析和管理整個城市的所有城管部件和城管事件信息,是促進城市管理現(xiàn)代化的信息化措施。數(shù)字城管是現(xiàn)代城市的發(fā)展趨勢,也是城市管理走向現(xiàn)代化的必然要求[1]。
近年來,許多國外發(fā)達城市相繼開展了“數(shù)字城管”的研究和實踐,實施“數(shù)字城管”也已成為中國城市管理建設的熱點。據(jù)統(tǒng)計,目前全國已有百余個城市已建設或正在推行數(shù)字化城市管理[2]。以浙江省杭州市為例,杭州市于2006年8月順利通過國家建設部的驗收,成為首批十個“數(shù)字城管”試點城市中第一個通過驗收的城市,其創(chuàng)新模式被冠名為“杭州模式”[3];至2010年底,杭州市已建成覆蓋城市市域的市轄城域數(shù)字城管統(tǒng)一平臺。
隨著城市化進程的推進,洪水對城市的影響日益嚴重,城市防汛預警決策的信息化建設日益受到人們的重視[4]。同時,技術發(fā)展與應用的不斷升級使得現(xiàn)有的決策支持系統(tǒng)已經不能滿足各行各業(yè)解決復雜空間決策問題的需要,空間決策支持系統(tǒng)作為GIS與DSS相結合發(fā)展的趨勢,已在國內外引起越來越廣泛的關注[5]。本文介紹一個面向數(shù)字城管的防汛決策支持系統(tǒng)的設計和開發(fā),通過對城市河道、水庫等的防汛數(shù)據(jù)進行綜合收集和整理,實現(xiàn)對重點區(qū)域的有效監(jiān)控;建立和優(yōu)化防汛決策的基礎數(shù)據(jù)庫,為城市的防汛減災決策提供支持。在設計和開發(fā)面向數(shù)字城管的防汛決策支持系統(tǒng)過程中,主要運用Java EE平臺技術結合SSH2(Spring+Struts2+Hibernate)框架,采用MVC架構實現(xiàn)數(shù)字城管防汛決策支持平臺,同時,還應用了許多其他的主流技術,包括Java Script,AJAX,JQuery,Open Flash Chart,Oracle數(shù)據(jù)庫等。
1 系統(tǒng)總體設計與分析
1.1 系統(tǒng)總體需求設計
設計和開發(fā)一個面向數(shù)字城管的防汛決策支持系統(tǒng),需要通過對城市河道、水庫等的防汛數(shù)據(jù)進行綜合收集和整理,以實現(xiàn)對重點區(qū)域的有效監(jiān)控,并建立和優(yōu)化防汛決策的基礎數(shù)據(jù)庫。系統(tǒng)功能模塊主要包括系統(tǒng)管理、防汛信息獲取、實時水情分析、防汛預警、統(tǒng)計查詢等。要求完成系統(tǒng)的總體設計,對系統(tǒng)進行充分的需求調研,并在此基礎上認真進行系統(tǒng)的數(shù)據(jù)庫設計和功能模塊設計,重點完成分析模型和分類統(tǒng)計模塊,提供方便的查詢統(tǒng)計功能。
1.2 系統(tǒng)功能框架
數(shù)字城管防汛決策支持系統(tǒng)框架如圖1所示。
[數(shù)字城管防汛決策支持系統(tǒng)][系統(tǒng)管理][防汛信息獲取][實時水情分析][防汛預警][統(tǒng)計查詢] [系統(tǒng)基本信息管理][用戶管理] [表格導入][手工輸入][實時水情報表][實時水情圖示][預警測站分析][水情信息查詢統(tǒng)計][測站水位過程查詢]
圖1 數(shù)字城管防汛決策支持系統(tǒng)框架圖
數(shù)字城管防汛決策支持系統(tǒng)分為五個模塊。
⑴ 系統(tǒng)管理:主要實現(xiàn)用戶管理和系統(tǒng)基本信息的管理。其中用戶管理包括了用戶的創(chuàng)建、修改、刪除和密碼重置,系統(tǒng)基本信息管理包括了地區(qū)、檢測站等系統(tǒng)基本信息的增刪改。
⑵ 防汛信息獲?。簩⒏鱾€監(jiān)測站監(jiān)測到的水位數(shù)據(jù)導入到系統(tǒng)中,是本系統(tǒng)數(shù)據(jù)的主要來源。導入方法包括手工輸入和現(xiàn)成表格的導入。
⑶ 實時水情分析:將各個測站監(jiān)測到的最新的水位數(shù)據(jù)以各種形式展現(xiàn)給用戶。展現(xiàn)方式主要包括了圖示、表格展示。
⑷ 防汛預警:利用之前的數(shù)據(jù)通過算法預測出某天的水位數(shù)據(jù),給防汛的決策提供一定的數(shù)據(jù)支持。
⑸ 統(tǒng)計查詢:利用系統(tǒng)采集到的數(shù)據(jù),統(tǒng)計一段時間內的水情水位信息,并以圖表表格等形式展現(xiàn)給用戶。
1.3 系統(tǒng)數(shù)據(jù)庫設計
系統(tǒng)數(shù)據(jù)庫包含了水體,地區(qū),檢測點,水位信息,用戶五張表,如圖2所示。
圖2 系統(tǒng)數(shù)據(jù)庫表結構
2 系統(tǒng)詳細設計與實現(xiàn)
2.1 用戶登錄功能的實現(xiàn)
系統(tǒng)初始的登錄界面如圖3所示。本系統(tǒng)擁有權限控制功能,主要有用戶管理、系統(tǒng)管理、信息錄入等權限,每個用戶都可以逐個分配權限點。同時,管理員可以給其他用戶分配或取消權限。
圖3 登錄界面
處理登錄請求的后臺關鍵代碼如下:
public class UserAction extends PagealbeAction
@Autowired
private UserService serivce;
/**
* 用戶登錄
*/
public String login() {
AppUser u=null;
try {
u=serivce.login(user.getLoginName(),user.getLoginPwd());
setLoginUser(u);
return "home";
} catch (MessageException e) {
setSessionErrorMessage(e.getMessage());
return LOGIN;
}
}
(其他功能的代碼省略)
}
2.2 防汛信息獲取的設計和實現(xiàn)
防汛信息的獲取,主要是通過手工輸入測站的水位數(shù)據(jù)或者將Excel表格中的水位數(shù)據(jù)導入系統(tǒng)來實現(xiàn)的,界面如圖4和圖5所示。手工輸入主要是監(jiān)測員根據(jù)測得的數(shù)據(jù),將水位記錄逐一錄入到系統(tǒng)中,效率較低,而表格導入則可以將監(jiān)測數(shù)據(jù)批量導入到系統(tǒng)中,從而提高數(shù)據(jù)獲取的效率。
圖4 手工輸入水位信息界面
圖5 從Excel表格中導入水位信息界面
⑴ 手工錄入的實現(xiàn)
手工錄入主要功能是將網(wǎng)頁表單中的數(shù)據(jù)添加到數(shù)據(jù)庫中,因此實現(xiàn)比較簡單,其Struts的Action的關鍵代碼如下:
public class WaterLevelAction extends PagealbeAction
@Autowired
private WaterLevelService service;
@Autowired
private StationService stationService;
@Autowired
private UserService userService;
private WaterLevel model=new WaterLevel();
private int stationId=-1;
private int monitoreeId=-1;
private WaterLevelQueryArg arg=new WaterLevelQueryArg();
private File excel;
private String excelContentType;
private String excelFileName;
/**
* 手工輸入
*/
public String handInput() {
model.setId(null);
model.setStation(new Station(stationId));
model.setMonitoree(new AppUser(getLoginUser().getId()));
service.saveOrUpdate(model);
getRequest().setAttribute("resultMessage", "錄入成功");
return "view";
}
(其他代碼省略)
}
⑵ Excel導入數(shù)據(jù)的實現(xiàn)
表格導入主要過程包括了文件上傳,Excel文件遍歷和數(shù)據(jù)庫記錄插入,其Struts的Action的關鍵代碼如下:
public class WaterLevelAction extends PagealbeAction
/**
* 從表格中導入
*/
public String excelImport() throws Exception {
final Integer[] count={ 0 };
try {
ExcelTableReader reader=new ExcelTableReader(excel);
reader.process(new ExcelRecordProcessor() {
@Override
public void ProcessRecord(Cell[] columns) {
WaterLevel w=new WaterLevel();
// 初始化一個實例
w.setId(null);
w.setMonitoree(getLoginUser());
w.setStation(new Station(new Integer(columns[0]
.getContents())));
w.setTime(ExcelTableReader.getDate(columns[1]));
w.setWaterLevel(Double.valueOf(columns[2].getContents()));
// 保存
service.saveOrUpdate(w);
(其他代碼省略)
}
2.3 實時水情分析的設計和實現(xiàn)
實時水情分析,是指利用已有的最新水情數(shù)據(jù),將當前的實時水情及其分析結果用圖、表的形式展現(xiàn)出來,方便用戶掌控當前的實時水情。實時數(shù)據(jù)的展現(xiàn)形式主要包括圖示和報表顯示。圖示即標明每個檢測站在地圖中的位置及當前的狀態(tài)信息,讓用戶對當前的水情在地理上的分布有一個直觀的認識,如圖6所示。而報表顯示則將水庫和河道的實時信息通過表格的形式展示給用戶,表格中包括水情的詳細統(tǒng)計數(shù)據(jù),如圖7所示。
圖6 實時水情圖示
圖7 實時水情報表
水情圖示功能是利用百度地圖的API來顯示地圖。百度地圖API是一套應用程序接口,通過該API,即可在應用中構建功能豐富、個性化的、高效的地圖功能,其中包含了構建地圖基本功能的多個接口,提供了諸如位置搜索、周邊查詢、出行路線規(guī)劃等功能服務。本系統(tǒng)主要利用了API中地圖顯示功能,并將測站的信息以覆蓋物(覆蓋物是百度地圖API中疊加或覆蓋到地圖中的內容)的形式顯示出來。載入地圖并初始化的JS代碼如下:
var map;
$(document).ready(function() {
// 創(chuàng)建地圖實例
map=new BMap.Map("container");
// 禁用雙擊放大
map.disableDoubleClickZoom();
// 添加導航控件
map.addControl(new BMap.NavigationControl({
type:BMAP_NAVIGATION_CONTROL_LARGE
}));
// 添加地圖類型控件
map.addControl(new BMap.MapTypeControl());
// 添加圖例控件
map.addControl(new CutLineControl());
// 添加地區(qū)控件
map.addControl(new RegionControl());
// 初始化地圖,設置中心點坐標和地圖級別
map.centerAndZoom('杭州');
// 用于保存創(chuàng)建的站點列表
var stationMarkers=new Array();
// 從服務器獲取水位信息并更新顯示
function getAndUpdateStations() {
$.getJSON("../waterLevel/getAllLatest.action",function(data) {
var list=stationMarkers;
var levels=data.list;
var i, j;
for(i=0; i list[i].level=levels[i]; list[i].updateDiv(); } }); } // 獲取站點列表并加載 $.getJSON("../station/getAll.action", function(data) { // 加載返回的站點列表 for(var i=0; i var lng=data.list[i].lng; var lat=data.list[i].lat; var marker=new StationMarker(new BMap.Point(lng,lat), data.list[i]) stationMarkers[i]=marker; map.addOverlay(marker); marker.waterLevel=''; marker.updateDiv(); } // 獲取水位信息并更新顯示 getAndUpdateStations(); // 定時器:獲取水位信息并更新顯示 $(document).everyTime( 60*1000, function() { getAndUpdateStations(); }); }); }); (其余功能代碼省略) 2.4 實時水情分析的設計和實現(xiàn) 統(tǒng)計查詢是指利用系統(tǒng)采集到的數(shù)據(jù),統(tǒng)計一段時間內的水情水位信息,并以圖、表等形式展現(xiàn)給用戶。主要界面如圖8和圖9所示。 圖8 某個測站在一段時間內的統(tǒng)計信息 圖9 在一段時間內的水情的統(tǒng)計報表 統(tǒng)計查詢中涉及到許多不同類型信息的統(tǒng)計,這里以一個時間段內的每個時間單位的平均水位為例。為了防止系統(tǒng)中單純?yōu)閭鬟f數(shù)據(jù)的Java Bean數(shù)量的無限制地增長,我們用了Map(映射)代替Java Bean來返回查詢的結果。其主要代碼略。 2.5 防汛預警的設計和實現(xiàn) 防汛預警,主要是利用之前的數(shù)據(jù)通過算法預測出某天的水位數(shù)據(jù),給防汛的決策提供一定的數(shù)據(jù)支持,其主要界面如圖10所示。 圖10 在一段時間內的水情的統(tǒng)計報表 預測算法如下: public class PredectionService { /** * 根據(jù)之間的數(shù)據(jù)預測下一天的數(shù)據(jù) * * @param list * @param algorithm * @return * @throws MessageException */ public Map list, String algorithm) throws MessageException { // 變量聲明 double result=0; int n=list.size(); double[] x=new double[n]; // 初始化原始數(shù)組 int i=n-1; for (Map x[i--]=(Double) m.get("level"); } // 調用相應算法 try { Method method=this.getClass().getMethod(algorithm, double[].class); result=(Double) method.invoke(this, x); } catch (Exception e) { throw new MessageException("不支持的算法"); } // 添加到結果中 Map t=new HashMap try { SimpleDateFormat sdf=new SimpleDateFormat ("yyyy-MM-dd"); Date date=sdf.parse((String) t.get("time")); date=new Date(date.getTime()+24L*60*60*1000); t.put("time", sdf.format(date));
t.put("level", result);
t.put("isPrediction", true);
} catch (ParseException e) {
e.printStackTrace();
}
// 返回
return t;
}
/**
* 平均算法
*
* @param x
* @return
*/
public Double average(double[] x) {
double p=0;
for (double a:x) {
p+=a;
}
return p/x.length;
}
/**
* 插值算法
*
* @param x
* @return
*/
public Double interpolation(double[] x) {
double p=0;
int n=x.length;
double avg=average(x);
if (n==7) {
p=x[6]-7*x[5]+21*x[4]-35*x[3]+35*x[2]-21*x[1]+7*x[0];
} else if (n==6) {
p=-x[5]+6*x[4]-15*x[3]+20*x[2]-15*x[1]+6*x[0];
} else if (n==5) {
p=1*x[4]-5*x[3]+10*x[2]-10*x[1]+5*x[0];
} else if (n==4) {
p=-1*x[3]+4*x[2]-6*x[1]+4*x[0];
} else if (n==3) {
p=1*x[2]-3*x[1]+3*x[0];
} else if (n==2) {
p=1*x[1]-2*x[0];
} else if (n==1) {
p= [0];
}
if (p<0||p>2*avg||p double xx[]=new double[n-1]; for (int i=0; i xx[i]=x[i]; } return interpolation(xx); } return p; } } 3 結束語 面向數(shù)字城管的防汛決策支持系統(tǒng)平臺是當今數(shù)字城管建設的重要組成部分,通過對城市河道、水庫等防汛數(shù)據(jù)進行綜合收集和整理,實現(xiàn)對重點區(qū)域的有效監(jiān)控,建立和優(yōu)化防汛決策的基礎數(shù)據(jù)庫,可為城市的防汛減災決策提供支持。面向數(shù)字城管的防汛決策支持系統(tǒng),有效地利用數(shù)字城管平臺積累的數(shù)據(jù),并在此基礎上進行數(shù)據(jù)分析,提取有價值的信息,可進一步促進數(shù)字城管應用的開發(fā)利用和知識發(fā)現(xiàn),提升城市管理的水平和效能。面向數(shù)字城管的防汛決策支持系統(tǒng)使用當今主流的Java EE技術設計開發(fā),以Oracle作為其數(shù)據(jù)庫系統(tǒng),以Hibernate作為持久層管理,用Spring作依賴注入,使用Struts2作為控制層。系統(tǒng)充分展示了MVC設計模式的運用。B/S架構使得該系統(tǒng)可以在任何有瀏覽器而無需JRE支持的系統(tǒng)上直接使用。 參考文獻: [1] 余孟澤,趙美英.打造“全省示范,全國領先”數(shù)字城管[J].城鄉(xiāng)建設,2006.8:53-54 [2] 河南省洛陽市文明辦,洛陽以數(shù)字化城市管理給力文明城市創(chuàng)建,http://archive.wenming.cn/gzyd/2010-11/15/content_21390931.htm. [3] 陳觀林,李圣權,周魯耀.杭州市“數(shù)字城管”現(xiàn)狀及發(fā)展對策研究[J].情報雜志,2009.28(3):43-45 [4] 賈超,徐幫樹,韓永軍等.濟南城市防汛預警決策支持系統(tǒng)研究[J].中國水利,2010.5:42-44 [5] 田麗秋.水環(huán)境空間決策支持系統(tǒng)的研究與實現(xiàn)[J].計算機光盤軟件應用,2011.3:110-110