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}}

\]

python实现

def lla2ecef(lat,lon,alt):

WGS84_A = 6378137.0

WGS84_f = 1/298.257223565

WGS84_E2 = WGS84_f*(2-WGS84_f)

deg2rad = math.pi/180.0

rad2deg = 180.0/math.pi

lat *= deg2rad

lon *= deg2rad

N = WGS84_A/(math.sqrt(1-WGS84_E2*math.sin(lat)*math.sin(lat)))

x = (N+alt)*math.cos(lat)*math.cos(lon)

y = (N+alt)*math.cos(lat)*math.sin(lon)

z = (N*(1-WGS84_f)*(1-WGS84_f)+alt)*math.sin(lat)

return [x,y,z]

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]

\]

python坐标系转换_GNSS学习笔记-坐标转换相关推荐

  1. 东北天到ecef的变换_GNSS学习笔记-坐标转换

    GNSS 坐标转换 GNSS计算主要涉及三个坐标系,地心地固坐标系,地理坐标系和站心坐标系.这里主要介绍一下三个坐标的含义和转换公式. 地心地固坐标系如图X,Y,Z表示 (ECEF坐标系),以地心O为 ...

  2. Python——格式转换的学习笔记

    1 如何对list进行格式转换 我们可以知道,list数据是无法直接进行格式转换的, 如果直接使用格式转换的函数,就会报错: 于是,这里我们可以用map()函数来实现这个操作,示例代码如下, coor ...

  3. Python地理做图——学习笔记

    Python地理做图--学习笔记 GMT 绘制海岸线 绘制地形并叠加海岸线 地理信息数据格式在线转换网址 适用OSGEO4w可以实现tif转nc,转grd 绘制grd和nc 除了投影方式-X, gmt ...

  4. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

  5. Python快速编程入门#学习笔记03# |第二章 :Python基础(代码格式、标识符关键字、变量和数据类型、数字类型以及运算符)

    全文目录 ==先导知识== 学习目标: 2.1 代码格式 2.1.1 注释 2.1.2 缩进 2.1.3 语句换行 2.2 标识符和关键字 2.2.1 标识符 2.2.2 关键字 2.3 变量和数据类 ...

  6. 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录

    基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...

  7. Python中索引的学习笔记

    1 前言 今天在学习FaceBoxes- 看到一个比较奇怪的代码,"order = scores.argsort()[::-1][:args.top_k]",不太懂这个" ...

  8. 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理--学习笔记(三) 前言 一.灰度拉伸 二.幂律(伽马)变换 三.对数变换 前言 进入冈萨雷斯的第三章内容,并用python实现功能.我更改了代码源,之前找到太烂了,代码 ...

  9. Python第三方库pygame学习笔记(一)

    Pygame Python最经典的2D游戏开发第三方库,也支持3D游戏开发 Pygame适合用于游戏逻辑验证.游戏入门及系统演示验证 Pygame是一种游戏开发引擎,基本逻辑具有参考价值 pygame ...

最新文章

  1. 数据结构实验之链表二:逆序建立链表
  2. Weblogic部署项目过程中的一些问题
  3. 浅析Banner设计
  4. 腾讯,字节等大厂面试真题汇总,深夜思考
  5. 1-7docke的网络模式
  6. laravel 创建自定义的artisan make命令来新建类文件
  7. Mysql删除重复数据并解决You can't specify target table 'xx' for update in FROM clause 报错与 query interrupted报错
  8. cs1.6修改服务器参数设置,[心得] cs的网络参数调整指南
  9. CBCGPToolBarImages和CImageList创建与使用
  10. 功能安全标准-ISO26262-6---硬件集成测试
  11. 龙格-库塔(Runge-Kutta)方法C++实现
  12. 为何现在只剩下 风吹乱我的发
  13. 让我们旋转跳跃不停歇~~~当3D打印遇上八音盒!(一)
  14. 物联网碎片化的一些思考
  15. k60正交解码FTM1 FTM2 困惑
  16. 金融级湖仓一体架构——SequoiaDB巨杉数据库初探
  17. **蒙特卡洛计算定积分VC++**
  18. 区块链溯源技术是什么
  19. android 球面 旋转 坐标系,天球坐标系和地球坐标系-GPS定位原理及应用-电子发烧友网站...
  20. AFNetworking理解:

热门文章

  1. 爬取17k小说网的小说
  2. cf655A Buses Between Cities
  3. 小程序 视图不随数据动态改变
  4. python实现角谷定理
  5. KALI Linux 的下载与安装
  6. 《庄子·杂篇·寓言第二十七》
  7. android 设置屏幕对比度,【Android】安卓调节屏幕亮度
  8. 全球最大开源软件开发平台和仓库
  9. 2.1 Git介绍、安装与使用
  10. c语言1h什么意思,标准现代精确——1C开叫1H应叫及其他应叫