%% 将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查看数据格式;文章来源地址https://www.toymoban.com/news/detail-551749.html
文章来源:https://www.toymoban.com/news/detail-551749.html
到了这里,关于matlab根据shp文件裁剪nc数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!