matlab小工具
最主要的用的是inpolygon函数 (位于多边形区域边缘内部或边缘上的点)
使用之前要自己制作好相关的数据
- 处理数据
- 制作shp文件
更新:
3. pd这里可以按照数据格式选择(可以自己按照自己的数据格式修改)
4. 如果是 loc_mask = inpolygon (sjn(:,1), sjn(:,2), sl_shp.X, sl_shp.Y);报错,可能是sl_shp = shaperead(shppath);的shp文件读出来不止一个
function [msk_sj,qupj] = shpjc(jcsj,shppath,lon,lat,pd)
% 本函数用于对变量用shp文件进行剪裁 注:数据量大的时候速度较慢
% 2022-5-22 改于2023-4-17
% zg
% jcsj: 需要剪裁的数据 数据格式lon×lat×time
% shppath: shp文件的路径加文件名
% lon: 经度
% lat: 纬度
% pd: 当pd=1时数据格式lon×lat×time pd=2时数据格式lat×lonxtime
% output
% msk_sj: 输出的范围的数据
% qupj: 对shp范围中进行区域平均
sl_shp = shaperead(shppath);
[sjlon,sjlat]=meshgrid(lon,lat);
sjn(:,1)=reshape(sjlon,[length(lon)*length(lat),1]);
sjn(:,2)=reshape(sjlat,[length(lon)*length(lat),1]);
loc_mask = inpolygon (sjn(:,1), sjn(:,2), sl_shp.X, sl_shp.Y);
quy=reshape(loc_mask,[length(lat),length(lon)]);
nj=length(size(jcsj));
if nj>2
[~,~,nz]=size(jcsj);
for i=1:nz
if pd==1
msk_sj1=jcsj(:,:,i)'.*quy;
else
msk_sj1=jcsj(:,:,i).*quy;
end
msk_sj1(msk_sj1==0)=NaN;
qupj1=squeeze(nanmean(nanmean(msk_sj1,1),2));
msk_sj(:,:,i)=msk_sj1;
qupj(1,i)=qupj1;
end
else
if pd==1
msk_sj=jcsj'.*quy;
else
msk_sj=jcsj.*quy;
end
msk_sj(msk_sj==0)=NaN;
qupj=squeeze(nanmean(nanmean(msk_sj,1),2));
end
end
测试: