坐标转换(四)——东北天坐标系(ENU)与雷达阵面坐标系(RFC)的相互转换

我们这次要讲的内容是东北天坐标系和雷达阵面坐标系之间的相互转换关系。内容包括东北天坐标系的定义、两种不同的雷达阵面系的定义(第二种定义可能更常见)以及几种坐标系之间的转换。

东北天坐标系和雷达阵面坐标系的直接转换适用于雷达安装于水平、固定的平台上的情况,可用于地基雷达,不适用于雷达安装载体有横滚角或俯仰角变化的情况,如海基雷达(舰载雷达、船载雷达等)、空基雷达(机载雷达、弹载雷达等)、天基雷达(星载雷达等),如果雷达安装的平台俯仰角或者横滚角是变化的,就需要使用载体坐标系作为中间坐标系进行转换。

1 坐标系的定义

1.1 东北天坐标系

①东北天空间直角坐标系(ENU坐标系)

东北天空间直角坐标系又叫站心坐标、站点坐标系、导航坐标系或者地理坐标系,简称ENU坐标系,E是East的缩写,表示X轴指向的方向为正东;N是North的缩写,表示Y轴指向的方向为正北;U是Up的缩写,表示Z指向的方向为垂直于水平面向上(天顶),XYZ构成右手坐标系,如图1所示,东北天坐标系我们称为n系。

② 东北天球坐标系(ENU球坐标系)

东北天坐标系对应的球坐标系是以斜距Rng(Range),方位角Azi(Azimuth),俯仰角Ele(Elevation)表示的东北天坐标系,下面是它们的定义:

斜距Rng:目标点与东北天球坐标系原点的距离,如图1中的OP,其中O为坐标原点,P为目标点;

方位角Azi:正北方向绕Zn轴顺时针或逆时针旋转到目标点在XOY平面的投影所经过的最小角度,顺时针旋转,方位角为正,逆时针旋转,方位角为负,方位角大小范围为-180°~180°;

俯仰角Ele:原点和目标点的连线与XnOYn平面的夹角,大小范围为-90~90°,俯仰角在XnOYn平面上方(Zn轴正方向)为正,在XnOYn平面下方(Zn轴负方向)为负。

  图 1东北天坐标系示意图

1.2 雷达阵面坐标系的第一种定义方式

①雷达阵面空间直角坐标系(RFC坐标系)

雷达阵面空间直角坐标系,即RFC坐标系(Radar Face Coordinates),它是雷达天线阵面上的坐标系,所以又叫天线坐标系。雷达阵面坐标系称为称为p系,其Xp,Yp,Zp轴有多种定义方式,本文中的雷达阵面空间直角坐标系的第一种定义方式是:Xp轴在阵面内,为当地水平面与阵面的交线;Yp轴也在阵面内,沿着阵面向上;Zp轴为阵面法线,垂直于阵面向上,XpYpZp构成右手坐标系。

图2 RFC坐标系和RFC球坐标系的第一种定义在阵面上的示意图

②雷达阵面球坐标系(RFC球坐标系)

雷达阵面球坐标系是以斜距Rng(Range),方位角Azi(Azimuth),俯仰角Ele(Elevation)表示的雷达阵面坐标系,如下图所示。为了便于描述雷达天线波束扫描的方位角和俯仰角,雷达阵面球坐标系和东北天球坐标系中方位角和俯仰角的定义是不一样的。

本文中,雷达阵面球坐标系斜距、方位角和俯仰角的第一种定义如下:

斜距Rng:目标点与原点的距离,如图2中的OP,其中O为坐标原点,P为目标点;

方位角Azi:OZp轴绕Yp轴顺时针或逆时针旋转到目标点在XpOZp平面的投影点与原点O的连线所经过的绝对值最小的角度,从Yp轴正方向往负方向看,OZp轴顺时针旋转方位角为正,逆时针旋转方位角为负。从数学解算角度看,方位角大小范围为-180°~180°,而从目标在阵面前方天线波束才能扫描到目标的角度讲,方位角大小范围为-90°~90°,为了涵盖空间中所有点,本文使用-180°~180°这个范围,当有一个目标点的方位角为-180~-90°或者90~180°这个范围时,这个点可能是无效点,因为雷达看不到阵面背后的目标;

