Matlab gui大地坐标系-地心地固坐标系-站心坐标系坐标变换

  • Post author:
  • Post category:其他


提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档




前言

实验内容主要是通过Matlab完成大地坐标系、地心地固坐标系和站心坐标系之间的坐标变换,并借助gui显示变换结果。本文主要用来记录实际中的支撑原理、操作步骤和GUI使用方式。




一、坐标变换原理

主要介绍支撑本文坐标变换的理论公式,具体推导过程可参考结尾处的链接.

大地坐标系(经纬高坐标系):通过经度、纬度、高度来表示地球位置;

地心地固坐标系(ECEF坐标系):用X,Y,Z表示,以地心O为坐标原点,Z轴指向协议地球北极,X轴指向参考子午面与地球赤道的交点;

在这里插入图片描述

站心坐标系(ENU坐标系):以用户所在位置P为坐标原点,三个轴分别指向东向,北向和天向,用x,y,z表示。



1.大地坐标系 到 地心地固坐标系

这一步转换主要有两个支撑变换式:

设LLA坐标系下的坐标为(lon,lat,alt),ECEF坐标系下的坐标为(X,Y,Z)则有

(1)

在这里插入图片描述

其中,e为椭球偏心率,N为基准椭球体的曲率半径

在这里插入图片描述

a为基准椭球体的长半径,a=6378137.0 (m)

b为基准椭球体的短半径,b=6356752.3142 (m)

这个变换式是坐标变换课本给出的起始式,用它来做当然没有问题,但在写程序时会发现N的分母项可能会小于0,结果导致开方运算没办法去做,因此


推荐用第二种推导式




(2)

引入WGS-84下极扁率f=a-ba,由于偏心率e和极扁率f之间存在关系:

在这里插入图片描述

则有:

在这里插入图片描述

其中,f为基准椭球体的极扁率,f=1/298.257223563



2.地心地固坐标系 到 大地坐标系

在这里插入图片描述

在这里插入图片描述

在这种变换情况下需要先计算出经度和纬度,通过计算中间变量来求得高度。



3.地心地固坐标系 到 站心坐标系

地心地固坐标系在转换到站心坐标系时,需要确定一个坐标原点,假设坐标原点P0=(x0,y0,z0),其LLA坐标为(lon0,lat0,alt0)。则点P(x,y,z)相对于站心的坐标为:

在这里插入图片描述

则点P在以P0为坐标原点的ENU坐标系位置可以表示为:

在这里插入图片描述

其中S为坐标变换矩阵

在这里插入图片描述



4.站心坐标系 到 地心地固坐标系

S为单位正交矩阵

在这里插入图片描述

则P点转换后的地心地固坐标系坐标为:

在这里插入图片描述

大地坐标系转换到站心坐标系和站心坐标系转换到大地坐标系这两种变换过程只不过在上面的基础上增加了大地坐标系与地心地固坐标系之间的转换,在此不在赘述。



二、GUI设计

GUI即图形用户界面,用于演示某种技术或方法。.


如何创建GUI?


在Matlab的命令行窗口输入guide即可弹出GUI页面,之后ctrl+s保存


如何设计GUI?


GUI窗口提供了如下控件和组件,可以根据设计需要选择,通常来说最常用的是按键、可编辑文本、静态文本、面板和图表。

在这里插入图片描述

以按键为例,单击按键选项,鼠标拖住选择大小,之后可以双击按键设置字体大小、位置等。

在这里插入图片描述

在GUI页面设计中通常可以加入两个普通按键,一个是程序执行,另外一个是程序重置。执行按键中可以在其回调函数中直接编写实现相应功能,也可以使用函数嵌套。右键单击按钮,选择查看回调中的Callback,在Callback需要编辑m函数。
在这里插入图片描述

回调函数的输入部分通常有三项,hObject为该对象句柄,eventdata为附加参数,handles为包含所有对象信息和用户数据的结构体,通常我们编写中会对handles项进行操作。

在这里插入图片描述

我们可以先构思出GUI大体的页面显示是怎么样的,之后再去统一编写函数体。本人设计的针对坐标变换的GUI界面如下图:

在这里插入图片描述

通过在输入坐标中输入相应的坐标,点击转换按键,即可在右侧得到坐标变换的结果。那我们

怎么才能得到输入的坐标数据呢?


代码如下(示例):

 %获取大地坐标系下的输入坐标信息
     A=get(handles.edit1,'string');       %获得可编辑文本框中的字符串
     B=get(handles.edit2,'string');
     C=get(handles.edit3,'string');

由此我们得到了用字符串表示的输入坐标,之后为了方便后续的坐标变换,需要将它由字符串格式转换成小数类型,我们用到的函数也是Matlab里面自带的str2double(函数)。

 %得到地心地固坐标系下的坐标
     [X,Y,Z]=llh_To_XYZ(str2double(A),str2double(B),str2double(C));
     pos=[X,Y,Z];
     [x,y,z]=XYZ_To_xyz(pos)

获得了坐标变换后的数据,怎么将它显示到GUI页面中呢?同样Matlab也给出了现成的函数,可以直接去调用

     set(handles.edit4,'string',A);      %输出坐标 大地坐标系
     set(handles.edit5,'string',B);
     set(handles.edit6,'string',C);
     set(handles.edit7,'string',num2str(X,6));    %输出坐标 地心地固坐标系
     set(handles.edit8,'string',num2str(Y,6));
     set(handles.edit9,'string',num2str(Z,6));
     set(handles.edit16,'string',num2str(x,6));   %输出坐标 站心坐标系
     set(handles.edit17,'string',num2str(y,6));
     set(handles.edit18,'string',num2str(z,6));

完整的实验结果如下所示,如果有不正确的地方还请各位指正

在这里插入图片描述

在这里插入图片描述




版权声明:本文为shigexing_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。