潮汐与气象信息采集WEB 应用*
2021-05-02方传极
方传极
(南平地震台,福建 南平 353000)
临海台站的倾斜、重力、位移、应变观测资料除了能记录到正常的固体潮变化之外,还能更多地记录到海潮干扰信息。目前国内外很多学者围绕海潮模型的构建和优化、海潮负荷对重力、地倾斜固体潮的影响和改正以及针对某地区最优海潮模型的选择等方面做了很多深入、系统的研究。由于互联网的数据无法满足大数据量下载,本系统通过互联网定时采集潮汐信息并保存在本地数据库,作为基础的研究资料供研究人员下载研究。另外在日常地震台站数据处理与分析中,需要利用本地及更大范围的气象资料,作为辅助资料。通过采集气象网站的数据,应用数据库存储技术保存。
1 系统框架
本系统共包括4 部分,前端Web 交互界面、后端应用、数据库设计以及数据采集。
用户通过浏览器界面与后端应用进行交互,实现了数据的呈现、下载与可视化。后端设置了两个应用,针对提交的不同的请求数据进行响应,分别从数据库中提取数据和计算数据,并提交给用户。分析潮汐表和气象数据源,均使用了json 格式封装,通过解析json 包,可以做到快速地入库(图1)。
图1
表1 潮汐数据表
表2 气象数据表
2 系统实现
系统采用python 语言开发,应用了DJANGO WEB框架,通过MTV(M 代表模型、T 代表模板、V 代表视图)模式,对数据后端与前端进行了解耦。
2.1 数据采集
通过分析中国海事网潮汐表页面(https://www.cnss.com.cn/)和中央气象台天气实况页面(http://www.nmc.cn/),均使用了highcharts 可视化图表库,数据包通过json 格式传输,并通过javascript 进行页面DOM 操作。只需针对不同的潮汐站点或气象站点提交GET 数据包请求数据即可下载json 数据包。
2.2 后端应用
后端应用设置了潮汐、气象两个应用用于响应前端请求,通过VIEW 视图层实现,在Django 框架中,VIEW视图层充当了沟通数据库与模板的桥梁,也是业务逻辑处理的核心。
潮汐应用提供了站点信息、潮汐数据,以及数据的潮差、最大值、最小值、均值等的计算,通过设计好的模板层,把数据库中的数据呈现在用户眼前。
气象应用提供了站点信息、气象数据(温度、气压、降雨、湿度、风速)的信息以及气象数据的最大值、最小值、总降雨量等。
通过设置cookies,把用户的设置保存在浏览器本地,包括站点信息、日期信息等。
还提供了下载的通道,通过提交站点、日期等信息,按照每个整点1 行的形式导入数据到Excel 文档中,用户可以转化为txt 等用于matlab 程序使用。
2.3 数据库设计
在Django 框架中,数据库以模型层来实现与实际的数据库做数据的交换,模型中的每个类对应了数据库中的一张表,这样的好处是通过映射关系,剥离了具体数据库的束缚,不需要面对因数据库的变更而导致的无效劳动。
潮汐应用设置了两张表,分别是潮汐站点表和潮汐数据表。气象应用设置了三张表,分别是省域表、县域表和气象数据表。其中气象数据提供了温度、气压、降雨、湿度、风速、风向等信息(如表1,表2)。
2.4 前端交互界面
前端交互界面不仅提供了站点、日期等选择按键,还提供了数据可视化的功能,页面采用了百度使用JavaScript 开发的Echarts 开源可视化类库,通过script 引入echarts.min.js 脚本,就可实现折线图、地图等可视化应用。
Echarts 基于json 数据,制图过程采用编辑代码的形式。首先为Echarts 准备一个具备宽高的DOM 容器,并指定图表的配置项和数据,其核心部分就是option 配置代码。
地图采用GeoJSON 地理数据格式,一个GeoJSON 对象可以表示一个空间区域,可以表示几何、特征或者特征集合。通过引入GeoJSON 数据包,可以为Echarts 地图提供数据支持。
下载数据时本来采用ajax 请求数据技术,但是由于ajax 请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。文件的下载是以二进制形式进行的,ajax没法解析后台返回的文件流,所以无法处理二进制流response 输出来下载文件。这里直接用JavaScript 生成临时表单post 提交的方式,解决了此问题。
3 结束语
利用互联网提供的共享资料进行数据分析,对现有的业务进行了辅助,由于互联网的数据在不断地更新中,并未能提供长期的资料支持,需要我们自建数据库保存数据与提供web 应用供研究人员使用。