俯仰角Ele:原点与目标点的连线与XpOZp平面的夹角,目标点在XpOZp平面上方(Yp正方向)俯仰角为正,反之为负,俯仰角大小范围为-90°~90°。

注意:根据上面的定义,如果目标点在X轴的正方向,那么目标点的方位角将是负的,这个是没有关系的,上面的定义可以这样理解:假如阵面足够大,你躺在阵面往阵面正前方(Zp正方向)看目标,此时,你的头在沿着阵面向上的方向(Yp正方向),你的脚在沿着阵面向下的方向(Yp负方向),如果目标在你的左手边,那么目标阵面方位角为负,如果目标在你的右手边,方位角为正;如果目标在你头的方向,则目标阵面俯仰角为正,目标在你脚的方向,俯仰角为负。口诀是:方位角,左负右正;俯仰角,下负上正。

图3 RCF坐标系与RFC球坐标第一种定义的另一个视角示意图

1.3 雷达阵面坐标系第二种定义方式

雷达阵面坐标系的第二种定义方式用得比较多,这是小D在快写完这篇文章时,在文献中看到的,然后突然明白,原来这种定义才是最常规的定义方式,之前其实也看到过几次,但是由于定势思维的存在,第一次看到的定义在脑子里根深蒂固,就忽略了这种定义。为什么它用得比较多,小D觉得,是因为这样定义旋转起来简单好理解,并且其对应的球坐标系中目标方位角和俯仰角定义和常规的球坐标系中方位角和俯仰角的定义是一致的。

① 雷达阵面空间直角坐标系第二种定义(RFC坐标系)

雷达阵面空间直角坐标系的第二种定义和第一种定义相比,Yp轴和Zp轴交换了下位置,并且Xp的正负方向也做了交换。第二种定义中,Xp轴是阵面与是水平面的交线,Zp轴沿着阵面向上,Yp轴垂直于阵面向上(沿着阵面法线方向),XpYpZp构成右手坐标系。

图4 RFC坐标系和RFC球坐标系的第二种定义在阵面上的示意图

② 雷达阵面球坐标系第二种定义(RFC球坐标系)

雷达阵面球坐标系的第二种定义方式是常规的球坐标系的定义,与东北天球坐标系的定义是一致的,下面是雷达阵面球坐标系的第二种定义:

斜距Rng:目标点与原点的距离,如下图中的OP;

方位角Azi:Yp轴绕Zp轴旋转到目标点在XpOYp平面的投影所经过的最小角度,范围为-180°~180°,从Zp轴正方向往负方向看,Yp轴顺时针旋转,方位角为正,Yp轴逆时针旋转,方位角为负。

俯仰角Ele:原点与目标点的连线OP与XpOYp平面的夹角,范围为-90°~90°,目标点在Zp轴正方向,俯仰角为正,目标点在Zp轴负方向,俯仰角为负。

图5 RCF坐标系与RFC球坐标第二种定义的另一个视角示意图

2 几种坐标转换

2.1 东北天坐标系(ENU坐标系)与第一种雷达阵面坐标系(RFC坐标系)的相互转换

ENU坐标系与第一种RFC坐标系的转换示意图如下图所示,这个图小D是用OmniGraffle画的,画了很久,主要是第一次用这个软件,不是很熟。有的工具按钮,比如虚线的绘制,自己找了一两个小时才找到;并且这个软件拖动图形的时候,其他图形也会一起跟着动,然后就乱了;到目前为止,小D还没有找到怎么在弧形上加剪头的方法,所以图中表示角度的弧形都没有剪头。总之,还是visio好用一些。

话不多说,我们继续讲东北天坐标系和雷达阵面坐标系的相互转换。

图6 东北天坐标系与第一种雷达阵面坐标系相互转换示意图

图7 图6的侧视图

图8 图6的俯视图

