MATLAB-CALIOP数据读取及根据经纬度范围计算距离

计算两个经纬度直接的函数

这里用到的是m_map包里带的distance函数,m_map的安装参考这个帖子MATLAB--m_map库的安装 - 简书 (jianshu.com)

lat_wh = 30.60; lon_wh = 114.05; 

earth_rad = 6371.004;                                    % 地球半径

dist_rad = distance(lat_1,lon_1,lat_2,lon_2);  % 计算两组经纬度之间的弧度

distance = dist_rad/180*pi*earth_rad;             % 根据弧长公式,弧度*半径=弧长

想根据经纬度范围选取目标城市的卫星过境数据,这里以L2的气溶胶廓线数据及武汉为例

将100km半径范围内的数据平均,有数据的时候输出为txt

%% 处理原始hdf文件,以武汉为中心,100km为搜索半径

%% daytime

clear;clc;

for iyear=2013:2013

    iyear

    path_dir = 'E:\CALIOP\profile\';

    filenames = ls([path_dir, num2str(iyear),'\*ZD_Subset.hdf']); %文件地址

%    filenames = ls([path_dir, num2str(iyear),'\*ZN_Subset.hdf']); %文件地址

    for ifile = size(filenames,1):size(filenames,1)

        file_name = [path_dir, num2str(iyear),'\',filenames(ifile,:)];

        info_L2 = hdfinfo(file_name);  % 读取hdf文件信息

        dsetsL1 = info_L2.SDS;        % 读取SDS信息,包括具体变量的名字

        % 读取具体变量

        Time= hdfread(file_name, 'Profile_Time'); % TAI时间,用秒记录

        lat = hdfread(file_name, 'Latitude');%纬度

        lon = hdfread(file_name, 'Longitude');%经度

        ext_532 = hdfread(file_name, 'Extinction_Coefficient_532');

        CAD    = hdfread(file_name, 'CAD_Score');

        qc_532  = hdfread(file_name, 'Extinction_QC_Flag_532');

        un_ext  = hdfread(file_name, 'Extinction_Coefficient_Uncertainty_532');

        % quality assurance

        ext_532(ext_532<0 | ext_532>1.25) = -9999; % 剔除明显异常值

        % CAD 在-100和-20之间,un_ext<10, qc_flag = 0,1,2,16,18

        for irow = 1:size(ext_532,1)

            for icol = 1:size(ext_532,2)

                if CAD(irow,icol,1)>=-100 & CAD(irow,icol,1)<=-20 & un_ext(irow,icol)<=10 ...

                        & (qc_532(irow,icol) == 0 | qc_532(irow,icol) == 1 | qc_532(irow,icol) == 2 | qc_532(irow,icol) == 16 | qc_532(irow,icol) == 18)

                    ext_532_final(irow,icol) = ext_532(irow,icol);

                else

                    ext_532_final(irow,icol) = -9999;

                end

            end

        end

        % 计算所有格点到武汉的距离

        earth_rad = 6371.004;

        lat_wh = 30.60; lon_wh = 114.05;

        dist = distance(lat_wh,lon_wh,lat(:,2),lon(:,2))/180*pi*earth_rad;

        % 挑选100km范围内的数据

        index_cir = find(dist<=100);

        ext_532_final(ext_532_final==-9999)=nan;

        if length(index_cir)>1

            ext_532_avg = nanmean(ext_532_final(index_cir,:),1);

            ext_532_avg(isnan(ext_532_avg))=-9999;

            output_filename = [file_name(end-31:end-28) file_name(end-26:end-25) file_name(end-23:end-22) '_WH_ext532.csv'];

            csvwrite(strcat('S:\2.研究方向Ongoing\1.两湖地区\CALIOP卫星\out_daily_wh_150km\daytime_',output_filename), ext_532_avg');

%            csvwrite(strcat('S:\2.研究方向Ongoing\1.两湖地区\CALIOP卫星\out_daily_wh_150km\nighttime_',output_filename), ext_532_avg');

        end

    end

end

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容