鄒山花,方寧生,陳心怡
(1.無錫太湖學院,無錫 214064;2.江蘇省物聯網應用技術重點建設實驗室,無錫 214064;3.東南大學,南京 210018)
隨著經濟發展與社會進步,人們的生活水平得到了前所未有的提升,但隨之而來的環境污染也逐漸凸顯成為一個引人關注的重要問題。對生態環境造成的不可磨滅的破壞已逐漸直接影響到人們的日常生活,尤其是大氣污染。工業化、城市化帶來的大氣污染問題日益嚴重,工廠排放的廢氣、機動車尾氣、餐飲業排放的油煙、冬季燒煤供暖等都會導致大氣中的顆粒物濃度增加。
大氣環境的數據繁多且具有時空變化性,若以普通表格直接羅列的方式將無法體現出眾多數據的規律。數據可視化是對數據以圖形圖像方式的直觀展現,因此,選擇合適的可視化技術將這些大氣環境的相關數據以圖像的方式展現在人們面前并可以與之交互,對于有效利用好環境監測預警系統、并以此系統為基礎進行分析和污染的預警具有重要的意義。
本文從大氣環境監測預警的客觀需求出發,研究其數據可視化的不同方案,分析比較各種方案的優缺點和不同,以現代先進的數據可視化技術中的多種方案實現使人們能夠以更直觀的方式監測大氣環境和相關氣象要素的各種數據,便于更深入的分析和研究并對可能的污染做出預警。
本文研究并實現的大氣環境監測預警系統是大氣(重)污染預報預警系統的子系統。整個大氣(重)污染預報預警系統是一個對大氣環境進行實時監控、預報和預警的平臺,共包括大氣污染分析系統、大氣污染綜合預警系統、大氣污染預報制作系統以及檢驗與評估系統四大系統,目的是為應對環境污染、保護環境提供系統支撐。本文的大氣環境監測預警系統是平臺中專注于綜合分析、綜合預警二模塊結合的子系統,目的是通過現代可視化技術對環境和相關氣象要素的實況監測數據以及預報數據按照不同的可視化方案進行展示和交互,實現對大氣環境的監測和對污染情況的預警和發布,為環保部門提供決策依據。
在氣象、環保數據領域,插值模型一直是一個熱點研究問題。由于反映大氣環境的各項污染物濃度和相關氣溫、降水等眾多要素的數據值都是由各個氣象或環保監測站監測而來,這些實際觀測數據是離散的,只能準確的代表監測站周圍一定范圍內的要素值。為了通過這些離散且并不規則的數據推得未知點的數據值、或是生成等值線或柵格表面,需要擬合一個能夠體現要素數據值和空間位置之間關系的函數方程,來估算出未經過觀測的點的要素數據值。通過空間插值模型可以將離散測量點獲得的數據推到整個區域,通過已知的監測點預測到整個空間范圍。
常用的插值算法主要包括Cressman插值、反距離權重(IDW)插值、雙線性插值、克里金插值等。
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代入進行插值計算,得到一個訂正值;比較訂正值和實際資料,如二者差值不在預定的逼近值范圍內,則用該差值繼續訂正上一次的場;重復訂正直至誤差達到滿意的范圍內。
上述研究的幾種插值算法中,雙線性插值原理簡單,插值效果較好,適合于將格點數據插值為站點數據。Cressman插值、反距離權重插值方法都基于同一個核心的思想,即在地理空間范圍內,距離越近的點對插值點的影響越大,權重的選取根據距離的遠近來確定。其中Cressman插值是從離散的站點數據通過逐步訂正方法插值點為格點數據帶來誤差較小的一種方法,在大氣數據處理中廣泛使用;反距離權重插值容易出現“牛眼”現象,在權重的選擇上僅考慮了距離對待插值點的影響,不夠全面。克里金插值改善了反距離權重插值的這一缺陷,將采樣點的結構特征和隨機性一同考慮在內進行插值計算,是一種較為完善有效的插值方式,但較為復雜計算量大,變異函數的選取也有人為成分,因此在將站點數據插值為格點數據時,選取Cressman算法進行插值。
大氣環境監測從產品內容的不同上來劃分包括環境氣象要素實時監測(霧、霾、空氣質量、能見度)、氣象要素及背景形勢場分析(地面要素和風廓線雷達)、動力因子及氣象擴散條件分析和預報技術融合分析(不同模式不同產品的預報對比進行分析),主要用于各項要素實時數據變化的分析與展示和不同預報規則數據的展示,可查詢不同地域尺度下(華東、浙江、溫州)大氣環境和相關產生影響的氣象要素監測的實況數據和預報數據。從實現功能上劃分,整體包括監測數據的平面渲染圖、GIS地圖、時間變化曲線展示。
大氣環境監測的核心是環境空氣質量,同時,在分析大氣環境時還需要考慮到影響空氣質量的相關氣象要素,如天氣、風向、濕度、大氣穩定度等等,通過提供環境氣象要素的不同產品給業務人員進行綜合分析來實現對大氣環境的監測。主要通過對已經收集的環境和氣象數據通過計算處理,建立可視化模型實現的方式進行監測。
以核心的環境空氣質量監測為例,主要需要進行監測的指標是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圖、曲線圖)進行實現,用圖形的方式進行直觀展示以實現監測。
平面圖功能是將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 大氣環境監測動力因子平面圖展示
由于大氣環境和相關氣象要素的平面渲染圖通過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表格展示
平面產品圖和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
大氣環境預警根據實況監測和預報趨勢的數據,自動識別出大氣重污染信息,并提供交互制作工作方便業務人員進行預警信號的制作,主要包括大氣污染預警、預警信號制作、預警信息發布、預警信息查詢。
預警按照嚴重程度分為藍色預警、黃色預警、橙色預警、紅色預警四種級別,依次用4表示,紅色預警最為嚴重。具體的對照如表4所示。