首先,需要介绍一下雷达阵面的安装角,雷达阵面安装角包含两个角度,它们是阵面安装方位角和阵面安装俯仰角,这两个角的定义如下:

阵面安装方位角Ap:正北方向顺时针旋转到阵面法线在水平面的投影所经过的最小角度,范围是0~360°,阵面安装方位角如下图中的Ap所示。

阵面安装俯仰角Ep:阵面法线与水平面的夹角,范围是-90°~90°,阵面安装方位角如上图Ep所示,它同阵面与水平面的夹角是互余的。

① 东北天(ENU)坐标系转换到第一种阵面(RFC)坐标系

东北天坐标系转换到第一种阵面坐标系要经过两个旋转过程,分别是:

a.东北天坐标系O-XnYnZn先绕其Z轴顺时针旋转Ap-180°;

b.旋转后的坐标系再绕其X轴逆时针旋转90°-Ep,形成雷达阵面坐标系O-XpYpZp。

注意:如果阵面安装方位角Ap小于180°,那么Ap-180°就是负的,这个时候,顺时针旋转Ap-180°,相当于逆时针旋转180°-Ap。举个例子,假如Ap=60°,Ap-180°=-120°,按照旋转的第一步,东北天坐标系O-XYZ先绕Z轴顺时针旋转-120°,就相当于绕Z轴逆时针旋转120°。小D之前在这个地方走了点弯路,分成了旋转角度为正和负两种情况来计算旋转矩阵,其实不用分情况。

这样的话,东北天坐标系转换到第一种雷达阵面坐标系的旋转矩阵为:

\begin{aligned} R^{p}_{n} &= R_{x}\left(\frac{\pi}{2}-E_{p}\right)R_{z}(\pi-A_{p}) \\ &= \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\left(\frac{\pi}{2}-E_{p}\right) & \sin\left(\frac{\pi}{2}-E_{p}\right) \\ 0 & -\sin\left(\frac{\pi}{2}-E_{p}\right) & \cos\left(\frac{\pi}{2}-E_{p}\right) \end{bmatrix} \begin{bmatrix} \cos(\pi-A_{p}) & \sin(\pi-A_{p}) & 0 \\ -\sin(\pi-A_{p}) & \cos(\pi-A_{p}) & 0 \\ 0 & 0 & 1 \end{bmatrix} \\ &= \left[\begin{matrix} 1 & 0 & 0 \\ 0 & \sin E_{p} & \cos E_{p} \\ 0 & -\cos E_{p} & \sin E_{p} \end{matrix}\right] \left[\begin{matrix} -\cos A_{p} & \sin A_{p} & 0 \\ -\sin A_{p} & -\cos A_{p} & 0 \\ 0 & 0 & 1 \end{matrix}\right] \\ &= \begin{bmatrix} -\cos A_{p} & \sin A_{p} & 0 \\ -\sin E_{p}\sin A_{p} & -\sin E_{p}\cos A_{p} & \cos E_{p} \\ \cos E_{p}\sin A_{p} & \cos E_{p}\cos A_{p} & \sin E_{p} \end{bmatrix} \end{aligned}

②阵面(RFC)坐标系转换到东北天(ENU)坐标系

阵面坐标系转换到东北天坐标系与东北天坐标系转换到阵面坐标系是一个互逆的过程。所以,计算阵面坐标系转到东北天坐标系的旋转矩阵有两种方法:

方法1:对东北天坐标系转换到第一种阵面坐标系的旋转矩阵求逆或者求转置。

方法2:通过旋转过程计算旋转矩阵。

旋转过程如下:

a.阵面坐标系O-XpYpZp先绕其X轴顺时针旋转90°-Ep;

b.旋转后的坐标系再绕其Z轴逆时针旋转Ap-180°,形成东北天坐标系O-XYZ。

其旋转矩阵计算过程如下:

