摘 要: 介紹了地理信息系統軟件ARCVIEW3.2的基本特點和ADS顯示系統的組成、結構和功能,著重論述了ADS信息接收、基于ARCVIEW的ADS顯示和ADS信息統計的關鍵技術及其實現。
關鍵詞: 地理信息系統GIS 自動相關監視ADS 空中交通管制系統 套接字(Windows Socket)
地理信息系統(GIS,Geographical Information System)是對現實世界中的各種對象的空間特征和屬性信息進行存儲,將空間特征和屬性信息結合進行分析,查詢并以直觀的形式(圖形)將結果顯示出來的一門新興學科。由美國環境系統研究所(ESRI)開發的ARCVIEW3.2地理信息系統軟件,具有空間分析能力強、支持多種數據格式和投影變換、顯示速度快、與其它程序的接口豐富和對地圖對象的控制方便等特點。這些特點使ARCVIEW比較適合開發動態目標跟蹤系統。本文將介紹ARCVIEW在動態目標跟蹤中的具體應用。
自動相關監視(ADS,Automatic Dependent Surveillance)系統作為空中交通管制系統中的一種新的監視手段,它從機載導航設備獲得信息(至少包括飛機識別和4維位置信息),通過甚高頻(VHF)地空數據鏈,自動且實時地發送到地面接收和處理系統,為空中交通管制部門和航空公司提供飛機在空中的信息。ADS系統可以為飛行在雷達覆蓋區以外,特別是海洋和荒漠空域的飛機,提供監視手段;將這些信息以直觀、易于分析的方式顯示出來是ADS系統的關鍵。通過地理信息系統,可以將ADS系統的上述功能以圖形的方式在地圖上顯示出來,使信息的表達直接、方便,能大大提高空管部門和航空公司的決策分析能力,提高飛行的安全性。
1 ADS顯示系統設計
從信息流程來看,ADS顯示系統首先從ADS地面信息處理系統獲得ADS數據。然后在ADS顯示系統中進行數據校正、濾波后在以基礎地理信息為底圖的地圖上顯示出來。在用戶需要進行統計分析時,可結合基礎地理信息對ADS動態信息進行統計分析。
從系統的信息流程可以將系統劃分為三個部分:
(1)ADS信息接收: 負責從ADS地面信息處理系統中獲得實時ADS數據,并維護與ADS地面信息分發系統的連接。
(2)ADS信息顯示: 將ADS信息轉化為地圖要素在地圖上顯示出來,并提供偏航、近進、進入危險區報警和沖突檢測等功能。
(3)ADS信息統計分析: 根據地理要素(航線、管制區、機場),統計出該要素在某個時間段(點)的航班的數量,進行初步的流量分析。
系統的程序結構如圖1所示。
2 ADS顯示系統的實現
ADS顯示系統的操作系統采用Windows NT Workstation 4.0,開發工具采用MS VC6.0、MS VB6.0和ESRI的ARCVIEW3.2。
2.1 ADS信息接收
通過共享文件和數據庫可實現不同進程間的信息交換。但是,這需要數據獲得者定期查詢文件服務器或數據庫服務器。這對實時性要求高的系統來說是難以滿足要求的。在Windows 中,Windows Socket(套接字)提供了網絡上不同進程的數據通信的理想方法。它能通過消息驅動來實時進行數據通信。我們采用Windows Socket API實現ADS信息接收模塊與ADS信息分發系統的通信。
在ADS系統中可能有多個ADS顯示系統在運行,為了建設分布式的網絡應用系統和提高代碼的復用性,我們將ADS信息接收模塊設計成ActiveX控件。
我們為該控件設計了以下事件和方法:InitSocket(),負責建立到數據分發模塊的連接;DataReady(),當有數據分發到此控件時,自動觸發該事件;SendData(),向外發送數據;Disconnect(),斷開連接。另外,控件在連接過程中會自動維護此連接,它定期測試鏈路狀態,如發現異常,則啟動重新連接線程,重新建立連接。ADS信息接收的流程如圖2所示。
2.2 ADS信息的顯示
ADS信息顯示是在ARCVIEW3.2中處理的,而ARCVIEW3.2無法使用ActiveX控件。但是ARCVIEW3.2能通過DDE技術與其它應用程序通信。我們通過VB開發一個數據傳輸模塊。該模塊通過ActiveX控件從ADS信息分發系統得到ADS數據,由DDE傳輸到ARCVIEW3.2中。ARCVIEW3.2得到ADS數據后,再進行顯示處理。下面分別就VB與ARCVIEW的數據通訊和信息顯示進行論述。
2.2.1 數據通訊
ARCVIEW與VB建立DDE會話的源代碼如下:
Label1.LinkTopic=″ArcView|System″
Label1.LinkMode=vbLinkManual。
建立DDE會話后,將要從VB到ARCVIEW的數據賦給VB中的變量就可進行傳輸。對數字和字符串其傳送格式不同:
對于字符串,在VB中的形式為AirNum=””B-2447””,即帶引號的字符串。
對于數字,只要將其轉化為普通字符串,如latstr =”45.45”。
在實際應用過程中,我們發現數字如果按數字形式傳輸容易出錯。如果將其轉化為字符,再按字符串傳輸則可解決此問題。從VB到ARCVIEW的數據傳輸源代碼如下:
cmd = ″av.run(″ + ″″″function.move″″″ + ″,{″ + redrawstr + ″,″ + Airnum + ″,″ + Flightnum + ″,″ + latstr + ″,″ + longstr + ″,″ + acarsstr + ″,″ + lastxstr + ″,″ + lastystr + ″}
Label1.LinkExecute (cmd)
2.2.2 信息顯示
在ARCVIEW3.2中,能顯示在地圖上的地圖對象有兩種:Theme(圖層)和Label(標注)。
·Theme是ARCVIEW的基礎顯示對象。對每個對應圖層,在ARCVIEW中都有一個屬性表與之相對應。圖層保存在文件中,對它的屬性進行查詢和進行空間分析都極其方便。但是,當對圖層的一個元素進行更新時,整個圖層和位于其上的地圖對象(如Label)都要隨著刷新,這樣既浪費時間又使得圖面閃爍比較厲害。
·Label是浮動在圖層之上的地理對象,它沒有屬性與之對應,它是動態停留在內存中的。對它的操作非常靈活。可對每個Label對象單獨進行移動、改變形狀和刪除而不影響圖面上其它的地圖對象。因此,Label的刷新速度快,不影響圖面。由于Label沒有屬性數據,所以對它的屬性查詢和空間分析就特別困難。
在ADS系統中,被監控的飛機的數量多,飛機的位置信息變化快,如果將這些飛機以Theme來顯示是無法辦到的,只能采用Label。由于Label沒有屬性表。為了能象對圖層那樣方便地查詢飛機不在圖面上的信息,我們構造了一個輔助屬性表。這個表保存在ACCESS數據庫中,ARCVIEW通過ODBC讀取表中的內容。在實際使用過程中,發現這種效果比較理想,既能滿足顯示速度和圖面質量的要求,又能象查詢圖層那樣方便地查詢航班的信息。
2.3 ADS信息統計分析
對各種空域特征的ADS信息統計的處理方式是類似的。其中統計某段航線在某段時間內的航班數量最具典型性,下面就此問題進行論述。
對航線的ADS信息統計是建立在航線數據和ADS動態數據的基礎上的。因此獲取航線的地理數據和ADS動態數據是非常重要的。
在民用航空中,航線是由航段組成的,而航段是由兩個導航點組成的一條線段。不同的航線可能包含同一航段。為了處理問題方便和節省存儲空間,我們將航線庫設計為三個表:AirRoute,存儲組成航線的航段代號;RouteSeg,存儲組成航段的導航點的代號;WayPoint,存儲導航臺的位置數據。這三個表的關系如圖3所示。它們存儲在基礎地理信息數據庫中。
ADS動態數據的航班標識和航班四維位置信息(經度、緯度、時間、高度)對ADS 信息統計分析是非常重要的。這些信息已由ADS信息地面信息處理系統存入ADS動態信息數據庫的Todisplay表中。
通過ODBC API可實現訪問遠程的基礎地理信息數據庫和ADS動態信息數據庫。用ODBC API訪問遠程數據庫的步驟如下:
(1) 申請環境句柄。
fg=SQLAllocEnv(henv)
(2) 申請連接句柄。
fg=SQLAllocConnect(henv,hDbc)
(3) 建立到數據庫的連接。
fg=SQLConnect(hDbc, strDNS, SQL_NTS, strUID, SQL_NTS, strPWD, SQL_NTS)
(4) 要獲取數據,還要申請語句句柄。
fg=SQLAllocStmt(hDbc, hstmt)
(5) 執行要得到的數據的SQL語句。
fg=SQLExecDirect(hstmt, strSql, Len(strSql))
(6) 可通過SQLGetData()取得所返回的數據。
根據輸入的航線信息,通過ODBC API獲得航線的地理數據并確定包含這條航線的最大矩形范圍,再通過ODBC API從ADS動態信息數據庫中獲得在要分析的時間段內且在航線的矩形范圍內的ADS動態數據。然后對這些數據在ARCVIW中進行空間分析。確定在這個時間段內在航線緩沖區內的數據并將結果顯示在地圖上。
該系統已在中國民航空管局總調度室運行了1年多,系統穩定可靠,得到了用戶的好評。
參考文獻
1 Arcview GIS environmental systems research institute,INC.1998
2 新航行系統概論編輯委員會.新航行系統概論.北京中國民航出版社,1997;7
3 蔣東興,林鶚華,陳棋德等.Windows Sockets網絡程序設計大全. 北京:清華大學出版社,1999.4