ECEF和大地坐标系的相互转化
在阅读 RTKLIB的源码时,发现了ECEF和大地坐标系的相互转换的函数,大地坐标系(φ,λ,h)转成ECEF(X,Y,Z)与所看书籍(GPS原理与接收机,谢刚,电子工业出版社)的公式是一样的,而ECEF转成大地坐标系的公式则与上述书籍和 RTKLIB的使用手册(P135)中的公式都不一样。简而言之,遇到的问题如下图所示。

一开始想着能不能直接在某个文献中直接找到与程序算法一致的处理流程,但找了很久都没能如愿。最后,只能想着彻底从平面几何上理解这个数学推导过程,从而再尝试理解为什么程序会那么写。
在查找介绍大地坐标系的文献中,总能看到酉卯圆曲率半径这个名词。百度百科上给的定义是:过椭球面上一点的法线,可作无限个法截面,其中一个与该点子午面相垂直的法截面同椭球面相截形成的闭合的圈称为卯酉圈,如下图中的PEE′所示。

图 1
投影到二维平面中,就是下面这幅图。其中,Pn就称为酉卯圆曲率半径,PT则为椭圆的切线,角B则是酉卯圆曲率半径与长轴的夹角,称为纬度(也就是说通常意义上某个点的纬度并不是该点到地心的连线与长轴的夹角!)。

图 2
由椭圆切线的斜率公式,可知
(1)
联立上面两式,可得
(2)
其中,
。再将上式带入到椭圆的标准方程
中,即可解得
(3)
另外,在△PnA中通过简单的几何关系可知,
。所以有
(4)
又因为
,所以有
(5)
注意,上面这个关于PQ、Qn的公式在后面推导ECEF和大地坐标系的相互转换公式时,是很重要的。
为了说明坐标转换的一般性,这里的待转换点P是在地球外部的,示意图如下。图 3在理解(φ,λ,h)→XYZ中的X、Y坐标的变换公式时较为重要。

图 3
而要想真正简单、清晰地理解大地坐标系(φ,λ,h)与ECEF(X,Y,Z)如何转换,还是要从二维平面图中着手。下图可以看作是椭球体的主视图,XY平面压缩成了水平X轴。