表4 預警級別對照表
預警模塊涉及到的文件主要包括warning.jsp,WarningController,WarningService,WarningDao,實體類Warning等。
登錄后點擊綜合預警模塊,后臺識別出有污染告警的區縣信息,在地圖上用預警等級的相對應顏色進行填充并且閃爍告警,用彈出框展示有告警信息的區縣的AQI變化趨勢曲線圖,展示該區縣過去7天及未來3天的AQI變化趨勢,其中實際監測到的實況數據用柱狀圖表示,預報的數據用曲線圖表示。如果多個區縣都有污染告警的信息,則用不同的標簽頁來顯示,選擇相應的區縣名稱進行查看。當不存在預警信息時,地圖顯示空白狀態。如圖7、圖8所示。

圖7 大氣污染預警-無預警信息

圖8 大氣污染預警-有預警信息
制作預警信號主要是獲取到點擊的區域進行顏色的填充,添加click事件,獲取到點擊位置的屬性evt.graphic.attributes。
點擊右下角的預警制作按鈕,彈出選擇是否制作預警信號的頁面,選擇相應的預警顏色。當選擇“否”時,再次彈窗確認取消告警提示,確定不進行預警則關閉告警,清除地圖上閃爍的填充顏色。如選擇制作預警信號,則彈出選擇框選擇是落區訂正還是區域訂正,落區訂正即直接在地圖上進行點擊,在點擊中的區縣填充相應的預警信號,區域訂正即通過勾選區縣名,直接在地圖上對應的區域生成預警信號的顏色填充。選擇完畢后點擊生成預警信號,彈出制作面板可以進行制作,編輯相應的文字信息保存,預警信號即制作成功。如圖9所示。

圖9 預警制作選擇
在右下角的預警修改中點擊,可管理所有制作好的預警信號,包括修改、刪除和發布。不同級別的用戶登錄后,可以獲取到參考的預警數據和制作好的預警信息,結合氣象局對大氣成分的主觀預報和環保局對污染要素的實況監測數據,對預警信息進行修改訂正,聯合會商,最終對預警信息進行發布。相應的大氣重污染預警信號公告可生成預覽界面保存到本地,生成Word文檔。如圖10所示。

圖10 預警信號修改發布
預警查詢是對制作的預警信息進行查詢,可以根據預警的發布單位、類型、級別和編號精準查詢。輸入開始時間、結束時間、發布單位、預警類型、預警級別、預警編號等信息進行條件選擇,點擊查詢按鈕,可以查詢到符合條件的預警信息,以列表的方式展示,如沒有則顯示空。點擊導出按鈕可以將查詢到的預警信息以表格的形式導出到本地。如圖11所示。

圖11 預警信息查詢
本文詳細說明了大氣環境監測預警系統的實現過程,包括系統開發平臺的選擇、SSM框架的搭建,用NCL繪制環保及氣象產品圖的步驟,ArcGIS API for JavaScript的部署開發,介紹了大氣環境監測模塊和大氣環境預警模塊的詳細實現。其中大氣環境監測模塊包括了將NCL繪制的各種產品圖進行展示,基于GIS進行環保、氣象數據的展示與交互,基于highcharts工具的圖表展示;大氣環境預警模塊是基于GIS進行預警信號的展示與交互繪制。