从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
您会注意到,唯一的变化是第二对(“错误的”一对带有“已适配的”第二部分)具有错误的“目的地”,因此, 如果您对“目标”字段不感兴趣,那么完成所有解码工作真的很重要吗?
祝一切顺利
答案 0 :(得分: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,...)
使用此设置,如果您是5类消息的第一部分(或无效的AIS序列),则q.get_size()
的结果可以为0;如果您添加了单句消息,则结果可以为1;或者与已经存在的第一句相匹配的第二句。
注意: 要回答您的问题,您可以在https://gpsd.gitlab.io/gpsd/AIVDM.html上的“ 类型5:与航行和航行有关的数据”段落中的哪一位上详细编码哪些信息。 如果第二条消息无效,这将帮助您了解丢失哪些数据。