APP下载

县级气象微信公众服务平台的开发与设计
——以“寻甸气象”为例

2022-03-24黄初龙董思平胡卫芬王占良

陕西气象 2022年2期
关键词:实况气象预警

黄初龙,董思平,邓 祥,胡卫芬,耿 琼,王占良

(1.寻甸回族彝族自治县气象局,云南寻甸 655200;2.昆明市气象局,昆明 650000)

微信是当前我国公众使用最为广泛、普及率最高的一类社交通信软件,利用微信可将气象信息及时、准确地推送给用户,显著提升气象服务信息的时效性和服务水平,因此利用微信开展县级气象服务是目前社会发展的大趋势。国内许多气象工作者对此做了大量工作,金淼等[1]、田新芳等[2]、骞少禹等[3]、张伟强等[4]、何步江等[5]、刘豫等[6]、毕陟等[7]对微信开展气象服务进行了研究,龙亚星等[8]、何林等[9]、刘名等[10]、陈科等[11]、马锋等[12]对基于自动站数据的接口进行了相关业务服务研究。

县级气象部门处于气象服务一线,在服务地方经济社会发展、服务民生、服务各行各业等方面发挥着重要作用。随着互联网+、大数据、AI等新型技术的发展,公众接收气象信息的手段、方式和渠道越来越多,导致出现部分气象信息和气象部门提供的预报、预警和服务结论不一致、信息重叠等多种问题。县级气象部门如何掌握气象服务的主动权是值得思考的一个现实问题。云南省寻甸回族彝族自治县气象局设计开发了“寻甸气象”微信公众服务平台,将县级气象数据图形化,通过微信公众服务平台将气象监测、预报、预警和服务信息及时进行主动推送,解决县级气象服务存在的预报预警服务不及时、传播渠道单一等难题。

1 系统框架设计

县级气象微信公众服务平台对于整合气象业务数据以及全面提升气象服务能力具有十分重要的意义。系统结构主要分为4个部分(图1):气象数据采集存储系统,接口服务系统,前端展示系统,后端发布系统。4个部分均采用成熟的架构开发。

图1 系统结构及功能模块图

县级气象微信公众服务平台的服务都基于微信公众号接口实现对接,用户打开手机微信实现操作和查看,手机点击微信公众号的菜单查看前端展示系统,前端展示系统根据用户指令通过接口服务系统访问气象数据采集存储系统,气象数据采集存储系统从三大平台实现数据采集。后端发布系统主要解决检索和利用微信公众号实现服务信息主动推送,如推送预警信息、天气预报、超过阈值的实况信息等。

2 系统功能设计

2.1 气象数据采集存储系统

主要从综合气象信息共享平台采集寻甸全县观测站地面逐小时资料、省级格点预报订正产品、精细化预报产品、雷达单站PUP产品;从国家突发事件预警信息发布网采集预警信息;从县级预报制作系统采集短期天气预报、乡镇预报和各类气象服务产品。并进行必要的解析、转换,然后通过接口服务系统存储到气象数据采集存储系统。

从国家突发事件预警信息发布网采集预警信息关键核心代码如下。

stringmatchName = String.Format("{0}(气象局|气象台|突发事件)", stationName);

Regex reg = new Regex(matchName);

string result = GetAlert ();

var json = DynamicJson.Parse(result);

foreach (var item in json.alertData){

string title = item.headline;

var match = reg.Match(title);

if (match.Success && match.Value.Length > 0){

string signaltype, signallevel;

bool bRet = GetAlert_Class_Level

(item.headline, out signaltype, out signallevel);

AlertData obj = new AlertData();

obj.issueTitle = item.headline;

obj.issueContent = item.description;

obj.areaName = title.Substring(0, nLen);

obj.signalType = signaltype;

obj.signalLevel = signallevel;

obj.issueTime = item.sendTime;

list.Add(obj); }}

2.2 接口服务系统

