大气环境监测预警插值算法的研究

2019-06-24 12:28邹山花方宁生陈心怡
制造业自动化 2019年2期
关键词:插值空气质量大气

邹山花,方宁生,陈心怡

(1.无锡太湖学院,无锡 214064;2.江苏省物联网应用技术重点建设实验室,无锡 214064;3.东南大学,南京 210018)

0 引言

随着经济发展与社会进步,人们的生活水平得到了前所未有的提升,但随之而来的环境污染也逐渐凸显成为一个引人关注的重要问题。对生态环境造成的不可磨灭的破坏已逐渐直接影响到人们的日常生活,尤其是大气污染。工业化、城市化带来的大气污染问题日益严重,工厂排放的废气、机动车尾气、餐饮业排放的油烟、冬季烧煤供暖等都会导致大气中的颗粒物浓度增加。

大气环境的数据繁多且具有时空变化性,若以普通表格直接罗列的方式将无法体现出众多数据的规律。数据可视化是对数据以图形图像方式的直观展现,因此,选择合适的可视化技术将这些大气环境的相关数据以图像的方式展现在人们面前并可以与之交互,对于有效利用好环境监测预警系统、并以此系统为基础进行分析和污染的预警具有重要的意义。

本文从大气环境监测预警的客观需求出发,研究其数据可视化的不同方案,分析比较各种方案的优缺点和不同,以现代先进的数据可视化技术中的多种方案实现使人们能够以更直观的方式监测大气环境和相关气象要素的各种数据,便于更深入的分析和研究并对可能的污染做出预警。

本文研究并实现的大气环境监测预警系统是大气(重)污染预报预警系统的子系统。整个大气(重)污染预报预警系统是一个对大气环境进行实时监控、预报和预警的平台,共包括大气污染分析系统、大气污染综合预警系统、大气污染预报制作系统以及检验与评估系统四大系统,目的是为应对环境污染、保护环境提供系统支撑。本文的大气环境监测预警系统是平台中专注于综合分析、综合预警二模块结合的子系统,目的是通过现代可视化技术对环境和相关气象要素的实况监测数据以及预报数据按照不同的可视化方案进行展示和交互,实现对大气环境的监测和对污染情况的预警和发布,为环保部门提供决策依据。

1 空间插值算法

在气象、环保数据领域,插值模型一直是一个热点研究问题。由于反映大气环境的各项污染物浓度和相关气温、降水等众多要素的数据值都是由各个气象或环保监测站监测而来,这些实际观测数据是离散的,只能准确的代表监测站周围一定范围内的要素值。为了通过这些离散且并不规则的数据推得未知点的数据值、或是生成等值线或栅格表面,需要拟合一个能够体现要素数据值和空间位置之间关系的函数方程,来估算出未经过观测的点的要素数据值。通过空间插值模型可以将离散测量点获得的数据推到整个区域,通过已知的监测点预测到整个空间范围。

常用的插值算法主要包括Cressman插值、反距离权重(IDW)插值、双线性插值、克里金插值等。

1.1 Cressman插值算法

Cressman插值算法又叫Cressman客观分析,最早由Cressman等在1959年提出,是在气象环保领域应用得最多的一种算法,其核心的思想是逐步订正法,先给定一个猜测场(初始估计),随后用实际观测场来逐步修正直至逼近观测记录。用M代表任意要素(例如气温、气压等),格点(i,j)处要素值的第一猜测值表示为M0,订正值表示为M',使用公式表达如下:

△Mk是第k个采样点已知的观测数据与第一猜测值的差,Wijk是代表数据之间影响权重的权重函数,式(3)是其一般形式。

R是给定的一个扫描半径,Dijk是扫描半径范围内第k个采样点与格点(i,j)的距离。Cressman插值的思想是,在扫描半径R的范围内已知采样点对未知点(i,j)影响大,距离(i,j)越近的已知点影响越大,而R以外的可以忽略不计,故权重为0。K是扫描半径范围内已知采样点的数目。

Cressman插值方法中最重要的是影响权重的确定,需要给定扫描半径R的值进行计算,有一定的人为因素,经常选取的值有1、2、4、7、10。算法的基本思路如下:先确定一个猜测场以及设置一个逼近值的范围,用来将计算后的值和实际资料进行比较;计算影响权重Wijk;将权重值Wijk代入进行插值计算,得到一个订正值;比较订正值和实际资料,如二者差值不在预定的逼近值范围内,则用该差值继续订正上一次的场;重复订正直至误差达到满意的范围内。

