基于ARCVIEW的ADS显示系统的开发
2009-06-05
作者:骆小燕 张 军 张学军
摘 要:介绍了地理信息系统软件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