Matlab用shp文件对数据进行剪裁

该博客介绍了如何在Matlab中利用inpolygon函数结合shp文件对地理位置数据进行裁剪。函数shpjc通过读取shp文件路径,根据经纬度信息生成掩模矩阵,并应用到数据上进行区域平均计算。当数据格式为lon×lat×time或lat×lon×time时,函数能够灵活处理并返回剪裁后的数据和区域平均值。注意,如果shp文件包含多个图层,可能需要进一步处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matlab小工具
最主要的用的是inpolygon函数 (位于多边形区域边缘内部或边缘上的点)
使用之前要自己制作好相关的数据

  1. 处理数据
  2. 制作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

测试:
在这里插入图片描述

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值