测站坐标系统 -- 东北天(ENU)坐标系、站心坐标系

目录

一、测站坐标系的定义

二、测站坐标系与地心地固坐标系的转换

2.1地心地固坐标系转到测站坐标系

2.2测站坐标系转到地心地固坐标系

三、方位角和高度角的计算


一、测站坐标系的定义

  • 测站坐标系统以观测站( 或地面上某一个观测点 ) 为中心建立坐标系统,将这类坐标系称为测
    站坐标系统。
  • 测站坐标系通常 以用户所在的位置点 P 为坐标原点三个坐标轴分别是相互垂直的 东向北向天向,因而测站坐标系又称为 东北天(ENU)坐标系。 由于测站坐标系以站心为坐标原点,因此也称为站心坐标系。
  • 如图所示, 测站坐标系的天向与大地坐标系(LLA经纬度坐标系)在此点的高程方向一致。测站坐标系固定在地球上, 本质上是一种 地固坐标系
    • (1) 以站心为坐标原点。
    • (2) Z 轴与站心点的椭球法线重合,向上为正(或称为天顶方向)
    • (3) X 轴为站心点的正东向。
    • (4) Y 轴为站心点的正北向。

二、测站坐标系与地心地固坐标系的转换

  • 由测站坐标系的定义可知,测站坐标系与地心地固坐标系的坐标原点不重合,坐标轴指向也不一致。因此,地心地固坐标系与测站坐标系之间的转换涉及两种变换:坐标原点平移坐标轴旋转

2.1地心地固坐标系转到测站坐标系

已知测站 F 地心地固坐标系中的坐标为(xf yf ,zf) ,某一待转换点 S 地心地固坐标系中的坐标为(x,y, z) ,将待转换点S 由地心地固坐标系转换到测站 F 的测站坐标系具体步骤如下:

  •  (1) 坐标原点平移(两个的enu(测站F和待转换点S)其实是一样的)将坐标原点由地心平移到站心,得到平移后的坐标(x' , y' , z')。通过
  • (2) 计算测站的大地坐标。将测站的地心直角坐标(x f yf ,zf) 转换为大地坐标(B,L,H)
  • (3)计算坐标旋转矩阵。由测站的经度、纬度计算得到坐标旋转矩阵为
  • (4) 坐标轴旋转。利用旋转矩阵,将平移后的坐标( x , y' , z ) 转到测站坐标系得到测站
    坐标系下的位置坐标(e,n,u)
    • ​​​​​​​
  • 综上所述,可以将上述过程合成一个公式,即
  • ​​​​​​​
​​​​​​​​​​​​​​​​​​​​​

2.2测站坐标系转到地心地固坐标系

  • 已知测站 F 地心地固坐标系中的坐标为(xf yf ,zf) ,某一待转换点 S 测站坐标系中的坐标为(e,n ,u ),则将 S 由测站坐标系转换到地心地固坐标系的具体步骤如下:
    • (1)计算测站的大地坐标。将测站的地心直角坐标(xf yf ,zf) 转换为大地坐标(B,L ,H)。前面有讲,这里不再赘述
    • (2) 计算坐标旋转矩阵。由于从测站坐标系转换到地心地固坐标系是从地心地固坐标系转换到测站坐标系的逆过程
      • ​​​​​​​
      • 由于旋转矩阵是正交对称矩阵,其逆矩阵等于矩阵的转置,因此,有​​​​​​​​​​​​​​​​​​​​​
      • ​​​​​​​​​​​​​​
    • (3) 坐标轴旋转。利用旋转矩阵,将测站坐标 ( e,n,u) 旋转到坐标轴与地心地固坐标系一致的坐标( x , y' , z)
      • ​​​​​​​
    • (4) 坐标原点平移将坐标 ( x, ,y' ,z ) 的原点平移至地心,得到转换点 S 在地心地固坐标系中的坐标(x , y ,z)
      • ​​​​​​​
    • 同样地,也可以将上述过程合成一个公式,即:
      • ​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​

三、方位角和高度角的计算

  • 测站坐标系的一个重要应用在于计算卫星在用户(观测者)处的观测矢量,进而得到卫星相对于用户的方位角高度角(也称为仰角)
  • 高度角可用于判断卫星是否对用户可见:高度角小于 ,说明卫星位于地平线以下,不可见;反之,高度角大于 时,卫星可见。高度角等于 90°时,表示卫星位于用户的天顶正上方。
  • 假设卫星在测站坐标系中的坐标为(e,n,u ) ,则卫星高度角的计算公式为
    • ​​​​​​​
  • 卫星方位角定位为由北向顺时针转到观测矢量在水平面内的投影方向上的角度,其 计算公式为:
​​​​​​​
以下是经纬高(WGS84)坐标系到ECEF坐标系的转换代码: ```c #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 #define a 6378137.0 // 地球长半轴 #define b 6356752.314245 // 地球短半轴 #define e ((a*a-b*b)/(a*a)) // 地球椭球体第一偏心率 void WGS84_to_ECEF(double lat, double lon, double alt, double *x, double *y, double *z) { double N = a / sqrt(1 - e*sin(lat)*sin(lat)); *x = (N + alt) * cos(lat) * cos(lon); *y = (N + alt) * cos(lat) * sin(lon); *z = (N*(1-e) + alt) * sin(lat); } int main() { double lat = 39.909187; double lon = 116.397451; double alt = 50.0; double x, y, z; WGS84_to_ECEF(lat*PI/180.0, lon*PI/180.0, alt, &x, &y, &z); printf("ECEF坐标系下的坐标为:(%lf, %lf, %lf)\n", x, y, z); return 0; } ``` 以下是ECEF坐标系ENU坐标系的转换代码: ```c #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 void ECEF_to_ENU(double x, double y, double z, double lat0, double lon0, double alt0, double *e, double *n, double *u) { double slat0 = sin(lat0); double clat0 = cos(lat0); double slon0 = sin(lon0); double clon0 = cos(lon0); double dx = x - (clon0*x + slon0*y); double dy = y - (-slon0*x + clon0*y); double dz = z - alt0; *e = -slon0*dx + clon0*dy; *n = -slat0*clon0*dx - slat0*slon0*dy + clat0*dz; *u = clat0*clon0*dx + clat0*slon0*dy + slat0*dz; } int main() { double x = -2339108.3; double y = 5004615.5; double z = 3224800.9; double lat0 = 39.909187*PI/180.0; double lon0 = 116.397451*PI/180.0; double alt0 = 50.0; double e, n, u; ECEF_to_ENU(x, y, z, lat0, lon0, alt0, &e, &n, &u); printf("ENU坐标系下的坐标为:(%lf, %lf, %lf)\n", e, n, u); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_ADing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值