劉俊波
目前,低空空域監(jiān)視缺乏有效的監(jiān)視手段,傳統(tǒng)的雷達(dá)監(jiān)視,由于其覆蓋范圍較小,僅包括航路航線及周邊。而通用航空的飛行活動(dòng)靈活多樣,飛行范圍大多處于非雷達(dá)覆蓋區(qū)域。因此,必須引進(jìn)新的技術(shù)手段或監(jiān)視方式,才能有效的解決通航飛行監(jiān)視的難題。ADS-B 由于其建設(shè)成本低廉,建設(shè)難度較低,因此在低空監(jiān)視領(lǐng)域得到大力推廣及應(yīng)用。
WebSocket 是 HTML5 開始提供的一種在單個(gè)TCP 連接上進(jìn)行全雙工通訊的協(xié)議。允許客戶端和服務(wù)器之間進(jìn)行全雙工通信,以便任一方都可以通過建立的連接將數(shù)據(jù)推送到另一端。WebSocket 只需要建立一次連接,就可以一直保持連接狀態(tài)。
ActiveMQ 是Apache 軟件基金下的一個(gè)開源軟件,它遵循JMS 規(guī)范,是消息驅(qū)動(dòng)中間件軟件。ActiveMQ 的設(shè)計(jì)目標(biāo)是提供標(biāo)準(zhǔn)的,面向消息的,能夠跨越多語言和多系統(tǒng)的應(yīng)用集成消息通信中間件。
SuperMap 是一款商業(yè)化的地理信息系統(tǒng)軟件,通過該軟件可以實(shí)現(xiàn)地圖繪制、空間分析、數(shù)據(jù)編輯處理等操作,并且其可提供標(biāo)準(zhǔn)化的SOAP 服務(wù)以及Restful 服務(wù)。
Cat021 是空管專用ADS-B 地面站輸出的ADS-B報(bào)文格式,是一整套的信息傳輸規(guī)范,定義了傳輸數(shù)據(jù)的各個(gè)組成部分的不同含義。

