方傳極
(南平地震臺(tái),福建 南平 353000)
臨海臺(tái)站的傾斜、重力、位移、應(yīng)變觀測(cè)資料除了能記錄到正常的固體潮變化之外,還能更多地記錄到海潮干擾信息。目前國(guó)內(nèi)外很多學(xué)者圍繞海潮模型的構(gòu)建和優(yōu)化、海潮負(fù)荷對(duì)重力、地傾斜固體潮的影響和改正以及針對(duì)某地區(qū)最優(yōu)海潮模型的選擇等方面做了很多深入、系統(tǒng)的研究。由于互聯(lián)網(wǎng)的數(shù)據(jù)無(wú)法滿足大數(shù)據(jù)量下載,本系統(tǒng)通過(guò)互聯(lián)網(wǎng)定時(shí)采集潮汐信息并保存在本地?cái)?shù)據(jù)庫(kù),作為基礎(chǔ)的研究資料供研究人員下載研究。另外在日常地震臺(tái)站數(shù)據(jù)處理與分析中,需要利用本地及更大范圍的氣象資料,作為輔助資料。通過(guò)采集氣象網(wǎng)站的數(shù)據(jù),應(yīng)用數(shù)據(jù)庫(kù)存儲(chǔ)技術(shù)保存。
本系統(tǒng)共包括4 部分,前端Web 交互界面、后端應(yīng)用、數(shù)據(jù)庫(kù)設(shè)計(jì)以及數(shù)據(jù)采集。
用戶通過(guò)瀏覽器界面與后端應(yīng)用進(jìn)行交互,實(shí)現(xiàn)了數(shù)據(jù)的呈現(xiàn)、下載與可視化。后端設(shè)置了兩個(gè)應(yīng)用,針對(duì)提交的不同的請(qǐng)求數(shù)據(jù)進(jìn)行響應(yīng),分別從數(shù)據(jù)庫(kù)中提取數(shù)據(jù)和計(jì)算數(shù)據(jù),并提交給用戶。分析潮汐表和氣象數(shù)據(jù)源,均使用了json 格式封裝,通過(guò)解析json 包,可以做到快速地入庫(kù)(圖1)。
圖1
表1 潮汐數(shù)據(jù)表
表2 氣象數(shù)據(jù)表
系統(tǒng)采用python 語(yǔ)言開(kāi)發(fā),應(yīng)用了DJANGO WEB框架,通過(guò)MTV(M 代表模型、T 代表模板、V 代表視圖)模式,對(duì)數(shù)據(jù)后端與前端進(jìn)行了解耦。
通過(guò)分析中國(guó)海事網(wǎng)潮汐表頁(yè)面(https://www.cnss.com.cn/)和中央氣象臺(tái)天氣實(shí)況頁(yè)面(http://www.nmc.cn/),均使用了highcharts 可視化圖表庫(kù),數(shù)據(jù)包通過(guò)json 格式傳輸,并通過(guò)javascript 進(jìn)行頁(yè)面DOM 操作。只需針對(duì)不同的潮汐站點(diǎn)或氣象站點(diǎn)提交GET 數(shù)據(jù)包請(qǐng)求數(shù)據(jù)即可下載json 數(shù)據(jù)包。
后端應(yīng)用設(shè)置了潮汐、氣象兩個(gè)應(yīng)用用于響應(yīng)前端請(qǐng)求,通過(guò)VIEW 視圖層實(shí)現(xiàn),在Django 框架中,VIEW視圖層充當(dāng)了溝通數(shù)據(jù)庫(kù)與模板的橋梁,也是業(yè)務(wù)邏輯處理的核心。
潮汐應(yīng)用提供了站點(diǎn)信息、潮汐數(shù)據(jù),以及數(shù)據(jù)的潮差、最大值、最小值、均值等的計(jì)算,通過(guò)設(shè)計(jì)好的模板層,把數(shù)據(jù)庫(kù)中的數(shù)據(jù)呈現(xiàn)在用戶眼前。
氣象應(yīng)用提供了站點(diǎn)信息、氣象數(shù)據(jù)(溫度、氣壓、降雨、濕度、風(fēng)速)的信息以及氣象數(shù)據(jù)的最大值、最小值、總降雨量等。
通過(guò)設(shè)置cookies,把用戶的設(shè)置保存在瀏覽器本地,包括站點(diǎn)信息、日期信息等。
還提供了下載的通道,通過(guò)提交站點(diǎn)、日期等信息,按照每個(gè)整點(diǎn)1 行的形式導(dǎo)入數(shù)據(jù)到Excel 文檔中,用戶可以轉(zhuǎn)化為txt 等用于matlab 程序使用。
在Django 框架中,數(shù)據(jù)庫(kù)以模型層來(lái)實(shí)現(xiàn)與實(shí)際的數(shù)據(jù)庫(kù)做數(shù)據(jù)的交換,模型中的每個(gè)類對(duì)應(yīng)了數(shù)據(jù)庫(kù)中的一張表,這樣的好處是通過(guò)映射關(guān)系,剝離了具體數(shù)據(jù)庫(kù)的束縛,不需要面對(duì)因數(shù)據(jù)庫(kù)的變更而導(dǎo)致的無(wú)效勞動(dòng)。
潮汐應(yīng)用設(shè)置了兩張表,分別是潮汐站點(diǎn)表和潮汐數(shù)據(jù)表。氣象應(yīng)用設(shè)置了三張表,分別是省域表、縣域表和氣象數(shù)據(jù)表。其中氣象數(shù)據(jù)提供了溫度、氣壓、降雨、濕度、風(fēng)速、風(fēng)向等信息(如表1,表2)。
前端交互界面不僅提供了站點(diǎn)、日期等選擇按鍵,還提供了數(shù)據(jù)可視化的功能,頁(yè)面采用了百度使用JavaScript 開(kāi)發(fā)的Echarts 開(kāi)源可視化類庫(kù),通過(guò)script 引入echarts.min.js 腳本,就可實(shí)現(xiàn)折線圖、地圖等可視化應(yīng)用。
Echarts 基于json 數(shù)據(jù),制圖過(guò)程采用編輯代碼的形式。首先為Echarts 準(zhǔn)備一個(gè)具備寬高的DOM 容器,并指定圖表的配置項(xiàng)和數(shù)據(jù),其核心部分就是option 配置代碼。
地圖采用GeoJSON 地理數(shù)據(jù)格式,一個(gè)GeoJSON 對(duì)象可以表示一個(gè)空間區(qū)域,可以表示幾何、特征或者特征集合。通過(guò)引入GeoJSON 數(shù)據(jù)包,可以為Echarts 地圖提供數(shù)據(jù)支持。
下載數(shù)據(jù)時(shí)本來(lái)采用ajax 請(qǐng)求數(shù)據(jù)技術(shù),但是由于ajax 請(qǐng)求只是個(gè)“字符型”的請(qǐng)求,即請(qǐng)求的內(nèi)容是以文本類型存放的。文件的下載是以二進(jìn)制形式進(jìn)行的,ajax沒(méi)法解析后臺(tái)返回的文件流,所以無(wú)法處理二進(jìn)制流response 輸出來(lái)下載文件。這里直接用JavaScript 生成臨時(shí)表單post 提交的方式,解決了此問(wèn)題。
利用互聯(lián)網(wǎng)提供的共享資料進(jìn)行數(shù)據(jù)分析,對(duì)現(xiàn)有的業(yè)務(wù)進(jìn)行了輔助,由于互聯(lián)網(wǎng)的數(shù)據(jù)在不斷地更新中,并未能提供長(zhǎng)期的資料支持,需要我們自建數(shù)據(jù)庫(kù)保存數(shù)據(jù)與提供web 應(yīng)用供研究人員使用。