文/吳龍波
管制扇區(qū)是空中交通管理里的專(zhuān)業(yè)名詞,它是指一塊劃定容積的扇形立體空域。管制扇區(qū)通常設(shè)置在某一高空管制單位或進(jìn)近管制單位內(nèi),每個(gè)扇區(qū)投影到平面上是一個(gè)多邊形區(qū)域,由特定的多個(gè)扇區(qū)邊界點(diǎn)和邊界點(diǎn)兩兩連線組成。管制扇區(qū)是一個(gè)立體區(qū)域,即每個(gè)扇區(qū)除了平面區(qū)域限制還有高度范圍限制,通過(guò)兩者限制即可組成扇區(qū)的立體空間。每一扇形區(qū)間有一名或一組空中交通管制員負(fù)有管制職責(zé),通過(guò)扇區(qū)航班流量的計(jì)算能真實(shí)反饋管制員的工作負(fù)荷,因此扇區(qū)流量統(tǒng)計(jì)得到各管制單位的高度關(guān)注。但受限于扇區(qū)形狀的空間復(fù)雜性以及大量航跡的計(jì)算難度,目前的傳統(tǒng)框架的統(tǒng)計(jì)結(jié)果往往延遲較大且存在較大誤差。
為了管制扇區(qū)流量統(tǒng)計(jì)的準(zhǔn)確性和實(shí)時(shí)性,本文結(jié)合主流的分布式實(shí)時(shí)計(jì)算框架Flink 和自動(dòng)化航跡數(shù)據(jù),提出一種基于實(shí)時(shí)計(jì)算的管制扇區(qū)流量統(tǒng)計(jì)模型。自動(dòng)化航跡數(shù)據(jù)是典型的流式數(shù)據(jù),并且數(shù)據(jù)量龐大,適合用實(shí)時(shí)計(jì)算框架進(jìn)行處理。它是飛機(jī)在飛行過(guò)程中每4 秒發(fā)出的四維時(shí)空信息,包括發(fā)送時(shí)刻、經(jīng)度、緯度和高度,而經(jīng)緯度和高度是判斷飛機(jī)通過(guò)某一扇區(qū)的重要依據(jù)。ApacheFlink 是目前大數(shù)據(jù)領(lǐng)域中廣泛使用的分布式實(shí)時(shí)計(jì)算框架,相比Apache Storm 和SparkStreaming,F(xiàn)link 以高吞吐、低延遲、高可靠和精確計(jì)算等特性備受關(guān)注。
基于實(shí)時(shí)計(jì)算Flink 的統(tǒng)計(jì)模型設(shè)計(jì)如圖1所示,包括航跡發(fā)送、消息隊(duì)列、實(shí)時(shí)計(jì)算、數(shù)據(jù)庫(kù)等組件。
航跡發(fā)送:模擬自動(dòng)化航跡數(shù)據(jù)發(fā)送。
圖1:實(shí)時(shí)統(tǒng)計(jì)模型圖
圖2:過(guò)扇區(qū)算法圖解
消息隊(duì)列:將接收到的航跡數(shù)據(jù)緩存在消息隊(duì)列里并做持久化,持久化時(shí)間設(shè)定為7 天。
實(shí)時(shí)計(jì)算Flink:從消息隊(duì)列中實(shí)時(shí)獲取航跡數(shù)據(jù),對(duì)每一個(gè)航跡數(shù)據(jù)判斷是否通過(guò)扇區(qū),并將相同航班的記錄匯總成一條記錄。
分析數(shù)據(jù)庫(kù):數(shù)據(jù)庫(kù)中,假設(shè)過(guò)扇區(qū)記錄保存在FlySector 表,其字段組成包括:航班號(hào)(CALLSIGN)、二次代碼(SSRCODE)、起飛機(jī)場(chǎng)(ADES)、扇區(qū)代碼(SECTORCODE)、進(jìn)扇區(qū)時(shí)間(ENTRYTIME)、出扇區(qū)時(shí)間(EXITTIME)。通過(guò)分析數(shù)據(jù)庫(kù)的快速查詢(xún)性能,能夠迅速獲取特定時(shí)間段內(nèi)每個(gè)扇區(qū)的流量。
本模型的難點(diǎn)在于實(shí)時(shí)計(jì)算Flink 中實(shí)現(xiàn)扇區(qū)統(tǒng)計(jì)算法,其中主要包括過(guò)扇區(qū)的判斷算法和相同航班判斷算法。
給定一個(gè)航班的某個(gè)航跡數(shù)據(jù),過(guò)扇區(qū)判斷算法負(fù)責(zé)判斷該時(shí)刻該航班是否處于某個(gè)扇區(qū)中。為便于說(shuō)明,本文將扇區(qū)簡(jiǎn)化為平面多邊形,同時(shí)把航跡和扇區(qū)邊界點(diǎn)的經(jīng)緯度轉(zhuǎn)換為XY 坐標(biāo)。判斷是否在扇區(qū)內(nèi)可以使用引射線法:在測(cè)試航跡點(diǎn)的Y(或X)坐標(biāo)畫(huà)一條直線,會(huì)得到一個(gè)測(cè)試點(diǎn)所在的行與扇區(qū)多邊形邊的交點(diǎn)的列表。在圖2的這個(gè)例子中有2條邊與測(cè)試點(diǎn)所在的行相交。如果測(cè)試航跡點(diǎn)在X 坐標(biāo)兩邊點(diǎn)的個(gè)數(shù)都是奇數(shù)則該測(cè)試點(diǎn)在扇區(qū)內(nèi),否則在扇區(qū)外。下圖中測(cè)試點(diǎn)的左邊各有奇數(shù)(1)個(gè)交點(diǎn),所以航跡點(diǎn)在扇區(qū)內(nèi)。過(guò)扇區(qū)判斷算法偽代碼如下:
通過(guò)3.1 的過(guò)扇區(qū)判斷算法,我們可以把航跡數(shù)據(jù)轉(zhuǎn)為中間數(shù)據(jù)記錄,每條中間記錄保存的字段信息有:航班號(hào)(CALLSIGN)、二次代碼(SSRCODE)、起飛機(jī)場(chǎng)(ADES)、扇區(qū)代碼(SECTORCODE)、航跡時(shí)間(ATO)。如航跡無(wú)法匹配上一個(gè)扇區(qū),則該航跡數(shù)據(jù)丟棄。中間數(shù)據(jù)記錄是圖1中實(shí)時(shí)計(jì)算Flink1 的計(jì)算結(jié)果,根據(jù)此結(jié)果,在實(shí)時(shí)計(jì)算Flink2 中用相同航班判斷法對(duì)相同航班的數(shù)據(jù)進(jìn)行融合更新,并將合并的單一記錄插入分析型數(shù)據(jù)庫(kù)。
同一個(gè)航班的中間記錄可以使用FlinkSQL 中的窗口函數(shù)進(jìn)行融合判斷,通過(guò)窗口函數(shù),我們可以把當(dāng)前中間記錄的前后特定時(shí)間內(nèi)的同一航班記錄數(shù)據(jù)找出來(lái)并按照航跡時(shí)間進(jìn)行排序,示例如表1所示。
表1
表2
表3
在實(shí)時(shí)計(jì)算Flink2 中對(duì)以上記錄進(jìn)行整合,即可計(jì)算出航班CSN001 過(guò)扇區(qū)ZGGGACC01 的結(jié)果記錄,如表2所示。
通過(guò)時(shí)間段重合算法即可在分析型數(shù)據(jù)庫(kù)獲取扇區(qū)流量統(tǒng)計(jì)結(jié)果,假設(shè)需要查詢(xún)時(shí)刻T1 到T2 扇區(qū)ZGGGACC01 的流量,查詢(xún)語(yǔ)句示例如表3。
本文研究了一個(gè)基于實(shí)時(shí)計(jì)算框架和航跡數(shù)據(jù)的管制扇區(qū)流量計(jì)算模型,相比傳統(tǒng)模型,該模型算法通過(guò)大數(shù)據(jù)技術(shù)中的Flink 集群實(shí)現(xiàn)了航跡數(shù)據(jù)分布式實(shí)時(shí)處理和計(jì)算。通過(guò)Flink 集群和分析型數(shù)據(jù)庫(kù)的配合,實(shí)現(xiàn)了在航班經(jīng)過(guò)扇區(qū)后實(shí)時(shí)計(jì)算出通過(guò)扇區(qū)的航班架次,同時(shí)把延時(shí)時(shí)間降低到秒級(jí)。本模型的應(yīng)用能大大改善空管系統(tǒng)中扇區(qū)架次統(tǒng)計(jì)的短板,對(duì)管制員工作負(fù)荷的分析有重要的促進(jìn)意義,對(duì)管制一線生產(chǎn)工作有良好的輔助作用。