在阅读 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. VxWorks启动过程详解(上)

    vxworks有三种映像: VxWorks Image的文件类型有三种 Loadable Images:由Boot-ROM引导通过网口或串口下载到RAM ROM-based Images(压缩/没有压 ...

  2. 6个重要的.NET概念: - 堆栈,堆,值类型,引用类型,装箱和拆箱(转)

    今天在Code Project上面看到一篇文章<6 important .NET concepts: - Stack, heap, Value types, reference types, b ...

  3. 【BZOJ1717】产奶的模式(后缀数组)

    [BZOJ1717]产奶的模式(后缀数组) 题面 权限题 hihocoder 洛谷 题解 \(hihocoder\)里面讲的非常好了 这题要求的就是最长可重叠重复K次子串 所谓相同的子串 我们可以理解 ...

  4. [Luogu4149][IOI2011]Race

    BZOJ权限题qwq Luogu sol 树上路径当然是淀粉质辣! 考虑所有过重心的路径.开一个\(10^6\)大小的数组\(t\)表示某一路径长度的最小边数,初始化为\(inf(i>0)\), ...

  5. 【BZOJ2301】【HAOI2011】Problem B(莫比乌斯反演)

    [BZOJ2301][HAOI2011]Problem B(莫比乌斯反演) 题面 Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y ...

  6. 【洛谷1129】 [ZJOI2007]矩阵游戏

    题面 题目描述 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: ...

  7. JDK1.8源码(一)——java.lang.Object类

    本系列博客将对JDK1.8版本的相关类从源码层次进行介绍,JDK8的下载地址. 首先介绍JDK中所有类的基类——java.lang.Object. Object 类属于 java.lang 包,此包下 ...

  8. Servlet和Filter生命周期

    1. 生命周期 1.1. Servlet生命周期 servlet是一个基于java技术的WEB组件,运行在服务器端,我们利用 sevlet可以很轻松的扩展WEB服务器的功能,使它满足特定的应用需要.s ...

  9. java导出word

    public void dayinHw(HttpServletRequest request, HttpServletResponse response){ String id = request.g ...

  10. WPF-悬浮窗(类似于360)

    boss要求开发一个类似于360的悬浮窗,如下图所示: 目前采用的是wpf做的客户端,之前有个winform的项目,我参考了下,完成了wpf版的悬浮窗. Height=" WindowSta ...