GNSS 坐标转换

GNSS计算主要涉及三个坐标系,地心地固坐标系地理坐标系站心坐标系。这里主要介绍一下三个坐标的含义和转换公式。

  • 地心地固坐标系如图X,Y,Z表示 (ECEF坐标系),以地心O为坐标原点,Z轴指向协议地球北极,X轴指向参考子午面与地球赤道的交点,也叫地球坐标系。一般GNSS坐标计算都在地心地固坐标系下进行的。由于地球是椭圆形,有WGS-84和CGC2000等多种标准

  • 地理坐标系则通过经度(longitude),纬度(latitude)和高度(altitude)来表示地球的位置,也叫经纬高坐标系(LLA坐标系)。

  • 站心坐标系以用户所在位置P为坐标原点,三个轴分别指向东向,北向和天向,也叫东北天坐标系(enu坐标系)。站心坐标系的天向方向和地理坐标系的高度方向是一致的。站心坐标系用在惯性导航和卫星俯仰角计算中较多。

参数 WGS-84 CGC200
基准椭球体的长半径a 6378137.0 m 6378137.0 m
基准椭球体的极扁率f 1/298.257223565 1/298.257223563
地球自转角速度We 7.2921151467*1e-5 7.2921151467*1e-5
地球引力和地球质量的乘积GM 3986004.418*1e8 3986004.418*1e8
光速 2.99792458*1e8 m/s 2.99792458*1e8 m/s


LLA坐标系转ECEF坐标系

LLA坐标系下的(lon,lat,alt)转换为ECEF坐标系下点(X,Y,Z)

\[\begin{cases}
X=(N+alt)cos(lat)cos(lon)\\
Y=(N+alt)cos(lat)sin(lon)\\
Z=(N(1-e^2)+alt)sin(lat)
\end{cases}\]

其中e为椭球偏心率,N为基准椭球体的曲率半径
\[\begin{cases}
e^2=\frac{a^2-b^2}{a^2}\\
N=\frac{a}{\sqrt{1-e^2sin^2lat}}
\end{cases}\]

由于WGS-84下极扁率\(f=\frac{a-b}{a}\),偏心率e和极扁率f之间的关系:
\[e^2=f(2-f)\]

坐标转换公式也可以为
\[\begin{cases}
X=(N+alt)cos(lat)cos(lon)\\
Y=(N+alt)cos(lat)sin(lon)\\
Z=(N(1-f)^2+alt)sin(lat)
\end{cases}\]

\[N=\frac{a}{\sqrt{1-f(2-f)sin^2lat}}\]

ECEF坐标系转LLA坐标系

ECEF坐标系下点(X,Y,Z)转换为LLA坐标系下的(lon,lat,alt)

\[lon=arctan(\frac{y}{x})\]
\[alt=\frac{p}{cos(lat)-N}\]
\[lat=arctan\bigg[\frac{z}{p}\bigg(1-e^2\frac{N}{N+alt}\bigg)^{-1}\bigg]\]
\[p=\sqrt{x^2+y^2}\]
一开始lon是未知的,可以假设为0,经过几次迭代之后就能收敛

ECEF坐标系转enu坐标系

用户所在坐标点\(P_0=(x_0,y_0,z_0)\),,计算点\(P=(x,y,z)\)在以点\(P_{0}\)为坐标原点的enu坐标系位置\((e,n,u)\)这里需要用到LLA坐标系的数据,\(P_0\)的LLA坐标点为\(LLA_0=(lon_0,lat_0,alt_0)\)

\[
\begin{gathered}
\left[ \begin{array}{ccc}
\Delta{x}\\\Delta{y}\\\Delta{z}
\end{array}
\right]=
\left[ \begin{array}{ccc}
x\\y\\z\end{array}\right]-
\left[ \begin{array}{ccc}
x_0\\y_0\\z_0\end{array}\right]
\end{gathered}
\]

\[
\begin{gathered}
\left[ \begin{array}{ccc}
e\\n\\u
\end{array}
\right]=S\cdot
\left[ \begin{array}{ccc}
\Delta{x}\\\Delta{y}\\\Delta{z}
\end{array}
\right]
\end{gathered}=
\left[ \begin{array}{ccc}
-sin(lon_0) & cos(lon_0) & 0 \\
-sin(lat_0)cos(lon_0) & -sin(lat_0)sin(lon_0) & cos(lat_0) \\
cos(lat_0)cos(lon_0) & cos(lat_0)sin(lon_0) & sin(lat_0)
\end{array} \right]\cdot
\left[ \begin{array}{ccc}
\Delta{x}\\\Delta{y}\\\Delta{z}
\end{array}
\right]
\]

即坐标变换矩阵\(S=\left[ \begin{array}{ccc} -sin(lon_0) & cos(lon_0) & 0 \\ -sin(lat_0)cos(lon_0) & -sin(lat_0)sin(lon_0) & cos(lat_0) \\ cos(lat_0)cos(lon_0) & cos(lat_0)sin(lon_0) & sin(lat_0) \end{array} \right]\)

enu坐标系转ECEF坐标系

\(S\)为单位正交矩阵
\[\mathbf{S}^{-1}=\mathbf{S}^\mathrm{T}\]
反之
\[
\begin{gathered}
\left[ \begin{array}{ccc}
\Delta{x}\\\Delta{y}\\\Delta{z}\end{array}
\right]=S^{-1}\cdot\left[ \begin{array}{ccc}
e\\n\\u\end{array} \right]=
\mathbf{S}^\mathrm{T}\cdot\left[ \begin{array}{ccc}
e\\n\\u\end{array} \right]
\end{gathered}
\]

