王劍秋 陳觀林 李真楠
摘 要: 結(jié)合城市防汛預(yù)警決策的信息化建設(shè),開(kāi)發(fā)了數(shù)字城管防汛決策支持系統(tǒng)。介紹了開(kāi)發(fā)該系統(tǒng)的意義、所使用的關(guān)鍵性技術(shù)、設(shè)計(jì)模式和開(kāi)發(fā)工具。該系統(tǒng)應(yīng)用了基于MVC模式的SSH2框架技術(shù),以及目前主流的JavaScript技術(shù)等。分析和展望了數(shù)字城管防汛決策支持系統(tǒng)的使用前景。
關(guān)鍵詞: 數(shù)字城管; 防汛決策支持系統(tǒng); J2EE; SSH2框架; Oracle
中圖分類號(hào):TP31 文獻(xiàn)標(biāo)志碼:B 文章編號(hào):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ù)字化城市管理,是指用信息化手段和移動(dòng)通信技術(shù)手段來(lái)處理、分析和管理整個(gè)城市的所有城管部件和城管事件信息,是促進(jìn)城市管理現(xiàn)代化的信息化措施。數(shù)字城管是現(xiàn)代城市的發(fā)展趨勢(shì),也是城市管理走向現(xiàn)代化的必然要求[1]。
近年來(lái),許多國(guó)外發(fā)達(dá)城市相繼開(kāi)展了“數(shù)字城管”的研究和實(shí)踐,實(shí)施“數(shù)字城管”也已成為中國(guó)城市管理建設(shè)的熱點(diǎn)。據(jù)統(tǒng)計(jì),目前全國(guó)已有百余個(gè)城市已建設(shè)或正在推行數(shù)字化城市管理[2]。以浙江省杭州市為例,杭州市于2006年8月順利通過(guò)國(guó)家建設(shè)部的驗(yàn)收,成為首批十個(gè)“數(shù)字城管”試點(diǎn)城市中第一個(gè)通過(guò)驗(yàn)收的城市,其創(chuàng)新模式被冠名為“杭州模式”[3];至2010年底,杭州市已建成覆蓋城市市域的市轄城域數(shù)字城管統(tǒng)一平臺(tái)。
隨著城市化進(jìn)程的推進(jìn),洪水對(duì)城市的影響日益嚴(yán)重,城市防汛預(yù)警決策的信息化建設(shè)日益受到人們的重視[4]。同時(shí),技術(shù)發(fā)展與應(yīng)用的不斷升級(jí)使得現(xiàn)有的決策支持系統(tǒng)已經(jīng)不能滿足各行各業(yè)解決復(fù)雜空間決策問(wèn)題的需要,空間決策支持系統(tǒng)作為GIS與DSS相結(jié)合發(fā)展的趨勢(shì),已在國(guó)內(nèi)外引起越來(lái)越廣泛的關(guān)注[5]。本文介紹一個(gè)面向數(shù)字城管的防汛決策支持系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā),通過(guò)對(duì)城市河道、水庫(kù)等的防汛數(shù)據(jù)進(jìn)行綜合收集和整理,實(shí)現(xiàn)對(duì)重點(diǎn)區(qū)域的有效監(jiān)控;建立和優(yōu)化防汛決策的基礎(chǔ)數(shù)據(jù)庫(kù),為城市的防汛減災(zāi)決策提供支持。在設(shè)計(jì)和開(kāi)發(fā)面向數(shù)字城管的防汛決策支持系統(tǒng)過(guò)程中,主要運(yùn)用Java EE平臺(tái)技術(shù)結(jié)合SSH2(Spring+Struts2+Hibernate)框架,采用MVC架構(gòu)實(shí)現(xiàn)數(shù)字城管防汛決策支持平臺(tái),同時(shí),還應(yīng)用了許多其他的主流技術(shù),包括Java Script,AJAX,JQuery,Open Flash Chart,Oracle數(shù)據(jù)庫(kù)等。
1 系統(tǒng)總體設(shè)計(jì)與分析
1.1 系統(tǒng)總體需求設(shè)計(jì)
設(shè)計(jì)和開(kāi)發(fā)一個(gè)面向數(shù)字城管的防汛決策支持系統(tǒng),需要通過(guò)對(duì)城市河道、水庫(kù)等的防汛數(shù)據(jù)進(jìn)行綜合收集和整理,以實(shí)現(xiàn)對(duì)重點(diǎn)區(qū)域的有效監(jiān)控,并建立和優(yōu)化防汛決策的基礎(chǔ)數(shù)據(jù)庫(kù)。系統(tǒng)功能模塊主要包括系統(tǒng)管理、防汛信息獲取、實(shí)時(shí)水情分析、防汛預(yù)警、統(tǒng)計(jì)查詢等。要求完成系統(tǒng)的總體設(shè)計(jì),對(duì)系統(tǒng)進(jìn)行充分的需求調(diào)研,并在此基礎(chǔ)上認(rèn)真進(jìn)行系統(tǒng)的數(shù)據(jù)庫(kù)設(shè)計(jì)和功能模塊設(shè)計(jì),重點(diǎn)完成分析模型和分類統(tǒng)計(jì)模塊,提供方便的查詢統(tǒng)計(jì)功能。
1.2 系統(tǒng)功能框架
數(shù)字城管防汛決策支持系統(tǒng)框架如圖1所示。
[數(shù)字城管防汛決策支持系統(tǒng)][系統(tǒng)管理][防汛信息獲取][實(shí)時(shí)水情分析][防汛預(yù)警][統(tǒng)計(jì)查詢] [系統(tǒng)基本信息管理][用戶管理] [表格導(dǎo)入][手工輸入][實(shí)時(shí)水情報(bào)表][實(shí)時(shí)水情圖示][預(yù)警測(cè)站分析][水情信息查詢統(tǒng)計(jì)][測(cè)站水位過(guò)程查詢]
圖1 數(shù)字城管防汛決策支持系統(tǒng)框架圖
數(shù)字城管防汛決策支持系統(tǒng)分為五個(gè)模塊。
⑴ 系統(tǒng)管理:主要實(shí)現(xiàn)用戶管理和系統(tǒng)基本信息的管理。其中用戶管理包括了用戶的創(chuàng)建、修改、刪除和密碼重置,系統(tǒng)基本信息管理包括了地區(qū)、檢測(cè)站等系統(tǒng)基本信息的增刪改。
⑵ 防汛信息獲?。簩⒏鱾€(gè)監(jiān)測(cè)站監(jiān)測(cè)到的水位數(shù)據(jù)導(dǎo)入到系統(tǒng)中,是本系統(tǒng)數(shù)據(jù)的主要來(lái)源。導(dǎo)入方法包括手工輸入和現(xiàn)成表格的導(dǎo)入。
⑶ 實(shí)時(shí)水情分析:將各個(gè)測(cè)站監(jiān)測(cè)到的最新的水位數(shù)據(jù)以各種形式展現(xiàn)給用戶。展現(xiàn)方式主要包括了圖示、表格展示。
⑷ 防汛預(yù)警:利用之前的數(shù)據(jù)通過(guò)算法預(yù)測(cè)出某天的水位數(shù)據(jù),給防汛的決策提供一定的數(shù)據(jù)支持。
⑸ 統(tǒng)計(jì)查詢:利用系統(tǒng)采集到的數(shù)據(jù),統(tǒng)計(jì)一段時(shí)間內(nèi)的水情水位信息,并以圖表表格等形式展現(xiàn)給用戶。
1.3 系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)
系統(tǒng)數(shù)據(jù)庫(kù)包含了水體,地區(qū),檢測(cè)點(diǎn),水位信息,用戶五張表,如圖2所示。
圖2 系統(tǒng)數(shù)據(jù)庫(kù)表結(jié)構(gòu)
2 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
2.1 用戶登錄功能的實(shí)現(xiàn)
系統(tǒng)初始的登錄界面如圖3所示。本系統(tǒng)擁有權(quán)限控制功能,主要有用戶管理、系統(tǒng)管理、信息錄入等權(quán)限,每個(gè)用戶都可以逐個(gè)分配權(quán)限點(diǎn)。同時(shí),管理員可以給其他用戶分配或取消權(quán)限。
圖3 登錄界面
處理登錄請(qǐng)求的后臺(tái)關(guān)鍵代碼如下:
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 防汛信息獲取的設(shè)計(jì)和實(shí)現(xiàn)
防汛信息的獲取,主要是通過(guò)手工輸入測(cè)站的水位數(shù)據(jù)或者將Excel表格中的水位數(shù)據(jù)導(dǎo)入系統(tǒng)來(lái)實(shí)現(xiàn)的,界面如圖4和圖5所示。手工輸入主要是監(jiān)測(cè)員根據(jù)測(cè)得的數(shù)據(jù),將水位記錄逐一錄入到系統(tǒng)中,效率較低,而表格導(dǎo)入則可以將監(jiān)測(cè)數(shù)據(jù)批量導(dǎo)入到系統(tǒng)中,從而提高數(shù)據(jù)獲取的效率。
圖4 手工輸入水位信息界面
圖5 從Excel表格中導(dǎo)入水位信息界面
⑴ 手工錄入的實(shí)現(xiàn)
手工錄入主要功能是將網(wǎng)頁(yè)表單中的數(shù)據(jù)添加到數(shù)據(jù)庫(kù)中,因此實(shí)現(xiàn)比較簡(jiǎn)單,其Struts的Action的關(guān)鍵代碼如下:
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導(dǎo)入數(shù)據(jù)的實(shí)現(xiàn)
表格導(dǎo)入主要過(guò)程包括了文件上傳,Excel文件遍歷和數(shù)據(jù)庫(kù)記錄插入,其Struts的Action的關(guān)鍵代碼如下:
public class WaterLevelAction extends PagealbeAction
/**
* 從表格中導(dǎo)入
*/
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();
// 初始化一個(gè)實(shí)例
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 實(shí)時(shí)水情分析的設(shè)計(jì)和實(shí)現(xiàn)
實(shí)時(shí)水情分析,是指利用已有的最新水情數(shù)據(jù),將當(dāng)前的實(shí)時(shí)水情及其分析結(jié)果用圖、表的形式展現(xiàn)出來(lái),方便用戶掌控當(dāng)前的實(shí)時(shí)水情。實(shí)時(shí)數(shù)據(jù)的展現(xiàn)形式主要包括圖示和報(bào)表顯示。圖示即標(biāo)明每個(gè)檢測(cè)站在地圖中的位置及當(dāng)前的狀態(tài)信息,讓用戶對(duì)當(dāng)前的水情在地理上的分布有一個(gè)直觀的認(rèn)識(shí),如圖6所示。而報(bào)表顯示則將水庫(kù)和河道的實(shí)時(shí)信息通過(guò)表格的形式展示給用戶,表格中包括水情的詳細(xì)統(tǒng)計(jì)數(shù)據(jù),如圖7所示。
圖6 實(shí)時(shí)水情圖示
圖7 實(shí)時(shí)水情報(bào)表
水情圖示功能是利用百度地圖的API來(lái)顯示地圖。百度地圖API是一套應(yīng)用程序接口,通過(guò)該API,即可在應(yīng)用中構(gòu)建功能豐富、個(gè)性化的、高效的地圖功能,其中包含了構(gòu)建地圖基本功能的多個(gè)接口,提供了諸如位置搜索、周邊查詢、出行路線規(guī)劃等功能服務(wù)。本系統(tǒng)主要利用了API中地圖顯示功能,并將測(cè)站的信息以覆蓋物(覆蓋物是百度地圖API中疊加或覆蓋到地圖中的內(nèi)容)的形式顯示出來(lái)。載入地圖并初始化的JS代碼如下:
var map;
$(document).ready(function() {
// 創(chuàng)建地圖實(shí)例
map=new BMap.Map("container");
// 禁用雙擊放大
map.disableDoubleClickZoom();
// 添加導(dǎo)航控件
map.addControl(new BMap.NavigationControl({
type:BMAP_NAVIGATION_CONTROL_LARGE
}));
// 添加地圖類型控件
map.addControl(new BMap.MapTypeControl());
// 添加圖例控件
map.addControl(new CutLineControl());
// 添加地區(qū)控件
map.addControl(new RegionControl());
// 初始化地圖,設(shè)置中心點(diǎn)坐標(biāo)和地圖級(jí)別
map.centerAndZoom('杭州');
// 用于保存創(chuàng)建的站點(diǎn)列表
var stationMarkers=new Array();
// 從服務(wù)器獲取水位信息并更新顯示
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(); } }); } // 獲取站點(diǎn)列表并加載 $.getJSON("../station/getAll.action", function(data) { // 加載返回的站點(diǎn)列表 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(); // 定時(shí)器:獲取水位信息并更新顯示 $(document).everyTime( 60*1000, function() { getAndUpdateStations(); }); }); }); (其余功能代碼省略) 2.4 實(shí)時(shí)水情分析的設(shè)計(jì)和實(shí)現(xiàn) 統(tǒng)計(jì)查詢是指利用系統(tǒng)采集到的數(shù)據(jù),統(tǒng)計(jì)一段時(shí)間內(nèi)的水情水位信息,并以圖、表等形式展現(xiàn)給用戶。主要界面如圖8和圖9所示。 圖8 某個(gè)測(cè)站在一段時(shí)間內(nèi)的統(tǒng)計(jì)信息 圖9 在一段時(shí)間內(nèi)的水情的統(tǒng)計(jì)報(bào)表 統(tǒng)計(jì)查詢中涉及到許多不同類型信息的統(tǒng)計(jì),這里以一個(gè)時(shí)間段內(nèi)的每個(gè)時(shí)間單位的平均水位為例。為了防止系統(tǒng)中單純?yōu)閭鬟f數(shù)據(jù)的Java Bean數(shù)量的無(wú)限制地增長(zhǎng),我們用了Map(映射)代替Java Bean來(lái)返回查詢的結(jié)果。其主要代碼略。 2.5 防汛預(yù)警的設(shè)計(jì)和實(shí)現(xiàn) 防汛預(yù)警,主要是利用之前的數(shù)據(jù)通過(guò)算法預(yù)測(cè)出某天的水位數(shù)據(jù),給防汛的決策提供一定的數(shù)據(jù)支持,其主要界面如圖10所示。 圖10 在一段時(shí)間內(nèi)的水情的統(tǒng)計(jì)報(bào)表 預(yù)測(cè)算法如下: public class PredectionService { /** * 根據(jù)之間的數(shù)據(jù)預(yù)測(cè)下一天的數(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"); } // 調(diào)用相應(yīng)算法 try { Method method=this.getClass().getMethod(algorithm, double[].class); result=(Double) method.invoke(this, x); } catch (Exception e) { throw new MessageException("不支持的算法"); } // 添加到結(jié)果中 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 結(jié)束語(yǔ) 面向數(shù)字城管的防汛決策支持系統(tǒng)平臺(tái)是當(dāng)今數(shù)字城管建設(shè)的重要組成部分,通過(guò)對(duì)城市河道、水庫(kù)等防汛數(shù)據(jù)進(jìn)行綜合收集和整理,實(shí)現(xiàn)對(duì)重點(diǎn)區(qū)域的有效監(jiān)控,建立和優(yōu)化防汛決策的基礎(chǔ)數(shù)據(jù)庫(kù),可為城市的防汛減災(zāi)決策提供支持。面向數(shù)字城管的防汛決策支持系統(tǒng),有效地利用數(shù)字城管平臺(tái)積累的數(shù)據(jù),并在此基礎(chǔ)上進(jìn)行數(shù)據(jù)分析,提取有價(jià)值的信息,可進(jìn)一步促進(jìn)數(shù)字城管應(yīng)用的開(kāi)發(fā)利用和知識(shí)發(fā)現(xiàn),提升城市管理的水平和效能。面向數(shù)字城管的防汛決策支持系統(tǒng)使用當(dāng)今主流的Java EE技術(shù)設(shè)計(jì)開(kāi)發(fā),以O(shè)racle作為其數(shù)據(jù)庫(kù)系統(tǒng),以Hibernate作為持久層管理,用Spring作依賴注入,使用Struts2作為控制層。系統(tǒng)充分展示了MVC設(shè)計(jì)模式的運(yùn)用。B/S架構(gòu)使得該系統(tǒng)可以在任何有瀏覽器而無(wú)需JRE支持的系統(tǒng)上直接使用。 參考文獻(xiàn): [1] 余孟澤,趙美英.打造“全省示范,全國(guó)領(lǐng)先”數(shù)字城管[J].城鄉(xiāng)建設(shè),2006.8:53-54 [2] 河南省洛陽(yáng)市文明辦,洛陽(yáng)以數(shù)字化城市管理給力文明城市創(chuàng)建,http://archive.wenming.cn/gzyd/2010-11/15/content_21390931.htm. [3] 陳觀林,李圣權(quán),周魯耀.杭州市“數(shù)字城管”現(xiàn)狀及發(fā)展對(duì)策研究[J].情報(bào)雜志,2009.28(3):43-45 [4] 賈超,徐幫樹(shù),韓永軍等.濟(jì)南城市防汛預(yù)警決策支持系統(tǒng)研究[J].中國(guó)水利,2010.5:42-44 [5] 田麗秋.水環(huán)境空間決策支持系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)光盤(pán)軟件應(yīng)用,2011.3:110-110