# Find mean value of grid cells found within a coarser grid cell

8 views (last 30 days)
mashtine on 1 May 2016
Hello,
I have two grid, one that is 121x97 (lat_1 & lon_1 in the attached data) and the other is 6x7 (coarser grid, lat_2 & lon_2 in the attached data). I have attached the longitudes and latitudes of the grid cells here. I am trying to find a method (fairly uncomplicated) to find exactly which grid cells of the finer grid are found in each of the coarser grids. I would then like to find their means so that the finer grid now becomes a 6x7 matrix of means from the finer grid.
I am not sure how to use the lat and lon values to find the means. For instance, if one of the coarse grid cells overlaps over 30 finer grid cells, I would like to get the mean of those 30 grid cells.
Hope this makes sense.

Image Analyst on 1 May 2016
Do you have a digital image, and can you somehow map lats and lons to actual rows and columns in the digital image? If you have that, then you can simply use blockproc.
Image Analyst on 2 May 2016
lat_1: [97x1 double]
lon_1: [121x1 double]
lat_2: [7x1 double]
lon_2: [6x1 double]
These are all different sizes. How are you plotting or visualizing these? Does it require the mapping toolbox (which I don't have)?

Chad Greene on 2 May 2016
I think this does what you want:
% Load sample data and create a sample Z1:
Z1 = round(100*(cosd((1:length(lat_1))'))*cosd(1:length(lon_1)));
% Get rows and columns:
r = interp1(lat_2,1:numel(lat_2),lat_1,'nearest','extrap');
c = interp1(lon_2,1:numel(lon_2),lon_1,'nearest','extrap');
[cg,rg] = meshgrid(c,r);
% Create a downsampled version of Z1 with accumarray:
Z1ds = accumarray([rg(:) cg(:)],Z1(:),[length(lat_2) length(lon_2)],@mean,NaN);
% Plot Z1 and downsampled Z1:
figure
subplot(1,2,1)
imagesc(lon_1,lat_1,Z1)
axis xy
subplot(1,2,2)
imagesc(lon_2,lat_2,Z1ds)
axis xy 