Matlab 处理lt6文件生成每条轨迹数据(按天存储)

首先,我们看一下lt6文件的存储内容和格式:

因为文件较多还需要动态生成文件夹和文件重命名:

% 按轨迹提取坐标点

% 提取LT6文件的三维坐标数据,按每一条轨迹数据为单位存储

disp('开始提取坐标值!!!')

for i = 1:5

    % 将char型数据转换为字符串
    temp_i = num2str(i);
    
    % 根目录(相对路径)
    root_str = 'wh_data/';
    
    % 动态更新文件夹名称
    folder_name = 'SFO2006Q1-';
    
    % 完成更新后的文件夹名称
    temp_str = strcat(folder_name,temp_i);
    
    % 拼接字符串,存储文件的相对路径
    relative_path = strcat(root_str,temp_str);
    
    % 遍历文件夹下的文件
    file = dir(relative_path);
    len = length(file);
    
    % 循环条件的设置是因为文件中开始和结束都有其它不同的文件
    for j = 3:len-2
        
        % 在此循环开始打开每一个文件,利用extact_track_txt函数进行三维坐标信息的提取
        
        % 取出每一个lt6文件的文件名称
        file_txt_name = file(j).name;
        
        % 字符串分割
        temp = split(file_txt_name,'.');
        
        % 每一个lt6文件的相对路径
        a = strcat('/',file_txt_name);
        path = strcat(relative_path,a);
        
        % 调用提取txt文件中三维坐标点的函数extact_track_txt
        [lines,row,Total] = extract_track_txt_new(path);
        
        % 存储的名称为‘*.mat’
        % store_name = strcat(temp{1,1},'.mat');
        
        save(['mat数据\',temp{1,1}],'Total');
   
    end
    
end

其中,需要一个打开txt文件的函数extract.m(function):

function [lines,row,Total] = extract_track_txt_new(path)

% 提取lt6文件中三维空间坐标点

% path:提取的文件路径

% every_lt6:里面存储的是三维空间坐标点

      % 打开文件(以下的路径方式都可以打开)
      % f = fopen('.\wh_data\SFO2006Q1-1\20060101.lt6');
      % f = fopen('wh_data\SFO2006Q1-1\20060101.lt6');
      
      % 打开文件
      file_id = fopen(path);

      % 存放每一个lt6文件的三维坐标点的mat矩阵
      every_lt6 = {};
      
      % 初始化文件行数
      lines = 0;
      
      % 存储矩阵every_lt6的行数
      row = 1;
      
      % 航班号
      n_track = 0;
      
      % 控制变量
      flag = 1;
      % feof:检测是否是文件末尾
      while ~feof(file_id)
          
          % 读取每一行
          file = fgetl(file_id);
          
          % 当某个字符串中包含TRACK字符,在第二次出现TRACK字符之前,这就是一条独立的轨迹
          if contains(file,'TRACK')
              
              % 更新存储矩阵的行号
              n_track = n_track + 1;
              % 提取出的字符串存储在元组中
              track_name = textscan(file,'%s');
              
              % 需要将其拼接成航班号%%%%%
              track_name = strcat(track_name{1,1}{1,1},track_name{1,1}{2,1});
              
              % 存储
              Total(n_track).flight = track_name;
              
              if   flag ~= n_track
                  
                  % 将点的数据赋值给上一行
                  Total(n_track-1).track = every_lt6;
                  % 重置参数
                  every_lt6 = {};
                  row = 1;
                  flag = flag + 1;
              end
              
              % 更新lt6的总行号
              lines = lines + 1;
 
          % 只有三维坐标点的行中有行号,其余都没有,所以判断有没有逗号作为判断条件
          elseif contains(file,',')

                  % 读取每一行的三维坐标点
                  content = textscan(file,'%d %d %d %d %d','Delimiter',',');
                  
                  % 将每一维坐标从cell中取出,放入到矩阵中
                  for i = 1:3
                      
                      every_lt6{row,i} = content{1,i};
                      
                  end

                  % 更新存储矩阵的行号
                  row = row + 1;

                  % 更新lt6的总行号
                  lines = lines + 1;
           else
                  % 更新行号
                  lines = lines + 1;
          end
           
          
      end
       

      Total(n_track).track = every_lt6;
       
      % 关闭文件
      fclose(file_id);
      
end

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值