/// <summary> /// 解析生成 位置信息 消息 /// </summary> /// <param name="data"></param> /// <returns></returns> public JT808_PackageData.LocationInfo ToLocationInfoMsg(byte[] data) { JT808_PackageData.LocationInfo locationInfo = new JT808_PackageData.LocationInfo(); //基本信息 locationInfo.alc = data[6].ToString("X2") + data[7].ToString("X2") + data[8].ToString("X2") + data[9].ToString("X2"); //报警标志 4位 locationInfo.bst = data[10].ToString("X2") + data[11].ToString("X2") + data[12].ToString("X2") + data[13].ToString("X2"); //状态 4位 locationInfo.lon = (double)ExplainUtils.ParseIntFromBytes(data, 14, 4) / 1000000; //经度 4位 除以10的6次方 转为度 locationInfo.lat = (double)ExplainUtils.ParseIntFromBytes(data, 18, 4) / 1000000; //纬度 4位 除以10的6次方 转为度 locationInfo.hgt = ExplainUtils.ParseIntFromBytes(data, 22, 2); //高程 2位 locationInfo.spd = (float)ExplainUtils.ParseIntFromBytes(data, 24, 2) / 10; //速度 2位 转为十进制 除以10即62.2KM/H locationInfo.agl = ExplainUtils.ParseIntFromBytes(data, 26, 2); //方向 2位 string gtm = string.Format("{0}-{1}-{2} {3}:{4}:{5}", ExplainUtils.ParseBcdStringFromBytes(data, 28, 1), ExplainUtils.ParseBcdStringFromBytes(data, 29, 1), ExplainUtils.ParseBcdStringFromBytes(data, 30, 1), ExplainUtils.ParseBcdStringFromBytes(data, 31, 1), ExplainUtils.ParseBcdStringFromBytes(data, 32, 1), ExplainUtils.ParseBcdStringFromBytes(data, 33, 1)); try { locationInfo.gtm = DateTime.Parse(gtm); //locationInfo.gtm = DateTime.Parse("09-01-2017 12:15:12"); } catch (Exception e) { logger.log("error happens when parsing gtm! " + e.Message); } //扩展信息 locationInfo.mlg = 0; // 里程 0x01 4 locationInfo.oil = 0; // 油量 0x02 2 locationInfo.spd2 = 0; // 记录仪速度 0x03 2 locationInfo.est = ""; //扩展车辆信号状态位 0x25 4 locationInfo.io = ""; // IO状态位 0x2A 2 locationInfo.ad1 = ""; // 模拟量 0x2B 4 locationInfo.yte = 0; // 无线通信网络信号强度 0x30 1 locationInfo.gnss = 0; // 定位卫星数 0x31 1 locationInfo.ecu = ""; // ECU透传数据 0xE0 n for (int i = 34; i < data.Length; i++) { if (data[i] == 0x01)// 里程 0x01 4 { locationInfo.mlg = (float)ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]) / 10; } else if (data[i] == 0x02)// 油量 0x02 2 { locationInfo.oil = (float)ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]) / 10; } else if (data[i] == 0x03)// 记录仪速度 0x03 2 { locationInfo.spd2 = ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]); } else if (data[i] == 0x25)//扩展车辆信号状态位 0x25 4 { for (int ii = i + 2; ii < i + 2 + data[i + 1]; ii++) { locationInfo.est = locationInfo.est + data[ii].ToString("X2"); } } else if (data[i] == 0x2a)// IO状态位 0x2A 2 { for (int ii = i + 2; ii < i + 2 + data[i + 1]; ii++) { locationInfo.io = locationInfo.io + data[ii].ToString("X2"); } } else if (data[i] == 0x2b)// 模拟量 0x2B 4 { for (int ii = i + 2; ii < i + 2 + data[i + 1]; ii++) { locationInfo.ad1 = locationInfo.ad1 + data[ii].ToString("X2"); } } else if (data[i] == 0x30)// 无线通信网络信号强度 0x30 1 { locationInfo.yte = ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]); } else if (data[i] == 0x31)// 定位卫星数 0x31 1 { locationInfo.gnss = ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]); } else if (data[i] == 0xE0)// ECU透传数据 0xE0 n { for (int ii = i + 2; ii < i + 2 + data[i + 1]; ii++) { locationInfo.ecu = locationInfo.ecu + data[ii].ToString("X2"); } } else //其它字段,先过滤 { } i = i + 1 + data[i + 1]; } return(locationInfo); }
/// <summary> /// 解析生成 位置信息 消息 /// </summary> /// <param name="data"></param> /// <returns></returns> public JT808_PackageData.LocationInfo ToLocationInfoMsg(byte[] data) { JT808_PackageData.LocationInfo locationInfo = new JT808_PackageData.LocationInfo(); //基本信息 locationInfo.alc = data[0].ToString("X2") + data[1].ToString("X2") + data[2].ToString("X2") + data[3].ToString("X2"); //报警标志 4位 locationInfo.bst = data[4].ToString("X2") + data[5].ToString("X2") + data[6].ToString("X2") + data[7].ToString("X2"); //状态 4位 locationInfo.lat = (double)ExplainUtils.ParseIntFromBytes(data, 8, 4) / 1000000; //纬度 4位 除以10的6次方 转为度 locationInfo.lon = (double)ExplainUtils.ParseIntFromBytes(data, 12, 4) / 1000000; //经度 4位 除以10的6次方 转为度 locationInfo.hgt = ExplainUtils.ParseIntFromBytes(data, 16, 2); //高程 2位 locationInfo.spd = (float)ExplainUtils.ParseIntFromBytes(data, 18, 2) / 10; //速度 2位 转为十进制 除以10即62.2KM/H locationInfo.agl = ExplainUtils.ParseIntFromBytes(data, 20, 2); //方向 2位 string gtm = string.Format("{0}-{1}-{2} {3}:{4}:{5}", ExplainUtils.ParseBcdStringFromBytes(data, 22, 1), ExplainUtils.ParseBcdStringFromBytes(data, 23, 1), ExplainUtils.ParseBcdStringFromBytes(data, 24, 1), ExplainUtils.ParseBcdStringFromBytes(data, 25, 1), ExplainUtils.ParseBcdStringFromBytes(data, 26, 1), ExplainUtils.ParseBcdStringFromBytes(data, 27, 1)); locationInfo.gtm = DateTime.Parse(gtm);//时间 //扩展信息 locationInfo.mlg = 0; // 里程 0x01 4 locationInfo.oil = 0; // 油量 0x02 2 locationInfo.spd2 = 0; // 记录仪速度 0x03 2 locationInfo.est = ""; //扩展车辆信号状态位 0x25 4 locationInfo.io = ""; // IO状态位 0x2A 2 locationInfo.ad1 = ""; // 模拟量 0x2B 4 locationInfo.yte = 0; // 无线通信网络信号强度 0x30 1 locationInfo.gnss = 0; // 定位卫星数 0x31 1 locationInfo.ecu = ""; // ECU透传数据 0xE0 n for (int i = 28; i < data.Length; i++) { if (data[i] == 0x01)// 里程 0x01 4 { locationInfo.mlg = (float)ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]) / 10; } else if (data[i] == 0x02)// 油量 0x02 2 { locationInfo.oil = (float)ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]) / 10; } else if (data[i] == 0x03)// 记录仪速度 0x03 2 { locationInfo.spd2 = ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]); } else if (data[i] == 0x25)//扩展车辆信号状态位 0x25 4 { for (int ii = i + 2; ii < i + 2 + data[i + 1]; ii++) { locationInfo.est = locationInfo.est + data[ii].ToString("X2"); } } else if (data[i] == 0x2a)// IO状态位 0x2A 2 { for (int ii = i + 2; ii < i + 2 + data[i + 1]; ii++) { locationInfo.io = locationInfo.io + data[ii].ToString("X2"); } } else if (data[i] == 0x2b)// 模拟量 0x2B 4 { for (int ii = i + 2; ii < i + 2 + data[i + 1]; ii++) { locationInfo.ad1 = locationInfo.ad1 + data[ii].ToString("X2"); } } else if (data[i] == 0x30)// 无线通信网络信号强度 0x30 1 { locationInfo.yte = ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]); } else if (data[i] == 0x31)// 定位卫星数 0x31 1 { locationInfo.gnss = ExplainUtils.ParseIntFromBytes(data, i + 2, data[i + 1]); } else if (data[i] == 0xE0)// ECU透传数据 0xE0 n { for (int ii = i + 2; ii < i + 2 + data[i + 1]; ii++) { locationInfo.ecu = locationInfo.ecu + data[ii].ToString("X2"); } } else //其它字段,先过滤 { } i = i + 1 + data[i + 1]; } return(locationInfo); }