资源简介

降雨雷达的时空匹配matlab代码,将获取到的风速数据与将于数据进行时空匹配,并验证奇数据准确性

资源截图

代码片段和文件信息

% 第二步,根据雷达数据时间找到分别在该时间前后的两个ECMWF数据文件,如14:05的雷达数据,则找到12:00和18:00的文件
% 第三步,根据雷达数据的经纬度,分别在两个文件中找到距离该位置最近的四个角经纬度数据,做反距离加权,这样可以得到两个值
% 第四步,将这两个值根据时间做反距离加权,就可以得到与雷达数据匹配的ECMWF数据(并没有完全按照这个要求来啊,好像也没事吧,反正结果就是好了)
% close all
% clear%还有专门的netcdf工具包。。。2021b之后的matlab版本可以不用安装了吧,只要用ncread就能读取了
% clc%nc文件转换成mat文件——save出去就是mat文件
% file2  =dir(‘E:\m\nc\‘);%第一个第二个出来是.和..
% buoy_4=load(‘buoy_012.dat‘);%包含了时分秒,波高m,公尺波浪周期s,最大浪高的浪向or风向or波向,用360°表示?
% 波高、波长、波周期、波向

fid=fopen(‘match_data2010_1.dat‘‘w‘);
% folder=‘E:\m‘;
% files=dir([folder ‘\*.hdf‘]);%也可以改写成folder=‘E:\m\‘;files=dir([folder ‘*.hdf‘]);的吧
% h=length(files);
filename=‘2A25.20100102.69110.7.hdf‘;%降雨雷达文件,先选用的是第2天的文件
hour=hdfread(filename‘Hour‘);
minute=hdfread(filename‘Minute‘);
lati=hdfread(filename‘Latitude‘);
longi=hdfread(filename‘Longitude‘);
[row ~] = size(longi);%此处赋值给‘column’的值似乎未使用。请考虑将其替换为~,因为后面单独定义了一个column
% for i=1:length(longi(:1))  
day=hdfread(filename‘DayOfMonth‘);

filename1=‘E:\m\nc\2010-1-00.nc‘;
u = ncread(filename1‘u10‘);
v = ncread(filename1‘v10‘);
ec00=sqrt(u.^2+v.^2);
EC00=ec00(::1);

filename2=‘E:\m\nc\2010-1-06.nc‘;
u6 = ncread(filename2‘u10‘);
v6 = ncread(filename2‘v10‘);
ec06=sqrt(u6.^2+v6.^2);
EC06=ec06(::1);

filename3=‘E:\m\nc\2010-1-12.nc‘;
u12 = ncread(filename3‘u10‘);
v12 = ncread(filename3‘v10‘);
ec12=sqrt(u12.^2+v12.^2);
EC12=ec12(::1);

filename4=‘E:\m\nc\2010-1-18.nc‘;
u18 = ncread(filename4‘u10‘);
v18 = ncread(filename4‘v10‘);
ec18=sqrt(u18.^2+v18.^2);
EC18=ec18(::1);

time=hour+minute/60;%这个时间是个数组,在执行到69行那个与或的语句时,就出错了,必须为一个整的数值,加个循环吧???
% if 0%-------------------------------------------------------------------------------------------------------------  
%%这部分是循环的,可以先不看吧。。。
% column = [17181921222425262829313233];%
a=hdfread(filename‘rainAve‘);
column=a(:[17181921222425262829313233]2);%写成这种格式吗?
% rain=a(:[17181921222425262829313233]2);%经纬度类似吧,下面原先写的是错的
% la=lati(:[17181921222425262829313233]);
    for i=1:row%把经纬度和时间分别取出来进行时空插值
        for j = 1:13%对应上面的13列之前是1:12
%             lat=
            lat = lati(icolumn(j));%索引超出矩阵维度,就是前面入射角对应的行列数没有写完整导致的
%下标索引必须为正整数类型或逻辑类型,问题就出在column(j)这里,看一看变量空间就发现要不是0(不是正数),要不是0.222(不是整数)
            lon = longi(icolumn(j));%???这里应该是longi吧,之前写的是lon = lati(icolumn(j));
%             警告:赋值给变量‘lat’‘lon’的值可能未使用,这是因为后面又定义了一个具体的经纬度值,这个循环是之后各个点的,可暂时不看
            time1 = time(i);%先不加分号吧,这样就能使时间变成了一个单独的数的形式了,而不是一整个数组了
%             if time1>=12 && time1<18
%             end

if time1<6%这里的time表示的是pr的啊,跟ecmwf的不一样,所以这部分还是不能省略掉
            dt1=time1;
            dt2=6-time1;
            ecdata1=EC00;
            ecdata2=EC06;
           elseif time1>=6 && time1<12%|| 和 && 运算符的操作数必须能够转换为逻辑标量值time必须是一个数,你这里都成数组了
               dt1=time1-6;
               dt2=12-time1;
               ecdata1=EC06;   
               ecdata2=EC12;
           elseif time1>=12 && time1<18
               dt1=time1-12;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4894  2018-07-25 11:33  shiyishi.m

评论

共有 条评论