\begin{aligned} R^{n}_{p}& =R_{z}(A_{p}-\pi)R_{x}(E_{p}-\frac{\pi}{2}) \\ &=\begin{bmatrix}\cos(A_{p}-\pi)&\sin(A_{p}-\pi)&0\\-\sin(A_{p}-\pi)&\cos(A_{p}-\pi)&0\\0&0&1\end{bmatrix}\begin{bmatrix}1&0&0\\0&\cos(E_{p}-\frac{\pi}{2})&\sin(E_{p}-\frac{\pi}{2})\\0&-\sin(E_{p}-\frac{\pi}{2})&\cos(E_{p}-\frac{\pi}{2})\end{bmatrix} \\ &=\begin{bmatrix}-\cos Ap&-\sin Ap&0\\\sin Ap&-\cos Ap&0\\0&0&1\end{bmatrix}\begin{bmatrix}1&0&0\\0&\sin Ep&-\cos Ep\\0&\cos Ep&\sin Ep\end{bmatrix} \\ &=\begin{bmatrix}-\cos A_{p}&-\sin A_{p}\sin E_{p}&\sin A_{p}\cos E_{p}\\\sin A_{p}&-\cos A_{p}\sin E_{p}&\cos A_{p}\cos E_{p}\\0&\cos E_{p}&\sin E_{p}\end{bmatrix} \end{aligned}\\

2.2 东北天坐标系(ENU坐标系)与第二种雷达阵面坐标系(RFC坐标系)的相互转换

图9 东北天坐标系与第二种雷达阵面坐标系相互转换示意图

图10 图9的侧视图

图11 图9的俯视图

①东北天坐标系转到第二种阵面坐标系

首先介绍阵面安装角,雷达安装方位角Ap和雷达安装俯仰角Ep和前文的定义一样,即:

阵面安装方位角Ap:正北方向顺时针旋转到阵面法线在水平面的投影所经过的最小角度,范围是0~360°,阵面安装方位角如下图中的Ap所示。

阵面安装俯仰角Ep:阵面法线与水平面的夹角,范围是-90°~90°,阵面安装方位角如下图Ep所示,它同阵面与水平面的夹角是互余的。

东北天坐标系转换到第二种阵面坐标系的过程为:

a.东北天坐标系O-XnYnZn先绕其Z轴顺时针旋转Ap;

b.旋转后的坐标系再绕其X轴逆时针旋转Ep,得到第二种阵面坐标系O-XpYpZp。

整个过程的旋转矩阵为:

\begin{aligned}\text{R}^{p}_{n}&=R_x(E_{p})R_{z}(-A_{p})\\&=\begin{bmatrix}1&0&0\\0&\cos E_{p}&\sin E_{p}\\0&-\sin E_{p}&\cos E_{p}\end{bmatrix}\begin{bmatrix}\cos(-A_{p})&\sin(-A_{p})&0\\-\sin(-A_{p})&\cos(-A_{p})&0\\0&0&1\end{bmatrix}\\&=\begin{bmatrix}1&0&0\\0&\cos E_{p}&\sin E_{p}\\0&-\sin E_{p}&\cos E_{p}\end{bmatrix}\begin{bmatrix}\cos A_{p}&-\sin A_{p}&0\\\sin A_{p}&\cos A_{p}&0\\0&0&1\end{bmatrix}\\&=\begin{bmatrix}\cos A_{p}&-\sin A_{p}&0\\\cos E_{p}\sin A_{p}&\cos E_{p}\cos A_{p}&\sin E_{p}\\-\sin E_{p}\sin A_{p}&-\sin E_{p}\cos A_{p}&\cos E_{p}\end{bmatrix}\end{aligned}\\

②第二种雷达阵面坐标系转换到东北天坐标系

第二种雷达阵面坐标系转到东北天坐标系与东北天坐标系转到第二种雷达阵面坐标系是互逆的过程,这里的互逆是指:旋转顺序相反,并且绕同一个轴旋转的方向相反。比如,A坐标系转换到B坐标系是先绕X轴顺时针旋转α,再绕Y轴逆时针旋转β,那么B坐标系转换到A坐标系就是先绕Y轴顺时针旋转β,再绕X轴逆时针旋转α。

