Extract area of matrices (lat, lon, data) by shapefile. "Requested array exceeds the maximum possible variable size."
    조회 수: 5 (최근 30일)
  
       이전 댓글 표시
    
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
답변 (1개)
  KSSV
      
      
 2023년 1월 31일
        
      편집: KSSV
      
      
 2023년 1월 31일
  
      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
  KSSV
      
      
 2023년 1월 31일
				I got the question....the given code should work. Offcourse buffer is not in there. 
참고 항목
카테고리
				Help Center 및 File Exchange에서 Data Import and Analysis에 대해 자세히 알아보기
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




