姜書成 鞏海方
摘 ?要:隨著時間的推移、航運經濟的快速發展,以及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.