圖1
數(shù)據(jù)源主要包括:
1)航班計(jì)劃數(shù)據(jù),以讀取消息隊(duì)列數(shù)據(jù)的方式,采集航班計(jì)劃系統(tǒng)中航班計(jì)劃。航班計(jì)劃系統(tǒng)中處理數(shù)據(jù)包括運(yùn)輸航班數(shù)據(jù)、以及通用航空數(shù)據(jù),通過任務(wù)類型區(qū)分,獲取對(duì)應(yīng)的通航航班計(jì)劃(主要包括航班號(hào)、二次代碼、起飛機(jī)場(chǎng)、降落機(jī)場(chǎng)等屬性)。
2)ADS-B 監(jiān)視數(shù)據(jù),以接收UDP 報(bào)文的方式,采集ADS-B 數(shù)據(jù)中心的監(jiān)視數(shù)據(jù),數(shù)據(jù)中心的監(jiān)視數(shù)據(jù)為已處理過的數(shù)據(jù),包括去重、虛假目標(biāo)處理、去除鋸齒等操作。通關(guān)過解析UDP 報(bào)文,獲取報(bào)文中的航班號(hào)、二次代碼數(shù)據(jù),從而與步驟(1)中獲取到的通航計(jì)劃數(shù)據(jù)列表進(jìn)行關(guān)聯(lián),過濾出通航飛行監(jiān)視數(shù)據(jù)。
通過接收單播或廣播方式傳送的ADS-B 監(jiān)視數(shù)據(jù),按照Cat021 數(shù)據(jù)格式進(jìn)行解析,獲取其航班號(hào)、應(yīng)答機(jī)編碼、UTC 時(shí)間、經(jīng)度、緯度、飛行高度、地速、角度、目標(biāo)標(biāo)識(shí)等信息字段。
系統(tǒng)設(shè)計(jì)有UDP 端口監(jiān)聽程序,當(dāng)監(jiān)聽到數(shù)據(jù)到來時(shí),觸發(fā)數(shù)據(jù)解析進(jìn)程,對(duì)該UDP 報(bào)文進(jìn)行拆分解析,每一個(gè)UDP 報(bào)文可能包含多個(gè)Cat021 格式的數(shù)據(jù),需在解析前進(jìn)行處理。解析成功的數(shù)據(jù)存儲(chǔ)于內(nèi)存中,通過設(shè)置閥值來判斷是否批量存入消息隊(duì)列中。
航班計(jì)劃系統(tǒng)中的航班計(jì)劃數(shù)據(jù)以消息隊(duì)列的方式對(duì)外發(fā)布。所發(fā)布的數(shù)據(jù)既包含運(yùn)輸航班的數(shù)據(jù),也包含通航航班的數(shù)據(jù)。通過關(guān)聯(lián)通航相關(guān)的任務(wù)性質(zhì)(比如“訓(xùn)練”“護(hù)林”“巡線”等),篩選出通航計(jì)劃數(shù)據(jù)。將獲取到的數(shù)據(jù),以內(nèi)存對(duì)象的形式存儲(chǔ)。每個(gè)對(duì)象均包含航班號(hào)、應(yīng)答機(jī)等重要信息。航班計(jì)劃關(guān)聯(lián)程序通過將此信息與ADS-B 監(jiān)視數(shù)據(jù)進(jìn)行關(guān)聯(lián),過濾出通航飛行的監(jiān)視數(shù)據(jù),暫不對(duì)運(yùn)輸航班監(jiān)視數(shù)據(jù)進(jìn)行處理。同時(shí)補(bǔ)充起飛機(jī)場(chǎng)、降落機(jī)場(chǎng)字段,同時(shí)將該數(shù)據(jù)保存消息隊(duì)列中。
由于ADS-B 監(jiān)視數(shù)據(jù)中既包含運(yùn)輸航空的監(jiān)視數(shù)據(jù),也包括通用航空的監(jiān)視數(shù)據(jù),數(shù)據(jù)量較大。雖然已經(jīng)成功過濾出通航的監(jiān)視數(shù)據(jù),但對(duì)于監(jiān)視數(shù)據(jù)的發(fā)布頻次來看,還是過于頻繁。對(duì)于低空飛行監(jiān)視來說,并不需要如此小的間隔數(shù)據(jù),因此還需要設(shè)置一個(gè)數(shù)據(jù)過濾閥值,主動(dòng)過濾部分?jǐn)?shù)據(jù)。對(duì)于判斷為通航的航班來說,其軌跡數(shù)據(jù)較多,如果對(duì)于每一條軌跡數(shù)據(jù)均直接進(jìn)行數(shù)據(jù)庫(kù)操作的話,將會(huì)大大增加數(shù)據(jù)庫(kù)的負(fù)載壓力。因此,引入了并發(fā)性能更加優(yōu)越的消息隊(duì)列。通過設(shè)置消息隊(duì)列深度,來調(diào)用數(shù)據(jù)庫(kù)批量寫入操作。為避免應(yīng)用程序頻繁的對(duì)數(shù)據(jù)進(jìn)行寫操作,將解析程序與數(shù)據(jù)庫(kù)操作程序通過ActiveMQ 消息隊(duì)列進(jìn)行分離,解析程序直接將解析結(jié)果插入隊(duì)列中即可。

