韋凱華, 梁偉杰,2, 韋海寧, 袁宇東,2
(1.廣東省氣象臺(tái),廣東 廣州 510080;2.中國(guó)南海石油聯(lián)合服務(wù)總公司氣象服務(wù)公司,廣東 廣州 510080;3.廣西水利電力勘測(cè)設(shè)計(jì)研究院有限責(zé)任公司,廣西 南寧 530023)
南海海域是我國(guó)重要的戰(zhàn)略縱深,地理位置十分重要。隨著近年來(lái)海洋主權(quán)意識(shí)的不斷增強(qiáng),在南海進(jìn)行生產(chǎn)作業(yè)和駐守的軍民也在增加。受地理環(huán)境和氣象環(huán)境條件影響,南海災(zāi)害性天氣頻發(fā),海洋氣象條件復(fù)雜,季風(fēng)和熱帶云團(tuán)導(dǎo)致的強(qiáng)對(duì)流天氣以及路徑曲折、強(qiáng)度多變的臺(tái)風(fēng)[1-3],使得在南海航行及進(jìn)行漁業(yè)作業(yè)的船舶常受惡劣天氣的威脅[4]。天氣雷達(dá)作為監(jiān)測(cè)近海臺(tái)風(fēng)及強(qiáng)對(duì)流天氣的有效工具,其相關(guān)產(chǎn)品對(duì)預(yù)報(bào)員分析判斷未來(lái)天氣動(dòng)向,以及為公眾和行業(yè)提供防御決策指導(dǎo)至關(guān)重要。但現(xiàn)行的雷達(dá)產(chǎn)品圖在精細(xì)化地理信息(如南海島礁)的繪制方面的不足限制了其使用價(jià)值的進(jìn)一步挖掘。本文在此前工作的基礎(chǔ)上[5-7]利用Python編程語(yǔ)言及其相關(guān)類(lèi)庫(kù)重新制作南海海域氣象雷達(dá)可視化專(zhuān)題圖,并實(shí)現(xiàn)自動(dòng)化生成,以期進(jìn)一步推進(jìn)相關(guān)資料應(yīng)用,充分發(fā)揮氣象防災(zāi)減災(zāi)第一道防線的作用。
Python作為一種跨平臺(tái)的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,結(jié)合了解釋性、編譯性、互動(dòng)性等特點(diǎn),并且是一種面向?qū)ο蟮母呒?jí)語(yǔ)言。其設(shè)計(jì)之初定位自動(dòng)化腳本(Shell)語(yǔ)言的編寫(xiě),隨著相關(guān)類(lèi)庫(kù)的不斷更新和發(fā)展,逐漸被用于大型項(xiàng)目的開(kāi)發(fā)。其提供的便捷的數(shù)據(jù)分析、擬合等功能,并被應(yīng)用于金融分析、數(shù)據(jù)挖掘等多個(gè)領(lǐng)域[8]。本研究選NumPy、Pandas進(jìn)行數(shù)據(jù)解碼,利用強(qiáng)大的繪圖類(lèi)庫(kù)Matplotlib完成專(zhuān)題圖繪制。
南海海域以及周邊的海南、廣東、廣西三省沿海共布設(shè)有S波段(SA、SC)氣象雷達(dá)12部,不同型號(hào)的雷達(dá)其基數(shù)據(jù)格式不盡相同。中國(guó)氣象局于2020年度完成了氣象雷達(dá)數(shù)據(jù)格式標(biāo)準(zhǔn)化工作,實(shí)現(xiàn)標(biāo)準(zhǔn)格式單軌運(yùn)行。本文選取位于南海中部三沙市永興島的西沙SC型雷達(dá)作為代表,一方面考慮西沙附近島礁密集,對(duì)于精確地理信息與氣象信息結(jié)合需求相對(duì)較大;另一方面,SC型雷達(dá)在上述業(yè)務(wù)變更前后,基數(shù)據(jù)格式的改動(dòng)較大。標(biāo)準(zhǔn)格式雷達(dá)基數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)如圖1所示。
圖1 標(biāo)準(zhǔn)格式基數(shù)據(jù)整體結(jié)構(gòu)
其中,N表示第N個(gè)仰角;M表示第M個(gè)徑向;K表示第K個(gè)數(shù)據(jù)類(lèi)型;I表示徑向數(shù)據(jù)長(zhǎng)度,數(shù)據(jù)讀取過(guò)程中涉及到上述多個(gè)結(jié)構(gòu)字段的循環(huán)。本文首先選用NumPy類(lèi)庫(kù)中的numpy.dtype函數(shù)構(gòu)建類(lèi)似結(jié)構(gòu)體的字典類(lèi)型。并采用NumPy類(lèi)庫(kù)的frombuffer函數(shù)循環(huán)遍歷讀取雷達(dá)基數(shù)據(jù)的各個(gè)數(shù)據(jù)塊并經(jīng)解碼后存入對(duì)應(yīng)numpy.ndarray類(lèi)型的三維數(shù)組(仰角、方位角和徑向)中。其關(guān)鍵代碼如圖2所示。
圖2 標(biāo)準(zhǔn)格式基數(shù)據(jù)讀取及解碼關(guān)鍵代碼
由于Numpy底層采用Fortran和C++ BOOST進(jìn)行數(shù)據(jù)處理和運(yùn)算的工作,本文采用numpy.frombuffer函數(shù)可以在確保運(yùn)行效率的同時(shí)充分發(fā)揮Python易讀性強(qiáng)的特點(diǎn)。數(shù)據(jù)讀取和解碼完成后,根據(jù)各個(gè)徑向的方位角信息,以方位角升序的方式對(duì)變量三維數(shù)組進(jìn)行排序,形成排序后的反射率因子(ref)和多普勒速度(vel)三維數(shù)組數(shù)據(jù),用于后續(xù)進(jìn)一步繪圖或計(jì)算處理。
從國(guó)家地理信息共享平臺(tái)(全國(guó)地理信息資源目錄服務(wù)系統(tǒng))獲取1:100萬(wàn)全國(guó)地理信息基礎(chǔ)數(shù)據(jù),由于獲取的是分幅數(shù)據(jù),故需要通過(guò)ArcGIS軟件按照所需要的南海區(qū)域地理信息范圍合并相應(yīng)的幾幅,再進(jìn)行裁剪,最后得到一組以SouthChinaSea命名的地理信息數(shù)據(jù)。對(duì)于主要島礁名稱(chēng)的文字標(biāo)注,需要讀取其中的庫(kù)表關(guān)系獲取名稱(chēng)和位置信息。為簡(jiǎn)化步驟,提高讀取效率,用ArcGIS軟件中的要素轉(zhuǎn)點(diǎn)功能,將.shp文件中原有的面元素和線元素轉(zhuǎn)換為點(diǎn)元素,同時(shí)運(yùn)用軟件中的Excel轉(zhuǎn)換工具,將已轉(zhuǎn)換為點(diǎn)元素的.shp文件中包含各元素的屬性表轉(zhuǎn)換為.xls文件并另存,每行中就包含了元素所屬類(lèi)別、中英文名稱(chēng)、經(jīng)緯度坐標(biāo)等。后續(xù)即可通過(guò)Python程序讀取該.xls文件實(shí)現(xiàn)地理信息的標(biāo)注。
本研究利用Python語(yǔ)言設(shè)計(jì)程序?qū)崿F(xiàn)氣象雷達(dá)可視化專(zhuān)題圖自動(dòng)制作,程序框圖及數(shù)據(jù)處理流程如圖3所示。
圖3 程序框圖及數(shù)據(jù)處理流程
氣象雷達(dá)站觀測(cè)到的雷達(dá)回波信息數(shù)據(jù)上傳至國(guó)省兩級(jí)氣象信息中心數(shù)據(jù)庫(kù)后,再通過(guò)推送下發(fā)或數(shù)據(jù)接口訪問(wèn)的方式將基數(shù)據(jù)提供給氣象臺(tái)等業(yè)務(wù)單位使用[9]。設(shè)計(jì)的程序主要分為3大功能模塊,即時(shí)間調(diào)度與實(shí)時(shí)資料檢索匹配模塊、雷達(dá)數(shù)據(jù)讀取計(jì)算處理模塊、雷達(dá)數(shù)據(jù)與GIS信息繪圖模塊。經(jīng)程序處理后自動(dòng)制作生成的氣象雷達(dá)可視化專(zhuān)題圖可推送到本地或網(wǎng)絡(luò)指定位置,供氣象部門(mén)內(nèi)及部門(mén)外各渠道調(diào)用。
無(wú)論通過(guò)數(shù)據(jù)接口訪問(wèn)或是本地推送(或FTP共享)的方式獲取氣象雷達(dá)基數(shù)據(jù),要實(shí)現(xiàn)實(shí)時(shí)的專(zhuān)題服務(wù)圖自動(dòng)制作,首先需完成最新資料檢索下載。以本地(或FTP共享)方式訪問(wèn)為例,讀取配置文件settings.ini中的資料路徑fileFolder,列出該目錄下后綴名為.bz2的文件。標(biāo)準(zhǔn)雷達(dá)基數(shù)據(jù)文件名的形式為Z_RADR_I_Ziiii_YYYYMMDDhhmmss_O_DOR_TT_CAP_FMT.bin.bz2,其中iiii為4位數(shù)字的雷達(dá)區(qū)站號(hào);TT為雷達(dá)型號(hào);YYYYMMDDhhmmss為基數(shù)據(jù)產(chǎn)生時(shí)間。本文利用正則表達(dá)式提取雷達(dá)站號(hào)和數(shù)據(jù)時(shí)間信息。通過(guò)提取后的雷達(dá)站號(hào)確定西沙雷達(dá)基數(shù)據(jù)存放的次級(jí)目錄,進(jìn)入到目錄中后對(duì)列表中的所有文件根據(jù)文件名時(shí)間進(jìn)行逆序排列,排序后的第一個(gè)文件名即為最新的資料。考慮到可能出現(xiàn)的雷達(dá)數(shù)據(jù)傳輸故障,設(shè)定為機(jī)器當(dāng)前時(shí)間與最新雷達(dá)數(shù)據(jù)文件名時(shí)間的延遲小于15分鐘以內(nèi)時(shí),才進(jìn)行相應(yīng)的數(shù)據(jù)處理工作。具體代碼如圖4所示。
圖4 實(shí)時(shí)資料檢索與匹配關(guān)鍵代碼
在讀取雷達(dá)基數(shù)據(jù)資料的基礎(chǔ)上進(jìn)行可視化專(zhuān)題圖的繪制。自定義一個(gè)帶參數(shù)的draw_radar_ppi函數(shù),傳入的參數(shù)為要繪制的專(zhuān)題圖數(shù)據(jù)類(lèi)型。先利用循環(huán)按投影比例繪制雷達(dá)距離圈和方位角射線,此后根據(jù)傳入的參數(shù)確定繪制數(shù)據(jù)類(lèi)型及其對(duì)應(yīng)的色標(biāo)(色標(biāo)預(yù)先以數(shù)組形式定義在mycolors_變量名.npy文件中,通過(guò)自定義的get_cmap函數(shù)傳遞)。以雷達(dá)所在坐標(biāo)經(jīng)緯度為中心,按方位和徑向計(jì)算雷達(dá)極坐標(biāo)投影至地理坐標(biāo)的經(jīng)緯度位置。本文充分利用NumPy的向量運(yùn)算的特性,運(yùn)用Pyproj包中的Geod函數(shù),將極坐標(biāo)通過(guò)WGS84坐標(biāo)系投影轉(zhuǎn)換為等經(jīng)緯網(wǎng)上的笛卡爾坐標(biāo),得到雷達(dá)數(shù)據(jù)在平面上的lon(經(jīng)度)與lat(緯度)值,再利用pcolormesh函數(shù)按排序處理后的三維數(shù)組數(shù)據(jù)值對(duì)應(yīng)的色標(biāo)繪制圖形。pcolormesh函數(shù)可用于均勻/非均勻色標(biāo)的繪制,通過(guò)對(duì)BoundaryNorm類(lèi)型的指定實(shí)現(xiàn),其構(gòu)造函數(shù)為BoundaryNorm(boundaries, ncolors, clip)。各參數(shù)含義如下:levels為傳入的色標(biāo)閾值;ncolors為色標(biāo)的色階數(shù);clip為控制邊界值是否截?cái)噙M(jìn)行繪制,選用True表示超出閾值上下邊界的均截?cái)酁殚撝怠?/p>
再確定子坐標(biāo)軸,分別以文本形式繪制相關(guān)的雷達(dá)基本信息和觀測(cè)信息,以矩形填色方式繪制色標(biāo)與閾值,并從基數(shù)據(jù)中提取時(shí)間信息,用datetime類(lèi)完成儒略歷、地方時(shí)轉(zhuǎn)換,用作保存專(zhuān)題圖的文件名使用,完成整幅圖的基本繪制。關(guān)鍵代碼如圖5所示。
圖5 專(zhuān)題圖繪制關(guān)鍵代碼
運(yùn)用Matplotlib類(lèi)庫(kù)中的Basemap庫(kù)指定數(shù)據(jù)繪圖的投影方式以及經(jīng)緯度范圍,并通過(guò)readshapefile函數(shù)依次讀入國(guó)省市及縣界的.shp地理信息,本設(shè)計(jì)中,使用的.shp地理信息基礎(chǔ)數(shù)據(jù)包括了南海所有島礁的信息以及南海九段線,符合地理信息規(guī)范化制圖的規(guī)定。drawmapboundary函數(shù)使用指定顏色繪制底圖,此處指定為海洋顏色,fillcontinents函數(shù)將在底圖上用指定顏色填充繪制陸地地形。此外,南海島礁名稱(chēng)的標(biāo)注,通過(guò)Pandas類(lèi)庫(kù)中的read_excel函數(shù),按指定格式讀取第2.2節(jié)中預(yù)先制作好的SouthChinaSea.xls中按行列存儲(chǔ)的地理信息,提取其中的名稱(chēng)、經(jīng)緯度值,最后通過(guò)循環(huán)的方式逐條通過(guò)text函數(shù)將島礁名稱(chēng)按前述繪圖投影方式的經(jīng)緯度以標(biāo)注文字的形式繪制在底圖上。
原程序制作的專(zhuān)題圖如圖6(a)所示。設(shè)計(jì)的Python程序自動(dòng)運(yùn)行后制作的南海氣象雷達(dá)專(zhuān)題圖如圖6(b)、圖6(c)所示。其中圖6(b)為繪制的雷達(dá)反射率因子(ref)資料。相較于原有VB(Visual Basic)程序繪制的專(zhuān)題圖(圖6(a)),可以發(fā)現(xiàn)本文設(shè)計(jì)程序制圖的若干優(yōu)點(diǎn)。其一是增加了精確的地理信息,三沙市范圍內(nèi)西沙群島、中沙群島的島礁位置及名稱(chēng)均清晰標(biāo)注在圖內(nèi),同時(shí)在海南島范圍內(nèi)將地理信息精確繪制至縣級(jí)(原來(lái)僅為市級(jí)),并增加標(biāo)注沿海重要港口及雷達(dá)探測(cè)距離圈范圍,幫助終端用戶能清楚獲悉惡劣天氣的影響區(qū)域、范圍和過(guò)去及未來(lái)一段時(shí)間的移動(dòng)趨勢(shì),特別是在臺(tái)風(fēng)臨近登陸時(shí),上述功能可以輔助確定精確到縣級(jí)的可能登陸地段,以便更有針對(duì)性地采取防御措施。其二是改進(jìn)了雷達(dá)數(shù)據(jù)處理的邏輯,原有的VB專(zhuān)題圖制作程序設(shè)計(jì)直接采取徑向數(shù)據(jù)方位角取整的方法處理和繪制圖像,造成了個(gè)別徑向的缺失,如圖6(a)中150°-180°方位角的部分徑向缺失影響了雷達(dá)回波圖像的完整性。本文的程序由于在繪制圖像前先進(jìn)行了排序,并考慮到可能缺失徑向的插補(bǔ),避免了繪制缺失徑向問(wèn)題的出現(xiàn)。其三是高精度圖像繪制,由于雷達(dá)進(jìn)行了技術(shù)升級(jí)與數(shù)據(jù)格式標(biāo)準(zhǔn)化統(tǒng)一工作,分辨率從原來(lái)的1.2 km提升了4倍至300 m,相應(yīng)程序也進(jìn)行了修改,使得繪制的圖像更精細(xì)。同時(shí)本文的程序設(shè)計(jì)可以通過(guò)改變圖像dpi的方式調(diào)整輸出圖像的分辨率(默認(rèn)dpi為100)。其四是在原有基礎(chǔ)上新增了徑向速度(vel)資料的專(zhuān)題圖,如圖6(c)所示。
圖6 各程序制作的專(zhuān)題圖
所選個(gè)例為2020年第22號(hào)臺(tái)風(fēng)“環(huán)高”過(guò)程,通過(guò)制作的專(zhuān)題圖,預(yù)報(bào)員可以分析計(jì)算得到專(zhuān)題圖代表的雷達(dá)探測(cè)0.5°仰角上,該臺(tái)風(fēng)底層中心附近的最大風(fēng)速為51 m/s(15級(jí)上限、16級(jí)下限),考慮到臺(tái)風(fēng)中心距離雷達(dá)約150 km,根據(jù)測(cè)高公式算得回波離地高度約2.5 km,故結(jié)合預(yù)報(bào)經(jīng)驗(yàn)公式折算至地面估計(jì)的風(fēng)應(yīng)在14到15級(jí)(46-48 m/s)左右。本臺(tái)預(yù)報(bào)員最終制作發(fā)布的臺(tái)風(fēng)路徑和強(qiáng)度在未來(lái)18 h內(nèi)均維持在45-50 m/s,同時(shí)繼續(xù)發(fā)布了臺(tái)風(fēng)緊急警報(bào),指出“受冷空氣和臺(tái)風(fēng)‘環(huán)高’的共同影響,南海中西部海面:旋轉(zhuǎn)風(fēng)10到11級(jí)陣風(fēng)13級(jí),其中臺(tái)風(fēng)中心經(jīng)過(guò)的附近海面14級(jí)陣風(fēng)15級(jí)”,預(yù)報(bào)結(jié)論與觀測(cè)實(shí)況較為一致,應(yīng)用專(zhuān)題圖起到了較好的服務(wù)效果。
此外程序自動(dòng)生成的專(zhuān)題圖可以按配置文件settings.ini中的目標(biāo)路徑輸出到指定目錄下或FTP服務(wù)器,除可以生成網(wǎng)站及App端常用的.jpg或.png格式外,還可以生成矢量圖.eps及.svg格式文件,為研究應(yīng)用印刷出版提供支持。
本文基于Python語(yǔ)言,結(jié)合精細(xì)的GIS信息實(shí)現(xiàn)了南海氣象雷達(dá)專(zhuān)題服務(wù)圖的自動(dòng)制作,支持雷達(dá)基數(shù)據(jù)自動(dòng)檢索下載、解碼讀取、圖像投影繪制等功能。程序流程簡(jiǎn)明清晰,從數(shù)據(jù)檢索到成圖分發(fā)耗時(shí)在5 s以內(nèi),滿足業(yè)務(wù)時(shí)效需求。制作的專(zhuān)題服務(wù)圖供氣象部門(mén)內(nèi)預(yù)報(bào)分析網(wǎng)站及對(duì)內(nèi)/外App等多渠道應(yīng)用,特別是為近海臺(tái)風(fēng)、強(qiáng)對(duì)流等天氣的氣象防災(zāi)減災(zāi)工作提供了有力的資料支撐。添加的精確地理信息對(duì)于天氣影響區(qū)域的研判準(zhǔn)確性較此前大為提升,且可以通過(guò)修改相關(guān)預(yù)制GIS文件的方式增加或突出顯示,在后續(xù)也可以按需增加近海航線、漁場(chǎng)等信息[10],為更具體的應(yīng)用場(chǎng)景服務(wù)。此外,程序設(shè)計(jì)是基于標(biāo)準(zhǔn)格式的雷達(dá)基數(shù)據(jù)處理,可擴(kuò)展應(yīng)用到南海海域及周邊任意一部業(yè)務(wù)雷達(dá)進(jìn)行專(zhuān)題服務(wù)圖的制作,具有一定的推廣應(yīng)用價(jià)值。