我的GPS是从原子哥这买的,最近做毕设,做的是GSM和GPS汽车防盗系统,我发现GPS测量两点之间的距离要超过38.3125米才能分辨出来(也就是不在是0了),我的思路是,GPS启动完成后,用个外部中断摁键记录当前的经纬度坐标(分别sheding_jingdu,sheding_weidu来表示停车位置),然后,人工模拟汽车被移动(GPS实时获得此时的xianzai_jingdu,xianzai_weidu),并实时计算此时的位置和停车位置之间的距离。
[mw_shl_code=c,true]float GPs_count(void)
{
float MLatA,MLatB;//MlatA是设定的纬度值计算式子里的形式,同理MlatB是现在车辆的实时纬度值得计算式子里的形式
float MLonA,MLonB;//MLonA设定的经度值,东经取正数,西经取负。
float C;
MLatA=90-sheding_weidu;//设定的纬度
MLatB=90-xianzai_weidu;//现在的纬度
MLonA=sheding_jingdu;//设定的经度
MLonB=xianzai_jingdu;//设定的纬度
C=sin(MLatA)*sin(MLatB)*cos(MLonA- MLonB)+cos(MLatA)*cos(MLatB);
Distance=1000.00000*R*acosf(C)*Pi/180.00000; // 千米*1000化成米为单位
sprintf((char *)dtbuf,"Distance:%.5f %1c ",Distance,'m'); //得到经度字符串
LCD_ShowString(30,64,dtbuf,GREEN,BLACK); //显示实际停车位置和当前的车辆位置之间的距离
return Distance;
}[/mw_shl_code]
上面这个函数的由来,来源于我下面这张图,网址http://blog.csdn.net/lfqsy/article/details/6750537 ,原子哥有什么好思路么。急求,快答辩咯
看你的定位质量,经纬度应该是一直抖动的,你的会一直是一个值??
---------------------------------
我的确实不是一个 定值,但是停车位置固定(由摁键设定),车辆移动肯定会变化,我就在原子哥你这个void Gps_Msg_Show(void)函数里每次都调用距离计算函数float GPs_count(void),但是发现精度没想象中的10米,晚上10点多的时候,我发现一个更糟的结果,我回到原来的位置,经度差值居然差了0.00007°,1经度85.39km,那么距离居然差了5.9773米。纬度差值为0 .我的经纬度差值实时显示在lcd上面。后来我干脆这么想,你不是1经度85.39km么,1纬度大约111km ,于是我直接用上面的Distance1=(经度差值*85.39)*1000米,Distance2=(纬度差值*111)*1000,结果距离值就不再从零 开始了,每次都有读数。但是跳变得厉害,,,,有什么解决办法能稳定一下数值么
---------------------------------
没研究过率滤波算法,能给说说思路么
---------------------------------
想想,好像可以用勾股定理,因为报警的距离不超过50米,而地球这么大,类似一个知道两直角边求第三边的几何运算,呵呵
一周热门 更多>