接口服务系统用于向气象微信公众服务平台提供基于HTTP请求与应答服务,实现所有模块的动态升级,主要提供以下功能。①与数据库相连,为气象数据采集存储系统提供数据同步服务。②与数据库相连,为前端展示系统提供实况、预报、预警、气象服务产品等各类定制化的气象数据获取服务。③与微信公众平台对接,为寻甸气象微信菜单提供增加、删除、改动和查询服务;为后端发布系统提供定制化预报、服务产品和实况告警信息的自动发送。④处理文件系统中雷达、网格预报等数据解析生成的前端展示产品。

操作微信公众号接口关键核心代码如下。

Encodingencoding = Encoding.UTF8;

string url = String.Format("https://api.weixin.qq.com/cgi-bin/menu/create?access_token={0}", accessToken);

byte[] data = encoding.GetBytes(menu);

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Method = "POST";

request.ContentType = "application/x-www-form-urlencoded";

Stream writer =request.GetRequestStream();

writer.Write(data, 0, data.Length);

writer.Flush();

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);

string retString = reader.ReadToEnd();

reader.Close();

2.3 前端展示系统

展示系统基于Html5开发,主要提供以下功能。①基于高德地图显示地面逐小时资料、雷达单站PUP产品、乡镇预报等资料。②基于位置定位显示智能网格、临近雨情、闪电定位、灾情上报等资料。③图文列表方式显示气象数据统计查询、天气预警、气象服务产品和气象科普等资料。

在实际展示功能设计上,在满足用户实际需求的前提下,提供差异化和个性化的特色内容。用户可基于位置提供的功能有监测实况、预报预警和气象服务3大类功能,有效对接气象部门相关业务系统,利用接口服务系统展现系统所需数据的自动获取、转换和显示。

前端展示系统定位关键核心代码如下。

lbsMap.geolocation = new AMap.Geolocation({

enableHighAccuracy: true,timeout: 10000,maximumAge: 0,convert: true,showButton: false,showMarker: true,

showCircle: true,panToLocation: true,zoomToAccuracy: false});

lbsMap.mapObj.addControl(lbsMap.geolocation);

AMap.event.addListener(lbsMap.geolocation, ′complete′, lbsMap.geolocation_onComplete);

AMap.event.addListener(lbsMap.geolocation, ′error′, lbsMap.geolocation_onError);

lbsMap.geolocation.getCurrentPosition();});

前端展示系统插值处理关键核心代码如下:

List borders =wContour.Contour. TracingBorders(gridData, gridX, gridY, ref s1, UnDefData);

List polyLines = wContour.Contour. TracingContourLines(gridData, gridX, gridY, contourVals.Length, contourVals, UnDefData, borders, s1);

List smoothedLines = wContour. Contour.SmoothLines(polyLines);

List polygons =wContour.Contour. TracingPolygons(gridData, smoothedLines, borders, contourVals);

int bmpHeight = (int)(bmpWidth * (extent.YMax-extent.YMin) / (extent.XMax-extent.XMin));

Bitmap bmp = newBitmap(bmpWidth, bmpHeight);

GraphicsgData = Graphics.FromImage(bmp);

gData.Clear(bgColor);

Color[] mColors = new Color[newColDef. ColorList.Count];

for (int i = 0; i < newColDef.ColorList.Count; i++)

{

mColors[i] = newColDef.ColorList[i].Color;

}

2.4 后端发布系统

后端发布系统主要提供以下功能。①定时检索短期天气预报、天气预警以及气象服务产品是否更新,如果有更新则调用接口服务系统发送。②定时检查气象站实况要素是否达到告警订阅的阈值,并获取订阅的粉丝信息,调用接口服务系统发送。

后端发布系统关键核心代码如下。

OpenIdResultJson list = wechatApi.Get(token.access_token, "");

if (list.data != null && list.data.openid != null)

