MATLAB Answers

How to create 3D matrix from geographic coordinates?

17 views (last 30 days)
Miguel L
Miguel L on 4 Oct 2017
Commented: Aristo Pacino on 25 Jul 2021
Hello guys!
I was trying to figure out how to find the solution for this issue, however I can't find the answer and I would like to ask for the workaround.
I have 5 daily measures of wind (zonal wind) at 2550 sampling points with known geographic coordinates. In order to perform an analysis, I need to create a 3D matrix of this dimensions: ~51 x ~50 x 5.
The spatial order of the data (wind measured in 5 days) should be according to the latitude and longitude data of the sampling points, which corresponds to ~51 rows x ~50 columns (2550 sampling points). The approximately sign at rows and columns is because I don't know the exact distributions of the grid, but I assume that would be more or less in such a way. Sorry for the above.
I attach to this message the files of latitude and longitude (lat and lon, respectively), as well as the wind data.
I really appreciate your support.
Miguel

Answers (1)

KSSV
KSSV on 4 Oct 2017
load lon.mat ;
load lat.mat ;
load data.mat ;
plot(lon,lat,'.r')
nx = 51 ; ny = 50 ; nt = size(data,2) ;
x = linspace(min(lon),max(lon),nx) ;
y = linspace(min(lat),max(lat),ny) ;
[X,Y] = meshgrid(x,y) ;
wind = zeros(ny,nx,nt) ;
for i = 1:nt
F = scatteredInterpolant(lon,lat,data(:,i)) ;
wind(:,:,i) = F(X,Y) ;
end
  3 Comments
Aristo Pacino
Aristo Pacino on 25 Jul 2021
Hi @KSSV, what if I want hourly average of data, what should I change within for loop? Below is my function which I want to add. hour and temp is array nx1 of same dimension
[ah,~,ch] = unique(hour,'rows');
out_hour = [ah,accumarray(ch,temp,[],@nanmean)];

Sign in to comment.

Products

Community Treasure Hunt

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

Start Hunting!