matlab根据shp文件裁剪nc数据

%% 将NC数据文件按照SHP格式的边界进行提取
clear  % 清除变量
clc    % 清屏
%%
% 设置文件路径和文件名
ncFilePath = 'E:/photovoltaic/cmip6_data/history/tas_MMM.nc';
shpFilePath = 'E:/photovoltaic/中国七大地理分区shp/2020Chinashp/China7/dongbei.shp';
newNcFilePath = 'E:/photovoltaic/cmip6_data/historicalERA5/extracted_data.nc';

% 读取NC数据文件
ncData = ncread(ncFilePath, 'data');
t=ncread(ncFilePath,'time');

% 读取东北地区的SHP文件
shpStruct = shaperead(shpFilePath);

% 获取SHP文件的边界坐标
shpLat = [shpStruct.Y];
shpLon = [shpStruct.X];

% 确定提取区域的经纬度范围
latRange = [min(shpLat), max(shpLat)];
lonRange = [min(shpLon), max(shpLon)];

% 获取NC文件中的经纬度数据
latData = ncread(ncFilePath, 'lat');
lonData = ncread(ncFilePath, 'lon');

% 确定经纬度范围的索引
latIndices = find(latData >= latRange(1) & latData <= latRange(2));
lonIndices = find(lonData >= lonRange(1) & lonData <= lonRange(2));

% 提取对应区域的数据
extractedData = ncData(lonIndices, latIndices, :);

% 创建新的NC文件来保存提取的数据
newLatData = latData(latIndices);
newLonData = lonData(lonIndices);
nccreate(newNcFilePath, 'data', 'Dimensions', {'lon', numel(newLonData), 'lat', numel(newLatData),'z',360}, 'FillValue','disable');
nccreate(newNcFilePath, 'lon', 'Dimensions', {'lon', numel(newLonData)}, 'Format', 'classic');
nccreate(newNcFilePath, 'lat', 'Dimensions', {'lat', numel(newLatData)}, 'Format', 'classic');
nccreate(newNcFilePath,'time','Dimensions',{'z',360});

ncwrite(newNcFilePath, 'lon', newLonData);
ncwrite(newNcFilePath, 'lat', newLatData);
ncwrite(newNcFilePath,'time',t);
ncwrite(newNcFilePath, 'data', extractedData);

% 显示保存成功消息
disp('数据已从NC文件中提取并保存为新的NC文件。');

注意,当新建了nc文件但中途报错时需要把新建的文件删除重新跑;
我的nc数据是三维的,lonlattime,可以根据自己的数据维度对代码进行修改,可以通过ncinfo查看数据格式;

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值