1.2 插值算法比较分析

上述研究的几种插值算法中,双线性插值原理简单,插值效果较好,适合于将格点数据插值为站点数据。Cressman插值、反距离权重插值方法都基于同一个核心的思想,即在地理空间范围内,距离越近的点对插值点的影响越大,权重的选取根据距离的远近来确定。其中Cressman插值是从离散的站点数据通过逐步订正方法插值点为格点数据带来误差较小的一种方法,在大气数据处理中广泛使用;反距离权重插值容易出现“牛眼”现象,在权重的选择上仅考虑了距离对待插值点的影响,不够全面。克里金插值改善了反距离权重插值的这一缺陷,将采样点的结构特征和随机性一同考虑在内进行插值计算,是一种较为完善有效的插值方式,但较为复杂计算量大,变异函数的选取也有人为成分,因此在将站点数据插值为格点数据时,选取Cressman算法进行插值。

2 大气环境监测模块

大气环境监测从产品内容的不同上来划分包括环境气象要素实时监测(雾、霾、空气质量、能见度)、气象要素及背景形势场分析(地面要素和风廓线雷达)、动力因子及气象扩散条件分析和预报技术融合分析(不同模式不同产品的预报对比进行分析),主要用于各项要素实时数据变化的分析与展示和不同预报规则数据的展示,可查询不同地域尺度下(华东、浙江、温州)大气环境和相关产生影响的气象要素监测的实况数据和预报数据。从实现功能上划分,整体包括监测数据的平面渲染图、GIS地图、时间变化曲线展示。

2.1 监测方案

大气环境监测的核心是环境空气质量,同时,在分析大气环境时还需要考虑到影响空气质量的相关气象要素,如天气、风向、湿度、大气稳定度等等,通过提供环境气象要素的不同产品给业务人员进行综合分析来实现对大气环境的监测。主要通过对已经收集的环境和气象数据通过计算处理,建立可视化模型实现的方式进行监测。

以核心的环境空气质量监测为例,主要需要进行监测的指标是SO2(二氧化硫)、NO2(二氧化氮)、CO(一氧化碳)、O3(臭氧)、PM2.5(细颗粒物)、PM10(可吸入颗粒物)六项污染物和代表着空气质量状况的AQI(Air Quality Index,空气质量指数),其中基础的数据是六项污染物的实测浓度值,AQI由各项污染物的浓度数据计算而来。

实现AQI监测功能的具体方案如下:

1)根据各项污染物的实测浓度分别计算出六项污染物的IAQI(Individual Air Quality Index,空气质量分指数),计算公式为:

其中C代表该项污染物的浓度。各项污染物浓度限值与空气质量分指数的对照表如表1所示,BPH和BPL代表在表1中与该浓度C相近的高位值和低位值,IAQIH和IAQIL表示在表1中BPH和BPL对应的空气质量分指数的值。

表1 污染物浓度限值与空气质量分指数对照表

2)从六项污染物的IAQI中取最大的一个值即为空气质量指数AQI。

3)根据计算得到的AQI数值,确定对应的空气质量级别、类别和用来表示的颜色,对照如表2所示。无数据时用灰色表示。

表2 空气质量指数AQI对照表

4)根据不同的可视化方案(平面渲染图、GIS图、曲线图)进行实现,用图形的方式进行直观展示以实现监测。

2.2 平面图功能

平面图功能是将NCL制作的产品图根据需求在系统中展示。实现的逻辑如下:

1)根据前台传入参数,刚进入页面或点击了查询最新按钮时都需查询最新的产品图;

2)按规则拼装产品路径和图片名;

3)在存放产品图的服务器相应目录下查询是否有对应图片;

4)无产品则返回“无产品”样式的图片地址;

5)有产品则将该产品图地址(url)和图例地址(legend)返回,若是查询最新则加上最新产品的时间。

项目的开发遵循组件化和模块化的思想,抽象出公共的组件以便不同的模块可以共用。在平面图中,平面图的显示与播放都是封装好的组件,在jsp头部嵌入便可进行调用。