图 4
- 大地坐标系(φ,λ,h)转成ECEF(X,Y,Z)。
OD是点P在XY平面上的投影向量,其长度为
(6)
再结合图3中XY平面中经度角λ的示意图,可得
(7)
而关于z坐标,则有
(8)
- ECEF(X,Y,Z)转成大地坐标系(φ,λ,h)。
首先是经度角λ,在图3的XY平面中可以很清晰地看到
(9)
对于纬度角φ和高度h,可以在在图4中分析其几何关系。
(10)
其中,
(11)
从上述公式中可以看到,在计算φ时还是会用到纬度角φ的,所以不能直接用上述公式来计算纬度角。这里给出RTKLIB中ecf2pos函数中的算法步骤:
① 假设PD=PE,计算出夹角φ’。
② 根据式(4)和式(11)再计算N’和PE’。
③ 对比②中的PE’与①中的PE之间的差别是否小于截断因子。不符合条件,将②中的PE’代入到①中,继续循环计算;符合条件,则说明此时φ’=φ,可以跳出循环。
④ 将最终的PE代入到式(10)中,从而计算出纬度角φ和高度h。
至此,关于RTKLIB的源码中的pos2ecf和ecf2pos函数的计算过程的理论公式推导过程,就证明完了。
这个事情证明,不会推公式的算法程序员是不合格的。找到的现成理论依据在复杂编程问题时可能会不够高效,或者当算法流程稍作改变时就会看不懂别人写的程序了。
ECEF和大地坐标系的相互转化的更多相关文章
- RTKLIB源码解析(一)——单点定位(pntpos.c)
RTKLIB源码解析(一)--单点定位(pntpos.c) 标签: GNSS RTKLIB 单点定位 [TOC] pntpos int pntpos (const obsd_t *obs, int n ...
- 地心地固坐标系(ECEF)与站心坐标系(ENU)的转换
目录 1. 概述 2. 原理 2.1. 平移 2.2. 旋转 2.3. 总结 3. 实现 4. 参考 1. 概述 我在<大地经纬度坐标与地心地固坐标的的转换>这篇文章中已经论述了地心坐标系 ...
- java对象与XML相互转化
起因 最近在公司做了一次webservice相关的任务,其中我最敢兴趣的就是webservice接受到XML对应的流以后是如何方便的转化成java对象,而java对象又是如何生成对应的XML的. 目的 ...
- DataSet、DataTable、Json、List 等各种数据的相互转化
1.根据Dataset生成json格式的字符串,不管Dataset里面有多少个表都可以一一生成对应的json字符串,并一次性返回 private string dsToJson(DataSet d ...
- Stream/Bytes[]/Image对象相互转化
Stream/Bytes[]/Image对象相互转化 Stream转Byte数组.Image转Byte数组.文件转Stream等 /// <summary> /// 将 Stream 转成 ...
- char与TCHAR相互转化
char与TCHAR相互转化 char strUsr[10] = "Hello"; TCHAR Name[100]; #ifdef UNICODE MultiByteToWideC ...
- C# 整形、双精度浮点型、字符串与字节型的相互转化
整形.双精度浮点型.字符串与字节型的相互转化,如下 using System; using System.Collections.Generic; using System.Linq; using S ...
- DateTable与List<T>相互转换 及JSON与DataTable(DataSet)相互转化
http://www.360doc.com/content/13/0712/09/10504424_299336674.shtml Linq处理List数据 http://blog.163.com/l ...
- jQuery对象和dom对象的辨析和相互转化
jquery对象和dom对象总是让人感觉很难分清,其实只要做到1对两者概念有明确认识2找出不同点 A DOM 1概念 DOM对象(Document Object Model,文档对象模型)可以把htm ...
随机推荐
- java中的“\t”
对于初学者来说,java中的"\t"和空格总是让人迷惑,其实很简单,通过一个例子就能很快明白! 比如说打印九九乘法表! 先来看用空格的效果! package cn.edu.nwpu ...
- 阿里云ECS+CentOS 7.0+Docker+Redmine环境搭建
前言 搭建Redmine环境可以选择使用分别安装Ruby+Rails+Redmine+MySQL的方式, 但是过程中需要解决各种扰人的依赖问题.Docker为我们提供的Plan B,方便,快捷. 安装 ...
- canvas焰火特效
之前在抖音上看到了一个很漂亮的焰火效果.这会儿有时间就用canvas实现了一下. 演示地址:http://suohb.com/work/firework4.htm 先看效果:(静态图片看不太出效果,请 ...
- 描述一下Spring框架的作用和优点?
Spring框架的作用和优点如下: 1.Spring是一个开源的轻量级的应用开发框架,其目的是用于简化企业级应用程序开发,减少侵入: 2.Spring提供的IOC和AOP应用,可以将组建的耦合度降低至 ...
- UVA10294 Arif in Dhaka (群论,Polya定理)
UVA10294 Arif in Dhaka (群论,Polya定理) 题意 : 给你一个长为\(n\)的项链和手镯,每个珠子有\(m\)种颜色. 两个手镯定义为相同,即它们通过翻转和旋转得到一样的手 ...
- [BZOJ1610] [Usaco2008 Feb] Line连线游戏 (set)
Description Farmer John最近发明了一个游戏,来考验自命不凡的贝茜.游戏开始的时 候,FJ会给贝茜一块画着N (2 <= N <= 200)个不重合的点的木板,其中第i ...
- java怎么解析带有特殊字符的字符串
可以使用StringEscapeUtils这个工具类.
- 【noip模拟】局部最小值
TimeLimit: 1000ms MemoryLimit: 256MB Description 有一个n行m列的整数矩阵,其中1到n×m之间的每个整数恰好出现一次.如果一 ...
- 数组Array、数组API
1.数组:批量管理多个数据的存储空间. 数组的作用:现实中,批量管理多个数据都是集中分组存放,良好的数据结构,可极大提高程序的执行效率! 优点:方便查找 2.创建数组:(4种方式) (1)var 变量 ...
- testng及JMeter使用之初体验
这里只是简单的说下我再项目中使用testng的JMeter使用的情况, 主要的是使用JMeter的体验, 都是以截图和文字为说明的. 1, 性能测试之testng 直接可以 ...