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. mysql研究跟进

    count(1)对比 count(*) count(N),N指的是列的序列号,innodb引擎下一般为主键列:count(*),mysql优化器也会将统计列自动优化.所以日常使用区别不大 阿里规范里的 ...

  2. 31.Java基础_日期/日期格式/日历类

    Date类 Date对象构造方法 Date对象常用方法 import java.util.*; public class test { public static void main(String[] ...

  3. combination sum && combination sum II

    1.Given a set of candidate numbers (candidates) (without duplicates) and a target number (target), f ...

  4. steamdb cookie

    steamdb cookie import requests, re, os, pymysql, time from lxml import etree from steamdb.YDM import ...

  5. Educational Codeforces Round 77 (Rated for Div. 2) D A game with traps

    题意:x正轴上有着一个陷阱的位置,开关和灵敏度,如果一个士兵灵敏度输给陷阱,他是过不去这个陷阱的幸运的是,你可以先过去把开关给关了,没错你是不怕陷阱的接下来呢你有操作,你移动一个,耗费一秒而你的团队需 ...

  6. Hive参数调优

    调优 Hive提供三种可以改变环境变量的方法,分别是: (1)修改${HIVE_HOME}/conf/hive-site.xml配置文件: 所有的默认配置都在${HIVE_HOME}/conf/hiv ...

  7. angularjs路由监听,uirouter感知路由变化,解决uirouter路由监听不生效的问题

     壹 ❀ 引 angularjs除了惊为天人的双向数据绑定外,路由也是出彩的一笔,通过路由配置,我们能在不发起页面跳转的情况下,对当前页内容进行整体更新,angularjs提供了ngRoute模块用于 ...

  8. Leetcode题解 - BFS部分题目代码+思路(896、690、111、559、993、102、103、127、433)

    和树有关的题目求深度 -> 可以利用层序遍历 -> 用到层序遍历就想到使用BFS 896. 单调数列 - 水题 class Solution: def isMonotonic(self, ...

  9. 普通的maven项目,如何打成一个fat jar(包括了全部依赖jar包)?

    1.前言 用过spring boot的同学肯定知道,现在web项目可以直接打成jar包运行,相当方便. 那么普通项目如何配置(非spring boot),才能打成一个类似的jar包呢? 2.解决方案: ...

  10. ASP.NET Core部署系列一:发布到IIS上

    前言: 当构建一个ASP.NET Core应用程序并且计划将其运行在IIS中时,你会发现Core应用程序和之前版本的ASP.NET程序在IIS中的运行方式是完全不一样的.与ASP.NET时代不同,AS ...