以空气质量平面图为例,对应的js文件airquality_qv.js中,以ajax的方式实现前后台数据传递。queryDate是一个对象,包含了time(时间),area(选择的区域,共包括华东、浙江和温州三个尺度),productID(选择的产品编号),type(产品的类型,如PB代表色斑图)interval(时间列表的间隔)和(一次返回的条数num),后台根据前台传入的信息查询后返回数据。

在控制层AirQualityController中有对应的queryBaseProductInfo方法,在之前添加注解@RequestMapping进行标注,使得http请求可以找到对应方法。控制层接收到前台传入的各项参数交给airQualityService进行实现,调用airQualityService中的queryQuickView方法。在AirQualityServiceImp中queryQuickView进行具体实现,调用公共的查询产品图方法MyQuickViewFinder(平面图查询)。MyQuickViewFinder实现的方法包括:searchLatest(查询最新产品图),query(精确查询对应产品图),traverse(对获得的List进行翻转),parse(解析配置文件)等。产品图和图例的地址在单独的配置文件nclpath.xml中,后台对配置文件进行解析,在相应路径下查找并返回结果。

获得的结果装入map对象的objectData返回给前台,前台js中通过res.objectData进行获取。获取的list中包含有20条数据,每条数据都对应了列表中一个时刻的产品,包含的内容有:url(产品图的地址),legend(图例的地址),time(该产品的时间),title(图片标题)。随后调用平面图的组件,在页面中加载相应的div。

以环境气象要素监测中空气质量监测为例。点击后首先进入平面图,默认显示最新有产品的时间,可点击向前、向后按钮或点击控件选择时间查询所需的产品,也可在时间列表点击事件查询对应时间的产品图。空气质量监测产品包括空气质量指数(AQI)和六项污染物(PM2.5、PM10、O3、NO2、SO2、CO),根据产品的不同,图例会相应改变。图片上有向前向后箭头对应时间控件的按钮。在右侧可对地域尺度进行选择,选择不同的市区县进行具体区域产品的展示,勾选不同的图层可以显示或隐藏不同的边界和名称如区县界和区县名;还可设置播放速度进行播放,显示产品在时间列表内的变化趋势。实现效果如图1所示。

图1 大气环境监测空气质量平面图展示

除单张产品图外,还可进行多种产品的叠加,此时的实现方法是:无时间列表的情况下,返回数据格式为勾选几个产品,list中包含几条数据;有时间列表的情况下,list中数据条数等于时间列表数量,一条数据中再包含勾选的几种产品图数据。图2为多产品叠加的效果。

图2 大气环境监测动力因子平面图展示

2.3 GIS图功能

由于大气环境和相关气象要素的平面渲染图通过NCL制作平面图的方式实现,在GIS模块中无需通过另外的插值方法进行处理,直接通过读取站点数据或城市数据进行整体的展示。

GIS共用的开发在单独的模块中进行,编写共用的js文件提供公用方法,将ArcGIS的相关js、css文件如init.js等嵌入到jsp头部,在需要调用GIS模块的对应js中进行联调即可使用。以空气质量为例,在airquality_gis.jsp中创建加载GIS地图的容器“<div id = ‘giscontainer’>”,调用initMap()方法初始化地图,在initMap()中传入需要的参数,包括容器id如“giscontainer”,加载点击事件的回调函数等。在airquality_gis.jsp对应的js文件airquality_gis.js中,直接调用GIS中的方法进行地图相关数据的获取和操作。

整个GIS图的显示由众多图层组成,图层控制的核心是在不同的图层上画需要显示的效果,或更改不同Layer的visible属性为true或false来使某一图层可见或不可见。例如分布图、站点图、风场等都是不同的图层,每一图层由Graphic组成,由于Graphic本身不能设置事件监听,因此通过esri.layers.GraphicsLayer方法创建包含多个Graphic的图层实现对点击、鼠标移动等事件的监听,用map.addLayers来添加;在选择面板中点击了不同的产品选项会首先调用map.removeLayer方法将其他的图层清除再将选中的图层显示。

地图的底图是切片图层,通过继承esri.layers.TiledMapServiceLayer,加载一系列切片图完成底图的显示,切片图由ArcGIS Server发布。在导航条有放大、缩小和拖动(即漫游)的功能,由Navigation模块实现。

