刘俊波
目前,低空空域监视缺乏有效的监视手段,传统的雷达监视,由于其覆盖范围较小,仅包括航路航线及周边。而通用航空的飞行活动灵活多样,飞行范围大多处于非雷达覆盖区域。因此,必须引进新的技术手段或监视方式,才能有效的解决通航飞行监视的难题。ADS-B 由于其建设成本低廉,建设难度较低,因此在低空监视领域得到大力推广及应用。
WebSocket 是 HTML5 开始提供的一种在单个TCP 连接上进行全双工通讯的协议。允许客户端和服务器之间进行全双工通信,以便任一方都可以通过建立的连接将数据推送到另一端。WebSocket 只需要建立一次连接,就可以一直保持连接状态。
ActiveMQ 是Apache 软件基金下的一个开源软件,它遵循JMS 规范,是消息驱动中间件软件。ActiveMQ 的设计目标是提供标准的,面向消息的,能够跨越多语言和多系统的应用集成消息通信中间件。
SuperMap 是一款商业化的地理信息系统软件,通过该软件可以实现地图绘制、空间分析、数据编辑处理等操作,并且其可提供标准化的SOAP 服务以及Restful 服务。
Cat021 是空管专用ADS-B 地面站输出的ADS-B报文格式,是一整套的信息传输规范,定义了传输数据的各个组成部分的不同含义。
图1
数据源主要包括:
1)航班计划数据,以读取消息队列数据的方式,采集航班计划系统中航班计划。航班计划系统中处理数据包括运输航班数据、以及通用航空数据,通过任务类型区分,获取对应的通航航班计划(主要包括航班号、二次代码、起飞机场、降落机场等属性)。
2)ADS-B 监视数据,以接收UDP 报文的方式,采集ADS-B 数据中心的监视数据,数据中心的监视数据为已处理过的数据,包括去重、虚假目标处理、去除锯齿等操作。通关过解析UDP 报文,获取报文中的航班号、二次代码数据,从而与步骤(1)中获取到的通航计划数据列表进行关联,过滤出通航飞行监视数据。
通过接收单播或广播方式传送的ADS-B 监视数据,按照Cat021 数据格式进行解析,获取其航班号、应答机编码、UTC 时间、经度、纬度、飞行高度、地速、角度、目标标识等信息字段。
系统设计有UDP 端口监听程序,当监听到数据到来时,触发数据解析进程,对该UDP 报文进行拆分解析,每一个UDP 报文可能包含多个Cat021 格式的数据,需在解析前进行处理。解析成功的数据存储于内存中,通过设置阀值来判断是否批量存入消息队列中。
航班计划系统中的航班计划数据以消息队列的方式对外发布。所发布的数据既包含运输航班的数据,也包含通航航班的数据。通过关联通航相关的任务性质(比如“训练”“护林”“巡线”等),筛选出通航计划数据。将获取到的数据,以内存对象的形式存储。每个对象均包含航班号、应答机等重要信息。航班计划关联程序通过将此信息与ADS-B 监视数据进行关联,过滤出通航飞行的监视数据,暂不对运输航班监视数据进行处理。同时补充起飞机场、降落机场字段,同时将该数据保存消息队列中。
由于ADS-B 监视数据中既包含运输航空的监视数据,也包括通用航空的监视数据,数据量较大。虽然已经成功过滤出通航的监视数据,但对于监视数据的发布频次来看,还是过于频繁。对于低空飞行监视来说,并不需要如此小的间隔数据,因此还需要设置一个数据过滤阀值,主动过滤部分数据。对于判断为通航的航班来说,其轨迹数据较多,如果对于每一条轨迹数据均直接进行数据库操作的话,将会大大增加数据库的负载压力。因此,引入了并发性能更加优越的消息队列。通过设置消息队列深度,来调用数据库批量写入操作。为避免应用程序频繁的对数据进行写操作,将解析程序与数据库操作程序通过ActiveMQ 消息队列进行分离,解析程序直接将解析结果插入队列中即可。
图2
设计消息队列监听程序,对于存入消息队列中的数据,当消息队列深度已满时,将会直接启动数据库读写操作。通过建立与数据库之间的连接,利用数据库批量写入方法,按批量的写入数据库,极大的减少了数据写入耗时。
该服务端的设计仅针对于ADS-B 运输航空的飞行数据。对于判断为运输航空的监视数据,不存入消息队列中,通过设计一个消息发送服务端。同时为了减轻网络传输带宽压力,对所传输的数据进行格式转换,调整为JSON 格式,进行GZIP 压缩,经测试,经过转格式以及压缩后的数据量,为原始数据大小的1/10。通过建立Server 端,实时监听连接端口,一旦发现有客户端连接,则实时发送解析后的数据。此种方式可以满足一对多的场景,即一个Server 端,允许对多个客户端传输数据。另外,设置客户端存活监测机制,定期在客户端与服务端之间传送心跳数据,避免假死情况发生。
由于系统中只需要关注飞行态势,因此对于同一个航班的飞行轨迹,不需保存多个轨迹点数据,对于具体某航班的轨迹,仅保留其两个相邻位置点信息。对于解析获取到的ADS-B 数据,更新较早的位置点信息。当用户选择运输航空监视时,自动创建于WebSocket 服务端的连接,服务端将内存中的航班轨迹列表发送至各接入的客户端浏览器。
SuperMap 是一套GIS 产品,提供基础的地图服务,可以通过调用图层绘制方法,在原底图基础上进行自定义绘制,包括管制区,机场等。通过读取通航航班飞行轨迹数据,调用SuperMap 提供的JavaScript 方法,在地图上进行绘制。
对于通航航班,其轨迹数据均存储于数据库中,通过批量读取数据库中的轨迹记录,查找其最新两个位置点信息。然后计算其相对位置,调整轨迹绘制时的角度。
对于运输航空航班,通过选取运输航空类别后,建立与WebSocket 服务端的TCP 连接,直接通过获取服务端发送的航班轨迹数据,每个航班轨迹仅包含相邻两个位置点信息,通过JS 的JSON 数据拆分方法,获取相邻两个坐标值。通过调用SuperMap提供的绘制方法,将航班图标进行间隔绘制,同时做一定平滑处理。设定绘制更新间隔,实时展示航班轨迹。
ADS-B 监视手段是实现低空监视的重要手段之一,本文通过对ADS-B 监视数据的解析、与航班计划关联、分类存储、GIS 展现等技术,实现了通航航班飞行轨迹的实时展示,能够更好地为通航服务。