code
clear all;
close all;clc;
% 假设这是我们的原始数据,一个30x60的网格,表示经度和纬度
% 这里使用随机数创建一个示例矩阵,实际应用中应当使用真实的海拔高度数据
longitude = linspace(0, 180, 30);
latitude = linspace(-90, 90, 60);
data = rand(size(longitude, 1), size(latitude, 2)) * 1000; % 假设海拔范围在0到1000米之间
data1 = data;
% 转换为二维矩阵以便于插值
data = reshape(data, [], length(longitude));
data2 = rand(length(longitude), length(latitude)) * 1000;
longitude = longitude(:);
latitude = latitude(:);% 定义一些新的观测点的经纬度
% 这些经纬度不一定在原始数据的网格上
new_longitude = [0.25,45.75, 130.25]; % 示例经纬度
new_latitude = [-20.1, 70.3, 50.6];
%new_longitude = [0.25:80: 130.25]; % 示例经纬度
%new_latitude = [-20.1:30: 50.6];
figure; mesh(latitude,longitude ,data2);
% 使用 interp2 进行最近邻插值
% 因为新的观测点的经纬度不在原始网格点上,所以需要使用 'nearest' 方法
Z = interp2(latitude,longitude, data2, new_latitude,new_longitude, 'nearest');% 输出插值结果
disp('插值得到的海拔高度(米):');
disp(Z);% 绘制结果图
figure;
plot(longitude, data2(:,1), 'r*-', ...longitude, Z(:,1), 'bo-');
ylabel('经度');
legend({'原始数据', '最近邻插值'});
xlabel('经度');
title('最近邻插值示例');
grid on;%% 重复上述过程,对其余的经纬度坐标进行插值...
figure;
% plot3(latitude,longitude,data2);
mesh(latitude,longitude,data2);
% xlim([-30 -10]);ylim([-0 1]);
hold on;
% figure;
plot3(new_latitude,new_longitude,Z,'r*');
hold off;
result
figure:
in excel
point1 lat&lon as belows:
which is nearest to [-20.1,0.25]
point2 lat&lon as belows:
which is nearest to [70.3,45.75]
point3 lat&lon as belows:
which is nearest to [50.6,130.25]