How to find the corresponding points of interest on a lat/lon matrix?
    5 次查看(过去 30 天)
  
       显示 更早的评论
    
I have latitude (updownLat) and longitude (updownLon) coordinates for my points of interest.
I have a lon x lat grid of size 1440x121 covering my domain.
I have a 1440x121  matrix for the latitude at each grid cell (latMat).
I have a 1440x121  matrix for the longitude at each grid cell (lonMat).
I have 1440x121 matrix with pressure values at each grid cell (mslp1).
I want this:
    1) Matrix of size 1440x121 with the latitude values only at the coordinates of the points of interest and NaN elsewhere (latMatMask);
    2) Matrix of size 1440x121 with the longitude values only at the coordinates of the points of interest and NaN elsewhere (lonMatMask);
    3) Matrix of size 1440x121 with the pressure values only at the coordinates of the points of interest and NaN elsewhere (mslp1Mask);
    4) Vector of length(updownLat) with the pressure values at each point of interest (mslp1Arctic)
I wrote the following code that seems to be working but looks too long/complicated for what I am actually trying to do...
%% Load %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load('data.mat')
%variables:
%   -updownLat
%   -updownLon
%   -latMat
%   -lonMat
%   -mslp1
%% Main %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%convert matrix to vector
LatVec          = latMat(:); %vector form of the latitude matrix
LonVec          = lonMat(:); %vector form of the longitude matrix 
%index of points of interest
for k           = [1:length(updownLat)]
    matchingLat = find(LatVec == updownLat(k));         %find index of all matching lat for point of interest
    matchingLon = find(LonVec == updownLon(k));         %find index of  all matching lon for point of interest
    index(k)    = intersect(matchingLat,matchingLon);   %find the index of the single matching point
end
%transpose
indexArctic     = transpose(index);
%make new matrices
empty           = nan(1440,121); %create matrix of right size with only NaNs
%1)
latMatMask      = empty;
latMatMask(indexArctic) = updownLat;
%2)
lonMatMask      = empty;
lonMatMask(indexArctic) = updownLon;
%3)
mslp1Mask       = empty;
mslp1Mask(indexArctic) = mslp1(indexArctic);
%4)
mslp1Arctic = mslp1(indexArctic);
Thank you! :) 
0 个评论
采纳的回答
  Voss
      
      
 2022-1-13
        
      编辑:Voss
      
      
 2022-1-13
  
      S = load('data.mat');
[~,ridx] = ismember(S.updownLon,S.lonMat(:,1));
[~,cidx] = ismember(S.updownLat,S.latMat(1,:));
[n,m] = size(S.lonMat);
idx = sub2ind([n m],ridx,cidx);
latMatMask = NaN(n,m);
latMatMask(idx) = S.updownLat;
lonMatMask = NaN(n,m);
lonMatMask(idx) = S.updownLon;
mslp1Mask = NaN(n,m);
mslp1Mask(idx) = S.mslp1(idx);
mslp1Arctic = S.mslp1(idx);
figure();
imshow(~isnan(mslp1Mask));
0 个评论
更多回答(0 个)
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
