Android 解析串口 北斗定位

数据得到后是这个样子

 

time:12:14:25

prot:[/dev/ttyS2]

[Txt]

*70
$GNRMC,,V,,,,,,,,,,N*4D
$GNVTG,,,,,,,,,N*2E
$GNGGA,,,,,,0

主要看*70下面的,$GNRMC,,V,,,,,,,,,,N*4D  这个

参照 https://baike.baidu.com/item/NEMA-0183/4313895?fr=aladdin 可以知道

 

例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50

字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息

字段1:UTC时间,hhmmss.sss格式

字段2:状态,A=定位,V=未定位

字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)

字段4:纬度N(北纬)或S(南纬)

字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)

字段6:经度E(东经)或W(西经)

字段7:速度,节,Knots

字段8:方位角,度

字段9:UTC日期,DDMMYY格式

字段10:磁偏角,(000 - 180)度(前导位数不足则补0)

字段11:磁偏角方向,E=东W=西

字段16:校验值

以上这个是需要知道的  我的返回结果是定位失败的情况

那么就仅仅字符串过滤就可以了

// s 是返回的结果
String[] split = s.split("\r");
 for (int i = 0; i < split.length; i++) {
                        String line = split[i];
                if (line.contains("$GNRMC")) {
                    String parse = BeiDouParseUtils.parse(ComRecData, line);
                    
                    break;
                }
            }               

 

package com.bjw.ComAssistant;

import com.bjw.bean.ComBean;

import org.json.JSONObject;

public class BeiDouParseUtils {

    public static String parse(ComBean bean,String line){

        String[] split = line.split(",");
        String s = split[2];
        if (s.equals("A")) {
            String lat = split[3];
            String mmLat = lat.substring(2);
            String ddLat = (String) lat.subSequence(0, 2);
            double latitude = Integer.parseInt(ddLat) + Double.parseDouble(mmLat) / 60;

            String lon = split[5];
            String mmLon = lon.substring(3);
            String ddLon = lon.substring(0, 3);
            double longitude = Integer.parseInt(ddLon) + Double.parseDouble(mmLon) / 60;
            try {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("time", bean.sRecTime);
                jsonObject.put("port", bean.sComPort);
                jsonObject.put("state", "定位成功");
                jsonObject.put("code", 1);
                jsonObject.put("latitude", latitude);
                jsonObject.put("longitude", longitude);
                jsonObject.put("angle", split[10]);
                return jsonObject.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else if (s.equals("V")) {
            try {
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("time", bean.sRecTime);
                jsonObject.put("port", bean.sComPort);
                jsonObject.put("state", "定位失败");
                jsonObject.put("code", 0);
                jsonObject.put("latitude", 0.0);
                jsonObject.put("longitude", 0.0);
                jsonObject.put("angle", 0);
                return jsonObject.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            return null;
        }
        return null;
    }
}

https://github.com/Orion-wubo/ComAssistant-master

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值