赞
踩
请看我上篇博客 https://blog.csdn.net/Crazy_Cw/article/details/137515699
引入第三方jar 解析,GPGSA、GPGSV、GPGGA、GPRMC、GPVTG
在写解析的时候突然想到,我五种协议都要写个遍吗?这是不是太麻烦了。
于是,我发现了第三方封装好的协议解析jar包,以下是它的代码仓库:
https://github.com/ktuukkan/marine-api
maven地址:
https://mvnrepository.com/artifact/net.sf.marineapi/marineapi/0.11.0
假设你有java 5年开发经验,忽略框架部分。第三方源码,此文章不解释。
<dependency>
<groupId>net.sf.marineapi</groupId>
<artifactId>marineapi</artifactId>
<version>0.11.0</version>
</dependency>
package com.joyaiot.vehiclemonitor.config; import com.joyaiot.vehiclemonitor.netty.util.GpsListener; import lombok.extern.slf4j.Slf4j; import net.sf.marineapi.nmea.io.SentenceReader; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import java.net.DatagramSocket; /** * 功能描述: 任务队列 * @Author keLe * @Date 2022/7/20 */ @Component @Slf4j public class LaunchRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { // 使用UDP链接,监听 10183 端口 DatagramSocket source = new DatagramSocket(10183); SentenceReader reader = new SentenceReader(source); // 使用 我们自定义的 监听器解析 GPRMC 协议 reader.addSentenceListener(new GPRMCListener()); reader.start(); log.info("启动成功:监听ip:{127.0.0.1},端口:{10011}"); } }
以下字段不在做解析,这里假设你已经有了开发此协议的经验
package com.joyaiot.vehiclemonitor.listener; import net.sf.marineapi.nmea.event.AbstractSentenceListener; import net.sf.marineapi.nmea.sentence.RMCSentence; import net.sf.marineapi.nmea.util.DataStatus; import net.sf.marineapi.nmea.util.Date; import net.sf.marineapi.nmea.util.FaaMode; import net.sf.marineapi.nmea.util.Position; /** * 功能描述: GPRMC 协议监听器 * * @Author keLe * @Date 2024/4/8 */ public class GPRMCListener extends AbstractSentenceListener<RMCSentence> { @Override public void sentenceRead(RMCSentence sentence) { FaaMode mode = sentence.getMode(); double correctedCourse = sentence.getCorrectedCourse(); DataStatus status = sentence.getStatus(); double speed = sentence.getSpeed(); double course = sentence.getCourse(); Date date = sentence.getDate(); Position position = sentence.getPosition(); System.out.println(1111111111); } }
这里给大家重点看下源码
这个 Sentence 的 子类接口,就是所有协议的具体解析
百度网盘地址:
链接:https://pan.baidu.com/s/1LTpdPHSwbHl4p6dcRtWbjQ
提取码:dzfx
可以看到 所有的值都解析成功了。至此完毕!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。