所以,第二种雷达阵面坐标系转换到东北天坐标系的过程有两种方法:

方法1:对东北天坐标系转换到第二种阵面坐标系的旋转矩阵求逆或者求转置。

方法2:根据旋转过程计算旋转矩阵。

第二种雷达阵面坐标系转换到东北天坐标系的旋转过程为:

a.雷达阵面坐标系O-XpYpZp先绕其X轴顺时针旋转Ep;

b.旋转后的坐标系再绕其Z轴逆时针旋转Ap,形成东北天坐标系O-XnYnZn。

其旋转矩阵计算过程为:

\begin{aligned} R^{n}_{p}& =R_{z}(A_{p})R_{x}(-E_{p}) \\ &=\begin{bmatrix}\cos Ap&\sin Ap&0\\-\sin Ap&\cos Ap&0\\0&0&1\end{bmatrix}\begin{bmatrix}1&0&0\\0&\cos(-Ep)&\sin(-Ep)\\0&-\sin(-Ep)&\cos(-Ep)\end{bmatrix} \\ &=\begin{bmatrix}\cos Ap&\sin Ap&0\\-\sin Ap&\cos Ap&0\\0&0&1\end{bmatrix}\begin{bmatrix}1&0&0\\0&\cos Ep&-\sin Ep\\0&\sin Ep&\cos Ep\end{bmatrix} \\ &=\begin{bmatrix}\cos Ap&0&-\sin Ap\sin Ep\\-\sin Ap&\sin Ap\cos Ep&-\cos Ap\sin Ep\\0&\sin Ep&\cos Ep\end{bmatrix} \end{aligned}\\

2.3 东北天空间直角坐标系与东北天球坐标系的相互转换

图12 东北天空间直角坐标系与东北天球坐标系的相互转换示意图

①东北天空间直角坐标系转换到东北天球坐标系

东北天空间直角坐标系转换到东北天球坐标系的示意图如上图所示,假设目标点P在东北天空间直角坐标系中的坐标为(x, y, z),目标点在球坐标系中的斜距为Rng,方位角为Azi,俯仰角为Ele,则东北天空间直角坐标系转到球坐标系的公式为:

\begin{cases}Rng=\sqrt{x^{2}+y^{2}+z^{2}}\\Azi=\arctan\frac{x}{y}\\Ele=\arcsin\frac{z}{\sqrt{x^{2}+y^{2}+z^{2}}}\end{cases}\\

②东北天球坐标系转换到东北天空间直角坐标系

球坐标系转到东北天空间直角坐标系的公式为:

\begin{cases}x=Rng\cos Ele\sin Azi\\y=Rng\cos Ele\cos Azi\\z=Rng\sin Ele\end{cases}\\

2.4 第一种雷达阵面空间直角坐标系转换到雷达阵面球坐标系

图13 第一种RFC空间直角坐标系和RFC球坐标系的相互转换示意图

①第一种雷达阵面空间直角坐标系转换到雷达阵面球坐标系

假设目标点P在雷达阵面空间直角坐标系中的坐标为(x, y, z),目标点在球坐标系中的距离为Rng,方位角为Azi,俯仰角为Ele,则雷达阵面空间直角坐标系转到球坐标的公式为:

\begin{cases}Rng=\sqrt{x^{2}+y^{2}+z^{2}}\\Azi=\arctan\frac{x}{z}\\Ele=\arcsin\frac{y}{\sqrt{x^{2}+y^{2}+z^{2}}}\end{cases}\\

②雷达阵面球坐标系转换到第一种雷达阵面空间直角坐标系

雷达阵面球坐标系转到雷达阵面空间直角坐标系的公式为:

\begin{cases}x=Rng\cos Ele\sin Azi\\y=Rng\sin Ele\\z=Rng\cos Ele\cos Azi\end{cases}\\

2.5 第二种雷达阵面空间直角坐标系转换到雷达阵面球坐标系

图14 第二种RFC空间直角坐标系和RFC球坐标系的相互转换示意图

