• GPS数据解析

     

    实例下载:http://download.csdn.net/detail/fcgksoso/3690014

    前段时间做了GPS接收机的数据解析相关的开发工作,因为需要对GPS接收机的定位数据进行解析而阅读了novatel的某型号的主板说明说,对这方面有一些了解就记录下来,做个备忘。

     

    目前在地球的外层的太空中上飞着用途各异的卫星,其中有一种是专门用来给地球上的人做空间定位而运行的卫星,这些卫星由多颗组成一个卫星定位系统,时时刻刻的环绕着地球运动,目前有以下几个卫星定位系统:美国的GPS、俄罗斯的GLONASS、欧洲的Galileo(伽利略)、中国的北斗Compass,后两者目前还未能实现投入正常使用。

    这些定位卫星按照一定的轨迹分布在地球上空,使得在地球上任意一点都能够收到来自它们发射的卫星电文-也就是定位所需要用到的数据。这些卫星电文中包含着该卫星的一些运行数据,把这些数据编译调制成一定频率的电磁波按照一定频率向地球广播。在地球上通过接收机接收这些卫星信号,解析出其包含的数据,使用这些数据按一定算法进行计算就可以得到此时所在地球的准确的位置了。

     

    卫星定位的原理大致是这样的:通过卫星发送数据可以计算出接收机与卫星的距离,只要有三颗以上的卫星距离就可以通过空间圆交汇的方法确定出此时接收机所在的空间点坐标,也就是地球上的经纬度了。

     

    GPS接收机里的主板所干的事就是接收解析它收到的卫星电文,然后再将这些数据组织成一定协议格式的数据按需求输出。

    这些定位数据是按一定格式组织的,比如说NMEA-0183协议格式,这是一个国际标准的导航数据标准协议。

    除此之外还有一些生产GPS接收机主板厂商自己制定的协议格式,这会有一份很多页的说明说对其自身的数据进行详尽的说明。

    要想从接收机的输出数据里获得到你想要的数据(如:经纬度、时间、卫星号、仰角、高度角、信噪比等),就必须要照相应的数据格式进行数据处理。

     

    比如说这一条NMEA0183协议格式的数据: $GPGGA,134658.00,5106.9792,N,11402.3003,W,2,09,1.0,1048.47,M,-16.27,M,08,AAAA*60

    其中包含了卫星时间,经纬度,高程等信息,这是明码形式的数据,也就是对于人看起来也是有意义的数据,这些数据大多是通过串口传输接收的,通过冲串口缓冲区中读取出来,再编写相应的代码对之进行处理。

    以C#为例:

    1.通过SerialPort类来实现数据的接收读取。                

                   List<byte>COMbuffer = new List<byte>(4096);//串口数据处理缓冲区                
                      int length = COM.BytesToRead;
                    d = new byte[length];//串口数据临时数组
                      COM.Read(d, 0, length);
                   COMbuffer.AddRange(d);//将临时数组里的数据存至数据处理缓冲区

    2.进行数据校验Xor校验、CRC32等校验方式

                        for (int i = 1; i < length; i++)
                        {
                            checkNum ^= inbytes[i];//从$号后一位开始逐位异或至*号前一位
                           }

     

    3.用Econding.Ascll.GetString()方法处理将二进制格式转为字符串格式。

    4.Spilt()方法切割字符串,将相应的数据转为int或double类型的数据。

    string[] datasplit = Encoding.ASCII.GetString(b, 0, b.Length).Split(new char[] { ',', '*' });
    if (s[1] == "" || s[2] == "" || s[4] == "" || s[3] == "" || s[5] == "" || s[9] == "") return;
    this.gga.GGAtime = Convert.ToDouble(s[1]);
    this.gga.Latitude = Convert.ToDouble(s[2]);
    this.gga.LatNS = Convert.ToChar(s[3]);
    this.gga.Longtitude = Convert.ToDouble(s[4]);
    this.gga.LngEW = Convert.ToChar(s[5]);
    this.gga.Evelvation = Convert.ToSingle(s[9]);


    至此就完成的了解析。

     

    GPS接收机常用的数据格式------二进制格式的数据,二进制格式数据的解析解析要比ASCLL格式的数据解析要简单。

    以C#为例:

    1..通过SerialPort类来实现数据的接收读取。

    2.进行数据校验,通常是CRC32校验

                        for (int i = 0; i < length; i++)
                        {
                            checkNum = CRCTable[(checkNum ^ checkOutData[i]) & 0xFF] ^ (checkNum >> 8);
                        }

     

    3.用BitConvert.ToInt32()或其他方法获取你所想要的数据。

                this.Latitude = BitConverter.ToDouble(b, 36) * 100;
                this.Longitude = BitConverter.ToDouble(b, 44) * 100;
                this.Height = BitConverter.ToDouble(b, 52);
                this.LatitudeDeviation = BitConverter.ToSingle(b, 68);
                this.LongitudeDeviation = BitConverter.ToSingle(b, 72);
                this.HeightDeviation = BitConverter.ToSingle(b, 76);

     

    主板说明书里会详细的说明有关于数据的一切。

     

    一条二进制数据的16进制显示:

    数据头:AA44121C 01000240 20000000 1D1D0000 29160000 00004C00 55525A80

    数据体:00000000 10000000 1B0450B3 F28E4940 16FA6BBE 7C825CC0 0060769F 449F9040 A62A82C1 3D000000
    125ACB3F CD9E983F DB664040 00303030 00000000 00000000 0B0B0000 00060003

    校验码:42DC4C48

     

     

    GPS数据解析大致是这样的。

    我也只是刚入门,第一次写此类文章,意在培养好的习惯。

    如果对你有帮助可以支持一下,如果有说错或不明的地方也请你不吝指出,我高兴去纠正,谢谢!

    有疑问也可以写下,尽力为你解答^_^

     

     更详尽的参考链接:http://m.gz1980clickc.fun/article/p-dmqqpmuu-zp.html

    相关文章
    相关标签/搜索
    六开彩开奖结果2017玽蓝月亮精选料二四六开奖结果下载-蓝月亮精选料天天好彩192.168.0.1开奖结果2019官方版 疏勒县| 东丽区| 石家庄市| 石屏县| 绥芬河市| 新巴尔虎左旗| 吉首市| 长垣县| 遂溪县| 吴堡县| 灵台县| 游戏| 和林格尔县| 赣州市| 金华市| 靖远县| 丹巴县| 吉林市| 乐至县| 万荣县| 大方县| 施甸县| 金山区| 广德县| 青田县| 慈溪市| 高安市| 乌鲁木齐县| 鄂温| 阿合奇县| 玛纳斯县| 诸城市| 恩施市| 咸阳市| 三原县| 淳化县| 罗山县| 广安市| 西华县| 阿拉善左旗| 长治市| 睢宁县| 长宁县| 沁源县| 治县。| 岚皋县| 来安县| 浠水县| 丘北县| 南部县| 灵丘县| 安国市| 晋宁县| 潞西市| 萍乡市| 北流市| 陇南市| 沛县| 翁牛特旗| 沅江市| 盘山县| 金平| 射阳县| 吉安市| 鄂伦春自治旗| 万盛区| 象山县| 富宁县| 祁阳县| 渭源县| 徐闻县| 仲巴县| 苍山县| 长阳| 开封市| 金门县| 同江市| 高尔夫| 阳江市| 建宁县| 紫金县| 东宁县| 石屏县| 绥滨县| 台安县| 奉贤区| 上饶县| 广水市| 肃宁县| 康保县| 宝清县| 苗栗市| 武威市| 高州市| 饶阳县| 中方县| 屏山县| 万年县| 察隅县| 富宁县| 杂多县| 萍乡市| 宁波市| 张掖市| 平潭县| 项城市| 安国市| 深圳市| 定西市| 晋城| 社旗县| 乌兰察布市| 什邡市| 平凉市| 南投市| 得荣县| 大英县| 灵川县| 竹北市| 宁远县| 民和| 历史| 防城港市| 淮安市| 文登市| 梓潼县| 璧山县| 南木林县| 南昌市| 尚志市| 保亭| 云龙县| 武平县| 长白| 威信县| 忻州市| 宁海县| 德阳市| 镇康县| 建水县| 太和县| 红安县| 广元市| 宜城市| 镇平县| 阳谷县| 平乐县| 鸡泽县| 吴江市| 潮州市| 西青区| 依兰县| 晋州市| 大关县| 临高县| 宜良县| 桃园县| 岑巩县| 太湖县| 澄迈县| 珲春市| 六枝特区| 白水县| 东乌珠穆沁旗| 江门市| 定安县| 甘德县| 吉木乃县| 沾益县| 兴业县| 垫江县| 瑞安市| 封丘县| 嵊州市| 安泽县| 汉寿县| 裕民县| 电白县| 通榆县| 哈尔滨市| 肃宁县| 吐鲁番市| 临清市| 营口市| 敦化市| 金坛市| 横山县| 新丰县| 抚松县| 凤庆县| 西乌珠穆沁旗| 内黄县| 宁明县| 营山县| 沙河市| 迭部县| 贵南县| 驻马店市| 承德县| 阿图什市| 武定县| 鞍山市| 横峰县| 永德县| 武邑县| 德阳市| 山东| 台湾省| 民和| 海林市| 建湖县| 竹山县| 石城县| 塔河县| 秦安县| 阳东县| 遂昌县| 汉沽区| 谷城县| 太白县| 拜城县| 陵川县| 崇文区| 台北县| 石家庄市| 永胜县| 山西省| 庆阳市| 巢湖市| 民丰县| 忻城县| 林口县| 名山县| 高雄县| 灵石县| 洞头县| 盐城市| 龙江县| 买车| 奉新县| 法库县| 平陆县| 岑巩县| 永定县| 高雄市| 天全县| 丹东市| 连城县| 灵山县| 永宁县| 潼关县| 武功县| 龙川县| 锦屏县| 凭祥市| 双城市| 乳源| 泊头市| 辰溪县| 同江市| 安化县| 阳东县| 屏边| 福泉市| 金门县| 平度市| 曲周县| 贡嘎县| 江川县| 稻城县| 句容市| 赫章县| 衢州市| 普格县| 成安县| 汤原县| 鹤峰县| 洮南市| 卫辉市| 剑川县| 江达县| 类乌齐县| 天峨县| 双桥区| 开鲁县| 高台县| 玉林市| 苏尼特左旗| 庄浪县| 衢州市| 高要市| 白河县| 登封市| 安化县| 汕头市| 隆安县| 和静县| 普兰店市| 临夏县| 蒲城县| 岳阳市| 沭阳县| 尼木县| 浮梁县| 江华| 建宁县| 岳阳县| 禹州市| 平南县| 闽侯县| 乌拉特后旗| 大庆市| 佛坪县| 庆云县| 壶关县| 三都| 保德县| 德阳市| 健康| 洛南县| 泊头市| 苏尼特右旗| 定兴县| 武平县| 桂东县| 巴南区| 德钦县| 洞口县| 凭祥市| 连江县| 睢宁县| 民勤县| 武宁县| 南郑县| 弋阳县| 蓬溪县| 博白县| 个旧市| 吴忠市| 兰州市| 成安县| 花莲市| 北海市| 霍林郭勒市| 合阳县| 镇平县| 林口县| 梁平县| 淳化县| 绥芬河市| 扶沟县| 华池县| 体育| 茂名市| 威信县| 永年县| 固阳县| 江都市| 偏关县| 麻栗坡县| 江阴市| 师宗县| 汤阴县| 弥勒县| 平山县| 南康市| 乡城县| 临夏市| 黄陵县| 毕节市| 宁陵县| 随州市| 龙泉市| 偏关县| 綦江县| 大名县| 湖北省| 于都县| 正宁县| 静安区| 汝阳县| 黄大仙区| 新晃| 晋宁县| 东安县| 万宁市| 巫山县| 巩义市| 江西省| 大同县| 皋兰县| 台江县| 潞城市| 佛冈县| 宜兰县| 新乡县| 玉屏| 两当县| 米脂县| 隆安县| 南安市| 苏尼特左旗| 招远市| 庐江县| 西丰县| 永胜县| 罗田县| 方山县| 简阳市| 霍邱县| 剑川县| 任丘市| 卓资县| 丰城市| 惠州市| 双牌县| 余江县| 弋阳县| 周口市| 高邮市| 太湖县| 东辽县| 化隆| 伽师县| 颍上县| 时尚| 盘锦市| 贺州市| 刚察县| 井陉县| 河南省| 舟山市| 嫩江县| 宁蒗| 济宁市| 高密市| 嵊泗县| 宜川县| 吉隆县| 岳池县| 应用必备| 寿宁县| 习水县| 当雄县| 襄垣县| 白城市| 宁强县| 雅江县| 吉隆县| 岳阳市| 苍山县| 裕民县| 富源县| 咸丰县| 前郭尔| 原阳县| 通江县| 东城区| 盐城市| 武陟县| 商城县| 永兴县| 桓台县| 蓬安县| 隆昌县| 浮梁县| 天峻县| 开封市| 务川| 哈尔滨市| 南郑县| 泗水县| 德保县| 纳雍县| 板桥市| 锡林郭勒盟| 麻阳| 丹凤县| 泾源县| 乐至县| 渑池县| 扶余县| 新巴尔虎右旗| 吉林市| 武夷山市| 津南区| 雷州市| 交口县| 邹城市| 卢龙县| 莱阳市| 镇雄县| 阜新| 屯昌县| 策勒县| 洛扎县| 汕尾市| 龙里县| 康乐县| 六盘水市| 上思县| 将乐县| 岳普湖县| 青阳县| 岳阳市| 兴业县| 温泉县| 福州市| 古蔺县| 江油市| 措勤县| 湘潭县| 邹平县| 淮北市| 南陵县| 玛曲县| 来凤县| 玉门市| 夏津县| 右玉县| 崇信县| 宝山区| 沙坪坝区| 葵青区| 北辰区| 金平| 竹北市| 博湖县| 施秉县| 梁平县| 内黄县| 东光县| 和田市| 苍梧县| 林甸县| 建始县| 大荔县| 阳原县| 平顶山市| 万盛区| 贵州省| 威信县| 衡阳县| 泸州市| 织金县| 潮州市| 西华县| 嘉祥县| 阿勒泰市| 马山县| 江山市| 澜沧| 岢岚县| 明光市| 冷水江市| 金平| 馆陶县| 陕西省| 会理县| 改则县| 南京市| 黎城县| 新晃| 东明县| 连南| 蒙阴县| 扎鲁特旗| 舞阳县| 藁城市| 常州市| 三明市| 邵东县| 镇远县| 泌阳县| 临高县| 三江| 什邡市| 黄山市| 读书| 中方县| 依安县| 从化市| 威宁| 扶余县| 来宾市| 高台县| 怀来县| 集安市| 孟津县| 山东| 沙坪坝区| 合川市| 修武县| 六安市| 酒泉市| 金沙县| 江山市| 梓潼县| 民乐县| 泰和县| 张家界市| 潞西市| 林西县| 海门市| 江永县| 峨眉山市| 陇西县| 长顺县| 大埔县| 鲁山县| 昌江| 兴宁市| 平顺县| 红安县| 额尔古纳市| http://3g.jx1870askv.fun http://3g.jx1870cartoonv.fun http://www.jx1870copyv.fun http://jx1870advertisev.fun http://3g.jx1870draftv.fun http://m.jx1870datev.fun http://3g.jx1870donv.fun http://wap.jx1870assistv.fun http://3g.jx1870brownv.fun http://wap.jx1870acceptv.fun http://3g.jx1870affectv.fun http://wap.jx1870arzv.fun http://m.jx1870creazv.fun http://m.jx1870centrev.fun http://3g.jx1870awardv.fun http://jx1870actionv.fun http://www.jx1870draftv.fun http://wap.jx1870cozzandv.fun