GIS图的显示有两种形式,一种是点位图,按站点显示,一种是分布图,按照某一要素市区县的不同来显示不同区块的分布,同个市区县的区域内填充相同的色块。前端查询时通过queryGISInfo.do访问到控制层对应方法,传入的queryData中包括type(查询类型,市区县的分布图或是站点的点位图)、time(查询时间)、product(产品,如AQI、六项污染物或其他气象要素),对应的类型获取到的后台数据格式、调用的GIS方法如表3所示。

GISStation和GISCity两个方法已在GIS的公用js文件中定义实现,根据不同产品的类型和等级,按照规定显示颜色。

GIS图中每一区域都绑定了click点击事件,点击后会弹出对应区域的曲线图,前台传入时间、区域、产品,采用queryDetail方法查询。

GIS区县分布图、站点点位图的实现效果分别如图3、图4所示。

点击表格按钮,可将所有市区县或站点的空气质量相关信息在弹出框中显示,调用queryTable方法进行查询实现。如图5所示。

表3 GIS数据格式与调用方法

图3 大气环境监测GIS分布图展示

图4 大气环境监测GIS点位图展示

图5 大气环境监测GIS表格展示

2.4 统计图表功能

平面产品图和GIS地图显示的是不同要素在不同区域的分布状况,当需要查看某项要素在某一地区随着时间变化的趋势时,则采用统计图的方式进行展示更加合适。统计图的实现采用Highcharts的方法,已在项目中引入Highcharts包。

图表的绘制有多种不同的绑定容器的方法,以一个id为mychart的div为例。

