请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5824|回复: 7

[源程序] MATLAB 处理中国自动站与CMORPH融合的逐时降水量0.1°网格数据,求帮助!

[复制链接]

新浪微博达人勋

发表于 2019-1-30 11:22:33 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
刚学习MATLAB,想用他处理中国气象科学数据共享服务网下载了“中国自动站与CMORPH融合的逐时降水量0.1°网格数据集(1.0版)数据(如SEVP_CLI_CHN_MERGE_CMP_PRE_HOUR_GRID_0.10-2017070600.grd),从文件中提取某一范围的数据,自己学写了代码:
clear
clc
fid = fopen('E:\Satalite\SEVP_CLI_CHN_MERGE_CMP_PRE_HOUR_GRID_0.10-2017070600.grd','rb');
data0=fread(fid,[700,440]);
fclose(fid);
sENlat=15;
sENlon=70;

lat = 31:-0.1:30;%27.5;%纬度范围(间隔0.1°)
lon =105:0.1:106.5;%11;%经度范围(间隔0.1°)
%% 按经纬度范围获取数组
SS = (min(lat)-sENlat)*10+1;%数组北侧;
NN = SS + (max(lat)-min(lat))*10;%数组南侧;
EE = (min(lon)-sENlon)*10+1;%数组西侧;
WW = EE + (max(lon)-min(lon))*10;%数组东侧;
data1=data1(EE:WW,SS:NN);

% rewrite for txt %%输出到txt文件中
fid = fopen('E:\Satalite\Rain_H.txt', 'wt');
[m,n]=size(data1);
for i=1:1:m
for j=1:1:n
if j==n
fprintf(fid,' %d\n',data1(i,j));
else
fprintf(fid,' %d\t',data1(i,j));
end

但得到的结果如下:
121         121         121         121         121         121         121         121         121         121         121
196         196         196         196         196         196         196         196         196         196         196
0         0         0         0         0         0         0         0         0         0         0
192         192         192         192         192         192         192         192         192         192         192
121         121         121         121         121         121         121         121         121         121         121
196         196         196         196         196         196         196         196         196         196         196
0         0         0         0         0         0         0         0         0         0         0
192         192         192         192         192         192         192         192         192         192         192
121         121         121         121         121         121         121         121         121         121         121
196         196         196         196         196         196         196         196         196         196         196
0         0         0         0         0         0         0         0         0         0         0
192         192         192         192         192         192         192         192         192         192         192
121         121         121         121         121         121         121         121         121         121         121
196         196         196         196         196         196         196         196         196         196         196
0         0         0         0         0         0         0         0         0         0         0
192         192         192         192         192         192         192         192         192         192         192

肯定不对,求高手帮助!

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-31 15:14:57 | 显示全部楼层
问题解决了!!!!!!!!!!!!!!!!!!!!!

%%%  ******* 说明  ***********
%%%  从处理中国自动站与CMORPH融合的逐时降水量0.1°网格数据 sevp..........grd格式文件中批量提取所需范围的数据,并存放到txt文件中
%%% 程序设计  563471645@qq.com
%%% 2019.01.30
%%% ********************************
clear
clc
for Yea=2017:2017
for Mon=7:7
for Da=6:6%eomday(Yea,Mon)
for Hou=0:0%23
YeaMon0=strcat(sprintf('%04d',Yea),sprintf('%02d',Mon));
YMDH=strcat(YeaMon0,sprintf('%02d',Da),sprintf('%02d',Hou));
Dat_Filename=strcat('j:\Rain_H\',YeaMon0,'\SEVP_CLI_CHN_MERGE_CMP_PRE_HOUR_GRID_0.10-',YMDH,'.grd');%数据源
fid=fopen(Dat_Filename,'r','l','utf-8');
fseek(fid,0,'bof');
data0=fread(fid,700*440,'float');
data=reshape(data0,[700,440]);
data=data';
fclose(fid);
%%%%%%%% 取所需范围的数据 %%%%%%%%%%%%%%%%
sENlat=15;
sENlon=70;
data=data';
lat = 31:-0.1:30;%32.5:-0.1:27.5;%纬度范围(间隔0.1°)
lon =105:0.1:106;%104.5:0.1:110.5;%11;%经度范围(间隔0.1°)
%% 按经纬度范围获取数组
SS = (min(lat)-sENlat)*10+1;%数组北侧;
NN = SS + (max(lat)-min(lat))*10;%数组南侧;
EE = (min(lon)-sENlon)*10+1;%数组西侧;
WW = EE + (max(lon)-min(lon))*10;%数组东侧;
data1=data(EE:WW,SS:NN);
data1=data1';
% rewrite for txt %%输出到txt文件中
fid = fopen('E:\Satalite\Rain_H.txt', 'wt');
%%data1=data1;
[m,n]=size(data1);
for i=m:-1:1
for j=1:1:n
if j==n
fprintf(fid,' %g\n',round(data1(i,j)));
else
fprintf(fid,' %g\t',round(data1(i,j)));
end
end
end
fclose(fid);
End
End
End
End

密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2019-1-30 15:24:25 | 显示全部楼层
怎么不对了,大部分格点降水一般就是0啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-30 16:47:46 | 显示全部楼层
用GRADS处理的结果市:
      1        0        0        0        0        0        0        0        0        0        0

      1        0        0        1        0        0        0        0        0        0        1
       3        1        1        1        1        0        2        2        2        2        2

       3        3        4        4        4        4        8       11       7        4        4
       4        8       11       10       8        8       11      15       7        9        6

       3        8       12       10       7        7        5        8        8       12       10
       1        3       11       17       14      16       8       10      14      14       12
       0        1        3        11       15      15       9        8        6        6        5
       0        0        1         5        6        9        9        8        4        2        1
       0        0        1         2        3        4        6        8        4        1        1

       0        0        1         2        2        4        5        9        6        2        1

这与作图出来的结果才一致
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-30 16:50:39 | 显示全部楼层
Wetter,请问有处理该类资料的matlab 代码吗,可以共享不?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-30 18:08:59 | 显示全部楼层
仔细看看代码把 可能网格数据读进去要旋转翻转之类的
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-2-1 09:37:53 | 显示全部楼层
End
End
End
End

应小写为
end
end
end
end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-6-13 09:37:12 | 显示全部楼层
本帖最后由 烟雨晚 于 2019-6-14 20:30 编辑

想问下里面为啥转置了3次~~~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表