matlab的mapping toolbox的enu2ecefv()实现
1、介绍功能:
Rotate local east-north-up vector to geocentric Earth-centered Earth-fixed.
就是将ENU坐标系下的向量坐标转换为ECEF坐标系下的向量坐标。
2、实现思路
2.1 先观察enu2ecefv()的函数原型
[U,V,W] = enu2ecefv(uEast,vNorth,wUp,lat0,lon0)
其中,输入[uEast,vNorth,wUp]是向量在ENU坐标系下的坐标表示;[lat0,lon0]是ENU坐标系原点对应的纬度、经度;输出[U,V,W]是原向量转换到ECEF坐标系下的向量坐标表示。
2.2 具体想法
[uEast,vNorth,wUp]是向量坐标表示,那么可以确定这个向量的起点和终点。首先,起点可认为是ENU坐标系的原点,终点可认为是[uEast,vNorth,wUp]在ECEF坐标系下指代的一点。然后,将这两个在ENU坐标系下的点坐标转换为在ECEF坐标系下的坐标。最后,用ECEF下的终点坐标减去起点坐标,即可得到向量的转换坐标。
3、实现结果展示与拓展
3.1 展示enu2ecefv()函数介绍里的例子
3.2 复现代码
其中的geodetic_to_ecef()和enu_to_ecef()函数为自实现函数,功能与mapping toolbox中的函数geodetic2ecef()和enu2ecef()一致。
lat0 = 17.41;
lon0 = 78.27;
uEast = -27.6190;
vNorth = -16.4298;
wUp = -0.3186;
h = 6378137;
[x0, y0, z0] = geodetic_to_ecef(lat0, lon0, h);
[x1, y1, z1] = enu_to_ecef(uEast, vNorth, wUp, lat0, lon0, h);
result = [x1, y1, z1] - [x0, y0, z0]
3.3 复现结果与分析
从上述结果中可以看出,实现思路正确,实现代码的结果与3.1节中例子的结果一致。
4、扩展
enu2ecefv()函数里有一个默认参数,就是默认目标(也即ENU的原点在地球表面)在地球表面。但如果目标不在地球表面,而在表面上方的一定高度h上,这时候的转换就未必正确。所以,可以考虑修改代码中的h,来进行完善。