搜索
bottom↓
回复: 11

求助:单片机上通过GPS得到的经纬度计算距离算法

[复制链接]

出0入0汤圆

发表于 2010-8-13 16:17:27 | 显示全部楼层 |阅读模式
我最近查了不少根据经纬度计算距离的算法,发现在上位机上计算时能够正确的得到距离值,
但是在单片机上利用同样的算法就无法得到正确数值。主要原因应该是在单片机软件中数据类
型的位数有限,计算时出错导致无法得到正确的数据。请大家帮帮忙,如果有合适的算法分享
一下,先谢谢啦,呵呵

出0入0汤圆

发表于 2010-8-13 16:43:25 | 显示全部楼层
搜一下吧,以前讨论过

出0入0汤圆

发表于 2010-8-13 18:08:06 | 显示全部楼层
看我原来发的帖子。

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4118770&bbs_page_no=1&search_mode=3&search_text=ha002&bbs_id=9999

出0入0汤圆

发表于 2010-8-14 09:58:08 | 显示全部楼层
那個是PC上的,用在單晶片,看到double和float就要再想想。
不過樓主先考慮一下誤差多少可以忍受,對於很多應用來說,其實誤差在50m是可以接受的。

出0入0汤圆

 楼主| 发表于 2010-8-16 11:30:57 | 显示全部楼层
感谢各位的回复
本来想做到误差在10米的
现在手上有的算法连50米都做不到,伤心啊

我的单片机上float 4  ±1.18E38~±3.39E+38
            double 4 ±1.18E38~±3.39E+38

出0入0汤圆

 楼主| 发表于 2010-8-16 15:43:56 | 显示全部楼层
哎,白找了这么长时间
现在把编译器的数据浮点精度设置到64位就可以了
这样很多算法都可以用了
误差也能达到50米之内

出0入0汤圆

发表于 2010-8-27 17:33:29 | 显示全部楼层
楼主不参加开源的活动么!
分享一下吧   ^_^

出0入0汤圆

 楼主| 发表于 2010-9-17 11:00:42 | 显示全部楼层
回复【6楼】7930435
-----------------------------------------------------------------------

我的也是从网上找的,拷出来大家看下吧
希望能有点小用处

//计算弧度
double rad(double d)
{
  const double pi = 3.1415926535898;
  return d * pi/ 180.0;
}

//从两个gps坐标点(经纬度)获得两点的直线距离,单位是米
int CalcDistance(float fLati1, float fLong1, float fLati2, float fLong2)
{
  double s = 0,lambda1=0,lambda2=0,phi1=0,phi2=0,x1=0,x2=0,y1=0,y2=0,z1=0,z2=0,A=0,tmp;
  int distance = 0;
  const float EARTH_RADIUS = 6378.137;
  
  phi1 = rad(fLati1);
  lambda1 = rad(fLong1);
  phi2 = rad(fLati2);
  lambda2 = rad(fLong2);
  x1 = cos(phi1)*cos(lambda1);
  y1 = cos(phi1)*sin(lambda1);
  z1 = sin(phi1);
  x2 = cos(phi2)*cos(lambda2);
  y2 = cos(phi2)*sin(lambda2);
  z2 = sin(phi2);
  tmp=(x1*x2+y1*y2+z1*z2);
  A = acos(tmp);
  s = A*EARTH_RADIUS;
  distance = (int)(s * 1000);
  return distance;
}

出0入0汤圆

发表于 2010-10-26 20:40:19 | 显示全部楼层
回复【4楼】hhb217
-----------------------------------------------------------------------

动点脑筋吧,51上虽然不支持双精度浮点数,但是可以通过别的方法来变通处理啊,想精确到多少位都可以。

出0入0汤圆

发表于 2010-11-3 10:18:03 | 显示全部楼层
详细说明一下吗!!!!!!!!!!!!!!!!!

出0入0汤圆

发表于 2011-9-26 17:10:48 | 显示全部楼层
回复【9楼】hpdell  
-----------------------------------------------------------------------

看帖忘记回帖了,8楼的意思是小数扩大10^n倍?

出0入0汤圆

发表于 2012-2-17 01:34:15 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 19:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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