①第二种雷达阵面空间直角坐标系转换到雷达阵面球坐标系

假设目标点P在雷达阵面空间直角坐标系中的坐标为(x, y, z),目标点在球坐标系中的距离为Rng,方位角为Azi,俯仰角为Ele,则雷达阵面空间直角坐标系转到球坐标的公式为:

\begin{cases}Rng=\sqrt{x^{2}+y^{2}+z^{2}}\\Azi=\arctan\frac{x}{y}\\Ele=\arcsin\frac{z}{\sqrt{x^{2}+y^{2}+z^{2}}}\end{cases}\\

②雷达阵面球坐标系转换到第二种雷达阵面空间直角坐标系

雷达阵面球坐标系转到雷达阵面空间直角坐标系的公式为:

\begin{cases}x=Rng\cos Ele\sin Azi\\y=Rng\cos Ele\cos Azi\\z=Rng\sin Ele\end{cases}\\

2.6 东北天球坐标系与雷达阵面球坐标系的相互转换

①东北天球坐标系转换到雷达阵面球坐标系

东北天球坐标系转换到雷达阵面球坐标系包括以下过程:东北天球坐标系→东北天空间直角坐标系→雷达阵面空间直角坐标系→雷达阵面球坐标系。

②雷达阵面球坐标系转换到东北天球坐标系

雷达阵面球坐标系转到东北天球坐标系的过程为:雷达阵面球坐标系→雷达阵面空间直角坐标系→东北天空间直角坐标系→东北天球坐标系。

好了,这次坐标转换的内容就是这样了。这大概是写得最久的一篇文章了,每天写一点点,主要是,上完一天班,回来之后就不能坐了,坐着神经就刺痛。后来发现,可以在笔记本电脑上画图,打字就躺着在手机上打,然后就写得快多了。这个病真是有点折磨人,幸好每天早上身体就恢复了,大概需要多休息,希望快快好起来。

