You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为AIS位置消息(Type1/2/3)补全完整UTC时间戳?

补全AIS Type1/2/3消息UTC时间戳的正确方法

要解决AIS Type1/2/3(船位报告)仅含0-60秒时间参考、缺少完整UTC时间戳的问题,业内通用的可靠方法主要有以下几种,结合你给出的gpsdecode输出示例来解释:

  • 优先依赖同MMSI的带完整UTC的AIS消息校准
    这是最精准的方案,核心逻辑是利用同一船舶(相同mmsi字段)发送的其他包含完整时间戳的AIS消息做基准:

    1. 定位同MMSI的Type4(基站/船站UTC报告)Type12/13(安全相关带时间的消息)——比如你示例里的Type4消息就带有完整的"timestamp":"2018-05-19T16:34:35Z"字段。
    2. 提取该基准消息的UTC年、月、日、时、分信息,将Type1/2/3消息的second字段(0-60,其中60代表闰秒)替换到基准时间的秒位,生成完整UTC时间戳。
    3. 若后续收到同MMSI的新基准消息,及时更新校准基准,避免长时间运行产生的时间漂移。
  • 用接收设备的UTC时间做 fallback 方案
    如果暂时无法获取同MMSI的基准消息,可以借助接收AIS信号的设备本地UTC时间做近似补全,但需满足前提:

    1. 接收设备的时间必须同步到准确UTC(比如开启NTP同步)。
    2. 提取设备接收该Type1/2/3消息时的UTC年、月、日、时、分,加上消息自带的second字段,生成完整时间。这种方法的误差通常在几秒内,适合临时应急场景。
  • 特殊处理:秒字段为60的闰秒情况
    当Type1/2/3消息的second值为60时,这是UTC闰秒的标记,补全时需注意:

    • 不要直接生成XX:XX:60格式的时间戳(多数系统不兼容),而是对应到基准时间最后一分钟的闰秒位置——比如基准时间是2023-06-30T23:59:59Z,则闰秒对应2023-06-30T23:59:60Z,后续时间直接跳转到2023-07-01T00:00:00Z

内容的提问来源于stack exchange,提问作者Lanas

火山引擎 最新活动