动态解析AIS原始数据

首先看一下解析效果:

在这里插入图片描述
首先项目引入jar包:

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

import dk.tbsalling.aismessages.ais.messages.AISMessage;
import dk.tbsalling.aismessages.nmea.NMEAMessageHandler;
import dk.tbsalling.aismessages.nmea.NMEAMessageSocketClient;
 
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.function.Consumer;
 
@Deprecated
public class SocketDemoApp implements Consumer<AISMessage> {
 
    @Override
    public void accept(AISMessage aisMessage) {
        System.out.println("Received AIS message: " + aisMessage);
    }
 
	public void runDemo() {
		System.out.println("AISMessages Demo App");
		System.out.println("--------------------");
 
		try {
			// NMEAMessageSocketClient nmeaMessageHandler = new NMEAMessageSocketClient("207.7.148.216", 9009, new NMEAMessageHandler("DEMOSRC1", this));
			NMEAMessageSocketClient nmeaMessageHandler = new NMEAMessageSocketClient("ais.exploratorium.edu", 80, new NMEAMessageHandler("DEMOSRC1", this));
			nmeaMessageHandler.run();
		} catch (UnknownHostException e) {
			System.err.println("Unknown host: " + e.getMessage());
		} catch (IOException e) {
			System.err.println("I/O error: " + e.getMessage());
		}
	}
 
	public static void main(String[] args) {
		new http().runDemo();
	}
 
}

船舶AIS轨迹信息内容

AIS : 船舶自动识别系统,相关概念可自行百度。

AIS信息项

信息字段信息类型信息内容备注
Message ID静态信息信息识别码
Repeat Indicator静态信息重复次数指示指示应该重发的次数。缺省为0,3表示不再重发
MMSI静态信息海上移动服务识别号在安装时设定-如船舶自身改变,则可能需要修正
aisVeisonIndicator静态信息采用的AIS的版本信息
IMO静态信息IMO号码在安装时设定
CallSign静态信息呼号在安装时设定-如船舶自身改变,则可能需要修正
VesselName静态信息船名
ShipType静态信息船舶类型从预设的列表中选择
CargoType静态信息货物类型从预设的列表中选择
dimension A/B/C/D静态信息船舶尺寸船的长度、宽度、高度等信息
deviceType静态信息定位设备的类型
ETA静态信息预计航行时间按船长判断。在航行开始手工输入并在需要时更新
Draught静态信息最大吃水深度
Destination静态信息目的地按船长判断。在航行开始手工输入并在需要时更新
navState动态信息航行状态航行状态信息在必要时由手工输入或改变,0=动力航行中;1=锚泊;2=未受令;3=机动性受限;4=受吃水限制;5=锚链系泊;6=搁浅;7=捕捞中;8=风帆动力航行;9~15为未来保留。
ROT动态信息转向率由与AIS连接的船舶的转向率传感器或旋转罗盘自动更新
Draught动态信息最大吃水深度
SOG动态信息对地航速由与AIS连接的主要位置传感器自动更新,规定传感器计算SOG,以1/10节距为单位,1023=无;1022= 102.2节
COG动态信息对地航向由与AIS连接的主要位置传感器自动更新,规定传感器计算COG,以1/10度表示的航向
Longitude动态信息最大吃水深度由与AIS连接的位置传感器自动更新。用1/10000分表示的经度(东= +,西= -)
Latitude动态信息航行位置纬度由与AIS连接的位置传感器自动更新。用1/10000分表示的纬度(北= +,南= -)
PositionAccuracy动态信息船位精确度1=高精度(差分式);0= 低精度。
trueHeading动态信息航艏向由与AIS连接的船艏向传感器自动更新
dateTime动态信息UTC的定位时间戳由与AIS连接的主要位置传感器自动更新(例如GPS)

原文链接1:https://blog.csdn.net/weixin_38959210/article/details/103136867
原文链接2:https://blog.csdn.net/m0_37287361/article/details/102649517

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java可以通过使用AISParser库来解析静态AIS(Automatic Identification System)原始数据AIS是一种船舶自动识别系统,它通过无线电信号传输船舶位置、速度、航向等信息,用于船舶交通管理和海上安全。 在Java中解析静态AIS原始数据,首先需要导入AISParser库。然后,我们需要读取AIS原始数据文件或从网络中接收AIS数据流。接下来,使用AISParser提供的方法将原始数据转换为可读的AIS消息。 AISParser库提供了一些常用的方法来解析AIS原始数据。例如,可以使用parse方法将原始数据解析AIS消息对象。该方法接收原始数据作为参数,并返回一个包含解析AIS消息的对象。 解析后的AIS消息对象可以获取各种信息,例如船舶的MMSI(Maritime Mobile Service Identity)、呼号、船名、船长、船宽等。可以使用AIS消息对象的getter方法获取这些信息。 解析静态AIS原始数据的过程如下: 1. 导入AISParser库。 2. 读取AIS原始数据文件或接收AIS数据流。 3. 使用AISParser的parse方法解析原始数据AIS消息对象。 4. 获取AIS消息对象的各种信息。 例如,我们可以通过以下代码片段来解析静态AIS原始数据: ``` import com.aisparser.AisInputStream; import com.aisparser.AisMessage; import com.aisparser.AisMessageException; import com.aisparser.MessageException; import com.aisparser.Vdm; import com.aisparser.Itdma; ... AisInputStream inputStream = new AisInputStream(); ... try { while (true) { // 从数据流中读取AIS原始数据 String rawMessage = inputStream.readMessage(); // 解析原始数据AIS消息对象 Vdm vdm = new Vdm(); if (vdm.parse(rawMessage) != 0) { throw new MessageException("Error parsing raw message"); } AisMessage aisMessage = AisMessage.getInstance(vdm); // 获取AIS消息对象的信息 int mmsi = aisMessage.getUserId(); String callSign = aisMessage.getCallSign(); String shipName = aisMessage.getShipName(); double shipLength = aisMessage.getLength(); double shipWidth = aisMessage.getWidth(); // 输出船舶信息 System.out.println("MMSI: " + mmsi); System.out.println("Call Sign: " + callSign); System.out.println("Ship Name: " + shipName); System.out.println("Ship Length: " + shipLength); System.out.println("Ship Width: " + shipWidth); // 进一步处理AIS消息对象... } } catch (AisMessageException e) { e.printStackTrace(); } finally { inputStream.close(); } ``` 通过上述代码,我们可以解析静态AIS原始数据并获取船舶的各种信息。这样可以对AIS数据进行分析、存储或进一步处理,从而实现对船舶交通和海上安全的管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值