甄樹勇 司方坤 張 文 彭相瑜 幺倫韜
1河北省氣象技術(shù)裝備中心 石家莊 050021;2樂亭氣象局 河北 唐山 063600;3河北省氣象災(zāi)害防御中心 石家莊 050021
本文介紹了一種基于影像地圖的氣象災(zāi)害防御應(yīng)用系統(tǒng)的設(shè)計和實現(xiàn),通過在影像地圖上疊加氣象災(zāi)害易發(fā)點、人口密集點、氣象資料監(jiān)測點等信息,通過多種資料的疊加,結(jié)合影像實景地圖,可以直觀地了解氣象災(zāi)害發(fā)生區(qū)的綜合信息,為氣象災(zāi)害的預(yù)報、預(yù)測及防御提供了有力的技術(shù)支持,在氣象災(zāi)害防御中發(fā)揮重大作用。
整體系統(tǒng)采用B/S結(jié)構(gòu),前臺采用html5和javascript編寫,后臺采用asp編寫,通信采用JSON。系統(tǒng)將與氣象災(zāi)害防御相關(guān)的資料以經(jīng)緯度的方式疊加到衛(wèi)星影像地圖上,主要包括氣象災(zāi)害易發(fā)點、人口密集點、氣象資料監(jiān)測點等,通過多種資料的疊加,結(jié)合影像實景地圖,更加直觀地了解氣象災(zāi)害綜合信息。
地圖API中包含有標記,但是其功能、顯示效果都比較簡單,不能滿足本系統(tǒng)的應(yīng)用,為此需要自定義標記。自定義標記是繼承于OverlayView疊加層,繼承后定義初始化函數(shù)、屬性以及單擊事件函數(shù)等,參數(shù)可以通過初始化函數(shù)的參數(shù)傳遞,根據(jù)標記在實際應(yīng)用中的分類傳遞不同的圖標、名稱及數(shù)值等。
當(dāng)自定義標記首次實例化并處于準備顯示狀態(tài)時,API通過調(diào)用疊加層的 onAdd() 方法將其添加到地圖map上,在處理此方法時,需要創(chuàng)建用于顯示標記圖標的
(1)標記初始化
由于本系統(tǒng)需要顯示災(zāi)害易發(fā)區(qū)、人口密集區(qū)、氣象觀測點等標記,所以需要對標記進行分類控制,系統(tǒng)分別定義了全局變量災(zāi)害易發(fā)區(qū)的數(shù)組、人口密集區(qū)、氣象觀測點的三個二維數(shù)組DisastrousMarkerArray、Person MarkerArray、ObserveMarkerArray。程序在初始化運行時,首先從后臺讀取基本信息初始化標記并添加到數(shù)組中,包含標記的ID、名稱、經(jīng)緯度、圖標等,這些參數(shù)信息分別與標記的屬性對應(yīng),具體屬性在標記模塊中給出。其中,new MyMarker()為自定義標記的創(chuàng)建函數(shù),創(chuàng)建完畢后,將其加入DisastrousMarkerArray標記數(shù)組中,上面函數(shù)只給出了災(zāi)害易發(fā)區(qū)標記添加到具體代碼,其他標記和此段類似。
(2)標記的顯示、隱藏
向地圖中添加并顯示自定義標記使用API函數(shù)setMap(map)方法來添加,隱藏標記使用setMap(null)函數(shù)將標記從地圖的DOM上分離出來。本系統(tǒng)中涉及到標記數(shù)量較多,如果初始化時將所有標記添加到地圖上,將會使地圖操作遲滯,為此本系統(tǒng)采用即顯即添的方式來添加標記,即標記的經(jīng)緯度在顯示范圍內(nèi)的則添加,不在顯示范圍的從地圖上分離,這樣保證系統(tǒng)運行比較流暢。
(3)標記數(shù)據(jù)的顯示更新
對于氣象觀測點標記來說,需要實時顯示觀測數(shù)據(jù)信息,因此需要對顯示數(shù)據(jù)不間斷的更新。因此在創(chuàng)建標記類的時候,需要定義標記setNum方法,然后通過調(diào)用setNum方法來逐個更新顯示數(shù)據(jù)信息。這里需要注意的是由于標記數(shù)量較多,更新時必須采用異步通信方式,才能保證頁面操作流暢。
本系統(tǒng)通信采用JSON格式,獲取的數(shù)據(jù)主要有兩部分,一部分是基本信息,另一部分為氣象資料數(shù)據(jù)。首先分別定義相應(yīng)的數(shù)組,然后訪問后臺的asp頁面讀取數(shù)據(jù)到對應(yīng)的數(shù)組中。
后臺采用asp實現(xiàn),asp可以與數(shù)據(jù)庫和其它程序進行交互,使用簡單、方便。后臺主要包括數(shù)據(jù)庫連接、標記信息數(shù)據(jù)提取、氣象數(shù)據(jù)提取等功能。
本系統(tǒng)需要讀取的數(shù)據(jù)庫為MSSQL Server數(shù)據(jù)庫,asp連接MS SQL Server數(shù)據(jù)庫非常簡單,新建一個conn.asp文件,在里面寫入代碼如下:
set conn=server.createobject("adodb.connection")
conn.open "driver={SQL Server};server=12 7.0.0.1;uid=sa;pwd=;database=baseinfo"
在其他asp文件中需要連接數(shù)據(jù)庫時,直接引用conn.asp文件,然后使用conn即可。
由于本系統(tǒng)采用JSON方式傳輸數(shù)據(jù),所以后臺需要將提取的數(shù)據(jù)格式化為JSON格式,我們可以使用比較成熟的aspjson類來完成JSON數(shù)據(jù)的格式化,我們只需在代碼中引用aspjson文件,使用QueryToJSON函數(shù)即可完成所有任務(wù)。
氣象數(shù)據(jù)的提取和標記信息提取類似,不過前臺會向后臺傳遞參數(shù)值,后臺根據(jù)參數(shù)值來提取對應(yīng)的數(shù)據(jù)信息,并格式化成JSON格式后傳遞給前臺。
系統(tǒng)顯示頁面標記在500個以下的時候,系統(tǒng)頁面運行流暢,當(dāng)標記數(shù)超過2000個時,系統(tǒng)頁面運行有遲鈍現(xiàn)象,所以根據(jù)需要增加了地圖縮小控制,當(dāng)縮小到一定級別后,只顯示部分標記。另外單個標記位置放大后,雖然周圍影像圖顯示效果良好,但是缺少周圍的海拔高度信息,如果能通過海拔高度服務(wù)來增加海拔高度,系統(tǒng)將更完善。
[1]陸亞龍,肖功建.氣象災(zāi)害及其防御[M].北京:氣象出版社,2001.