第一篇,还不太会用这个,哈哈哈。

目录:
原始数据
GGA行提取
纬度提取
经度提取

原始数据

$GNGGA,085731.000,xxxx.xxxx,N,xxxxx.xxxx,E,1,16,0.9,27.8,M,0.0,M,4F
$GNGLL,3018.4819,N,12004.6687,E,085731.000,A,A
49
$GPGSA,A,3,25,33,31,29,14,12,32,10,26,34,20,35,1.6,0.9,1.331
$BDGSA,A,3,07,09,10,06,1.6,0.9,1.3
26
$GPGSV,4,1,14,10,35,186,32,12,11,038,37,14,62,345,34,20,12,171,327F
$GPGSV,4,2,14,22,16,313,26,25,43,045,38,26,31,212,32,29,21,110,29
77
$GPGSV,4,3,14,31,51,299,34,32,73,043,40,33,48,171,29,34,71,044,367A
$GPGSV,4,4,14,35,29,145,29,36,26
4B
$BDGSV,2,1,06,02,31,05,32,06,78,093,35,07,75,228,3361
$BDGSV,2,2,06,09,67,334,33,10,44,227,22
64
$GNRMC,085731.000,A,xxxx.xxxx,N,xxxxx.xxxx,E,0.34,348.93,091218,A7F
$GNVTG,348.93,T,M,0.34,N,0.63,K,A
24
$GNZDA,085731.000,09,12,2018,00,0041
$GPTXT,01,01,01,ANTENNA OK
35

GGA行提取

