⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 analyzetracks.m

📁 基于串行接口的GPS驱动程序
💻 M
字号:
function AnalyzeTracks(tracks)
% ANALYZETRACKS Analyze GPS track log data, display charts

for i=1:length(tracks)
     [ distance, time ] = ComputeTrackStats(tracks(i));
     if (time > 0)
         speed = distance / time;
     end
     
    % Convenience variables
    lat = [tracks(i).waypoints.lat];
    long = [tracks(i).waypoints.long];
    alt = [tracks(i).waypoints.alt];

    % Display a figure with four sub-areas of equal size.
    % Upper left: text statistics
    % Lower left: 3D view
    % Upper right: bird's eye view of the track
    % Lower right: elevation profile
    
    h = subplot(2,2,[1 2 3 4]);
    
    % Display the bird's eye view
    subplot(2,2,2);
    plot(long, lat);
    title('Overhead (north up)', 'fontweight', 'bold');
    xlabel('Longitude');
    ylabel('Latitude');
    
    % Display the elevation profile
    subplot(2,2,4);
    plot(alt);
    title('Elevation Profile (feet)', 'fontweight', 'bold');
    xlabel('Waypoint number');
    ylabel('Feet');
    
    
    % Display the 3D data
    subplot(2,2,3);
    plot3(long, lat, alt);
    axis tight;
    xlabel('Longitude');
    ylabel('Latitude');
    zlabel('Feet');
  
    minAlt = min(alt);
    for j=1:length(long)-1
        patch([long(j) long(j+1) long(j+1) long(j)], ...
              [lat(j) lat(j+1) lat(j+1) lat(j)], ...
              [alt(j) alt(j+1) minAlt minAlt], 'b');
    end
    
    title('3D Track Data', 'fontweight', 'bold');
    
    % Display the statistics
    subplot(2,2,1);
    axis off
    
    % Distance
    text(0, .85, ['Track length: ' num2str(distance) ' miles.']);
    
    % Time
    if (time <= 0)
        etime = 'Data not available.';
    else
        etime = [num2str(time) ' hours.'];
    end
    text(0, .75, ['Elapsed time: ' etime]);
    
    % Average speed
    if (time <= 0)
        aspeed = 'Data not available.';
    else
        aspeed = [ num2str(speed) ' miles/hour.'];
    end
    text(0, .65, ['Average speed: ' aspeed]);
    
    % Start and end points
    [deg min sec dir] = Decimal2Degrees(tracks(i).waypoints(1).lat, 'latitude');
    point = sprintf('%d\\circ %d" %4.2f'' %s', deg, min, sec, dir);
    text(0, .55, ['Start:']);
    text(.1, .45, point);
    [deg min sec dir] = Decimal2Degrees(tracks(i).waypoints(1).long, 'longitude');
    point = sprintf('%d\\circ %d" %4.2f'' %s', deg, min, sec, dir);
    text(.1, .35, point);

    n = length([tracks(i).waypoints(1).lat]);
    [deg min sec dir] = Decimal2Degrees(tracks(i).waypoints(n).lat, 'latitude');
    point = sprintf('%d\\circ %d" %4.2f'' %s', deg, min, sec, dir);
    text(0, .25, ['End:']);
    text(.1, .15, point);
    [deg min sec dir] = Decimal2Degrees(tracks(i).waypoints(n).long, 'longitude');
    point = sprintf('%d\\circ %d" %4.2f'' %s', deg, min, sec, dir);
    text(.1, .05, point);

    % Decorate the figure
    if (isempty(tracks(i).comment))
        title(['Track #' num2str(i) ' of ' num2str(length(tracks))], 'fontweight', 'bold');
    else
        title(['Track ' tracks(i).comment ' (' num2str(i) ' of ' num2str(length(tracks)) ')'], 'fontweight', 'bold');
    end
end

function [deg, min, sec, dir] = Decimal2Degrees(x, type)
% DECIMAL2DEGREES Convert a decimal degree to degrees, minutes, seconds

deg = floor(x);
min = 60 * (x - floor(x));
sec = 60 * (min - floor(min));
min = floor(min);

if (deg > 0)
    if (strcmp(type, 'latitude'))
        dir = 'N';
    elseif (strcmp(type, 'longitude'))
        dir = 'W';
    end
else
    if (strcmp(type, 'latitude'))
        dir = 'S';
    elseif (strcmp(type, 'longitude'))
        dir = 'E';
    end
end

deg = abs(deg);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -