Extract area of matrices (lat, lon, data) by shapefile. "Requested array exceeds the maximum possible variable size."
    5 views (last 30 days)
  
       Show older comments
    
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!
0 Comments
Answers (1)
  KSSV
      
      
 on 31 Jan 2023
        
      Edited: KSSV
      
      
 on 31 Jan 2023
  
      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
  KSSV
      
      
 on 31 Jan 2023
				I got the question....the given code should work. Offcourse buffer is not in there. 
See Also
Categories
				Find more on Data Import and Analysis in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