#define GPSMAX 670                                                             //GPS数据读取一次获得长度
#define GGA 70                                                                      //GGA长度
#define READBEGIN  600                                                      //开始提取GPS长度char gpsdata[GPSMAX];                                                          //GPS数据提取
char read;
char gpsread[GGA];                                                             //提取的GPS字符串void GPSread()     //GPS数据读取
{int kk = 0;if (gpsSerial.available()) {gpsdata[i++] = (char)gpsSerial.read();                                                                       //读取每一个元素if(i >= READBEGIN) {int ii = 0;while(ii < i){if(ii+GPSMAX-READBEGIN < GPSMAX && gpsdata[ii] == 'G' && gpsdata[ii+1] == 'G' && gpsdata[ii+2] == 'A'){ //对GGA那一行进行提取int tt = ii;while(gpsdata[tt] != '\n'){gpsread[kk++] = gpsdata[tt];//Serial.print(gpsdata[tt]);                                                                            //输出提取的GPS数据 tt++;}gpsread[kk+1] = '\n';Serial.print('\n');}ii++;}memset(gpsdata, 0, GPSMAX);i = 0;} //clear info}
}

结果:
16:52:28.855 -> $GNGGA,085229.000,xxxx.xxxx,N,xxxxx.xxxx,E,1,12,1.0,18.3,M,0.0,M,*43
16:52:29.856 -> $GNGGA,085230.000,xxxx.xxxx,N,xxxxx.xxxx,E,1,12,1.0,17.6,M,0.0,M,*4D
16:52:30.857 -> $GNGGA,085231.000,xxxx.xxxx,N,xxxxx.xxxx,E,1,12,1.0,16.9,M,0.0,M,*4F
16:52:31.852 -> $GNGGA,085232.000,xxxx.xxxx,N,xxxxx.xxxx,E,1,12,1.0,16.5,M,0.0,M,*4C
16:52:32.817 -> $GNGGA,085233.000,xxxx.xxxx,N,xxxxx.xxxx,E,1,12,1.0,15.8,M,0.0,M,*44
16:52:33.851 -> $GNGGA,085234.000,xxxx.xxxx,N,xxxxx.xxxx,E,1,12,1.0,15.1,M,0.0,M,*48
16:52:34.853 -> $GNGGA,085235.000,xxxx.xxxx,N,xxxxx.xxxx,E,1,12,1.0,15.0,M,0.0,M,*44
16:52:35.826 -> $GNGGA,085236.000,xxxx.xxxx,N,xxxxx.xxxx,E,1,12,1.0,13.2,M,0.0,M,*41

纬度提取

double wei
void weiduread()    //纬度获取
{int tt = 0;while(gpsread[tt] != '\n'){if (gpsread[tt] == 'N'){                                  //纬度提取 xx.xxxxint j;for (j = tt-2; gpsread[j] != ','; j--){;}j++;wei = (gpsread[j]-48)*10 + (gpsread[j+1]-48) + ((gpsread[j+2]-48)*10 + (gpsread[j+3]-48) + (gpsread[j+5]-48)/10.0 + (gpsread[j+6]-48)/100.0 + (gpsread[j+7]-48)/1000.0 + (gpsread[j+8]-48)/10000.0)/60.0;Serial.println(wei);}else ;}tt++;}
}

经度提取

double jing
void jingduread()   //经度获取
{int tt = 0;while(gpsread[tt] != '\n'){if (gpsread[tt] == 'E'){                                     //经度提取 xxx.xxxxint j, k;for (j = tt-2; gpsread[j] != ','; j--){;}j++;jing = (gpsread[j]-48)*100 + (gpsread[j+1]-48)*10 + (gpsread[j+2]-48);jing = jing + ((gpsread[j+3]-48)*10 + (gpsread[j+4]-48) + (gpsread[j+6]-48)/10.0 + (gpsread[j+7]-48)/100.0 + (gpsread[j+8]-48)/1000.0 + (gpsread[j+9])/10000.0)/60.0;Serial.println(jing);}}else ;}tt++;}
}

说明:很早写的,用过,稍微改了改,可能会有点问题。这种解析方式会不定时出现乱码,这是由于每次接收到的数据长度不一导致的,选择不同的宏定义长度会有不同的结果。当然,更好地方式便是去下载TinyGPS++.h库,网上找得到,引用也很简单,而且有速度、航向角等其他有用的数据,程序如下:

#include <TinyGPS++.h>
double weiread()
{return (gps.location.lat());
}double jingread()
{return (gps.location.lng());
}
double highread()
{return(gps.altitude.value());
}
double degreeread()
{return (gps.course.value());
}
double vread()
{return (gps.speed.mps());
}

然后再返回到一个double类型就可以用啦!

参考资料
[1]: https://blog.csdn.net/Fourier_Legend/article/details/84107998
[2]: https://blog.csdn.net/Fourier_Legend/article/details/84107494
里面很详细!

arduino GPS 经纬度解析(C语言)相关推荐

  1. gps经纬度坐标 c语言,初学者: gps:GPRMC 经纬度问题

    初学者: gps:GPRMC 经纬度问题 int gps_parse_line(struct gps_t *gps, char *buffer, int size) { float lon, lat; ...

  2. Unity获取GPS经纬度并解析成具体位置

    其实unity也有自带的api获取GPS经纬度的信息的,地址是:点击这里 下面写一个demo,把获取到的GPS信息的经纬度解析成具体地址,具体思路是通过unity 自带api获取经纬度,然后通过高德的 ...

  3. c语言数组124048,根据GPS经纬度判断当前所属的市区

    这个事情分两步走 1. 拿到行政区划的地理围栏数据 2. 根据GPS定位判断一个点是否落在地理围栏的多边形区域里. 1. 获取行政区划的地理围栏数据可以利用百度API.打开以前我的一个例子在chrom ...

  4. C语言-GPS经纬度数据提取

    一帧数据: const char input[1024] ="$GNGGA,084852.000,2236.9453,N,11408.4790,E,1,05,3.1,89.7,M,0.0,M ...

  5. android gps磁偏角,GPS数据格式解析

    GPS数据格式解析 简介 GPS发送数据以行为单位,数据格式如下: $信息类型,x,x,x,x,x,x,x,x,x,x,x,x,x 每行以字符"$"开头,以为结尾,CR-Carri ...

  6. APP Inventor中如何利用GPS经纬度计算GPS距离、速度、方向

         最近有空时研究了一下MIT APP InVentor,这是一个原来google验室的项目,目的是为了给Andriod APP的开发者提供一种简便快捷的开发模式,但后来该项目被停止,2012年 ...

  7. Flash保存GPS经纬度信息

    Flash保存GPS经纬度信息 文章目录 Flash保存GPS经纬度信息 flash简介 程序设计思路 技术要点 一.浮点数写入 FLASH 二.FLASH 写入及读取 三.将读取回来的值转化为浮点型 ...

  8. PHP安卓获取gpgga,科学网—GPS编码格式及C语言解码 - 王红旗的博文

    有关磁偏角和地图定位的问题: 地图的方向:上北.下南.左西.右东是大多数地图的方向,但这可不是通用原则,如果地图上有方向标,可以通过方向标了解到这些. 地磁极是接近南极和北极的,但并不和南极.北极重合 ...

  9. 不丢失精度的获取照片的Gps经纬度

    不丢失精度的获取照片的Gps经纬度 1. 实际照片存储经纬度 2. **用pyhton exifread读取** 3. 用java metadata-extractor读取 4. windows用 e ...

  10. android百度地图轨迹实现,android 获取GPS经纬度在百度地图上绘制轨迹

    实现将一组GPS模块获取的经纬度数据在百度地图上绘制轨迹 1.将经纬度转换成百度地图坐标 /** * 标准的GPS经纬度坐标直接在地图上绘制会有偏移,这是测绘局和地图商设置的加密,要转换成百度地图坐标 ...

最新文章

  1. LeetCode 468. Validate IP Address--笔试题--Python解法
  2. c# 水晶报表中处理TextObject
  3. python论坛签到_论坛自动签到教程
  4. gNB,ng-eNB和NR
  5. Know more about Oracle Latches
  6. 【Win10 应用开发】实现数据的增量加载
  7. C#与.net的区别
  8. 做机器学习的是些什么样的人?Kaggle做了一份居委会式的调查
  9. C中的预编译宏定义-转
  10. 小D课堂 - 新版本微服务springcloud+Docker教程_4-06 Feign核心源码解读和服务调用方式ribbon和Feign选择...
  11. Python txt转换为excel
  12. 判断字符串是否为null、是否为空
  13. linux源码编译ipk,OpenWrt-SDK-编译生成ipk软件包
  14. SpringBoot整合EasyExcel实现Excel表格的导出功能
  15. Python 列表与元组
  16. 全新的服务器debian/ubuntu---校准时间、更新apt,设置ssh远程访问
  17. 一、计算机网络的作用和认识互联网
  18. 基于MODBUS通讯协议的酒厂温湿度、光照度数据采集系统的设计与实现
  19. libuv 的Processes
  20. 首款国产7纳米GPGPU芯片在上海问世

热门文章

  1. VUE3中使用粒子特效
  2. LDC1314 学习资料
  3. 51单片机自学笔记(一)——keil软件的使用
  4. Exploring 3-D–2-D CNN Feature Hierarchy for Hyperspectral Image Classification翻译全文
  5. malloc函数的用法详解:
  6. plupload文件上传插件
  7. 字体图标的设置(阿里巴巴矢量图库的使用)
  8. Docker部署应用案例
  9. mysql 5.7 64位 解压版安装
  10. CCFCSP 201712-1 最小差值