魯 玲,盧紹宗
(廣西北海市氣象局,廣西北海 536000)
?
應用MUSIC 開發(fā)北海區(qū)域自動氣象站采集系統(tǒng)
魯 玲,盧紹宗
(廣西北海市氣象局,廣西北海 536000)
介紹了北海區(qū)域自動氣象站采集系統(tǒng)的功能設計、數據庫和數據表設計以及系統(tǒng)的實現,并列舉了該系統(tǒng)的幾個關鍵技術。該采集系統(tǒng)采用C#開發(fā),通過氣象數據統(tǒng)一服務接口MUSIC調用全國綜合氣象信息共享系統(tǒng)CIMISS的地面資料,更新本地基礎氣象數據庫的自動站采集數據表,為北海市氣象現代化服務平臺提供可靠、準確的數據。通過業(yè)務應用證實,系統(tǒng)運行穩(wěn)定、性能好。該系統(tǒng)對推進全國綜合氣象信息共享系統(tǒng)CIMISS業(yè)務化、實現業(yè)務系統(tǒng)與CIMISS的對接起到了示范作用,具有推廣價值。
MUSIC;自動氣象站采集系統(tǒng);CIMISS;C#
隨著北海市氣象事業(yè)的不斷發(fā)展,建設北海市氣象現代化服務平臺被列為北海市氣象局的重點開發(fā)項目。該項目以提升北海市氣象局現代化建設的科技內涵、增強氣象部門業(yè)務服務能力、提高業(yè)務服務人員工作效率為目的,充分融合和利用現有業(yè)務系統(tǒng),建成統(tǒng)一信息采集、統(tǒng)一數據存貯、統(tǒng)一加工分析處理、統(tǒng)一產品制作、統(tǒng)一信息發(fā)布的集約化、智能化的綜合氣象業(yè)務服務平臺。
針對中國氣象局推進全國綜合氣象信息共享系統(tǒng)(China Integrated Meteorological Information Service System,CIMISS)[1]業(yè)務化應用的要求,北海市氣象現代化服務平臺主動完成了與CIMISS的對接。數據庫系統(tǒng)是北海市氣象現代化服務平臺的基礎,為各種專業(yè)業(yè)務系統(tǒng)提供可靠、準確的數據。北海市氣象現代化服務平臺的數據庫系統(tǒng)采用SQL SERVER 2014管理,在當地創(chuàng)建基礎氣象數據庫、預警數據庫、預報數據庫和系統(tǒng)數據庫等[2]。北海區(qū)域自動氣象站采集系統(tǒng)是北海市氣象現代化服務平臺的一個后臺數據處理軟件,該采集系統(tǒng)通過氣象數據統(tǒng)一服務接口(Meteorological Unified Service Interface Community,MUSIC)調用CIMISS的北海區(qū)域地面資料,更新當地基礎氣象數據庫的自動站采集數據表和系統(tǒng)數據庫的采集時間表,為服務平臺的數據監(jiān)控和實況信息展示模塊提供數據支撐。筆者介紹了該系統(tǒng)的功能設計、數據庫和數據表設計以及系統(tǒng)的實現,并列舉了該系統(tǒng)的幾個關鍵技術。
1.1 系統(tǒng)功能設計 CIMISS是一套覆蓋全國的集數據收集與分發(fā)、質量控制與產品生成、存儲管理、共享服務于一體的國家和省級2級氣象信息共享業(yè)務平臺,以滿足目前和未來現代氣象業(yè)務、科研和服務對氣象信息的需求,發(fā)展繼“9210工程”以來的新一代氣象信息系統(tǒng)為目標,為氣象部門及相關行業(yè)用戶提供綜合氣象探測資料和氣象產品的共享服務[3]。氣象數據統(tǒng)一服務接口(MUSIC)基于國省統(tǒng)一的數據環(huán)境CIMISS,面向氣象業(yè)務和科研,提供全國統(tǒng)一、標準、豐富的數據訪問服務和應用編程接口(API),為國、省、地、縣各級應用系統(tǒng)提供唯一權威的數據接入服務。MUSIC針對氣象應用系統(tǒng),提供多種不同的服務方式,包括客戶端調用服務、web service、REST服務和腳本服務。其中web service一般使用成熟的第三方工程實現,在CIMISS系統(tǒng)中使用axis2來實現。
北海區(qū)域自動氣象站采集系統(tǒng)開發(fā)應用了MUSIC,采用MUSIC提供的web service方式,從服務器獲取wsdl服務,通過API接口賬號使用callAPI_to_serializedStr方法,設置參數并調用接口getSurfEleByTimeAndStaID,按時間、站號檢索地面數據要素,獲取北海區(qū)域的地面逐小時資料和地面分鐘降水資料,返回JSON格式的序列化字符串。經過進一步處理,實現自動氣象站觀測數據本地入庫存儲。
1.2 數據庫與數據表設計 為了對氣象要素進行統(tǒng)一規(guī)范的存儲和服務,保證氣象數據的一致性和準確性,基礎氣象數據庫(db_bh_qx)和系統(tǒng)數據庫(db_bh_xt)的設計參考標準《QX/T 102-2009 氣象資料分類與編碼》和《QX/T 133-2011 氣象要素分類與編碼》[4-5]。建庫后,在基礎氣象數據庫(db_bh_qx)中創(chuàng)建自動站采集數據表(MsgMediumSmallScale)、自動站采集數據臨時表(MsgMediumSmallScaleTemp)和北海自動站站點信息表(SmallScaleStation)等數據表。在系統(tǒng)數據庫(db_bh_xt)中創(chuàng)建系統(tǒng)采集時間表(Collect_Time)[6]。其中,自動站采集數據表(MsgMediumSmallScale)用于存儲采集到的自動氣象站觀測要素等數據。
1.3 系統(tǒng)運行環(huán)境 系統(tǒng)開發(fā)平臺為Microsoft Visual Studio 2010,編程使用C#語言,運行于Microsoft Windows Server 2012 R2 Standard,數據庫管理軟件為SQL SERVER 2014。
2.1 自定義類的設計 系統(tǒng)開發(fā)時設計了處理類AutoStation和AutoStationEntity,工具類DBHelperTool,配置類dbConfig和IniFile,通用類DBHelper和Loghelper。在工具類中添加WebsUtil類和Ws類。類的設計及相關說明如表1所示。
表1 類的設計及相關說明
在AutoStationEntity類中定義11個變量(stationId、stationName、stationLongitude、stationLatitude、stationAltitude、stationObserveElement、stationCity、stationCounty、stationDrainageArea、stationJB、stationCollect),然后在該類中自定義11個屬性,分別用來表示自動站的站點編號、站點名稱、站點經度、站點緯度、站點海拔、站點要素、站點所屬市、站點所屬縣、站點流域、站點級別和站點是否采集標志格式。 在AutoStation類的selectStation方法中首先實例化一個Hashtable對象hashtable,接著讀取北海自動站站點信息表(SmallScaleStation)的列值,將站點編號列值轉換為string類型后賦值給stationid;然后實例化AutoStationEntity類的一個對象autoStation,并根據讀取到的列值分別給對象autoStation定義的站點編號、站點名稱等11個屬性賦值;向hashtable中添加元素,該元素的鍵為stationid,值為autoStation;最后返回hashtable。
2.2 自動氣象站數據采集流程 OperationAutoStationData 是AutoStation類的一個方法,用于處理自動站數據,其工作流程如圖1所示。
2.3 項目配置 在配置文件CollectPath.ini中添加基礎氣象數據庫(db_bh_qx)和系統(tǒng)數據庫(db_bh_xt)的配置信息,包括它們的數據源IP地址、數據庫名稱、登錄用戶名及密碼等。通過dbConfig類可以讀取這些配置信息。在項目中添加app.config文件,在appSettings配置節(jié)添加鍵serverIP并設置IP地址,通過調用ws類從該指定IP地址的服務器上即可獲取wsdl服務。
2.4 系統(tǒng)界面 系統(tǒng)運行后,首先創(chuàng)建哈希表stationTable并初始化為null,用于存放區(qū)域自動氣象站站點信息。新建自動站處理類AutoStation對象,調用Createinstance方法創(chuàng)建實例并賦值給該對象[7]。連接系統(tǒng)數據庫(db_bh_xt)表Collect_Time,使用GetLasterCollectTime方法獲取自動氣象站最新采集時間,若該采集時間不為Null,則將最新采集時間賦值給日期控件。系統(tǒng)界面如圖2所示。
圖1 區(qū)域自動氣象站數據采集流程Fig.1 Collection process of regional automatic weather station data
圖2 北海區(qū)域自動氣象站采集系統(tǒng)界面Fig.2 The interface of collection system of Beihai regional automatic weather stations
通過系統(tǒng)界面的日期控件可以設置采集時間,點擊“修改”按鈕可將系統(tǒng)數據庫(db_bh_xt)表Collect_Time的采集時間更改為日期控件設定的時間值。點擊“啟動采集”按鈕,若stationTable表行數為0,則使用AutoStation類的selectStation方法從表SmallScaleStation獲取北海區(qū)域自動站站點信息。然后按采集時間和自動站站號通過MUSIC獲取相應的要素數據,將數據進行處理后保存到基礎氣象數據庫(db_bh_qx)的自動站采集數據表(MsgMediumSmallScale)和自動站采集數據臨時表(MsgMediumSmallScaleTemp),并更新系統(tǒng)采集時間表(Collect_Time)的采集時間。在實際運行中,將北海區(qū)域自動氣象站采集系統(tǒng)可執(zhí)行文件寫進批處理文件,并設置該批處理文件每隔15 min自動運行1次。通過對基礎氣象數據庫(db_bh_qx)的訪問,在北海市氣象現代化服務平臺上可以查詢到北海區(qū)域自動站的實況數據(圖3)。
3.1 數據契約的使用 數據契約(DataContract)是服務器端和客戶端之間要傳送的自定義數據類型。一旦聲明一個類型為DataContract,該類型就可以被序列化在服務器端和客戶端之間傳送。根據實際情況,需要把每一個要傳送的成員聲明為DataMember。系統(tǒng)開發(fā)時,在WebsUtil類定義數據契約SK和Rain, 區(qū)域自動氣象站數據采集處理過程要用到這2種數據契約。在數據契約SK和Rain中將相關的要素字段代碼聲明為DataMember。根據MUSIC中的要素代碼定義,在數據契約SK中聲明Station_Id_C、Datetime、WIN_D_Avg_2mi、WIN_S_Avg_2mi、WIN_D_Avg_10mi等53個DataMember,在數據契約Rain中聲明Station_Id_C、Datetime、PRE等6個DataMember。
圖3 北海區(qū)域自動站實況數據查詢Fig.3 Live data query of Beihai regional automatic weather stations
3.2 JavaScriptSerializer類的使用 JavaScriptSerializer類位于System.Web.Script.Serialization命名空間下??蛻舳说男蛄谢c反序列化能力由JavaScriptSerializer類的Serialize和Deserialize 2個方法提供。通過web service方式調用方法callAPI_to_serializedStr,并將獲得的JSON字符串轉換為List
param = "userId=BENN_XXXX_XXXXXX" /*1.1 用戶名&密碼*/
+ "&pwd=XXXXXX"
+ "&interfaceId=getSurfEleByTimeAndStaID" /* 1.2 接口ID */
+ "&dataCode=SURF_CHN_MUL_HOR" /* 1.3 必選參數(按需加可選參數) */
//資料:中國地面逐小時
+ "&elements=Station_Id_C,Datetime,WIN_D_Avg_2mi,WIN_S_Avg_2mi,WIN_D_Avg_10mi,WIN_S_Avg_10mi, WIN_D_S_Max,WIN_S_Max,WIN_S_Max_OTime,WIN_D_INST,WIN_S_INST,WIN_D_INST_Max,WIN_S_Inst_Max,WIN_S_INST_Max_OTime,PRE_1h,TEM,TEM_Max,TEM_Max_OTime,TEM_Min,TEM_Min_OTime,RHU,RHU_Min,RHU_Min_OTIME,VAP,DPT,PRS,PRS_Max,PRS_Max_OTime,PRS_Min,PRS_Min_OTime,LGST,LGST_Max,LGST_Max_OTime,LGST_Min,LGST_Min_OTime,GST,GST_Max,GST_Max_Otime,GST_Min,GST_Min_OTime,GST_5cm,GST_10cm,GST_15cm,GST_20cm,GST_40Cm,GST_80cm,GST_160cm,GST_320cm,EVP_Big,PRS_Sea,VIS_HOR_10MI,VIS_Min,VIS_Min_OTime,Lat,Lon,Alti" //檢索要素:站號、站名、小時降水、氣壓、相對濕度、能見度、2 min平均風速、2 min風向等
+ "×=" + datetime.ToString("yyyyMMddHH0000") //檢索時間
+ "&staIds=" + strStationId
+ "&orderby=Station_ID_C:ASC" //排序:按照站號從小到大
+ "&limitCnt=300" //返回最多記錄數
+ "&dataFormat=json"; /* 1.4 序列化格式 */
……
WebsUtil websUtil = new WebsUtil();
string rstData = websUtil.getWsString("callAPI_to_serializedStr", param);
int index = rstData.IndexOf(""DS"");
rstData = rstData.Substring(index + 5, rstData.Length - index - 6);
JavaScriptSerializer js = new JavaScriptSerializer();
List
3.3 SqlHelper類的使用 SqlHelper類位于System.Data.SqlClient命名空間下,是對數據庫操作方法進行封裝的類。SqlHelper類的ExecuteNonQuery方法用于執(zhí)行不返回任何行或值的命令,如非查詢類SQL語句。SqlHelper類的ExecuteReader方法執(zhí)行查詢類的SQL語句或存儲過程,用于返回SqlDataReader對象,該對象包含由某一命令返回的結果集。ExecuteScalar方法通過已有的數據庫連接執(zhí)行SqlCommand,返回值是該命令返回的第1行的第1列。
在方法selectStation、GetLasterCollectTime、OperationAutoStationData中使用了SqlHelper類。部分程序代碼如下:
String strsql = "SELECT [StationID],[StationName],[Province],[City],[County],[Longitude],[Latitude],[Altitude],[StationModel],[ObserveElement],[DrainageArea],[Tributaries],[StartTime],[Jb] FROM [SmallScaleStation] ";
SqlDataReader sqlreader = SqlHelper.ExecuteReader(conn, CommandType.Text, strsql);
3.4 方法重載 方法重載是指調用同一方法名,但各方法中參數的數據類型、個數或順序不同。只要類中有2個以上的同名方法,且使用的參數類型、個數或順序不同,調用時編譯器就可以判斷在哪種情況下調用哪種方法[7]。在設計DBHelper類的方法ExecuteNonQuery時用到了方法重載。程序關鍵代碼如下:
public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText)
// 執(zhí)行指定數據庫連接對象的命令
{
return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter[])null);
}
北海區(qū)域自動氣象站采集系統(tǒng)自2016年5月在北海市氣象局進行業(yè)務試運行以來,能正常采集北海區(qū)域41個自動站的地面逐小時資料和地面分鐘降水資料,系統(tǒng)運行穩(wěn)定、性能好,為北海市氣象現代化服務平臺的數據監(jiān)控和實況信息展示模塊提供了數據支撐。該系統(tǒng)對推進全國綜合氣象信息共享系統(tǒng)CIMISS業(yè)務化、實現業(yè)務系統(tǒng)與CIMISS的對接起到了示范作用,具有推廣價值。
[1] 熊安元,趙芳,王穎,等.全國綜合氣象信息共享系統(tǒng)的設計與實現[J].應用氣象學報,2015,26(4):500-512.
[2] 李集明,王國復.氣象數據庫系統(tǒng)總體設計綜述[J].氣象科技,2007,35(Sl):1-5.
[3] 王旻燕,鄧莉,趙芳,等.CIMISS中氣象衛(wèi)星數據存儲和服務模型[J].安徽農業(yè)科學,2012,40(8):4785-4789.
[4] 國家氣象信息中心.氣象資料分類與編碼:QX/T 102—2009[S].北京:氣象出版社,2009.
[5] 國家氣象信息中心.氣象要素分類與編碼:QX/T 133—2011[S].北京:氣象出版社,2011.
[6] 于平,李漢彬,段?;?,等.市級自動氣象站數據庫顯示系統(tǒng)的設計與實現[J].廣東氣象,2008,30(6):57-58.
[7] 王小科.C#開發(fā)實戰(zhàn)寶典[M].北京:清華大學出版社,2012:159.
Development of Collection System of Beihai Regional Automatic Weather Stations Using MUSIC
LU Ling,LU Shao-zong
(Beihai Meteorological Bureau, Beihai ,Guangxi 536000)
This paper introduced the function design, the design of database and data table and system realization of collection system of Beihai regional automatic weather stations, and enumerated several key technologies of the system.The collection system was implemented by C# programming language and got the surface data of China integrated meteorological information service system using meteorological unified service interface community,updated the collection data table of automatic stations of local fundamental meteorological database,which provided accurate and reliable data for Beihai meteorological modernization service platform. The operational application indicated the system performed stably and had good characteristics. The system had a demonstration for promoting operational application of CIMISS and achieving the integration of business systems and CIMISS in Guangxi. The system had promotion value.
MUSIC;Collection system of automatic weather stations;CIMISS;C#
北海市科學技術局項目(北科合201503004,北科合20160 3001)。
魯玲(1974- ),女,廣西北海人,工程師,從事氣象信息化建設工作。
2016-09-05
S 163+.7
A
0517-6611(2016)32-0179-05