方傳極
(南平地震臺,福建 南平 353000)
臨海臺站的傾斜、重力、位移、應變觀測資料除了能記錄到正常的固體潮變化之外,還能更多地記錄到海潮干擾信息。目前國內外很多學者圍繞海潮模型的構建和優化、海潮負荷對重力、地傾斜固體潮的影響和改正以及針對某地區最優海潮模型的選擇等方面做了很多深入、系統的研究。由于互聯網的數據無法滿足大數據量下載,本系統通過互聯網定時采集潮汐信息并保存在本地數據庫,作為基礎的研究資料供研究人員下載研究。另外在日常地震臺站數據處理與分析中,需要利用本地及更大范圍的氣象資料,作為輔助資料。通過采集氣象網站的數據,應用數據庫存儲技術保存。
本系統共包括4 部分,前端Web 交互界面、后端應用、數據庫設計以及數據采集。
用戶通過瀏覽器界面與后端應用進行交互,實現了數據的呈現、下載與可視化。后端設置了兩個應用,針對提交的不同的請求數據進行響應,分別從數據庫中提取數據和計算數據,并提交給用戶。分析潮汐表和氣象數據源,均使用了json 格式封裝,通過解析json 包,可以做到快速地入庫(圖1)。

圖1

表1 潮汐數據表

表2 氣象數據表
系統采用python 語言開發,應用了DJANGO WEB框架,通過MTV(M 代表模型、T 代表模板、V 代表視圖)模式,對數據后端與前端進行了解耦。
通過分析中國海事網潮汐表頁面(https://www.cnss.com.cn/)和中央氣象臺天氣實況頁面(http://www.nmc.cn/),均使用了highcharts 可視化圖表庫,數據包通過json 格式傳輸,并通過javascript 進行頁面DOM 操作。只需針對不同的潮汐站點或氣象站點提交GET 數據包請求數據即可下載json 數據包。
后端應用設置了潮汐、氣象兩個應用用于響應前端請求,通過VIEW 視圖層實現,在Django 框架中,VIEW視圖層充當了溝通數據庫與模板的橋梁,也是業務邏輯處理的核心。
潮汐應用提供了站點信息、潮汐數據,以及數據的潮差、最大值、最小值、均值等的計算,通過設計好的模板層,把數據庫中的數據呈現在用戶眼前。
氣象應用提供了站點信息、氣象數據(溫度、氣壓、降雨、濕度、風速)的信息以及氣象數據的最大值、最小值、總降雨量等。
通過設置cookies,把用戶的設置保存在瀏覽器本地,包括站點信息、日期信息等。
還提供了下載的通道,通過提交站點、日期等信息,按照每個整點1 行的形式導入數據到Excel 文檔中,用戶可以轉化為txt 等用于matlab 程序使用。
在Django 框架中,數據庫以模型層來實現與實際的數據庫做數據的交換,模型中的每個類對應了數據庫中的一張表,這樣的好處是通過映射關系,剝離了具體數據庫的束縛,不需要面對因數據庫的變更而導致的無效勞動。
潮汐應用設置了兩張表,分別是潮汐站點表和潮汐數據表。氣象應用設置了三張表,分別是省域表、縣域表和氣象數據表。其中氣象數據提供了溫度、氣壓、降雨、濕度、風速、風向等信息(如表1,表2)。
前端交互界面不僅提供了站點、日期等選擇按鍵,還提供了數據可視化的功能,頁面采用了百度使用JavaScript 開發的Echarts 開源可視化類庫,通過script 引入echarts.min.js 腳本,就可實現折線圖、地圖等可視化應用。
Echarts 基于json 數據,制圖過程采用編輯代碼的形式。首先為Echarts 準備一個具備寬高的DOM 容器,并指定圖表的配置項和數據,其核心部分就是option 配置代碼。
地圖采用GeoJSON 地理數據格式,一個GeoJSON 對象可以表示一個空間區域,可以表示幾何、特征或者特征集合。通過引入GeoJSON 數據包,可以為Echarts 地圖提供數據支持。
下載數據時本來采用ajax 請求數據技術,但是由于ajax 請求只是個“字符型”的請求,即請求的內容是以文本類型存放的。文件的下載是以二進制形式進行的,ajax沒法解析后臺返回的文件流,所以無法處理二進制流response 輸出來下載文件。這里直接用JavaScript 生成臨時表單post 提交的方式,解決了此問題。
利用互聯網提供的共享資料進行數據分析,對現有的業務進行了輔助,由于互聯網的數據在不斷地更新中,并未能提供長期的資料支持,需要我們自建數據庫保存數據與提供web 應用供研究人員使用。