车载导航仪GPS开发基础
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开发基础相关推荐
- 虚幻引擎虚拟现实开发基础学习教程
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.93 GB |时长:5h 15m 了 ...
- 虚幻引擎C++编程游戏开发基础
流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:23.8 GB |时长:44h 59m ...
- 2017-2018-2 20165236 实验四《Android开发基础》实验报告
2017-2018-2 20165236 实验四<Android开发基础>实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:郭金涛 ...
- Android游戏开发基础part2--Canvas画布
游戏开发基础part2--Canvas画布 又过了一周才继续做总结,四级结束了,应该可以多点时间学习游戏编程了. Canvas画布类是一个在游戏当中担当非常重要的角色,它可以绘制出不同的图形和图片,可 ...
- 一起谈.NET技术,asp.net控件开发基础(18)
本篇继续上篇的讨论,可能大家已经在使用asp.net2.0了,DataSource属性不再使用,而是跟数据源控件搭配使用.现在讨论的绑定技术都是基于1.1版本,先熟悉一下,本质上是一样的,这样一步步的 ...
- android界面数据存储,Android应用开发基础之数据存储和界面展现(二)
Android应用开发基础之数据存储和界面展现(二) 常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRight ...
- SP 短信开发-基础知识篇
SP 短信开发-基础知识篇 很土的话题,但是最近帮朋友做这个东西,所以写点东西出来给初学者参考. 一.准备资料 SP开发资料网站上有很多,但是主要是以下几个文档: 1.MISC1.6 SP订购通知接口 ...
- 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)
1. Animation动画 在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimation ...
- os-cocos2d游戏开发基础-进度条-开发笔记
os-cocos2d游戏开发基础-进度条-开发笔记(十) ios-cocos2d游戏开发基础-游戏音效-开发笔记(九) ios-cocos2d游戏开发基础-CCLayer和Touch ...
最新文章
- Linux中的粘滞位
- 数据库基础笔记(MySQL)3 —— 基础操作
- No Team Selected:A team must be selected to run 'ProjectName' on iPhoneName
- matlab for and if command
- python requests库api_Python+requests库发送接口入参为xml格式的接口请求
- 微软把UWP定位成业务线应用程序开发平台
- sqlmapapi的基本使用和源码阅读
- 参数化登陆防止SQL注入攻击
- java jsch shell_仅在JSch shell通道中获取特定命令的输出
- wpf TextBox点击去除下划线
- NOI2018 Day1 归程(Kruskal重构树)
- Python 将时间戳转换为本地时间并进行格式化
- python中的变量是动态类型的什么意思_python基础语法之变量
- 苹果Mac电脑缓存如何清理?
- CRISPR基因编辑技术获诺奖,人类的福音还是灾难?
- 90后HTTP 的爱情故事
- 2021年数学建模国赛C题思路
- Java 鸡翁一值钱五Java_Java案例5:斐波那契数列,百钱百鸡
- 随机数的产生原理与实现
- 10月区块链领域投融资事件盘点
热门文章
- 四种排序:选择,插入,冒泡,快速排序原理及其对应的时间、空间复杂度解析
- 360分卷压缩,zip.001等多个分卷文件合并
- 各种背景音乐,以后公司的颁奖、签约仪式不怕找不到背景配乐了!
- SpringBoot集成Kafka消息队列
- 英伟达账号为什么登录不了_英伟达无法登陆怎么办_nvidia登不进去的修复方法-系统城...
- 区块链赋能供应链,不让中间商赚差价!
- 联想G480—win8.1安装Centos7双系统
- 2.5Modelsim
- 程序员修炼之道---之小工到专家
- 探针一号的SQL学习笔记