文/吳龍波
管制扇區(qū)是空中交通管理里的專業(yè)名詞,它是指一塊劃定容積的扇形立體空域。管制扇區(qū)通常設(shè)置在某一高空管制單位或進(jìn)近管制單位內(nèi),每個(gè)扇區(qū)投影到平面上是一個(gè)多邊形區(qū)域,由特定的多個(gè)扇區(qū)邊界點(diǎn)和邊界點(diǎn)兩兩連線組成。管制扇區(qū)是一個(gè)立體區(qū)域,即每個(gè)扇區(qū)除了平面區(qū)域限制還有高度范圍限制,通過兩者限制即可組成扇區(qū)的立體空間。每一扇形區(qū)間有一名或一組空中交通管制員負(fù)有管制職責(zé),通過扇區(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ī)在飛行過程中每4 秒發(fā)出的四維時(shí)空信息,包括發(fā)送時(shí)刻、經(jīng)度、緯度和高度,而經(jīng)緯度和高度是判斷飛機(jī)通過某一扇區(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ù)庫等組件。
航跡發(fā)送:模擬自動(dòng)化航跡數(shù)據(jù)發(fā)送。

圖1:實(shí)時(shí)統(tǒng)計(jì)模型圖

圖2:過扇區(qū)算法圖解
消息隊(duì)列:將接收到的航跡數(shù)據(jù)緩存在消息隊(duì)列里并做持久化,持久化時(shí)間設(shè)定為7 天。
實(shí)時(shí)計(jì)算Flink:從消息隊(duì)列中實(shí)時(shí)獲取航跡數(shù)據(jù),對每一個(gè)航跡數(shù)據(jù)判斷是否通過扇區(qū),并將相同航班的記錄匯總成一條記錄。
分析數(shù)據(jù)庫:數(shù)據(jù)庫中,假設(shè)過扇區(qū)記錄保存在FlySector 表,其字段組成包括:航班號(hào)(CALLSIGN)、二次代碼(SSRCODE)、起飛機(jī)場(ADES)、扇區(qū)代碼(SECTORCODE)、進(jìn)扇區(qū)時(shí)間(ENTRYTIME)、出扇區(qū)時(shí)間(EXITTIME)。通過分析數(shù)據(jù)庫的快速查詢性能,能夠迅速獲取特定時(shí)間段內(nèi)每個(gè)扇區(qū)的流量。
本模型的難點(diǎn)在于實(shí)時(shí)計(jì)算Flink 中實(shí)現(xiàn)扇區(qū)統(tǒng)計(jì)算法,其中主要包括過扇區(qū)的判斷算法和相同航班判斷算法。
給定一個(gè)航班的某個(gè)航跡數(shù)據(jù),過扇區(qū)判斷算法負(fù)責(zé)判斷該時(shí)刻該航班是否處于某個(gè)扇區(qū)中。為便于說明,本文將扇區(qū)簡化為平面多邊形,同時(shí)把航跡和扇區(qū)邊界點(diǎn)的經(jīng)緯度轉(zhuǎn)換為XY 坐標(biāo)。判斷是否在扇區(qū)內(nèi)可以使用引射線法:在測試航跡點(diǎn)的Y(或X)坐標(biāo)畫一條直線,會(huì)得到一個(gè)測試點(diǎn)所在的行與扇區(qū)多邊形邊的交點(diǎn)的列表。在圖2的這個(gè)例子中有2條邊與測試點(diǎn)所在的行相交。如果測試航跡點(diǎn)在X 坐標(biāo)兩邊點(diǎn)的個(gè)數(shù)都是奇數(shù)則該測試點(diǎn)在扇區(qū)內(nèi),否則在扇區(qū)外。下圖中測試點(diǎn)的左邊各有奇數(shù)(1)個(gè)交點(diǎn),所以航跡點(diǎn)在扇區(qū)內(nèi)。過扇區(qū)判斷算法偽代碼如下:

通過3.1 的過扇區(qū)判斷算法,我們可以把航跡數(shù)據(jù)轉(zhuǎn)為中間數(shù)據(jù)記錄,每條中間記錄保存的字段信息有:航班號(hào)(CALLSIGN)、二次代碼(SSRCODE)、起飛機(jī)場(ADES)、扇區(qū)代碼(SECTORCODE)、航跡時(shí)間(ATO)。如航跡無法匹配上一個(gè)扇區(qū),則該航跡數(shù)據(jù)丟棄。中間數(shù)據(jù)記錄是圖1中實(shí)時(shí)計(jì)算Flink1 的計(jì)算結(jié)果,根據(jù)此結(jié)果,在實(shí)時(shí)計(jì)算Flink2 中用相同航班判斷法對相同航班的數(shù)據(jù)進(jìn)行融合更新,并將合并的單一記錄插入分析型數(shù)據(jù)庫。
同一個(gè)航班的中間記錄可以使用FlinkSQL 中的窗口函數(shù)進(jìn)行融合判斷,通過窗口函數(shù),我們可以把當(dāng)前中間記錄的前后特定時(shí)間內(nèi)的同一航班記錄數(shù)據(jù)找出來并按照航跡時(shí)間進(jìn)行排序,示例如表1所示。

表1

表2

表3
在實(shí)時(shí)計(jì)算Flink2 中對以上記錄進(jìn)行整合,即可計(jì)算出航班CSN001 過扇區(qū)ZGGGACC01 的結(jié)果記錄,如表2所示。
通過時(shí)間段重合算法即可在分析型數(shù)據(jù)庫獲取扇區(qū)流量統(tǒng)計(jì)結(jié)果,假設(shè)需要查詢時(shí)刻T1 到T2 扇區(qū)ZGGGACC01 的流量,查詢語句示例如表3。
本文研究了一個(gè)基于實(shí)時(shí)計(jì)算框架和航跡數(shù)據(jù)的管制扇區(qū)流量計(jì)算模型,相比傳統(tǒng)模型,該模型算法通過大數(shù)據(jù)技術(shù)中的Flink 集群實(shí)現(xiàn)了航跡數(shù)據(jù)分布式實(shí)時(shí)處理和計(jì)算。通過Flink 集群和分析型數(shù)據(jù)庫的配合,實(shí)現(xiàn)了在航班經(jīng)過扇區(qū)后實(shí)時(shí)計(jì)算出通過扇區(qū)的航班架次,同時(shí)把延時(shí)時(shí)間降低到秒級(jí)。本模型的應(yīng)用能大大改善空管系統(tǒng)中扇區(qū)架次統(tǒng)計(jì)的短板,對管制員工作負(fù)荷的分析有重要的促進(jìn)意義,對管制一線生產(chǎn)工作有良好的輔助作用。