GNRMC解析

// GNRMC_Analysis.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string.h>
#include <stdlib.h>   
#include <stdio.h>


// http://baike.baidu.com/link?url=OVUwBFU0AmHo3G3KfjZ431T0m8aBoTn3vIegc9oFlD6ie-rxp2zyYYYyE3dIxb9XnySxKVu_tfLCII2UoNMvOK
// $GNRMC,092846.400,A,3029.7317,N,10404.1784,E,000.0,183.8,070417,,,A*73

/*
$GNRMC,
092846.400, // UTC时间,hhmmss.sss(时分秒.毫秒)格式
A, // 定位状态,A=有效定位,V=无效定位
3029.7317,N, // 纬度
10404.1784,E, // 经度
000.0, // 地面速率
183.8, // 地面航向
070417, // UTC日期
, // 磁俯角
, // 磁方向角
A*73 // 模式指示
*/


struct GNRMC_Info
{
unsigned int year;
unsigned char month;
unsigned char day;
unsigned char hour;
unsigned char Minute;
unsigned char second;

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是将GNRMC解析为经纬度的示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #include "stm32f10x.h" // 定义GNRMC结构体 typedef struct { char time[10]; // 时间 char status; // 定位状态 char latitude[10]; // 纬度 char ns; // 北纬或南纬 char longitude[11]; // 经度 char ew; // 东经或西经 char speed[5]; // 速度 char course[5]; // 方向 char date[7]; // 日期 } GNRMC; // 将GNRMC数据解析为经纬度 void parse_gnrmc(GNRMC *gnrmc, float *latitude, float *longitude) { if (gnrmc->status == 'A') { // 定位成功 // 解析纬度 int lat_degrees = (gnrmc->latitude[0] - '0') * 10 + (gnrmc->latitude[1] - '0'); float lat_minutes = atof(gnrmc->latitude + 2); *latitude = lat_degrees + lat_minutes / 60; if (gnrmc->ns == 'S') { // 南纬 *latitude = -*latitude; } // 解析经度 int lon_degrees = (gnrmc->longitude[0] - '0') * 100 + (gnrmc->longitude[1] - '0') * 10 + (gnrmc->longitude[2] - '0'); float lon_minutes = atof(gnrmc->longitude + 3); *longitude = lon_degrees + lon_minutes / 60; if (gnrmc->ew == 'W') { // 西经 *longitude = -*longitude; } } } int main(void) { // 假设收到的GNRMC数据为"$GNRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A" char gnrmc_str[] = "$GNRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A"; // 解析GNRMC数据 GNRMC gnrmc; sscanf(gnrmc_str, "$GNRMC,%[^,],%c,%[^,],%c,%[^,],%c,%[^,],%[^,],%[^,],", gnrmc.time, &gnrmc.status, gnrmc.latitude, &gnrmc.ns, gnrmc.longitude, &gnrmc.ew, gnrmc.speed, gnrmc.course, gnrmc.date); // 将GNRMC数据解析为经纬度 float latitude, longitude; parse_gnrmc(&gnrmc, &latitude, &longitude); // 输出解析结果 printf("latitude: %f, longitude: %f\n", latitude, longitude); while (1) {} } ``` 上述代码假设收到的GNRMC数据为"$GNRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A",并将其解析为经纬度。实际应用中,需要根据实际情况修改代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值