- Get all the inputs (latitudes, longitudes, altitudes, azimuthal and elevation angles):
How to Adjust Elevation and Azimuth Relative to the Original Route in 2D/3D Plot (lat, long, alt) in MATLAB?
5 次查看(过去 30 天)
显示 更早的评论
Hi, I have a route represented by latitude, longitude, and altitude values, and I would like to adjust this route based on specific azimuth and elevation angles relative to the original route.
The inputs are:
• A route consisting of latitude, longitude, and altitude. • Desired azimuth and elevation angles relative to the original route.
I attempted to convert the route points to Cartesian coordinates and apply a rotation matrix, but I couldn’t achieve the correct transformation. Does anyone have advice on how to transform the points correctly and plot the adjusted route in both 2D and 3D using MATLAB?
Thanks in advance!
0 个评论
回答(1 个)
Zinea
2024-10-8
To adjust the route based on specified azimuth and elevated angles (given as inputs), the method of converting the latitude, longitude, and altitude data into Cartesian coordinates, applying a rotation matrix, and then converting back to geographic coordinates is the way to go.
You can refer to the steps below for reference implementation:
% Define the original route (latitude, longitude, altitude)
lat = [34.0522, 34.0525, 34.0528]; % Example latitudes
lon = [-118.2437, -118.2434, -118.2431]; % Example longitudes
alt = [100, 110, 120]; % Example altitudes in meters
% Convert to Cartesian coordinates
% Assuming Earth radius + altitude for simplicity
R = 6371000; % Earth's radius in meters
x = (R + alt) .* cosd(lat) .* cosd(lon);
y = (R + alt) .* cosd(lat) .* sind(lon);
z = (R + alt) .* sind(lat);
% Desired azimuth and elevation angles in degrees
azimuth = 30; % Example azimuth angle
elevation = 10; % Example elevation angle
% Convert angles to radians
azimuth_rad = deg2rad(azimuth);
elevation_rad = deg2rad(elevation);
2. Perform rotation using rotation matrices:
% Create rotation matrices
Rz = [cos(azimuth_rad), -sin(azimuth_rad), 0;
sin(azimuth_rad), cos(azimuth_rad), 0;
0, 0, 1];
Ry = [cos(elevation_rad), 0, sin(elevation_rad);
0, 1, 0;
-sin(elevation_rad), 0, cos(elevation_rad)];
% Apply rotations
rotation_matrix = Rz * Ry;
adjusted_coords = rotation_matrix * [x; y; z];
% Extract adjusted coordinates
x_adj = adjusted_coords(1, :);
y_adj = adjusted_coords(2, :);
z_adj = adjusted_coords(3, :);
3. Convert the adjusted coordinates back to latitude, longitude and altitude:
% Convert back to latitude, longitude, altitude
lat_adj = asind(z_adj / R);
lon_adj = atan2d(y_adj, x_adj);
alt_adj = sqrt(x_adj.^2 + y_adj.^2 + z_adj.^2) - R;
4. Plot the original and adjusted routes in 2D and 3D:
figure;
subplot(1,2,1);
plot3(lon, lat, alt, 'b-o', 'DisplayName', 'Original Route');
hold on;
plot3(lon_adj, lat_adj, alt_adj, 'r-o', 'DisplayName', 'Adjusted Route');
xlabel('Longitude');
ylabel('Latitude');
zlabel('Altitude (m)');
title('3D Route');
legend;
grid on;
subplot(1,2,2);
plot(lon, lat, 'b-o', 'DisplayName', 'Original Route');
hold on;
plot(lon_adj, lat_adj, 'r-o', 'DisplayName', 'Adjusted Route');
xlabel('Longitude');
ylabel('Latitude');
title('2D Route');
legend;
grid on;
Here is the output figure:
The following link can be referred for more information on ‘Matrix rotations and transformations’:
Hope this helps!
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Cartesian Coordinate System Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!