在MATLAB中加入地理参考矩阵

时间:2018-06-11 15:20:34

标签: matlab matrix geolocation raster

我有两个地理参考矩阵(网格化气候数据集),我想加入不同的空间范围和分辨率(即地球表面上一个像素的空间覆盖范围)。我们称他们为referenceMatrixtargetMatrix。矩阵可以作为geotiffs加载到MATLAB中,或者只加载矩阵,每个像素具有相应的纬度/经度网格。

我想要的是使用NaN中的相应值填充targetMatrix - referenceMatrix中的像素。我可以使用for - 循环逐个查看像素,并使用NaN中的数据填充targetMatrix中的referenceMatrix基于最近的像素。我在这里描述了用于定位空间中最近像素的方法:
How to find the nearest points to given coordinates with MATLAB?

但是我需要用数千个矩阵来完成这个任务,并且for - 循环太慢了。因此,我想使用逻辑索引,例如,

targetMatrix(isnan(targetMatrix)) = referenceMatrix(isnan(targetMatrix))

具有根据纬度和经度匹配矩阵中像素的附加功能。你们中的任何人都可以指出一个方向,根据它们的地理参考比较不同程度的矩阵吗?

下的输入数据和想要输出的示例
targetMatrix = [1,  NaN, 3; 
                NaN, 5,  6]; 
referenceMatrix = [10, 20, 30, 40; 
                   50, 60, 70, 80]; 
referenceLatitude = [13.3, 13.3, 13.3, 13.3; 
                     14.1, 14.1, 14.1, 14.1]; 
referenceLongitude = [3.2, 4.2, 5.2, 6.2; 
                      3.2, 4.2, 5.2, 6.2];  
targetLatitude = [13.4, 13.4, 13.4; 
                  13.9, 13.9, 13.9]; 
targetLongitude = [3.1, 3.6, 4.1; 
                   3.1, 3.6, 4.1]; 

wantedOutput = [ 1, 10, 3; 
                50,  5, 6];

所需的输出包含来自targetMatrix的原始值,其中NaN s填充了referenceMatrix中最近的(空格)值,即10 }和50

1 个答案:

答案 0 :(得分:1)

使用isnan查找要替换targetMatrix的条目。将纬度/经度从度数转换为弧度,然后使用sph2cart转换为笛卡尔坐标,以获得实际的测地距离。然后使用knnsearch 从参考坐标中找到最接近相关目标坐标的点的索引。使用这些索引从referenceMatrix中提取相关条目,并用它们替换NaN

nanent = isnan(targetMatrix);
[tarX, tarY] = sph2cart(targetLongitude*pi/180, targetLatitude*pi/180, 1);
[refX, refY] = sph2cart(referenceLongitude*pi/180, referenceLatitude*pi/180, 1);
tmptar = [tarY(nanent) tarX(nanent)];
tmpref = [refY(:) refX(:)];
ind = knnsearch(tmpref, tmptar);
wantedOutput = targetMatrix;
wantedOutput(nanent) = referenceMatrix(ind);

在这种情况下,在使用knnsearch之前将纬度/经度转换为笛卡尔坐标进行了测试 以加速knnsearch除此以外。

knnsearch默认找到欧几里德距离。您也可以使用pdist2 min而不是knnsearch(第6行)的组合来执行此操作。即。

[~, ind] = min(pdist2(tmptar, tmpref), [], 2);

或者你可以在第6行使用desearchn。即

ind = dsearchn(tmpref, tmptar);

knnsearch在这种情况下测试 dsearchn快。

knnsearchpdist2需要≥R2010a才能使用Stats和ML Toolbox。如果没有,请使用dsearchn
所有测试均由OP完成。