1.2.3WGS84->LLA转换问题

在分析其日志的过程中,遇到一个问题,就是TimGPS二进制日志保存的坐标数据是以WGS84大地坐标系为准的,大地坐标系的XYZ轴如下:

要得到经纬度和海拔(LLA:Longitude/Latitude/Altitude)坐标,需要一些椭球体、基准面及地图投影的知识。

后来从网上找到一个Fortune77写的WGS84->GLL换算函数,将其转成C/C++的函数:

void wgsxyz2lla(double x,double y,double z,double *lat,double *lon,double *alt)

{

double pi = 3.14159265357;

longA_EARTH = 6378137;

double  flattening = 1/298.257223563;

double NAV_E2 = (2-flattening)*flattening; // also e^2

double rad2deg = 180/pi;

double wlon,wlat,walt,rhosqrd,rho,templat,tempalt,rhoerror,zerror;

double slat,clat,q,r_n,drdl,invdet,aa,bb,cc,dd;

if ((x == 0.0) & (y == 0.0))

wlon = 0.0;

else

wlon = atan2(y, x)*rad2deg;

if ((x == 0.0) & (y == 0.0) & (z == 0.0))

{

printf("WGS xyz at center of earth");

wlon = 360;

wlat = 360;

walt = 6378137;

}

else

{

rhosqrd = x*x + y*y;

rho = sqrt(rhosqrd);

templat = atan2(z, rho);

tempalt = sqrt(rhosqrd + z*z) - A_EARTH;

rhoerror = 1000.0;

zerror   = 1000.0;

while ((Dabs(rhoerror) > 1e-6) | (Dabs(zerror) > 1e-6))

{

slat = sin(templat);

clat = cos(templat);

q = 1 - NAV_E2*slat*slat;

r_n = A_EARTH/sqrt(q);

drdl = r_n*NAV_E2*slat*clat/q; // d(r_n)/d(latitutde)

rhoerror = (r_n + tempalt)*clat - rho;

zerror   = (r_n*(1 - NAV_E2) + tempalt)*slat - z;

aa = drdl*clat - (r_n + tempalt)*slat;

bb = clat;

cc = (1 - NAV_E2)*(drdl*slat + r_n*clat);

dd = slat;

invdet = 1.0/(aa*dd - bb*cc);

templat = templat - invdet*(+dd*rhoerror -bb*zerror);

tempalt = tempalt - invdet*(-cc*rhoerror +aa*zerror);

}

wlat = templat*rad2deg;

walt = tempalt;

}

if(lon )*lon = wlon;

if(lat )*lat = wlat;

if(alt )*alt = walt;

}

车载导航仪GPS开发基础相关推荐

  1. 虚幻引擎虚拟现实开发基础学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.93 GB |时长:5h 15m 了 ...

  2. 虚幻引擎C++编程游戏开发基础

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:23.8 GB |时长:44h 59m ...

  3. 2017-2018-2 20165236 实验四《Android开发基础》实验报告

    2017-2018-2 20165236 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计       班级:1652班       姓名:郭金涛     ...

  4. Android游戏开发基础part2--Canvas画布

    游戏开发基础part2--Canvas画布 又过了一周才继续做总结,四级结束了,应该可以多点时间学习游戏编程了. Canvas画布类是一个在游戏当中担当非常重要的角色,它可以绘制出不同的图形和图片,可 ...

  5. 一起谈.NET技术,asp.net控件开发基础(18)

    本篇继续上篇的讨论,可能大家已经在使用asp.net2.0了,DataSource属性不再使用,而是跟数据源控件搭配使用.现在讨论的绑定技术都是基于1.1版本,先熟悉一下,本质上是一样的,这样一步步的 ...

  6. android界面数据存储,Android应用开发基础之数据存储和界面展现(二)

    Android应用开发基础之数据存储和界面展现(二) 常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRight ...

  7. SP 短信开发-基础知识篇

    SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...

  8. 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)

    1. Animation动画 在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimation ...

  9. os-cocos2d游戏开发基础-进度条-开发笔记

     os-cocos2d游戏开发基础-进度条-开发笔记(十)   ios-cocos2d游戏开发基础-游戏音效-开发笔记(九)       ios-cocos2d游戏开发基础-CCLayer和Touch ...

最新文章

  1. Linux中的粘滞位
  2. 数据库基础笔记(MySQL)3 —— 基础操作
  3. No Team Selected:A team must be selected to run 'ProjectName' on iPhoneName
  4. matlab for and if command
  5. python requests库api_Python+requests库发送接口入参为xml格式的接口请求
  6. 微软把UWP定位成业务线应用程序开发平台
  7. sqlmapapi的基本使用和源码阅读
  8. 参数化登陆防止SQL注入攻击
  9. java jsch shell_仅在JSch shell通道中获取特定命令的输出
  10. wpf TextBox点击去除下划线
  11. NOI2018 Day1 归程(Kruskal重构树)
  12. Python 将时间戳转换为本地时间并进行格式化
  13. python中的变量是动态类型的什么意思_python基础语法之变量
  14. 苹果Mac电脑缓存如何清理?
  15. CRISPR基因编辑技术获诺奖,人类的福音还是灾难?
  16. 90后HTTP 的爱情故事
  17. 2021年数学建模国赛C题思路
  18. Java 鸡翁一值钱五Java_Java案例5:斐波那契数列,百钱百鸡
  19. 随机数的产生原理与实现
  20. 10月区块链领域投融资事件盘点

热门文章

  1. 四种排序:选择,插入,冒泡,快速排序原理及其对应的时间、空间复杂度解析
  2. 360分卷压缩,zip.001等多个分卷文件合并
  3. 各种背景音乐,以后公司的颁奖、签约仪式不怕找不到背景配乐了!
  4. SpringBoot集成Kafka消息队列
  5. 英伟达账号为什么登录不了_英伟达无法登陆怎么办_nvidia登不进去的修复方法-系统城...
  6. 区块链赋能供应链,不让中间商赚差价!
  7. 联想G480—win8.1安装Centos7双系统
  8. 2.5Modelsim
  9. 程序员修炼之道---之小工到专家
  10. 探针一号的SQL学习笔记