姜书成 巩海方
摘 要:随着时间的推移、航运经济的快速发展,以及AIS设备装船的数量的增加,中国沿海AIS岸基系统每年都产生海量的AIS数据,如何快速地从中找到所需的数据,成为迫在眉睫需要解决的问题。该文通过对AIS数据文件结构、AIS语句结构的研究,对比计算生成的特定船舶发出AIS报文起始字符串,大大地减少了解析数据量,从而提高了AIS报文抽取和解析效率。
关键词:船舶自动识别系统 数据 抽取
中图分类号:U675.7 文献标识码:A 文章编号:1672-3791(2019)06(a)-0032-02
20世纪90年代,国际海事组织推出了船舶自动识别系统(Automatic Identification System,简称AIS),在船上安装船载的识别终端,希望船舶通过自动获取岸基和其他船舶信息,加强船舶之间、船岸之间的联系,防止船舶碰撞,降低因船舶事故造成的人身、财产损失和海洋环境污染。作为国际海事组织的A类理事国,我国积极履行国际公约,于2001年12月18日发布了船舶强制配备该设备的公告。
自AIS系统投入运行以来,在船舶避碰、海事监管和搜救方面发挥了重要的作用,已成为海上船舶目标识别的重要手段。AIS数据,在船舶的密度分布、航迹分布、船速分布、类别分布,以及交通流量、领域容量、会遇概率等多方面进行了应用,成为海上航路规划和设计的重要参考依据,其历史轨迹也成为海事调查工作中的重要证据。
随着数据的累积,从浩如烟海的AIS数据中调取某一条特定船舶特定时间段内的AIS数据,将是一件比较困难的事情。该文将分析从庞大的AIS历史数据中快速抽取某条船舶的中长期AIS数据的方法。
1 船舶AIS数据快速抽取技术的开发
1.1 AIS报文的种类及数据结构
由于Class-A和Class-B类的AIS提供了总计24种AIS报文,但是对于船舶轨迹回放和分析的仅仅只有第1类(定时的船位报告,由A类船载移动设备播发)、2类(分配时间表的船位报告)、3类(特别船位报告,对询问的回复)、5类(定时的静态数据和与船舶有关的船舶数据报告)、18类(标准Class-B类设备位置报告,用以替代第1、2、3类的Class-B类船载移动设备的标准船位信息报告)、19类(扩展B类设备位置报告,包括附加的静态信息)这6类信息。这6类报文的数据结构大致类似,都包括报文ID、用户ID、报文内容及通信状态等内容,该文就不再做详述。
1.2 快速抽取指定船舶AIS数据的方法
由上面的分析可以看出,将每一条数据都解析,都可以获得发送该条语句的船舶AIS设备的MMSI(海事移动业务识别码)号码,可以根据解析得的MMSI号码与给定的船舶MMSI号码进行对比,找到并保存需要抽取的目标船舶的数据。然而抽取目标船舶的AIS数据在整体数据中所占的比重非常小,在这样的计算过程中,将大量的时间耗费在解析非抽取目标船舶的数据上,不能快速地从大量的原始数据中获得抽取目标船舶的AIS数据。
进一步分析这6类AIS数据的结构可以看出,每一类数据的前38bit的结构都是相同的,如表1所示。
通过表1可知,可以通过给定的抽取船舶的MMSI号码,计算出该条船舶AIS设备发射的这6类AIS信息封装ITU-R M.1371报文的起始字符串,符合该字符串的数据即为要抽取的目标船舶的AIS数据,对其进一步解析,这样大大地减少了解析数据的条数,提高了解析效率。
查表法是高效的计算机方法,为进一步提高从给定MMSI计算ITU-R M.1371报文的起始字符串的效率,该项目研究中利用了6bit ASCII码与二进制对照表,运用下述算法生成的二进制在对照表中快速地查找对应的6bit ASCII码,组成ITU-R M.1371报文的起始字符串。
算法描述如下。
步骤一:依次将给定的消息识别码、转发指示符和用户识别码分别按次序计算各自对应的二进制形式的无前导“0”的ASCII数字字符串,如果该数字大小等于0,则用一个“0”字符表示。
步骤二:将步骤一计算得到的二进制ASCII字符串,在其左端填充字符“0”,使填充后的字符串长度等于其表1中所示的比特数;如果填充前字符串长度已经达到该参数在表1中标明的比特数,则无需填充。
步骤三:将填充后的各字符串按照步骤一中传入参数的顺序连接,即消息识别码填充后的二进制字符串在最左端,用户识别码填充后的二进制字符串在最右端;该字符串的总长度应为38。
步骤四:将步骤三生成那个的二进制字符串,从左端第一个字符开始,按照步长等于6进行分隔,可分隔出7段,最后一段仅2个字符应舍去。对分隔出的每一段字符串從6bit ASCII码与二进制对照表查找对应的6bit ASCII字符,可得到6个字符,这6个字符就是需要的ITU-R M.1371报文的起始字符串。
1.3 举例验证分析方法的可行性
如查找MMSI号码为“412049010”播发的第一类AIS报文,其转发标志设为0。
按步骤一,依次传入1,0,412049010,生成的未左端填充的二进制字符串分别是:
1:1
0:0
412049010:11000100011110101111001110010
按步骤二,对上述生成二进制字符串左端补“0”达到其对应的比特数,填充后为:
1:000001
0:00
412049010:011000100011110101111001110010
按步骤三:将上述3个字符串按次序连接,新的字符串如下:
00000100011000100011110101111001110010
按步骤四,将上述字符串按步长为6进行分隔,舍去仅有2字符的最后一段,剩余6段,如下:
1,000001
2,000110
3,001000
4,111101
5,011110
6,011100
最后在6bit ASCII码与二进制对照表查找对应的6bit ASCII字符分别是:
“1”,“6”,“8”,“u”,“N”,“L”
则快速抽取该船舶发送的第一类转发次数为0的ITU-R M.1371报文数据起始字符串为“168uNL”。
按以上算法编制的程序在硬件配置为Intel Core i3 2.52GHz,内存2G,操作系统为Windows7 Home Edition(x86)的普通笔记本计算机上创建4个线程从2011年1月的AIS历史数据(共744个文件)中抽取船舶数据,实验结果如下:
MyWorkingThread-1读取数据总数:1040806239, 发现目标:15450
MyWorkingThread-1→耗时:2294.467s
MyWorkingThread-2读取数据总数:977810566,发现目标:14239
MyWorkingThread-2→耗时:2040.14s
MyWorkingThread-3读取数据总数:920864808,发现目标:13163
MyWorkingThread-3→耗时:1927.383s
MyWorkingThread-4读取数据总数:936319319, 发现目标:13571
MyWorkingThread-4→耗时:1955.541s
最终耗时以耗时最长的线程为准为2294s,约38.2min,抽取MMSI号码为“412049010”的船舶历史轨迹位置点共56423个。
从验证中可以看出,该方法可以快速地从大量AIS数据中抽取特定船舶的AIS数据,达到了预期效果。
2 结语
该文通过研究AIS报文数据结构,对于给定的船舶MMSI号码,计算生成该船舶发射的6类AIS信息封装ITU-R M.1371报文的起始字符串,通过比对得到符合该字符串的数据,即为要抽取的目标船舶的AIS数据,这样大大地减少了解析数据的条数,提高了解析效率,从而得到了一种从海量船舶AIS数据中快速抽取指定船舶AIS数据的方法。
参考文献
[1] 徐铁,蔡奉君,胡勤友,等.基于卡爾曼滤波算法船舶AIS轨迹估计研究[J].现代电子技术,2014,37(5):97-100,104.
[2] 刘畅.船舶自动识别系统(AIS)关键技术研究[D].大连海事大学,2013.
[3] 朱飞祥,张英俊,高宗江.基于数据挖掘的船舶行为研究[J].中国航海,2012,35(2):50-54.