matlab:将小数组 latitude/longitude 拆分为一个大数组的各个网格单元

matlab: splitting small arrays by latitude/longitude into individual grid cells of one large array

我有多个覆盖不同 latitudes/longitudes 的卫星轨道路径,但都以相同的总体 lat/lon 网格(下图)为界。我试图将每个轨道路径的数据拆分到大网格的相应 0.5x0.5o lat/lon 单元格中。

例如,我正在查看穿过波弗特海的单个卫星轨道,总 lat/lon 边界如下:

lat = [82:-0.5:68];   
lon = [-118:-0.5:-160];   

我有 88 个轨道文件,涵盖了波弗特海上空的不同轨道。来自每个轨道轨道的纬度、经度和数据存储在单独的单元格中。一个轨道路径的示例:

lat{16,1} = [68.751 68.749 68.746 68.743 68.740 68.738 68.735 68.732 68.729 68.726];  
lon{16,1} = [-118.002 -118.006 -118.009 -118.013 -118.016 -118.020 -118.023  
 -118.027 -118.030 -118.034];
data{16,1} = [0 0 0 0 0 1 0 0 0 0; 0 0 0 0 1 1 1 1 1 0; 0 0 0 1 1 1 0 0 0 0];  
% data is stored in height x location  
% each 1 is a cloud, each 0 is clear air  

每个数据数组的长度不同,因为每个轨道路径穿过不同数量的位置,但具有相同数量的高度。 我想要的是根据相应的 lat/lon 拆分每个数据数组的列,并将每个数据列放入 Beaufort 上正确的 0.5x0.5o 网格单元海。然后我将 'clouds' 的数量除以每个位置的计数总数并取平均值以找到每个网格单元内的云分数,但我可以在所有内容正确网格化后计算出来。

因此,例如,如果网格单元的边界为 68.75-68.73oN 和 118.01-118.03oW,则数据第 4-8 列最终会出现在该网格单元格中,因为它们 lat/lon 落在网格边界内。

如有任何帮助或提示,我们将不胜感激!

谢谢, 亚伦

假设您想要每个网格单元格的平均值,请查看 MathCentral 上的 this 线程。

大纲如下:将数据中的坐标四舍五入为某个正整数,例如round(x/edgelenth-min(X))+1round 确保它是一个整数,edgelength 是一些变量,如果你想要半度单元而不是 1 度,你可以设置,min(X) 将原点移动到 0 和 +1 使它以 1 结束,因为 MATLAB 不能使用零索引。您可以对 y 或 LAT,LON 使用相同的方法。

然后您可以使用 sparse(lat,lon,z) 对这些四舍五入的值进行分组,其中 z 是数据(我在这里假设身高)。或者,如果您想提取更多信息,请使用 accumarray,例如标准偏差:

datastd = accumarray([LAT LON],z,[],@std,[],issparse);

我在包含大约 800M LAT/LON 组合的数据集上使用这种技术,在大约 5 分钟内在一个边长为 0.5 米、总大小为 1x1 公里的网格上。