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. 游戏《Minecraft》IntelliJ下模组开发环境ForgeGradle的使用教程

    嗯,当你想搞个模组的时候,肯定需要用到FG. 就比如编译模组的时候. 很好,首先下载源码去. files.minecraftforge.net/ 然后打开命令行到源码目录下 执行命令~ Win:   ...

  2. C# 序列化和反序列化(xml 文件)

    序列化是将对象保存为文本文件或二进制文件: 反序列化则是读取文件信息,还原为对象: 序列化保存为文本内容,主要是 xml 和 json 两种,这里介绍序列化为 xml 文件的方式. 想要序列化,先要在 ...

  3. C++ explicit关键字,修饰构造函数,ctor

    #include <iostream> // operator Type() 类型操作符重载 // operator int() // operator double() // ... / ...

  4. hibernate opensission.createSQLquery 问题

    在进行分页查询的时候,通常会用到,页码,每页容量等等的参数进行操作,如下图: query.list()的时候会执行得到所需要的集合的值,在这个过程中, 如果使用自定义的返回参数,比如将日期做一些基本处 ...

  5. ubuntu vscode 写一个C++程序

    博客转载:https://blog.csdn.net/weixin_43374723/article/details/84064644 Visual studio code是微软发布的一个运行于 Ma ...

  6. Codechef RIN 「Codechef14DEC」Course Selection 最小割离散变量模型

    问题描述 提供中文版本好评,一直以为 Rin 是题目名字... pdf submit 题解 参考了 东营市胜利第一中学姜志豪 的<网络流的一些建模方法>(2016年信息学奥林匹克中国国家队 ...

  7. PHP—— 商品物流实时查询接口 (快递100API对接)

    PHP后台  与前端   对接商品物流信息的接口 运用的 快递100的API接口 public function getExpress() { $user_id = input('post.user_ ...

  8. 基于python的yaml配置文件使用方法

    一.介绍 YAML是一种简洁的非标记语言 YAML以数据为中心,使用空白.缩进.分行组织数据,从而使表达更加简洁易懂 二.基本规则 大小写敏感 使用缩进表示层级关系 禁止使用Tab缩进,只能使用空格键 ...

  9. 【游戏开发】网络编程之浅谈TCP粘包、拆包问题及其解决方案

    引子 现如今手游开发中网络编程是必不可少的重要一环,如果使用的是TCP协议的话,那么不可避免的就会遇见TCP粘包和拆包的问题,马三觉得haifeiWu博主的 TCP 粘包问题浅析及其解决方案 这篇博客 ...

  10. 国产处理器的逆袭机会——RISC-V

    前言 今天天气阴沉,刚才又下起了小雨,温度骤降,前几天脱下的秋裤,今天又穿上了,这天气真是变化无常.上周六(4.20)参加了一场关于RSIC-V的技术沙龙,第一次真正了解了RISC-V架构,正好今天不 ...