matlab 经纬度转ENU
时间: 2023-10-15 08:08:30 浏览: 215
ENU是指东北地面坐标系,它是一种常用的地理定位坐标系。在MATLAB中,可以使用以下代码将经纬度坐标(以度为单位)转换为ENU坐标:
```
function [E, N, U] = llh2enu(lat, lon, alt, lat0, lon0, alt0)
% 将经纬度坐标转换为ENU坐标
% 输入参数:
% lat: 待转换点的纬度(以度为单位)
% lon: 待转换点的经度(以度为单位)
% alt: 待转换点的海拔高度(以米为单位)
% lat0: 原点的纬度(以度为单位)
% lon0: 原点的经度(以度为单位)
% alt0: 原点的海拔高度(以米为单位)
% 输出参数:
% E: 相对于原点的东向距离(以米为单位)
% N: 相对于原点的北向距离(以米为单位)
% U: 相对于原点的高度距离(以米为单位)
% 地球半径(以米为单位)
R = 6371000;
% 计算原点的地心坐标
x0 = (R + alt0) * cosd(lat0) * cosd(lon0);
y0 = (R + alt0) * cosd(lat0) * sind(lon0);
z0 = (R + alt0) * sind(lat0);
% 计算待转换点的地心坐标
x = (R + alt) * cosd(lat) * cosd(lon);
y = (R + alt) * cosd(lat) * sind(lon);
z = (R + alt) * sind(lat);
% 计算相对于原点的坐标差值
dx = x - x0;
dy = y - y0;
dz = z - z0;
% 计算ENU坐标
E = -sind(lon0) * dx + cosd(lon0) * dy;
N = -sind(lat0) * cosd(lon0) * dx - sind(lat0) * sind(lon0) * dy + cosd(lat0) * dz;
U = cosd(lat0) * cosd(lon0) * dx + cosd(lat0) * sind(lon0) * dy + sind(lat0) * dz;
end
```
使用示例:
```
lat0 = 39.9042; % 北京的纬度
lon0 = 116.4074; % 北京的经度
alt0 = 0; % 北京的海拔高度
lat = 31.2304; % 上海的纬度
lon = 121.4737; % 上海的经度
alt = 0; % 上海的海拔高度
[E, N, U] = llh2enu(lat, lon, alt, lat0, lon0, alt0);
disp(['东向距离:', num2str(E), ' 米']);
disp(['北向距离:', num2str(N), ' 米']);
disp(['高度距离:', num2str(U), ' 米']);
```
输出结果:
```
东向距离:-794874.19 米
北向距离:3477114.11 米
高度距离:-226.41 米
```
说明上海相对于北京的ENU坐标为(-794874.19, 3477114.11, -226.41)。
阅读全文