Extract area of matrices (lat, lon, data) by shapefile. "Requested array exceeds the maximum possible variable size."

Hi all,
I've got 3 matrices, lat, lon, data (8000 X 8192 each) and one shapefile (80 X 1 struct, attached).
I need to extract only the lat, lon, data within the shapefile boundaries (and possibily with an extra buffer radius around it, let'say 1km beyond the boundary).
I tried with the other answers on the forum (i.e., https://it.mathworks.com/matlabcentral/answers/281717-extract-data-by-shapefile ) , or for instance using inpolygon, etc:
S=shaperead('Shape.shp');
N = length(S) ;
for i = 1:N
plot(S(i).X,S(i).Y)
hold on
end
data = %MyData 8000x8192 ;
lat = %MyLat 8000x8192;
lon = %MyLon 800x8192;
[X,Y] = meshrid(lon,lat) ;
[nx,ny,d] = size(data) ;
%%Extract data
iwant = cell(d,N) ;
for i =1:d
A = data(:,:,i) ;
for j = 1:N
idx = inpolygon(X(:),Y(:),S(i).X,S(i).Y) ;
iwant{i,j} = A(idx) ;
end
end
However, when I try to make a meshgrid I belive I exceed the variable size, getting this error:
Error using repmat
Requested array exceeds the maximum possible variable size.
Error in meshgrid (line 61)
xx = repmat(xrow,size(ycol));
Is there a code you could suggest to obtain the desired result, and able to deal with the size of my matrix? The shape file covers only a tiny area (geographically speaking).
Thanks in advance!

Answers (1)

You need not to use meshgrid. Already your lon, lat values are in meshgrid. Remove these lines:
lat = %MyLat 8000x8192;
lon = %MyLon 800x8192;
[X,Y] = meshrid(lon,lat) ;
So your modified code should be:
S=shaperead('Shape.shp');
N = length(S) ;
for i = 1:N
plot(S(i).X,S(i).Y)
hold on
end
data = %MyData 8000x8192 ;
lat = %MyLat 8000x8192;
lon = %MyLon 800x8192;
X = lon ;
Y = lat ;
[nx,ny,d] = size(data) ;
%%Extract data
iwant = cell(d,N) ;
for i =1:d
A = data(:,:,i) ;
for j = 1:N
idx = inpolygon(X(:),Y(:),S(i).X,S(i).Y) ;
iwant{i,j} = A(idx) ;
end
end

3 Comments

Dear @KSSV thanks for your timely help. However, I got an output that I didn't expect:
I believe I didn't explain what I wanted correctly.
What I am after, is to create smaller matrices of lat, lon, and data, extracting only the values within the shapefile (and possibily with an extra buffer radius around it, let'say 1km beyond the boundary). I believe the output will contain some NaNs for the values out of the shapefile.
Something like that, for instance:
Thanks once again
I got the question....the given code should work. Offcourse buffer is not in there.
But the output is not a matrix, but a structure. Is there a way to obtain smaller matrices (lat, lon, data) instead? That would help a lot! thanks
Additionally, If i convert cell2mat (X = cell2mat(iwant);), I get an output where all the columns are the same:

Sign in to comment.

Categories

Products

Release

R2022b

Asked:

on 31 Jan 2023

Edited:

on 31 Jan 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!