批量特征点提取

 

代码会遍历指定路径下所有以.csv结尾的文件,并对每个文件进行如下操作:

  1. 读取csv文件中的经度(Longitude)和纬度(Latitude)列的数据。
  2. 计算相邻两个航线点之间的距离,并根据设定阈值将一段航线划分为特征点。
  3. 从划分的特征点中选取二十个左右的点进行输出。
  4. 将每个文件的特征点的坐标和其他数据导出到新的.csv文件中。
% 设置输入文件夹路径
input_folder_path = 'C:/HM14/';

% 定义输出的文件夹路径
output_folder_path = 'D:\新建文件夹\';

% 获取输入文件夹中所有csv文件的文件名
file_names = dir([input_folder_path '*.csv']);

% 遍历每个csv文件
for i = 1:length(file_names)
    % 获取csv文件的全路径
    input_file_path = [input_folder_path file_names(i).name];
    
    % 导入csv文件数据
    data = readtable(input_file_path);

    % 获取经度(Longitude)和纬度(Latitude)列的数据
    lon = data.LON;
    lat = data.LAT;

    % 计算相邻两个航线点之间的距离
    distances = distance2gps(lat(1:end-1), lon(1:end-1), lat(2:end), lon(2:end));

    % 定义阈值,判断哪些点为航线的特征点
    threshold = 0.01; % 单位:海里
    feature_points = [1];
    for j = 2:length(lat)-1
        if distances(j-1) > threshold && distances(j) > threshold
            feature_points(end+1) = j;
        end
    end
    feature_points(end+1) = length(lat); % 加入最后一个点

    % 获取整条航线的二十个左右特征点
    num_feature_points = numel(feature_points);
    if num_feature_points <= 20 % 特征点少于20个的情况
        feature_indices = 1:num_feature_points;
    else % 特征点多于20个的情况
        interval = floor(num_feature_points/20);
        feature_indices = [1:interval:num_feature_points];
        if feature_indices(end) ~= num_feature_points
            feature_indices(end+1) = num_feature_points;
        end
    end

    % 获取当前处理的csv文件名
    [~, file_name, ~] = fileparts(input_file_path);

    % 定义当前csv文件对应的输出文件路径
    output_file_path = [output_folder_path file_name '.csv'];

    % 导出特征点的坐标和其他数据到csv文件中
    writetable(data(feature_points(feature_indices),:), output_file_path);
end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值