c语言 nmealib-0.5.3 学习 简单代码 ,供参考

本文介绍了一个基于 NMEA 协议的 GPS 数据解析示例,展示了如何使用 C 语言解析 GPGGA 和 GPRMC 数据包来获取经度、纬度、速度等信息,并进行格式化输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void showInfo1(char *buf)
{
    char gps_str[1024];// ="$GPGGA,031105.000,4003.9196,N,11620.5765,E,1,05,3.4,109.0,M,-6.4,M,,0000*4A\r\n";
    sprintf(gps_str,"%s",buf);
    nmeaINFO info;                  // nmea协议解析结果结构体
    nmeaPARSER parser;              // nmea协议解析载体
    nmeaPOS dpos;
    
    nmea_zero_INFO(&info);          // 填入默认的解析结果
    nmea_parser_init(&parser);      // 为解析载体分配内存空间

    // 调用函数完成GPS信息解析,最终结果保留于info数组中
    if( (nmea_parse(&parser, gps_str, (int)strlen(gps_str), &info)) > 0 )
    {
        nmea_info2pos(&info, &dpos);
        printf("longitude   %.5f\r\n",info.lon);
        printf("latitude    %.5f\r\n",info.lat);
        printf("speed       %.2f\r\n",info.speed);
        printf("\r\n");
        printf("longitude   %10.8f\r\n",nmea_radian2degree(info.lon));
        printf("latitude    %10.8f\r\n",nmea_radian2degree(info.lat));
        printf("longitude   %10.8f\r\n",nmea_radian2degree(dpos.lon));
        printf("latitude    %10.8f\r\n",nmea_radian2degree(dpos.lat));
    }

    nmea_parser_destroy(&parser);   // 释放解析载体的内存空间
}

void showInfo_GPGGA(char *buf)
{
    char gps_str[1024];// ="$GPGGA,031105.000,4003.9196,N,11620.5765,E,1,05,3.4,109.0,M,-6.4,M,,0000*4A\r\n";

    sprintf(gps_str,"%s",buf);
    nmeaINFO info;                  // nmea协议解析结果结构体
    nmeaGPGGA pack;
    nmeaPOS dpos;
    
    nmea_zero_INFO(&info);          // 填入默认的解析结果
    nmea_zero_GPGGA(&pack);
    // 调用函数完成GPS信息解析,最终结果保留于info数组中
    if( (nmea_parse_GPGGA(gps_str, (int)strlen(gps_str), &pack)) > 0 )
    {
        nmea_GPGGA2info(&pack,&info);
        nmea_info2pos(&info, &dpos);
        printf("GPGGA longitude   %10.8f\r\n",nmea_radian2degree(dpos.lon));
        printf("GPGGA latitude    %10.8f\r\n",nmea_radian2degree(dpos.lat));
        printf("GPGGA height_sea   %10.8f\r\n",pack.elv);
        printf("GPGGA height_ground   %10.8f\r\n",pack.diff);
        printf("GPGGA GPS_Num   %2d\r\n",pack.satinuse);
    }
}

void showInfo_GPRMC(char *buf)
{
    char gps_str[1024];// ="$GPGGA,031105.000,4003.9196,N,11620.5765,E,1,05,3.4,109.0,M,-6.4,M,,0000*4A\r\n";
    sprintf(gps_str,"%s",buf);
    nmeaINFO info;                  // nmea协议解析结果结构体
    nmeaGPRMC pack;
    nmeaPOS dpos;
    nmea_zero_INFO(&info);          // 填入默认的解析结果
    nmea_zero_GPRMC(&pack);
    // 调用函数完成GPS信息解析,最终结果保留于info数组中
    if( (nmea_parse_GPRMC(gps_str, (int)strlen(gps_str), &pack)) > 0 )
    {
        nmea_GPRMC2info(&pack,&info);
        nmea_info2pos(&info, &dpos);
        //
        printf("GPRMC status  %c\r\n", pack.status);
        printf("DATE     : %4d-%02d-%02d \n",1900+pack.utc.year,pack.utc.mon+1,pack.utc.day);
        printf("TIME     :  %02d:%02d:%02d \n",pack.utc.hour+8,pack.utc.min,pack.utc.sec);
        printf("GPRMC longitude   %10.8f\r\n %c",nmea_radian2degree(dpos.lon),pack.ns);
        printf("GPRMC latitude    %10.8f\r\n %c",nmea_radian2degree(dpos.lat),pack.ew);
        printf("Speed   : %10.4f Km/h\n",pack.speed);
        printf("direction   : %10.4f \n",pack.direction);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值