Extract area of matrices (lat, lon, data) by shapefile. "Requested array exceeds the maximum possible variable size."
조회 수: 7 (최근 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에서 Matrices and Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!