- 积分
- 3
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2018-9-20
- 最后登录
- 1970-1-1
|
发表于 2019-10-21 20:10:15
|
显示全部楼层
clc
clear
lon=ncread('pr_Amon_bcc-csm1-1_rcp45_r1i1p1_200601-209912.nc','lon');% 读取NC数据的经度数据
lat=ncread('pr_Amon_bcc-csm1-1_rcp45_r1i1p1_200601-209912.nc','lat');% 读取NC数据的纬度数据
pr=ncread('pr_Amon_bcc-csm1-1_rcp45_r1i1p1_200601-209912.nc','pr'); %读取NC数据的降水数据
time=ncread('pr_Amon_bcc-csm1-1_rcp45_r1i1p1_200601-209912.nc','time');% 读取NC数据中时间变量
prdata=permute(pr,[2 1 3]);% 交换第一维和第二维的位置,目的是使pr得各维的长度相同(64*128*1128),为下一步进行三维数据插值做准备
[lon1,lat1,time1]=meshgrid(lon,lat,time);% 生成转换前的矩阵格点网 精度为2.8125°*2.8125°
[lon2,lat2,time2]=meshgrid((46.75:0.5:86.75),(35.75:0.5:55.25),time);% %生成转换后的目标格点网 0.5°* 0.5°
pre=interp3(lon1,lat1,time1,prdata,lon2,lat2,time2);% 通过三维插值函数,将分辨率为2.8125°*2.8125°的数据插值到分辨率为 0.5°* 0.5° 的经纬网格上,生成目标文件pre
Coordinates = xlsread( 'coordinates.xlsx',1,'A1: B1841');% 从EXCEL中读取已有的坐标文件,命名为Coordinates.
lonlist=(46.75:0.5:86.75);% 定义目标区域的经度范围 东经 46.75~86.75 分辨率为 0.5°
latlist=(35.75:0.5:55.25);% 定义目标区域的纬度范围 北纬 35.75~55.25 分辨率为 0.5°
[lon1,lat1]=meshgrid(lonlist,latlist);% 生成一个完整的目标区域经纬度格点网。
preCA= zeros(size(pre,3),size(Coordinates,1) );% 生成一个行数为size(pre,3)[实际为pre的页的长度,为累计的月份数,1128个月];生成格点数size(Coordinates,1)个列,精度为Double类 0矩阵
for i= 1: size(Coordinates,1)% 建立循环
CALonLat=Coordinates(i,:);% 逐行读取坐标数据中每个格点的经纬度数据
[x1,y1] = find(lon1 == CALonLat(1) & lat1 == CALonLat(2));% 查找每个格点在降水数据中的索引值
preCA(:,i) = squeeze(pre(x1,y1,1:1128));% 通过索引值提取每个格点对应的降水数据;一个格点为一列,逐列生成。
end
save('preCA.mat', 'preCA');% 数据提取完毕,保存为mat文件 |
|