一、前言

卫星AIS是一种船舶定位技术,通过低轨道的卫星接收船舶发送的AIS报文信息,卫星将接收和解码AIS报文信息转发给相应的地球站,从而让陆地管理机构掌握船舶的相关动态信息,实现对远海海域航行船舶的监控。

AIS数据主要包含以下三类:

  • 船舶静态数据:包含船名、呼号、MMSI、IMO、船舶类型、船长、船宽等信息。
  • 船舶动态数据:包含经度、纬度、船首向、航迹向、航速等信息。
  • 船舶航程数据:包含船舶航行状态、吃水深度、目的地、预计到达时间等信息。

这些数据可以用于判断船舶是否偏航,从而确保航行安全。此外,AIS还可以应用于海上航行监管、海上反恐、经济态势分析、海上搜救等领域,结合卫星遥感观测数据,可服务于船只航行安全保障与应急救援、海上航运监测、全球贸易信息挖掘等。

二、ais数据格式

ais数据格式如下:

!AIVDM,1,1,,A,16:9oS00008Jpn@FCcdDnhcd08P0,0*1D

这个数据由多个部分组成的。具体说明如下:

包含消息标识符->!AIVDM  传送电文需要的总语句数->1 语句序列号->1  序列电文识别码->,, AIS信道->A或B 封装的电文->16:9oS00008Jpn@FCcdDnhcd08P0  填充比特数->0 CRC校验码->1D

三、使用

1、引入依赖

<dependency>
            <groupId>dk.tbsalling</groupId>
            <artifactId>aismessages</artifactId>
            <version>2.2.1</version>
        </dependency>

2.具体使用

package com.example.spepcdemo.test;

import dk.tbsalling.aismessages.AISInputStreamReader;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * @author qx
 * @date 2024/5/14
 * @des
 */
public class Demo {
    //ais数据
    private final static String AIS_DATA = "!AIVDM,1,1,,A,16:9oS00008Jpn@FCcdDnhcd08P0,0*1D";
    public static void main(String[] args) throws IOException {
        InputStream inputStream = new ByteArrayInputStream(AIS_DATA.getBytes());
        System.out.println("--------------------");
        AISInputStreamReader streamReader = new AISInputStreamReader(inputStream, aisMessage ->
                System.out.println("Received AIS message from MMSI " + aisMessage.getSourceMmsi().getMMSI() + ": " + aisMessage)
        );
        streamReader.run();
    }
    
}

3.运行程序测试

我们从控制台上可以看到我们已经成功解析了ais格式的数据,获取到了我们需要的信息。

Java解析AIS(船舶定位)数据_Java