{

foreach (string id in list.data.openid)

{

if (!String.IsNullOrEmpty(id))

wechatApi.SendTemplateMessage(token.access_token, id, req.templateid, req.url, data);

}

}

3 关键技术

在系统设计与实现过程中要重点考虑并解决用户增多所带来的并发访问题,系统通过图片服务器分离技术、缓存技术、库表散列技术确保用户的访问速度和后期升级。

3.1 图片服务器分离技术

对于Web服务器来说,图片和视频是最消耗资源的,将图片与页面进行分离,图片使用独立的图片服务器。这样的架构可以降低提供页面访问请求服务器系统的压力,并且可以保证系统不会因为图片问题而崩溃。在应用服务器和图片服务器上,可以进行不同的配置优化,比如配置ContentType的时候可以尽量少支持,尽可能少的LoadModule,保证更低的系统消耗和更高的执行效率。

3.2 缓存技术

缓存就是在内存中存储的数据备份,当数据没有发生本质改变的时候,就不让数据的查询去数据库进行操作,而去内存中读取数据,这样就大大降低了数据库的读写次数,而且从内存中读取数据的速度比去数据库查询要快一些,这样同时又提高了效率。

缓存技术关键核心代码如下:

public static T Get(string key, Func getCacheFunc, int expireTime, params object[] args)

{

if ((Get(key) == null)) {

lock (_lockHelp){

if ((Get(key) == null)) {

Insert(key, getCacheFunc(args), expireTime); }

}

}

return (T)Get(key);

}

3.3 库表散列技术

为解决数据库的瓶颈,从应用程序的角度来考虑改善系统架构,采用库表散列解决方案。在应用程序中按照业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如粉丝表,按照粉丝OpenID进行表散列,这样就能够以较低的成本提升系统的性能并且有很好的扩展性。

4 应用情况

经测试,县级气象微信公众服务平台——寻甸气象可通过扫二维码或者添加公众号进行关注使用,适用于手机的任何操作系统,推广使用较为简单方便。

平台于2019年11月在寻甸县进行测试使用,测试用户可主动通过菜单、指令方式获取实况、预报、预警信息。目前平台提供每月4次最多20条图文信息群发;实时群发乡镇天气预报、气象灾害预警信息;提供发送路径,规定WORD文档文件名命名规则,后台实时接收处理并群发气象服务信息;用户也可通过菜单、指令方式获取实况、预报、预警信息。

平台给用户提供基于位置的天气实况、气象服务等监测预报预警信息,实现了精细化、互动式、基于位置的智能气象服务,实现部门之间信息共享。该平台的运行对于县级气象部门在服务地方经济社会发展中发挥着重要作用。

5 结论与讨论

(1)县级气象部门利用微信开展气象服务,能降低设备和网络费用、保障维护等技术问题,同时发挥微信用户广、服务高效、易于推广的特点,有力拓展了县级气象服务渠道和提高服务质量。

(2)在系统结构设计上,考虑到后期正式推广后用户逐渐增长的趋势情况,采用图片服务器分离技术、缓存技术和库表散列技术确保用户增长后服务器可动态扩展,提高开发效率和用户访问速度。

(3)在功能设计上,基于用户定位实现交互式、个性化服务;对数据查询提供数值、列表、图形等多种简单明了的服务内容;便捷高效的提供实况、预警、预报和各类气象服务信息,功能满足大部分公众用户需求,实况订阅、天气快报等模块又兼顾防灾减灾行业部门的需求,功能设计比较全面。

(4)平台采用模块化的设计思路,用户操作简单方便,后期完善和升级较为便捷。

猜你喜欢

实况气象预警
气象树
《内蒙古气象》征稿简则
气象战士之歌
法国发布高温预警 严阵以待备战“史上最热周”
乡村小学的愿望与现实——宜君乡村教育实况
大国气象
园林有害生物预警与可持续控制
天舟一号货运飞船发射实况掠影
可爱潮咖们的独门彩妆实况直播
机载预警雷达对IFF 的干扰分析