给出了四川省 18 个地级市、3 个自治州及其医院的经纬度位置坐标如何求出四川省内一坐标到所有这些地方的距离最短数学建模matlab
步骤如下:
-
将四川省 18 个地级市、3 个自治州的经纬度位置坐标存储在一个矩阵中,记为 matrix,其中每行为一个城市或自治州的经纬度坐标。
-
设定一个目标坐标点,记为 target,表示需要求距离最短的坐标点。
-
计算目标坐标点与 matrix 中每个城市或自治州的距离,可使用 Haversine 公式进行计算,将结果存储在一个距离向量中,记为 distance。
-
找到 distance 向量中最小值,即为目标坐标点到最近城市或自治州的距离。
-
找到 distance 向量中最小值对应的位置,即为目标坐标点距离最近的城市或自治州的位置。
-
输出该城市或自治州的名称及其经纬度坐标,以及目标坐标点与该城市或自治州的距离。
MATLAB 代码如下:
% 城市及自治州的经纬度位置坐标 matrix = [30.572815, 104.066800; 29.562800, 106.552780; 30.679940, 104.067923; 31.467450, 104.679114; 30.048318, 103.958732; 30.795281, 106.084738; 28.769675, 104.572928; 30.049520, 101.961199; 31.214013, 107.467880; 31.131140, 104.370268; 30.305018, 102.033575; 27.882960, 102.267467; 30.413271, 103.462489; 30.000000, 103.000000; 29.355530, 101.778228; 31.899413, 102.221374; 26.580886, 101.343105; 30.041590, 103.858862; 28.962719, 105.444722; 30.126227, 105.702746; 26.580886, 104.852463; 29.648939, 103.761263; 27.300601, 105.291643; 28.871810, 105.441790; 28.882889, 105.304113; 30.359780, 97.008522; 26.897570, 100.231647; 30.800965, 106.930480];
% 目标坐标点 target = [30.000000, 103.000000];
% 计算距离向量 R = 6371; % 地球半径 lat1 = deg2rad(target(1)); lon1 = deg2rad(target(2)); lat2 = deg2rad(matrix(:, 1)); lon2 = deg2rad(matrix(:, 2)); dlat = lat2 - lat1; dlon = lon2 - lon1; a = sin(dlat/2).^2 + cos(lat1).cos(lat2).sin(dlon/2).^2; c = 2atan2(sqrt(a), sqrt(1-a)); distance = Rc;
% 找到最小值及其位置 [min_distance, min_index] = min(distance);
% 输出结果 if min_index <= 18 disp(['距离 ' num2str(matrix(min_index, :)) ' 最近的城市是:' num2str(min_distance) ' 公里']); else disp(['距离 ' num2str(matrix(min_index, :)) ' 最近的自治州是:' num2str(min_distance) ' 公里']); en
原文地址: https://www.cveoy.top/t/topic/dych 著作权归作者所有。请勿转载和采集!