LLA坐标系转enu坐标系

上述可以看到,从LLA坐标系转换到enu坐标系有较多计算量,在考虑地球偏心率\(e\)很小的前提下,可以做一定的近似公式计算

\[
\left[ \begin{array}{ccc}
\Delta e\\ \Delta n \\ \Delta u
\end{array}
\right]=
\left[\begin{array}{ccc}
a\cdot cos(lat)\cdot \Delta lon & 0 & 0 \\
0 & a \cdot \Delta lat & 0 \\
0 & 0 & \Delta alt
\end{array}
\right]
\]

GNSS学习笔记--坐标转换的更多相关文章

  1. ArcGIS案例学习笔记-中国2000坐标转换实例

    ArcGIS案例学习笔记-中国2000坐标转换实例 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:西安1980.中国2000.WGS84(GPS)等任意坐标系 ...

  2. opencv学习笔记(三)基本数据类型

    opencv学习笔记(三)基本数据类型 类:DataType 将C++数据类型转换为对应的opencv数据类型 OpenCV原始数据类型的特征模版.OpenCV的原始数据类型包括unsigned ch ...

  3. 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现

    批处理是使GPU进行高效绘制的一种技术手段,也是整个渲染流程中最核心的技术,到目前为止我们并没有使用到这种技术手段,下面我们看看我们现在的渲染机制. 先想一想我们最开始是怎么向GPU绘制一幅图像的,可 ...

  4. 【Visual C++】游戏编程学习笔记之八:鼠标输入消息(小demo)

     本系列文章由@二货梦想家张程 所写,转载请注明出处. 作者:ZeeCoder  微博链接:http://weibo.com/zc463717263 我的邮箱:michealfloyd@126.c ...

  5. ArcGIS案例学习笔记1_1

    ArcGIS案例学习笔记1_1 联系方式:谢老师,135_4855_4328, xiexiaokui#qq.com 时间:第一天上午 准备 0.U盘复制ArcGIS培训*** 1.练习数据不要放到桌面 ...

  6. 孙鑫视频VC++深入详解学习笔记

    孙鑫视频VC++深入详解学习笔记 VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Le ...

  7. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十九章:法线贴图 学习目标 理解为什么需要法线贴图: 学习法线贴图如 ...

  8. OpenLayers 6 学习笔记

    这个是真的学习笔记!不是教程 转载请声明:https://www.cnblogs.com/onsummer/p/12159366.html 基于openlayers 6.x api不太好查,就基于腾讯 ...

  9. Tensorflow学习笔记No.11

    图像定位 图像定位是指在图像中将我们需要识别的部分使用定位框进行定位标记,本次主要讲述如何使用tensorflow2.0实现简单的图像定位任务. 我所使用的定位方法是训练神经网络使它输出定位框的四个顶 ...

随机推荐

  1. C# Winform更换Webbrowse为WebKit

    本人第一次发表博文,内容不精也不是很有水平,请大家多多包涵~ 说到Webbrowser,可能大家都用过这个控件,它默认使用的是旧版本IE内核. 这就导致了一些问题,比如JS的加载不正确,这个问题就足够 ...

  2. R-4 方差分析

    本节内容: 1:方差分析的原理 2:单因数方差分析 .双因数分析 3:交互项 一:方差分析是原理 方差分析原理 对总体均值的假设检验,有三种情况:1.总体均值与某个常数进行比较:2.两个总体均值之间的 ...

  3. libwebrtc & libmediasoupclient编译

    本文简单介绍在Ubuntu下libwebrtc的编译过程. 由于网速限制,实际编译过程是在远程vps上编译滴. 系统环境 Ubuntu 18.04系统的虚拟主机. root@vultr:~# pwd ...

  4. IT兄弟连 HTML5教程 设置IE9以下版本浏览器支持HTML5

    HTML2.HTML5刚发布时由于各浏览器之间的标准不统一,开发者的时间都浪费在解决Web浏览器之间的兼容性上.但由于W3C和WHATWG对HTML5新版本的制定,以及近年来对HTML5的使用,再加上 ...

  5. Python3字典update()方法

    描述 Python字典update()函数把字典参数dict2的key/value(键/值)对更新到字典dict里. update()方法语法: dict.update(dict2) 参数 dict2 ...

  6. SVM算法核函数的选择

    SVM支持向量机,一般用于二分类模型,支持线性可分和非线性划分.SVM中用到的核函数有线性核'linear'.多项式核函数pkf以及高斯核函数rbf. 当训练数据线性可分时,一般用线性核函数,直接实现 ...

  7. 深入理解 Java 注解

    深入理解 Java 注解 本文内容基于 JDK8.注解是 JDK5 引入的,后续 JDK 版本扩展了一些内容,本文中没有明确指明版本的注解都是 JDK5 就已经支持的注解.

  8. css网页布局模板

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 使用session存储,购物车结算add_to_order.php(学生笔记)

    <?php session_start(); include_once("DB.class.php"); //接受并解析前端传过来的json,转换成数组. $goods_li ...

  10. 松软科技带你学前端:JavaScript 使用

    <script> 标签 在 HTML 中,JavaScript 代码必须位于 <script> 与 </script> 标签之间. 实例 <script> ...