县级智能靶向实时预警服务系统的设计及开发
2021-11-04周鹏康秦金梅
周鹏康,丁 圣,秦金梅
(1.玉溪市江川区气象局,云南 江川 652600;2.玉溪市气象局,云南 玉溪 653100;3.玉溪市江川区防震减灾局,云南 江川 652600)
0 引言
云南地处北半球低纬高原,地势起伏较大,千沟万壑,加之气候等造成了云南“一山分四季,十里不同天”。短时强降水的发生发展局地性很强,各地差异明显[1-4],增加了防灾减灾工作的复杂性与艰巨性。在气候变暖背景下,强对流天气具有较强的突发性,中小尺度对流系统往往1~2 h就有可能完成从生成到消亡的整个生命史[5],由其引发的城市内涝、滑坡、泥石流等灾害[6],严重威胁着人们生命财产安全。当前,对强降水天气的监测发布必须适应“预报精准、监测精密、服务精细”的新发展要求,县(区)气象局作为气象部门的窗口,是和人民群众打交道最直接的部门,是“服务精密”能有效实施的保障。传统的气象预警系统发布范围不够精准,遇到需要发布预警时只能全网发布,形成“一人得病,集体吃药”的通病,造成人力、物力资源浪费,有时难免出现“扰民”。
目前,国内各级气象部门都建立了信息发布系统[7-15],但大多都是人工编辑信息,再通过手动选择发布人群,这种方式在处理预警信息发布时在时效性、发布范围上难以把控,与新时代气象服务需求不相适应。因此必须创新服务手段、细化服务方式,改变服务模式。2017年3月14日,中国气象局刘雅鸣局长提出,要实现对重点区域、重点人群、重点时段预警信息的精准靶向发布[16],从此气象“靶向”预警就应运而生。“靶向”预警具有预警发布效率高、针对性强,这是传统预警模式无法做到的,陈石定等[17]提出基于移动靶向技术,喻迎春等[18]基于微信的气象灾害预警信息精准智能推送,梁华玲等[19]网格化多渠道多灾种灾害性天气自动靶向预警。然而,上述成果主要偏重于在预警信息针对所有站点,指标单一无针对性且基于网格化的局部区域发布,而对于如何通过对每一个站点制定不同的预警指标,智能生成预警信息内容,并将预警信息通过“内响应、外联动”在“点、线、面”3个层次基础上融合智能网格预报,实现多渠道向防御责任人的精准发布研究较少。为此,基于新时代气象业务需求,本文研发了智能靶向气象服务预警系统,实现预警信息靶向的多渠道(微信、短信、微博、大喇叭等)个性化发布。系统以县(区)级基层气象部门为单位,以“实况+网格预报”预警服务模式开展靶向服务,有助于发挥决策信息的时效性及针对性,在气象防灾减灾避灾中更好地为政府、相关部门及服务对象等提供决策依据,最大程度减轻灾害造成的损失,对主动服务和融入于地方经济建设具有重要意义。
为此,本文着重分析了预警信息的收集处理及优化、针对每一个站点强降水指标体系的建立、“内响应、外联动”数字化、服务对象与服务策略衔接等。通过系统的研发对基层今后开展预警信息精准发布工作起到推动作用。
1 系统结构和功能模块设计
系统通过实时通信、SQL数据库、GIS和多媒体等技术实现强降水收集、预警和智能精准发布。系统采用Client/Server(客户机/服务器)结构,在Windows1平台下,模块化程序设计,主要以VB为编程语言。系统实现了双重加密登录、模块间运行状态监测、预警信息预提醒、各类信息的自定义存储和提取、预警信息自动关联服务对象、预警信息智能发布策略等。
系统通过对网格预报产品解析、CIMISS降水的分析,根据预设的强降水阈值和“内响应、外联动”工作规范对预警信息进行自动收集、压缩(解压)、预警信息与服务对象有机衔接、预警信息发布状态及日志等。预警信息以语音和手机短信双重警示。系统功能包括预警规则库、信息收集发布和系统设置等3个部分构成(图1)。
图1 系统功能结构Fig.1 System functional structure
1.1 系统运行主界面
系统对网格预报产品解析、预警收集、预警信息的处理呈现等3个模块间运行状态相互间实时监测,确保3个环节安全运行。登录采用两层加密,能更好的保证系统运行的安全性。第一层加密将会定位到所在监控区域,并能识别系统是测试还是正式投入使用;第二层加密涉及所在区域登录人员加密。
图2 系统运行主界面Fig.2 System operation main interface
1.2 预警规则库
1.2.1 短时强降水预警规则库
短时强降水预警规则库阈值指标的提取及应用。短时强降水阈值的制定,不仅需要一个合适阈值,还必须避免过度预警。通过研究江川区域自2005年至2018年以来全部站点连续1小时、3小时、6小时、12小时等4张时段极值分布的研究,得出了强降水极值的区域分布,表明了早期(1、3、6小时)强降水落区基本与12小时重合的结论,并结合基础高程海拔数据、地质灾害易发性分区图(云南省江川县地质灾害防治规划2011-2020年)、江川区地质灾害活动强度趋势预测图、江川县水利局山洪研究成果等,对降水引发的风险隐患(山洪、地质灾害点等)等的综合考虑,制定了针对每一个站点4个等级(Ⅰ、Ⅱ、Ⅲ、Ⅳ)3个时次(1、3和6小时)预警指标。Ⅰ为最高等级,向下兼容。系统最终实现不同的预警指标对应不同的预警服务对象,使面向影响区域的人及上级承担防灾减灾职责的人能及时得到气象预警,从而更好地服务于地方防灾减灾工作(图3)。
图3 强降水预警规则库Fig.3 Heavy precipitation early warning rule base
1.2.2 “内响应、外联动”规则库
近年来气象部门均制定了“内响应、外联动”工作规范及制度,为更好落实该规范,系统对“内响应、外联动”中强降水进行逐条数字化,实现预警信号及强降水监测工作任务得到有效分工。该预警规则被触发时,预警信息将会自动推动给值班员,值班员确认核对信息后,及时推送给局长、副局长、气象台长,做到各尽其责(图4)。
图4 “内响应、外联动”规则库Fig.4 “Internal response and external linkage” rule base
1.3 预警信息收集发布
预警信息收集发布包括智能预报格点分析、站点资料分析、预警信息解析、提醒信息自定义设定或自动提取、信息与服务对象自动对接等5部分组成。
根据预警需求不同划分特定人群就是“靶向气象服务”的靶心。要做好“靶向气象服务”,就需要围绕靶心,准确定位,才能将预警信息分门别类服务到最需要的人群。
智能预报格点分析是应用MATLAB获取智能预警区域网格预报1小时0.05°E×0.05°N格点降水产品,得到每一个网格雨量数据,从而对网格内气象站与网格降雨对应。因临近预报对预警开展较为有利,因此主要考虑0~3 h的预测与所在格点的气象站点建立对应,开展短时临近预警。
站点资料分析对省局CIMISS、市局数据进行融合或者单独处理分析小时及分钟雨量数据(分钟雨量数据是最新整点后,在下一个时刻到来之前这段时间内雨量值的累计,数据更新间隔一般为5分钟),主要处理0~6小时强降水实况监测。以上数据都是调用指控后的CIMISS数据,预警发出前均通过多普勒雷达等产品人工辨别确认信息的可信度,实时修改,确保信息准确。
预警信息处理包括预警信息压缩、解析(图5),从而保证形成的预警信息简洁易读。压缩格式为“|预警等级%站点编号%所在乡镇(街道)%预警值;…|…”,同一个区域之间用“;”分隔,雨量按降序排列,“|”之间存储的是同一个乡镇(街道)站点预警信息。对新增的点用“Add”,等级升高用“Update”。同一预警信息间用“%”分开。解析是以“|”为标示,得到全局站点预警信息,“%”之间获取全局、局部预警等级信息,以及站点服务信息。其中,遇到“Update”时表明有站点预警等级升高,遇到“Add”时表明有新增站点预警。
图5 预警信息格式与服务对象关联Fig.5 Alert information format is associated with the service object
信息自定义存储,自动快捷提取,预警信息的发布时效性较强,如果每次都需要手工录入提醒信息,将会降低信息的发布效率且易出错。系统通过提前添加网址、国土、水利、科普资料及综合防灾减灾等建议文字或Office文档信息分类入库,在需要使用时可通过快捷键及时调取所需信息后只需少量修改就可以完成预警的发布。
信息与“内响应、外联动”人员自动对接(图4)。预警等级与服务对象关联存在3种情况。第一种,预警信息中所有站点的的最高预警等级关联低于等于该等级的全局服务对象;第二种,同一个乡镇(街道)最高等级关联低于等于等级乡镇(街道)服务对象;第三种,站点关联其周围的服务对象。以上3种模式对应8种情况,每次至少生成3条不同的预警短信。
1.4 系统设置
系统设置主要包括基础设置、数据库信息设置、站点信息设置、内响应人员设置、外联动人员设置等。
基础设置有3部分内容组成,分别是预警区域的设置、信息刷新时间设置、预警收集设置。其中,预警收集设置是针对“内响应、外联动”预警信息在同一时次再次发出预警雨量值间隔百分比。对网络通信状态预警、预警信息收集、值班员是否接收预警通知等设置。网络通信状态监控应用了Winsock的UDP协议,对格点预报处理、预警收集状态、预警信息呈现等3个主要模块之间相互通信,确保整个气象预警服务过程预警信息收集处理做到全天候。
数据库信息设置包括本地个性化数据库、市局数据库、CIMISS登录信息、云南省气象信息发布系统接入等的设置。为确认系统安全均对用户名及密码进行了加密。
站点信息设置是为了保证区域站与服务对象建立一对多关系。为了预警服务顺利开展,必须确保站点的地理位置,所属乡镇等信息正确无误。当站点太多时,给预警信息的完整性造成影响,在表中还预留了“所属片区”字段,可分片区开展预警服务,增加预警信息可读性。
内响应人员设置。对预警单位内部人员信息的录入,明确身份,保证了“内响应、外联动”工作规范落地到人。局长、副局长、气象台长及值班员均有不同的职责分工。
外联动人员设置。外联动人员设置关乎预警服务能否顺利开展,“服务精密”在这里得到了体现。外联动人员由于关注强降水落区及服务需求的不同,故设3种控制权限分类录入防御责任人数据库。第一种,全局控制,有4个等级;第二种,局部控制,有3个等级;第三种,点控制,仅有1个等级。每次发布预警短信将会对以上3种情况同时发布,且短信内容也将根据服务及关注区域需求而不尽相同(表1)。
表1 预警等级与服务对象靶向发布对应关系Tab.1 Corresponding relationship between alert level and targeted release of service object
2 系统子程序
系统由网格预报分析投射、预警收集分析、预警信息处理和预警短信发布端等4部分构成。整个预警过程以语音、短信等方式实时提醒值班人员,具有信息交互性和发布过程的可视化。
网格预报分析投射端将从CIMISS下载“Z_NWGD_C_BABJ_……GRB2”网格预报文件,解析后得到网格与期对应时段降雨量,实现气象站所在网格与网络预测雨量值有机结合,期间可以人工干预订正,将作为服务人员掌握未来天气的趋势依据,指导相关服务的开展。
预警收集分析是融合市局区域站服务器和省局CIMISS服务器收集资料,也可任意切换数据源或选择的数据源连接故障时也会自动切换到相关数据源,确保监视无盲区。收集到的预警信息将采用压缩的方式分区域存储,保证信息可读性及精简。强降水预警信息每一种类型1小时内仅生成1条,新增或等级变更的站点将被记录和单独发送,不会造成信息重复发送。
预警信息处理是对预警信息进行解码和发送。发送的信息可以自动生成或自定义编写。各类信息可以通过一定的方式提前分类存储,一键调用,极大地提高了信息发布的时效性。信息的自动生成将会自动关联预警等级与服务对象,值班员需核实预警站点的数据。
预警短信发布是通过自动收集预警信息、信息发送的方式及服务人群等后,自动衔接云南省气象信息发布系统完成预警信息的发送,并记录反馈预警发送状态。
3 系统实现部分功能代码
3.1 智能网格预报分析(MATLAB自动处理)
wds1=24.21
wde2=24.52
jds1=102.58
jde1=102.91
……
%江川地区经度范围及步长
for i=1:1000
if grib_struct(1).gds.Lon1+0.05*i>=jds1
numjd1=i
break
end
end
jd1=grib_struct(1).gds.Lon1+0.05*numjd1
for j=1:1000
if grib_struct(1).gds.Lon1+0.05*(j+numjd1)>=jde1
numjd2=j
break
end
end
jd2=grib_struct(1).gds.Lon1+0.05*(numjd2+numjd1)
ml=num2str(grib_struct(1).stime);
mkdir(ml)
cd (ml)
tpp1006= nan([numjd2+1,numwd2+1])
%处理了未来40个小时数
for m=1:40
for j=numjd1:numjd1+numjd2
for k=numwd1:numwd1+numwd2
gs=j-152+1
ge=k-113+1
tpp1006(gs,ge)= grib_struct(m).data(j,k)
end
end
dlmwrite([num2str(jd1),′-′,num2str(wd1),′-′,grib_struct(m).vtime,′.txt′],tpp1006,′delimiter′,′ ′,′precision′,6,′newline′,′pc′)
end
end
对江川区56个格点未来40个小时的数据进行了提取。
3.2 预警信息靶向发布
If Cmblx.Text = "强降水" Then
Frmsentmsg.VSFlexmsglb.Rows = 1
……
′局部控制--点控制
For j = 1 To VSFlexyjjx.Rows - 1
If Trim $(VSFlexyjjx.TextMatrix(j,1))<> "" Then
xzbg = True ′有新增记录
Exit For
End If
Next
If chkqj.Value = 1 Then ′是否选择了主界面全局发送按钮
′增加全局发送代码
Call qj ′全局控制
If xzbg = True Then ′有新增记录,只发新增加的
……
End If
Call xzkznew
Else ′否则全部点发送
……
Next
Call xzkz ′局部控制--乡镇控制
End If
Else
If xzbg = True Then ′有新增记录,只发新增加的
……
Call xzkznew
Else ′否则全部点发送
Call qj ′全局控制
……
Call xzkz ′局部控制--乡镇控制
End If
End If
sqlsent = "update alertrecord set userzb=′" & Labzb(0).Caption & "′,userqf=′" & Labzb(1).Caption & "′,sendto=′1′ where Countyid=′" & XqBH & "′ and scntime=′" & Txtsctime.Text & "′ and yjtype=′" & Cmblx.Text & "′"
Frmsentmsg.Show,Me
Else ′"内响应"
r1 = MsgBox("内响应——预警信息即将发出,你确认吗?",vbCritical + vbOKCancel,"确认信息!")
If r1 <> 1 Then Exit Sub
For I = 1 To VSFlexyjjx.Rows - 1 ′局部控制
If VSFlexyjjx.TextMatrix(I,1)<> "" Then
If VSFlexyjjx.TextMatrix(I,4)<> "无" Then
msg1 = "内响应:" & VSFlexyjjx.TextMatrix(I,4)
End If
If VSFlexyjjx.TextMatrix(I,5)<> "无" Then
msg1 = msg1 & "外联动:" & VSFlexyjjx.TextMatrix(I,5)
End If
msg1 = msgdate & VSFlexyjjx.TextMatrix(I,3)& msg1
grouptree1 = VSFlexyjjx.TextMatrix(I,1)
transmit1 = "1"
strsql = "insert INTO Msg(Countyid,sctime,msg,grouptree,transmit)values(′" & XqBH & "′,′" & Txtsctime.Text & "′,′" & msg1 & "′,′" & grouptree1 & "′,′" & transmit1 & "′)"
Call SqlReset(strsql,1)
End If
msg1 = ""
grouptree1 = ""
Next
sjk = "qxalert"
strsql = "update alertrecord set userzb=′" & Labzb(0).Caption & "′,userqf=′" & Labzb(1).Caption & "′,sendto=′1′ where Countyid=′" & XqBH & "′ and scntime=′" & Txtsctime.Text & "′ and yjtype=′" & Cmblx.Text & "′"
Call SqlReset(strsql,1)
Call TxtmessageS
End If
′写入值班人员、签发人员
Shell App.Path & "Msg.exe /zd" ′信息发布程序
End Sub
Sub qj()
……
For I = 1 To VSFlexyjjx.Rows - 1 ′全局控制
If Cmbgrade.Text = "" Then
MsgBox "等级不能为空!",vbCritical
Exit Sub
End If
grouptree1 = Cmbgrade.Text
If Trim$(VSFlexyjjx.TextMatrix(I,1))= "" Then
msg1 = msg1 & VSFlexyjjx.TextMatrix(I,3)& VSFlexyjjx.TextMatrix(I,6)& ";"
End If
Next
If msg1 <> "" Then
grouptree1 = Cmbgrade.Text
transmit1 = "1"
′ strsql = "insert INTO Msg(Countyid,sctime,msg,grouptree,transmit)values(′" & XqBH & "′,′" & Txtsctime.Text & "′,′" & msg1 & "′,′" & grouptree1 & "′,′" & transmit1 & "′)"
′ Call SqlReset(strsql,1)
For k = Val(grouptree1)To 4
qjgroup1 = qjgroup1 & k & ";"
……
Next
……
Sub xzkz()′局部控制--乡镇控制
……
msgdate = Format(Txtsctime.Text,"MM月dd日")
For I = 1 To VSFlexyjjx.Rows - 1
If VSFlexyjjx.TextMatrix(I,1)= "" Then
xzname1(I)= VSFlexyjjx.TextMatrix(I,4)
Else
xzname1(I)= ""
End If
Next
For j = 1 To VSFlexyjjx.Rows - 1
temp1 = VSFlexyjjx.TextMatrix(j,4)
If xzname1(j)<> "" And VSFlexyjjx.TextMatrix(j,1)= "" Then
msg1 = msgdate & Txtyjsd.Text & ":"
msg1 = msg1 & VSFlexyjjx.TextMatrix(j,3)& VSFlexyjjx.TextMatrix(j,6)& ";"
If VSFlexyjjx.TextMatrix(j,5)< grade1 Then grade1 = VSFlexyjjx.TextMatrix(j,5)
grouptree1 = VSFlexyjjx.TextMatrix(j,4)& grade1
For I = j + 1 To VSFlexyjjx.Rows - 1 ′只有1行时 不运行
If xzname1(I)<> "" And VSFlexyjjx.TextMatrix(I,1)= "" Then
If temp1 = xzname1(I)Then
……
End If
Next
End If
If Cmbgrade.Text = "" Then
MsgBox "等级不能为空!",vbCritical
Exit Sub
End If
If msg1 <> "" Then
transmit1 = "1"
……
qjgroup1 = Right(grouptree1,1)
For k = qjgroup1 To 4
strgroup1 = strgroup1 & Left(grouptree1,Len(grouptree1)- 1)& k & ";"
Next
Frmsentmsg.VSFlexmsglb.TextMatrix(1,3)= strgroup1
strgroup1 = ""
msg1 = ""
grouptree1 = ""
End If
Next
End Sub
Sub xzkznew()′局部控制--乡镇控制 针对新增点及变更站点
……
For I = 1 To VSFlexyjjx.Rows - 1
If VSFlexyjjx.TextMatrix(I,1)<> "" Then
xzname1(I)= VSFlexyjjx.TextMatrix(I,4)
Else
xzname1(I)= ""
End If
Next
For j = 1 To VSFlexyjjx.Rows - 1
temp1 = VSFlexyjjx.TextMatrix(j,4)
If xzname1(j)<> "" And VSFlexyjjx.TextMatrix(j,1)<> "" Then
msg1 = sgdate & Txtyjsd.Text & ":"
msg1 = msg1 & VSFlexyjjx.TextMatrix(j,3)& VSFlexyjjx.TextMatrix(j,6)& ";"
If VSFlexyjjx.TextMatrix(j,5)< grade1 Then grade1 = VSFlexyjjx.TextMatrix(j,5)
grouptree1 = VSFlexyjjx.TextMatrix(j,4)& grade1
For I = j + 1 To VSFlexyjjx.Rows - 1
If xzname1(I)<> "" And VSFlexyjjx.TextMatrix(I,1)= "" Then
If temp1 = xzname1(I)Then
xzname1(I)= ""
msg1 = msg1 & VSFlexyjjx.TextMatrix(I,3)& VSFlexyjjx.TextMatrix(I,6)& ";"
If VSFlexyjjx.TextMatrix(j,5)< grade1 Then grade1 = VSFlexyjjx.TextMatrix(j,5)
If VSFlexyjjx.TextMatrix(j,5)< grade1 Then grade1 = VSFlexyjjx.TextMatrix(j,5)
grouptree1 = VSFlexyjjx.TextMatrix(j,4)& grade1
End If
End If
Next
End If
If Cmbgrade.Text = "" Then
MsgBox "等级不能为空!",vbCritical
Exit Sub
End If
If msg1 <> "" Then
transmit1 = "1"
′ strsql = "insert INTO Msg(Countyid,sctime,msg,grouptree,transmit)values(′" & XqBH & "′,′" & Txtsctime.Text & "′,′" & msg1 & "′,′" & grouptree1 & "′,′" & transmit1 & "′)"
intmsgsum = intmsgsum + 1
Frmsentmsg.VSFlexmsglb.AddItem "",1
Frmsentmsg.VSFlexmsglb.TextMatrix(1,0)= j
Frmsentmsg.VSFlexmsglb.TextMatrix(1,1)= Txtsctime.Text
Frmsentmsg.VSFlexmsglb.TextMatrix(1,2)= msg1
Frmsentmsg.VSFlexmsglb.TextMatrix(1,3)= grouptree1
msg1 = ""
grouptree1 = ""
End If
Next
End Sub
4 系统特点
4.1 预警信息收集主动及时
能主动第一时间收集辖区内已经发生或将来3个小时内发生的灾害性预警信息。期间未来3小时预测信息可以是网格预报产品,也可以是融合的预报产品,还可以是上级或本地化预测更加精准的产品,只要预测信息流进入接口就可供系统调用,极大简化了基层对预警信息感知,为服务人员在未来一段时间开展气象服务工作提供依据。
4.2 “内响应、外联动”工作机制得到有效衔接和充分发挥
“内响应、外联动”工作规范细则数字化,实现预警信号及强降水监测工作任务得到有效分工,权责清晰,并及时通知到相关责任人员。强降水阈值的制定针对每一个站点,服务做到了精细。
4.3 智慧“靶向”服务
通过“实况+预报”的模式监测预警信息,并对达到预警指标的站点,及时启动服务策略,将信息发布到面向影响区域的人及上级承担防灾减灾职责的人,实现预警准确率和时间提前量的稳步提升,精准命中“靶心”。
4.4 针对每一个站点建立报警阈值
针对每一个区站气象站点设定4个等级3个时次的阈值,不同等级对应不同服务对象,开展具有针对性的气象预警服务工作。实现预警准确率和时间提前量的稳步提升,目标用户筛选更加合理。但在使用过程中根据实际情况需要不断完善站点阈值的设定完善。
4.5 预警信息短信压缩规则
预警短信都做了特定的压缩处理。用户查看时都按照一定的规则在进行解压显示,可以修改,但所有信息发送后将存储于其它数据表,不会影响原始压缩预警信息,确保信息安全。用户发送预警过程,不用考虑服务对象选择,计算机会根据预警信息自动处理,完成发布。
5 结语
系统以降水实况与网格预报的有机相接,融合“内响应、外联动”工作机制规则库和4级预警3个时次阀值规则库等2个规则库获取预警信息,及时提醒用户处理预警信息并核准发布到不同区域不同点的服务对象,系统将监测预警信息传递到需要的防御责任人。实现了玉溪市江川区强降雨监测的“早、准、快”,在突发性、局地性等灾害性短时强降水天气发生过程中,江川区气象局能精准、快速通过“靶向”预警系统面向即将影响区域开展“点、线、面”3个层次的信息发布,为公众采取有效防御措施争取时间,保障人民生命财产安全,进一步强化部门合作和应急联动,夯实气象防灾减灾“第一道防线”,助力防灾减灾救灾。