方法一:$(“#mychart”).highcharts({options});

方法二:var chart = new Highcharts.Chart(“mychart”,{options});

方法三:var chart = new Highcharts.Chart({chart:{renderTo: “mychart”},…});

用highcharts绘制的图表支持下载,需要在头部引入exporting.js,并在option中做设置。

option是关于highcharts绘制的相关属性设置,系统中涉及到的常用的内容有如下几项:

chart:图表的基本设置,主要包括renderTo(绘制图表的容器id),type(图表的类型,默认为折线图line,曲线图spline,柱状图column,条形图bar,饼图pie),width(宽度),height(高度),backgroundColor(图表背景),events(设置图表的一些事件如load、click)等;

title、subtitle:设置图表标题或子标题的文字、位置、样式等;

xAxis:x轴的相关属性,如categories(x轴显示的标签,以数组的形式表示),labels(对x轴标签的具体内容和样式进行控制),title(x轴的名称),gridLineWidth(x轴标签对应竖线的宽度),max(最大值),min(最小值)等;

yAxis:y轴的标签内容等属性,与x轴设置类似;

exporting:导出的相关设置,如enabled(是否允许导出,设置为false则被禁止),buttons(自己定义按钮的图片样式等,包括打印按钮printButton和导出按钮exportButton),filename(导出文件的名称),type(导出的格式)等;

tooltip:移动鼠标到图表上数据点显示提示框的相关配置,如enabled(显示提示框与否),formatter(对提示框内容的显示做控制),style(样式);

legend:图例的设置,如enabled(显示图例与否),layout(两种方式显示,vertical垂直显示或horizontal水平显示),style(样式)等;

plotOptions:图表中数据列的相关设置,包括series(针对所有数据列通用的相关设置,如cursor设置鼠标移动上去光标的形状,events设置点击、显示、点击图例等事件),line(针对折线图进行设置,如线条粗细lineWidth,数据点的显示样式marker等),column(针对柱状图的设置)等,针对具体数据列样式的会覆盖通用设置;

series:图表数据的具体设置,是一个数组,数组中可以是一种或几种数据,每一种数据以{type:‘spline’,name: ‘AQI’,data: [69,87,72]}的形式表示,data数组中的内容也可对每一点的内容另做详细设置,如series中的设置与在plotOptions中的设置项有重复,会覆盖plotOptions中的设置。

加载图表的时候,js文件中以ajax的方式发起请求,controller接收请求处理后返回从数据库中读取的数据,前台获取到response读取的结果,将结果处理成highcharts规定的格式,调用highcharts的方法进行图表的绘制。

以天气形势场预报中的OCF(最优化集成释用,一种数值预报的方法)为例,选取需要的区域和时间展示相应的降水量柱状图和温度曲线图,实现的效果图如图6所示。

图6 大气环境监测-OCF

3 大气环境预警模块

大气环境预警根据实况监测和预报趋势的数据,自动识别出大气重污染信息,并提供交互制作工作方便业务人员进行预警信号的制作,主要包括大气污染预警、预警信号制作、预警信息发布、预警信息查询。

预警按照严重程度分为蓝色预警、黄色预警、橙色预警、红色预警四种级别,依次用4表示,红色预警最为严重。具体的对照如表4所示。

表4 预警级别对照表

预警模块涉及到的文件主要包括warning.jsp,WarningController,WarningService,WarningDao,实体类Warning等。

3.1 大气污染预警

登录后点击综合预警模块,后台识别出有污染告警的区县信息,在地图上用预警等级的相对应颜色进行填充并且闪烁告警,用弹出框展示有告警信息的区县的AQI变化趋势曲线图,展示该区县过去7天及未来3天的AQI变化趋势,其中实际监测到的实况数据用柱状图表示,预报的数据用曲线图表示。如果多个区县都有污染告警的信息,则用不同的标签页来显示,选择相应的区县名称进行查看。当不存在预警信息时,地图显示空白状态。如图7、图8所示。

图7 大气污染预警-无预警信息

图8 大气污染预警-有预警信息

3.2 预警信号制作

制作预警信号主要是获取到点击的区域进行颜色的填充,添加click事件,获取到点击位置的属性evt.graphic.attributes。

点击右下角的预警制作按钮,弹出选择是否制作预警信号的页面,选择相应的预警颜色。当选择“否”时,再次弹窗确认取消告警提示,确定不进行预警则关闭告警,清除地图上闪烁的填充颜色。如选择制作预警信号,则弹出选择框选择是落区订正还是区域订正,落区订正即直接在地图上进行点击,在点击中的区县填充相应的预警信号,区域订正即通过勾选区县名,直接在地图上对应的区域生成预警信号的颜色填充。选择完毕后点击生成预警信号,弹出制作面板可以进行制作,编辑相应的文字信息保存,预警信号即制作成功。如图9所示。

图9 预警制作选择

3.3 预警信息发布

在右下角的预警修改中点击,可管理所有制作好的预警信号,包括修改、删除和发布。不同级别的用户登录后,可以获取到参考的预警数据和制作好的预警信息,结合气象局对大气成分的主观预报和环保局对污染要素的实况监测数据,对预警信息进行修改订正,联合会商,最终对预警信息进行发布。相应的大气重污染预警信号公告可生成预览界面保存到本地,生成Word文档。如图10所示。

图10 预警信号修改发布

3.4 预警信息查询

预警查询是对制作的预警信息进行查询,可以根据预警的发布单位、类型、级别和编号精准查询。输入开始时间、结束时间、发布单位、预警类型、预警级别、预警编号等信息进行条件选择,点击查询按钮,可以查询到符合条件的预警信息,以列表的方式展示,如没有则显示空。点击导出按钮可以将查询到的预警信息以表格的形式导出到本地。如图11所示。

图11 预警信息查询

4 结论

本文详细说明了大气环境监测预警系统的实现过程,包括系统开发平台的选择、SSM框架的搭建,用NCL绘制环保及气象产品图的步骤,ArcGIS API for JavaScript的部署开发,介绍了大气环境监测模块和大气环境预警模块的详细实现。其中大气环境监测模块包括了将NCL绘制的各种产品图进行展示,基于GIS进行环保、气象数据的展示与交互,基于highcharts工具的图表展示;大气环境预警模块是基于GIS进行预警信号的展示与交互绘制。

猜你喜欢
插值空气质量大气
滑动式Lagrange与Chebyshev插值方法对BDS精密星历内插及其精度分析
宏伟大气,气势与细腻兼备 Vivid Audio Giya G3 S2
如何“看清”大气中的二氧化碳
大气稳健的美式之风Polk Audio Signature系列
基于pade逼近的重心有理混合插值新方法
混合重叠网格插值方法的改进及应用
车内空气质量标准进展
重视车内空气质量工作 制造更环保、更清洁、更健康的汽车
多功能空气质量远程检测仪
基于混合并行的Kriging插值算法研究