圖2
設(shè)計(jì)消息隊(duì)列監(jiān)聽程序,對(duì)于存入消息隊(duì)列中的數(shù)據(jù),當(dāng)消息隊(duì)列深度已滿時(shí),將會(huì)直接啟動(dòng)數(shù)據(jù)庫(kù)讀寫操作。通過建立與數(shù)據(jù)庫(kù)之間的連接,利用數(shù)據(jù)庫(kù)批量寫入方法,按批量的寫入數(shù)據(jù)庫(kù),極大的減少了數(shù)據(jù)寫入耗時(shí)。
該服務(wù)端的設(shè)計(jì)僅針對(duì)于ADS-B 運(yùn)輸航空的飛行數(shù)據(jù)。對(duì)于判斷為運(yùn)輸航空的監(jiān)視數(shù)據(jù),不存入消息隊(duì)列中,通過設(shè)計(jì)一個(gè)消息發(fā)送服務(wù)端。同時(shí)為了減輕網(wǎng)絡(luò)傳輸帶寬壓力,對(duì)所傳輸?shù)臄?shù)據(jù)進(jìn)行格式轉(zhuǎn)換,調(diào)整為JSON 格式,進(jìn)行GZIP 壓縮,經(jīng)測(cè)試,經(jīng)過轉(zhuǎn)格式以及壓縮后的數(shù)據(jù)量,為原始數(shù)據(jù)大小的1/10。通過建立Server 端,實(shí)時(shí)監(jiān)聽連接端口,一旦發(fā)現(xiàn)有客戶端連接,則實(shí)時(shí)發(fā)送解析后的數(shù)據(jù)。此種方式可以滿足一對(duì)多的場(chǎng)景,即一個(gè)Server 端,允許對(duì)多個(gè)客戶端傳輸數(shù)據(jù)。另外,設(shè)置客戶端存活監(jiān)測(cè)機(jī)制,定期在客戶端與服務(wù)端之間傳送心跳數(shù)據(jù),避免假死情況發(fā)生。
由于系統(tǒng)中只需要關(guān)注飛行態(tài)勢(shì),因此對(duì)于同一個(gè)航班的飛行軌跡,不需保存多個(gè)軌跡點(diǎn)數(shù)據(jù),對(duì)于具體某航班的軌跡,僅保留其兩個(gè)相鄰位置點(diǎn)信息。對(duì)于解析獲取到的ADS-B 數(shù)據(jù),更新較早的位置點(diǎn)信息。當(dāng)用戶選擇運(yùn)輸航空監(jiān)視時(shí),自動(dòng)創(chuàng)建于WebSocket 服務(wù)端的連接,服務(wù)端將內(nèi)存中的航班軌跡列表發(fā)送至各接入的客戶端瀏覽器。
SuperMap 是一套GIS 產(chǎn)品,提供基礎(chǔ)的地圖服務(wù),可以通過調(diào)用圖層繪制方法,在原底圖基礎(chǔ)上進(jìn)行自定義繪制,包括管制區(qū),機(jī)場(chǎng)等。通過讀取通航航班飛行軌跡數(shù)據(jù),調(diào)用SuperMap 提供的JavaScript 方法,在地圖上進(jìn)行繪制。
對(duì)于通航航班,其軌跡數(shù)據(jù)均存儲(chǔ)于數(shù)據(jù)庫(kù)中,通過批量讀取數(shù)據(jù)庫(kù)中的軌跡記錄,查找其最新兩個(gè)位置點(diǎn)信息。然后計(jì)算其相對(duì)位置,調(diào)整軌跡繪制時(shí)的角度。
對(duì)于運(yùn)輸航空航班,通過選取運(yùn)輸航空類別后,建立與WebSocket 服務(wù)端的TCP 連接,直接通過獲取服務(wù)端發(fā)送的航班軌跡數(shù)據(jù),每個(gè)航班軌跡僅包含相鄰兩個(gè)位置點(diǎn)信息,通過JS 的JSON 數(shù)據(jù)拆分方法,獲取相鄰兩個(gè)坐標(biāo)值。通過調(diào)用SuperMap提供的繪制方法,將航班圖標(biāo)進(jìn)行間隔繪制,同時(shí)做一定平滑處理。設(shè)定繪制更新間隔,實(shí)時(shí)展示航班軌跡。
ADS-B 監(jiān)視手段是實(shí)現(xiàn)低空監(jiān)視的重要手段之一,本文通過對(duì)ADS-B 監(jiān)視數(shù)據(jù)的解析、與航班計(jì)劃關(guān)聯(lián)、分類存儲(chǔ)、GIS 展現(xiàn)等技術(shù),實(shí)現(xiàn)了通航航班飛行軌跡的實(shí)時(shí)展示,能夠更好地為通航服務(wù)。