野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9922|回复: 6

关于gps例程定位误差超大的问题

[复制链接]
发表于 2016-11-13 23:38:40 | 显示全部楼层 |阅读模式
今天移植例程里面的GPS模块,将通过nmea解码的经纬度信息与实际位置对比,相差数十公里。随后将GPS模块直接与端口相连,通过野火串口助手得到的位置信息精确
问题应该出在解码上面,解码库的文件没有动,请问这个问题怎么解决?
回复

使用道具 举报

发表于 2016-11-14 08:55:42 | 显示全部楼层
要转换,百度一下火星坐标系
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-15 14:06:19 来自手机 | 显示全部楼层
flyleaf 发表于 2016-11-14 08:55
要转换,百度一下火星坐标系

我已经通过百度的API改了,但是只变动了几百米,与实际还差上好几千米啊
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-16 18:54:09 | 显示全部楼层
flyleaf 发表于 2016-11-14 08:55
要转换,百度一下火星坐标系

应该是解码的问题吧
回复 支持 反对

使用道具 举报

发表于 2016-11-16 19:33:44 | 显示全部楼层
jony 发表于 2016-11-16 18:54
应该是解码的问题吧

解码没有问题的,就是这样,还要注意单位
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-23 10:38:20 来自手机 | 显示全部楼层
flyleaf 发表于 2016-11-16 19:33
解码没有问题的,就是这样,还要注意单位

可是我调用的是野火官方例程里面的usart例程,直接掉用的是串口输出的经纬度信息,仍然有很大误差。
回复 支持 反对

使用道具 举报

发表于 2016-11-23 11:08:24 | 显示全部楼层
jony 发表于 2016-11-23 10:38
可是我调用的是野火官方例程里面的usart例程,直接掉用的是串口输出的经纬度信息,仍然有很大误差。

1.stm32端解码得的是 度.分 格式、上位机蓝框显示的是 度.度  的格式。需要化单位
2.stm32端和上位机显示的坐标都是 wsg84 坐标系,百度地图用的都是火星坐标系
   使用百度经纬度反查地点之前,需要先用百度地图提供的javascript  api 转成火星坐标再定位。

GPS单位转换:
---------------液晶屏输出的单位 转 上位机的单位-----------------------------------------------------
/*经纬度转换 : 输入nmea的 度.分  xx.xxxx 格式,输出 度.度 xxxxxx */
double DegreeConvert(double sDegree)
{
        double dDegree;

        if (sDegree == 0)return 0;

        int integer = (int)sDegree;
        double decimal = sDegree - (int)sDegree;

        double min = integer % 100;
        int hour =(int) (integer / 100);

        dDegree = (double)hour + (double)(min / 60) + (double)(decimal / 60);

        

        return dDegree;
        
}






火星坐标API转换,这些是百度的javascript api,具体作用查百度文档:
-------------------------------------------------------------
        var gpsPoint = new BMap.Point(Longitude, Latitude);

        //gps坐标纠偏
        BMap.Convertor.translate(gpsPoint, 0, translateCallback);     //真实经纬度转成百度坐标






    //坐标转换完之后的回调函数
    translateCallback = function (point) {

        map.clearOverlays();
        var marker = new BMap.Marker(point);
        map.addOverlay(marker);
        map.setCenter(point);
      //  marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
    }




----------------------------------------------------------------------------------------



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-28 01:35 , Processed in 0.034503 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表