在阅读 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

  1. 大地坐标系(φ,λ,h)转成ECEF(X,Y,Z)。

OD是点P在XY平面上的投影向量,其长度为

                                                                                                                                                                        (6)

再结合图3中XY平面中经度角λ的示意图,可得

                                                                                                                                                                                       (7)

而关于z坐标,则有

                                                                                                                                                           (8)

  1. 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和大地坐标系的相互转化的更多相关文章

  1. RTKLIB源码解析(一)——单点定位(pntpos.c)

    RTKLIB源码解析(一)--单点定位(pntpos.c) 标签: GNSS RTKLIB 单点定位 [TOC] pntpos int pntpos (const obsd_t *obs, int n ...

  2. 地心地固坐标系(ECEF)与站心坐标系(ENU)的转换

    目录 1. 概述 2. 原理 2.1. 平移 2.2. 旋转 2.3. 总结 3. 实现 4. 参考 1. 概述 我在<大地经纬度坐标与地心地固坐标的的转换>这篇文章中已经论述了地心坐标系 ...

  3. java对象与XML相互转化

    起因 最近在公司做了一次webservice相关的任务,其中我最敢兴趣的就是webservice接受到XML对应的流以后是如何方便的转化成java对象,而java对象又是如何生成对应的XML的. 目的 ...

  4. DataSet、DataTable、Json、List 等各种数据的相互转化

      1.根据Dataset生成json格式的字符串,不管Dataset里面有多少个表都可以一一生成对应的json字符串,并一次性返回 private string dsToJson(DataSet d ...

  5. Stream/Bytes[]/Image对象相互转化

    Stream/Bytes[]/Image对象相互转化 Stream转Byte数组.Image转Byte数组.文件转Stream等 /// <summary> /// 将 Stream 转成 ...

  6. char与TCHAR相互转化

    char与TCHAR相互转化 char strUsr[10] = "Hello"; TCHAR Name[100]; #ifdef UNICODE MultiByteToWideC ...

  7. C# 整形、双精度浮点型、字符串与字节型的相互转化

    整形.双精度浮点型.字符串与字节型的相互转化,如下 using System; using System.Collections.Generic; using System.Linq; using S ...

  8. DateTable与List<T>相互转换 及JSON与DataTable(DataSet)相互转化

    http://www.360doc.com/content/13/0712/09/10504424_299336674.shtml Linq处理List数据 http://blog.163.com/l ...

  9. jQuery对象和dom对象的辨析和相互转化

    jquery对象和dom对象总是让人感觉很难分清,其实只要做到1对两者概念有明确认识2找出不同点 A DOM 1概念 DOM对象(Document Object Model,文档对象模型)可以把htm ...

随机推荐

  1. (十二)java嵌套类和内部类

    嵌套类和内部类:在一个类里边定义的类叫做嵌套类,其中没有static修饰的嵌套类是我们通常说的内部类,而被static修饰的嵌套类不常用.有的地方没有嵌套类和内部类的区分,直接是嵌套类就称作内部类,没 ...

  2. Linux查询一台机器的IP地址和其对应的域名

    Linux查询一台机器的IP地址和其对应的域名 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ nslookup > 127.0.0.1 Server: ...

  3. 更改Qt Application为 Qt Console Application

    工程属性 -> 链接器 -> 系统 -> 子系统 : 更改为 控制台 (/SUBSYSTEM:CONSOLE)

  4. iOS - Core Animation 核心动画

    1.UIView 动画 具体讲解见 iOS - UIView 动画 2.UIImageView 动画 具体讲解见 iOS - UIImageView 动画 3.CADisplayLink 定时器 具体 ...

  5. WPF自学入门(二)WPF-XAML布局控件

    上一篇介绍了xaml基本知识,我们已经知道了WPF简单的语法.那么接下来,我们要认识一下WPF的布局容器.布局容器可以使控件按照分类显示,我们一起来看看WPF里面可以使用哪些布局容器用来布局. 在WP ...

  6. 浅谈Javascript中的Label语句

    如: begin: for (var i = 0; i < 10 ; i++ ){ alert(i); } 举一个比较典型的例子,看完后即明白 Label 的应用:(未添加 Label) var ...

  7. 异常-----web.xml文件报错 Multiple annotations found at this line: - cvc-complex-type.2.4.b: The content of element 'welcome-file-list' is not complete. One of '{"http://java.sun.c

    1,检查抬头是不是有问题. <?xml version="1.0" encoding="UTF-8"?><web-app version=&q ...

  8. 编译器重复定义错误:error C2371: 'SIZE' : redefinition; different basic types

    我们常常会定义自己工程用的数据类型,可能会与Windows的基本数据类型冲突. vs会报重复定义错误:error C2371: 'SIZE' : redefinition; different bas ...

  9. [BZOJ4825][HNOI2017]单旋spaly

    BZOJ Luogu 题目太长了,就不放了. 题解 首先声明一点,无论是splay还是spaly,插入一个新的元素,都要rotate到根!所以说题目也算是给了一个错误示范吧. 我们发现把最值旋转到根并 ...

  10. [.NET]使用十年股价对比各种序列化技术

    1. 前言 上一家公司有搞股票,当时很任性地直接从服务器读取一个股票10年份的股价(还有各种指标)在客户端的图表上显示,而且因为是桌面客户端,传输的数据也是简单粗暴地使用Soap序列化.获取报价的接口 ...