智能网格预报在专业气象服务中的应用
2020-03-18赵清扬
彭 飞,赵清扬
(1.四川省德阳市气象局,四川 德阳 618000;2.四川省气象服务中心,四川 成都 610072)
0 引言
目前,我国的气象服务体系由决策气象服务、公众气象服务、专业专项气象服务和气象科技服务构成[1-3]。专业气象服务[4-8]是公共气象服务的重要组成部分,是对一些行业用户提供专业的气象服务,是根据用户的需求而制作相应的预报服务。由于专业用户所在行业不同,对气象服务的需求也各不相同,这给从事专业气象服务的工作人员提出了新的课题:如何才能快速应对各行业用户多样化的业务需求。
通过梳理各种专业气象服务的需求不难发现,其核心就是天气预报服务。精细化格点要素预报是目前中国气象局的主推业务和未来天气预报的发展方向[9-11]。在2017年底前,我国气象预报服务统一数据源的“一张网”网格预报业务已经开始正式运行。位于国家气象中心天气业务内网中的智能网格预报[12-17]应用分析平台网站提供了基于位置的精细化气象服务,实现了天气预报从传统站点预报向格点预报的转变。在该网站的前端页面上,提供了根据某点经纬度信息来获得该点未来10 d天气预报数据的功能,相应的预报数据可以从页面上下载并导出到Excel格式的文档中。从前端页面经纬度数据的准备和提交,到下载服务器返回的数据到本地,再对数据进行分析处理,最终形成气象服务产品和文档,都需要手工操作,流程繁琐、效率低下,还容易出错。用软件来实现以上过程将极大地提高工作效率。
下文,以开发德阳市高速公路智能网格预报服务软件为例,介绍利用Fiddler抓包工具软件和Aspose.Words for .NET[18-20]类库相结合,一键实现客户端向服务器发出请求、从服务器返回的信息中解析出需要的预报数据、并将数据写入Word模板中,自动地生成德阳市高速公路专业气象服务产品文档的全部功能。
1 技术方法
用软件来模拟浏览器向服务器请求数据时,要明确客户端需要向服务器发送什么样的参数,从服务器返回的信息中哪些数据是有用的预报数据。这就需要Fiddler等抓包工具软件在浏览器向服务器请求数据的过程中,对请求的各种参数和返回的信息进行侦测。当获取到预报数据后,再结合Aspose.Words for .NET类库自动生成Word格式的气象服务产品文档。
1.1 Fiddler抓包工具软件
Fiddler是强大的HTTP调试抓包工具,可以用其检测网页和服务器的交互情况,其原理是以Web代理服务器的形式进行工作的,它能记录客户端和服务器之间的http和https所有通讯,查看所有的“进出”Fiddler的数据。
1.2 Aspose.Words for .NET
Aspose.Words for .NET是.NET环境下功能强大的Word文档处理类库,它支持DOC、PDF、RTF、OOXML、HTML、OpenDocument、EPUB、XPS等格式。通过Aspose.Words for .NET类库和.NET平台下的编程语言相结合,在没有安装Microsoft Word软件的环境中,也可以生成Word格式的文档,并能对文档进行查看、修改、渲染、格式转换以及打印等操作,也无需考虑Microsoft Office软件的版本兼容性问题,灵活地实现办公文档的自动化。
2 专业气象服务产品文档自动生成
2.1 利用Fiddler侦测客户端和服务器之间的通讯
首先,运行Fiddler软件,确保软件的Capture Traffic是开启的。用浏览器访问智能网格预报应用分析平台网站,在网页的文本框中输入某站点的经纬度数据,并把数据向网站服务器提交。服务器在接收到浏览器的请求后,向前端页面返回该站点连续10 d的天气预报,返回的气象要素包括:降水量、气温、风速、相对湿度和云量。Fiddler详细而完整地记录了从提交请求到返回数据这一过程。
在Fiddler软件的数据包列表窗口中,点击和智能网格预报应用分析平台网站(Ip地址为10.1.64.146)相关的数据包,在右侧请求(即客户端发出的数据)窗口中的Headers标签页显示的数据就是客户端向服务器请求数据时需要的各个参数,包括请求方式、协议、Client头域、主机名或域名等。在响应(服务器返回的数据)窗口中的TextView标签页显示的是从服务器返回给客户端的数据,这些数据是以JSON对象的方式呈现的,其中包括以“category”、“data”和“publishDate”为键名的键值对。通过分析可知,“category”键对应的值是气象要素的预报时间,“data”键对应的值是气象要素的预报值,“publishDate”键对应的值是智能网格预报发布的时间。如图1所示。
2.2 开发软件的步骤及关键代码
首先,在Visual Studio IDE(Integrated Development Environment:集成开发环境)中建立一个WinForm项目,在工程中添加对Aspose.Words.dll和Newtonsoft.Json.dll文件的引用,并引入命名空间:
using Aspose.Words;
using Newtonsoft.Json.Linq;
模拟浏览器向服务器发起请求的主要代码如下:
string longitude = longitudeAndLatitude.Split(',')[0];//经度
string latitude = longitudeAndLatitude.Split(',')[1];//纬度
if(element.ToLower() == "rain")//降水
{
strURL = "http://10.1.64.146/WebHandler/MeteoHandler?method=getmeteodat
ablockfeatureinfo&type=grid&relativePath=/forecast/QPF_V2/gridrain03&format=grid03_{yyyyMMddHH}.{XXX}&publishDate=" + publishDate +"&lat=" + latitude + "&lng=" + longitude + "&day=10";
}
……(向服务器请求气温、风速和云量的代码与降水相似,此处略去。)
图1 Fiddler侦测浏览器和服务器之间的通讯Fig.1 Fiddler detects communication between the browser and the server
然后,解析从服务器返回的JSON格式的数据,主要代码如下:
var responseStr = HttpGet(url);//用各个URL和对应的参数查询
JObject jObj = JObject.Parse(responseStr);//反序列化Json数据
//存放日期时间的数组
JArray dataArrayDatetime = JArray.Parse(jObj["category"].ToString());
JArray dataArray = JArray.Parse(jObj["data"].ToString());//存放元素值的数组
int intCountOfData = dataArrayDatetime.Count;
//字典,用于存储全部的日期时间及其对应的数据(气温、降水、风速、云量)
Dictionary
//每次请求URL时返回的时间和元素值对应(个数相等)
for(int i = 0; i < intCountOfData; i++)
dict.Add(dataArrayDatetime[i].ToString(), dataArray[i].ToString());
……
最后,把预报数据写入事先准备好的Word模板中,以便生成服务产品文档。关键代码如下:
Aspose.Words.Document doc = new Aspose.Words.Document(strDocPath);
Aspose.Words.Bookmarkdatetime_header = doc.Range.Bookmarks["datetime_header"]; //当前书签 datetime_header
SetBookmarkValue(datetime_header, strYMD_bookmark);//给当前书签的文本赋值
……
bookmark = doc.Range.Bookmarks[tq_bookmark]; //当前书签(天气现象)
SetBookmarkValue(bookmark, tq_dic[curDT]);//给当前书签的文本赋值
……
sfd.FileName = strYMD_file + ".docx";//要保存的文件名(word格式)
doc.Save(sfd.FileName);//保存文档
……
软件最终生成的德阳市高速公路专业气象服务产品文档截图(部分)如图2所示。
图2 高速公路专业气象服务产品Fig.2 Documentation of Expressway Meteorological Service Products
3 结语
通过利用抓包软件监视浏览器和智能网格预报网站服务器之间的通讯,可以详细地掌握客户端向服务器请求数据时需要提供的参数和从服务器向客户端返回的数据,从而为开发软件来模拟浏览器向服务器请求数据提供了依据。再配合功能强大的Aspose.Words for .NET第三方类库,可以非常高效地实现智能网格预报专业气象服务产品文档的一键生成,极大地提高了工作效率。