一、前言
卫星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格式的数据,获取到了我们需要的信息。