Это не самый эффективный способ для очень больших наборов данных, но он может работать для вас (или, по крайней мере, быть отправной точкой). Ниже двойные циклы по обоим наборам данных, находит расстояния между точками, сохраняет минимальный и номер строки набора сопутствующих данных, соответствующие минимальному расстоянию.
% set up dummy data to mimic UTM x,y (northing,easting) coordinates
x1 = randi([0,50000],20,1);
y1 = randi([-230000,420000],20,1);
x2 = randi([0,50000],12,1);
y2 = randi([-230000,420000],12,1);
% end set up
mydist = NaN(length(x1), 2); % pre-allocate
for ii = 1:length(mydist)
xa = x1(ii);
ya = y1(ii);
temp_dist = NaN(length(x2), 2);
for jj = 1:length(x2)
xb = x2(jj);
yb = y2(jj);
temp_dist(jj, 1) = sqrt((xa-xb)^2 + (ya-yb)^2); % if you have the Statistics Toolbox, you can just use pdist
temp_dist(jj, 2) = jj; % this is the row number in set2
[value, index] = min(temp_dist(:,1));
mydist(ii, 1) = value;
mydist(ii, 2) = temp_dist(index, 2);
end
end
mydist_table = array2table(mydist);
mydist_table.Properties.VariableNames = {'Clostest_Distance', 'Set2_RowNumber'};