0

自 1 年前以来,我有一个 AIS 天线接收 AIVDM 语句。

现在我开始使用https://github.com/bcl/aisparser解码句子,发现类型 5 消息有两个 aivdm 句子并不总是连续出现,通常会丢失(至少在我的情况下)第二个句子,使得解码相当复杂。

我试图交换第二部分的句子,看看会发生什么,以及它是否真的很重要。

例如,如果您在https://www.maritec.co.za/tools/aisvdmvdodecoding/中尝试这些句子:

!AIVDM,2,1,0,A,58wt8Ui`g??r21`7S=:22058<v05Htp000000015>8OA;0sk,0*7B
!AIVDM,2,2,0,A,eQ8823mDm3kP00000000000,2*5D
!AIVDM,2,1,6,A,58wt8Ui`g??r21`7S=:22058<v05Htp000000015>8OA;0sk,0*7B
!AIVDM,2,2,6,A,:062paRLOaD,2*79

您会注意到唯一的变化是第二对(“错误”的一对,带有“改编”的第二部分)有一个错误的“目的地”,所以, 如果你不感兴趣,那么完成所有的解码工作真的很重要“目的地”领域?

一切顺利

4

1 回答 1

0

确实,匹配类型 5 消息的相应两个部分可能很棘手,但您可以依靠这个库为您完成:https ://github.com/schwehr/libais

import ais
q = ais.nmea_queue.NmeaQueue()
while True:
    msg = next(your_message_iterator)
    q.put(msg)
    if q.qsize():
        d = q.get().get('decoded', None) 
        # Then do whatever you need with d (store it, print it,...)

使用此设置,q.get_size()如果您是类型 5 消息(或无效 AIS 序列)的第一部分,则结果可以为 0,如果您添加了单句消息或匹配已经存在的第二句,则结果可以为 1第一句话。

注意:要回答您的问题,您可以在https://gpsd.gitlab.io/gpsd/AIVDM.html上的“类型 5:静态和航程相关数据” 段落中获取哪些信息被编码在哪个位上的详细信息。这将帮助您了解如果第二条消息无效,哪些数据会丢失。

于 2019-07-12T19:44:34.823 回答