### WGS84东北坐标系的关系及转换方法 #### 1. WGS84东北坐标系简介 WGS84(World Geodetic System 1984)是一种全球性的大地测量坐标系统,用于定义地球表的位置。它由经度、纬度和高度组成[^1]。 东北坐标系ENU,East-North-Up Coordinate System),是以某一点为中心建立的地方直角坐标系。其三个轴分别指向东(X轴)、北(Y轴)以及垂直向上方向(Z轴)。该坐标系通常被应用于局部区域内的导航和定位计算中[^3]。 --- #### 2. 转换原理 从WGS84到东北坐标系转换涉及两个主要步骤: - **第一步**:将WGS84地理坐标(经纬度和海拔)转换为地心地固坐标系(ECEF,Earth-Centered Earth-Fixed Coordinate System)中的三维笛卡尔坐标。 - **第二步**:通过旋转矩将ECEF坐标投影至以指定点为中心的东北坐标系下。 具体过程如下: --- #### 3. 数学模型算法实现 ##### (1) WGS84 → ECEF 的转换公式 给定一个WGS84位置 \( (\phi, \lambda, h) \),其中: - \( \phi \): 纬度(单位为弧度) - \( \lambda \): 经度(单位为弧度) - \( h \): 高程(相对于椭球的高度) 可以利用以下公式将其转化为ECEF坐标 \( (x, y, z) \): \[ N(\phi) = \frac{a}{\sqrt{1-e^2\sin^2{\phi}}} \] \[ x = (N(\phi)+h)\cos{\phi}\cos{\lambda} \] \[ y = (N(\phi)+h)\cos{\phi}\sin{\lambda} \] \[ z = ((1-e^2)N(\phi)+h)\sin{\phi} \] 其中: - \( a \approx 6378137m \): 椭球半径; - \( e^2 \approx 0.00669438 \): 扁率平方; --- ##### (2) ECEF → ENU转换公式 设中心点的地心坐标为 \( C(x_c, y_c, z_c) \),对应的地理坐标为 \( (\phi_c, \lambda_c, h_c) \)。对于任意目标点P,在完成上述WGS84→ECEF变换后得到的目标点ECEF坐标为\( P(x_p, y_p, z_p) \)。 构建旋转矩R来表示从ECEF到ENU的方向变化关系: \[ R = \begin{bmatrix} -\sin{\lambda} & -\sin{\phi}\cos{\lambda} & \cos{\phi}\cos{\lambda}\\ \cos{\lambda} & -\sin{\phi}\sin{\lambda} & \cos{\phi}\sin{\lambda}\\ 0 & \cos{\phi} & \sin{\phi} \end{bmatrix} \] 最终ENUCoordinates可通过向量乘法获得: \[ V_{enu}= R(V_{ecef}- V_{ref}) \] 这里, - \( V_{enu}=[v_e,v_n,v_u]^T\) 表示东北上坐标分量; - \( V_{ecef}=[x,y,z]^T\) 是待求解点在ECEF下的表达形式; - \( V_{ref}=[x_c,y_c,z_c]^T\) 则代表参考原点所在处对应于整个体系里的固定数值。 --- #### 4. 实现代码示例 以下是基于Python的一个简单实现案例: ```python import numpy as np def wgs84_to_ecef(lat, lon, alt): """ Convert from geodetic coordinates to ECEF. Parameters: lat(float): Latitude in radians lon(float): Longitude in radians alt(float): Altitude above the ellipsoid Returns: tuple: X,Y,Z coordinates of point in meters """ a = 6378137.0 # Semi-major axis length (equatorial radius), m f = 1/298.257223563 # Flattening factor b = (1-f)*a # Semi-minor axis length (polar radius) N = a / np.sqrt(1-(f*(2-f))*np.sin(lat)**2) x = (N + alt) * np.cos(lat) * np.cos(lon) y = (N + alt) * np.cos(lat) * np.sin(lon) z = (((1-f)**2*N) + alt) * np.sin(lat) return x, y, z def ecef_to_enu(ecef_point, ref_lat, ref_lon, ref_alt): """ Transform an ECEF coordinate into local East-North-Up frame. Args: ecef_point(tuple): Point's Cartesian coords [X,Y,Z], unit:meters ref_lat(float): Reference latitude(rad) ref_lon(float): Reference longitude(rad) ref_alt(float): Reference altitude(meter) Return: enu_coords(list): List containing east,north and up components respectively. """ xecef, yecef, zecef = ecef_point x_ref, y_ref, z_ref = wgs84_to_ecef(ref_lat, ref_lon, ref_alt) delta_x = xecef-x_ref;delta_y=yecef-y_ref;delta_z=zecef-z_ref; sin_lambda=np.sin(ref_lon); cos_lambda=np.cos(ref_lon); sin_phi=np.sin(ref_lat); cos_phi=np.cos(ref_lat); rotation_matrix=[ [-sin_lambda , cos_lambda , 0], [-cos_lambda*sin_phi,-sin_lambda*sin_phi,cos_phi ], [ cos_lambda*cos_phi,sin_lambda*cos_phi,sin_phi ] ] xyz_local=np.dot(rotation_matrix,[delta_x,delta_y,delta_z]) return list(map(lambda v:"%.6f"%v,xyz_local)) if __name__ == "__main__": phi_deg, lambda_deg, height_m = 39.914266, 116.403988, 0 phi_rad = np.radians(phi_deg) lambda_rad = np.radians(lambda_deg) # Step1: From WGS84 -> ECEF ecef_result=wgs84_to_ecef(phi_rad, lambda_rad, height_m ) print(f"ECEF Coordinates:{list(map('%.6f'.format,ecef_result))}") # Step2: Define reference location for transformation origin center_phi_deg,center_lambda_deg,height_center=39.914266,116.403988,0; center_phi_rad=np.radians(center_phi_deg); center_lambda_rad=np.radians(center_lambda_deg); # Perform final conversion step enu_output=ecef_to_enu(ecef_result,center_phi_rad,center_lambda_rad,height_center) print(f"ENU Coordinates:[East={enu_output[0]}m,North={enu_output[1]}m,Up={enu_output[2]}m]") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值