如何使用 MATLAB 找到距给定坐标最近的点?

2023-12-05

我需要用 Matlab 解决一个最小化问题,我想知道哪个是最简单的解决方案。我一直在考虑的所有潜在解决方案都需要大量的编程工作。

假设我有一个纬度/经度坐标点(A,B),我需要的是在纬度/经度坐标地图中搜索距离该点最近的点。

特别是,纬度和经度数组是两个 2030x1354 元素(距离 1km)的矩阵,其想法是在这些矩阵中找到最小化到坐标(A,B)的距离的唯一索引,即找到最接近的值到给定的坐标(A,B)。

任何帮助将不胜感激。

Thanks!


这总是一件有趣的事:)

首先:Mohsen Nosratinia 的答案是可以的,只要

  • 你不需要知道实际距离
  • 你可以绝对保证你永远不会靠近极地
  • 并且永远不会接近±180°子午线

对于给定的纬度,-180° 和 +180° 经度实际上是相同点,因此仅仅查看角度之间的差异是不够的。在极地地区,这将是一个更大的问题,因为那里较大的经度差异对实际距离的影响较小。

球坐标对于导航、绘图等目的非常有用和实用。然而,对于空间计算,例如您尝试计算的表面距离,球坐标实际上使用起来相当麻烦。

虽然它是possible直接使用角度进行这样的计算,我个人并不认为很实际的:您通常必须在球面三角学方面拥有深厚的背景,并且具有丰富的经验才能知道它的许多陷阱 - 通常存在您需要解决的不稳定性或“特殊点”(例如,极点),您需要象限模糊性由于您引入的三角函数等而需要考虑。

我在大学里学会了做这一切,但我也了解到球面三角方法经常引入复杂性,数学上说起来并不严格要求,换句话说,球面三角是not根本问题的最简单表示。

例如,如果将纬度和经度转换为 3D 笛卡尔坐标系,距离问题就变得微不足道了X,Y,Z坐标,然后通过简单的公式求出距离

距离 (a, b) = R·arccos(a/|a| · b/|b| )

where a and b是球面上的两个这样的笛卡尔向量。请注意|a| = |b| = R, with R = 6371地球的半径。

在 MATLAB 代码中:

% Some example coordinates (degrees are assumed)
lon = 360*rand(2030, 1354);
lat = 180*rand(2030, 1354) - 90;

% Your point of interest
P = [4, 54];

% Radius of Earth
RE = 6371;

% Convert the array of lat/lon coordinates to Cartesian vectors
% NOTE: sph2cart expects radians
% NOTE: use radius 1, so we don't have to normalize the vectors
[X,Y,Z] = sph2cart( lon*pi/180,  lat*pi/180, 1);

% Same for your point of interest    
[xP,yP,zP] = sph2cart(P(1)*pi/180, P(2)*pi/180, 1);

% The minimum distance, and the linear index where that distance was found
% NOTE: force the dot product into the interval [-1 +1]. This prevents 
% slight overshoots due to numerical artifacts
dotProd = xP*X(:) + yP*Y(:) + zP*Z(:);
[minDist, index] = min( RE*acos( min(max(-1,dotProd),1) ) );

% Convert that linear index to 2D subscripts
[ii,jj] = ind2sub(size(lon), index)

如果您坚持跳过笛卡尔坐标转换并直接使用纬度/经度,则必须使用半正矢公式,如下所示在这个网站上例如,这也是使用的方法distance()从映射工具箱。

现在,这一切对整个地球都有效,provided你会发现光滑的球形地球的近似值足够准确。如果你想包括地球的扁率或一些更高阶的形状模型(或者上帝禁止,距离包括terrain),你需要做更复杂的事情。但我认为这不是你的目标:)

PS - 如果你把我所做的一切都写出来,我不会感到惊讶,你可能会重新发现半正弦公式。我只是更喜欢能够仅根据第一原理来计算一些简单的东西,例如沿着球体的距离,而不是根据很久以前植入您头脑中的一些黑匣子公式:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 MATLAB 找到距给定坐标最近的点? 的相关文章

  • 将 kinect RGB 和深度值转换为 XYZ 坐标

    我正在寻找一种简单的方法将 kinect RGB 和深度值转换为 XYZ 坐标 使用 MATLAB 我的目标是一个输入为以下内容的函数 每个点的 RGB 和深度值Kinect相机 并输出 每个点的 x y 和 z 值 RGB 深度 RGB
  • MATLAB 除法...29/128 应该返回 0 吗?

    我真的不认为这是一个精度问题 答案应该是0 226左右 这是确切的代码 val I i j bucketSize pos val bucketSize I只是我从中获取值的矩阵 以下是 MATLAB 的输出 val 29 bucketSiz
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • MATLAB 变量传递和惰性赋值

    我知道在 Matlab 中 当将新变量分配给现有变量时 会进行 惰性 评估 例如 array1 ones 1 1e8 array2 array1 的价值array1不会被复制到array2除非元素array2被修改 由此我推测Matlab中
  • 通过颜色渐变修补圆

    我正在尝试绘制一个颜色渐变 我希望它沿轴均匀 在下图由角度定义的情况下 pi 7 当我使用patch命令 绘图与所需的梯度方向匹配 但沿其方向并不均匀 沿圆的点之间形成各种三角形 这是代码 N 120 theta linspace pi p
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • 轴标注问题

    通过运行我编写的以下 matlab 函数 可以互换图中的 x 轴和 y 轴 谁能告诉我问题出在哪里或者帮我解决它吗 预先感谢您的任何帮助 function axislabeling n x 1 1 n y 1 1 n z zeros n n
  • 像matlab一样在python中连接数组而不知道输出数组的大小

    我正在尝试在 python 中连接数组 类似于 matlab array1 zeros 3 500 array2 ones 3 700 array array1 array2 我在 python 中做了以下操作 array1 np zero
  • 绘制布朗运动 matlab

    首先 我只想说我不太习惯使用matlab 但我需要一个作业 我应该创建一个 布朗运动 我的代码目前如下所示 clf hold on prompt Ge ett input size input prompt numParticles inp
  • MATLAB问题:在图块中引用变量的值[重复]

    这个问题在这里已经有答案了 可能的重复 matlab 绘图标题中的变量 https stackoverflow com questions 5629458 matlab variable in plot title 我想在图中引用 m 文件
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • matlab中优先级队列的实现方法

    matlab中有没有提供minpriorityqueue功能的库 import java util PriorityQueue import java util public class MyQueue Comparator
  • Matlab下降低图像质量

    问候 我正在尝试找到一种简单的方法来处理图像 以便将其质量从 8 位降低到 3 位 实现这一目标的最简单方法是什么 干杯 如果要线性缩放 只需将每个像素值除以 255 7 即 如果原始图像存储在矩阵 I 中 则让低分辨率图像 J I 255
  • 计算向量的导数

    我有以下函数 维维亚尼曲线 Phi t cos t 2 cos t sin t sin t 只需检查它是否有效 s linspace 0 T 1000 plot3 cos s 2 cos s sin s sin s 如何推导函数Phi 可能
  • 用于读取csv写入数组的c++程序;然后操作并打印到文本文件中(已经用 matlab 编写)

    我想知道是否有人可以帮助我 我正在尝试构建一个程序 从 csv 文件中读取大小未知的浮点数大数据块 我已经在 MATLAB 中编写了此代码 但想要编译和分发此代码 因此转向 C 我只是在学习并尝试阅读本文以开始 7 5 19892 4 23
  • matlab中简单正弦波的傅里叶变换

    我尝试显示简单正弦波的频谱 因为我们知道具有固定频率的单个正弦波必须在其频谱中出现峰值我编写了这段代码 但我无法得到这个峰值我的代码中有什么问题 clc nsteps 200 number of signal elements in tim
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • Python 中的 eig(a,b) 给出错误“需要 1 个位置参数,但给出了 2 个”

    根据https docs scipy org doc numpy 1 15 0 user numpy for matlab users html https docs scipy org doc numpy 1 15 0 user nump
  • 了解 Matlab 中的 DEL2 函数以便用 C++ 对其进行编码

    为了用 C 编写 DEL2 matlab 函数 我需要了解该算法 我已经成功地为不在边界或边缘上的矩阵元素编写了函数 我已经看过几个有关它的主题 并通过输入 edit del2 或 type del2 来阅读 MATLAB 代码 但我不明白

随机推荐

  • Python 中按下按键时播放声音

    我正在编写一个Python脚本 其中每次按下按键时都会播放声音 我正在使用 Winsound 模块来播放声音 我想要这样的东西 import winsound while True if any key is being pressed R
  • 使用 const char*、to_string() 和 c_str() 时出现奇怪的输出

    我有一个程序使用to string转换一个int to a string 然后使用将其转换为 C 字符串string c str 它存储在一个数组中const char 当程序输出每个const char 结果并不出乎我的意料 对于下面的示
  • 将对象数组中的所有 null 更改为 '' (javascript)

    我有如下所示的对象数组 Object Results Array 3 Results Array 3 0 2 0 Object id null name Rick Value 34343 1 Object id 2 name null Va
  • 在 x 个字符后更改 CSS

    我里面有一个文本字符串td 如下 td This is a long line td 我想要做的是更改前七个字符之后所有字符的字体大小 现在我知道我可以执行以下操作 td This is span class different a lon
  • 在 DataGridView 中显示 SQL 结果的问题

    我试图在我的应用程序的数据网格视图中显示 SQL 查询的结果 下面的代码是我写的 但它似乎与我做什么无关 我无法在表单的 datagridview 中得到任何显示 有人能指出我正确的方向吗 code Sql SELECT FROM jobL
  • awk 中的矩阵加法

    我有一堆变量 如下所示 DURATION 1 57 DURATION 2 07 T0 10 T1 0 TX 0 T0 12 T1 0 TX 1 TC 1 IG 0 TC 2 IG 3 是否可以让 awk 处理这个结果 结果是 DURATIO
  • .NET 对象大小

    net 中堆分配对象的大小是多少 包括管理开销 我假设对象是沿着 4 字节边界分配的 还是使用了不同的方法 x86 上的 4 字节边界 x64 上可能有 8 字节边界 x86 上有 8 个字节的开销 用于类型引用和同步块 如果发现 x64
  • 关于 Express Request,Typescript 声明合并失败

    当我提出明确请求时 我收到此错误 error TS2339 Property test does not exist on type Request
  • Rails 3. 嵌套事务。子块中的异常

    为什么在子块中出现异常后 ActiveRecord 不回滚嵌套事务中的更改 以下是示例 1 gt gt Client transaction do gt Client create name gt Pavel gt gt Client tr
  • Dot net core 1 Tooling Preview 离线安装程序

    是否可以提供离线安装程序DotNetCore 1 0 1 VS2015Tools Preview2 谢谢 Lex Li答案 从以下位置下载在线安装程序here then 在同一文件夹中创建快捷方式 Add the layout开关 带空格
  • 过滤嵌套 JSON javascript

    我正在创建一个采用如下 JSON 的 API hightlights title Fun url fun index html queries music artists events internet title Internet url
  • 自定义元素的名称中是否需要破折号?

    是否可以命名您自己的自定义元素
  • 通过属性使用具有依赖属性的数据类

    例如 我有一堂课Circle 具有依赖属性 radius and circumference 使用a是有意义的dataclass这里是因为样板 init eq repr 和订购方法 lt 我选择一个属性依赖于另一个属性 例如周长是根据半径计
  • REDHAWK UHD 设备使用情况

    我已经成功安装了 UHD 设备以及 REDHAWK 版本 1 8 3 对我来说 如何将波形中的组件连接到设备管理器管理的设备并不明显 我也不清楚 IDL 接口和 USRP 设备上的数据端口之间的相互作用 我无法找到一个使用 USRP 设备发
  • 对 WPF 绑定中的值进行舍入

    我正在尝试实现一个进度条 顶部有一个文本框 也显示进度 然而 该百分比是小数 是否可以通过绑定对数据集中返回的值进行舍入 还是必须通过后面的代码来完成
  • EditText 没有捕获 ViewFlipper 的滑动?

    这太令人抓狂了 我有以下 XML 布局
  • Jaxen 是否仍得到积极支持/开发?

    Jaxen看起来像是一个不错的 可扩展的 XPath 项目 但它似乎没有被积极开发 也没有发布日期 即便是邮件列表网址已死 有人有这方面的信息吗 Jaxen仍在 Github 上积极开发
  • postgresql提取函数源码

    需要使用 SQL 提取 PostgreSQL 函数的源代码 我看到其中一个函数有这种奇怪的行为 所有其他函数 大约 200 都工作得很好 当我运行以下语句时 它有效 select prosrc from pg proc where pron
  • OSX 10.10 为什么 CUDA 7.5 认为我的驱动程序不足?

    我正在尝试在我的 Mac Pro 15 英寸 2009 年中 配备 GPU GeForce 9400M 上安装 CUDA 我已经安装了https developer nvidia com cuda downloads工具包 nvcc ver
  • 如何使用 MATLAB 找到距给定坐标最近的点?

    我需要用 Matlab 解决一个最小化问题 我想知道哪个是最简单的解决方案 我一直在考虑的所有潜在解决方案都需要大量的编程工作 假设我有一个纬度 经度坐标点 A B 我需要的是在纬度 经度坐标地图中搜索距离该点最近的点 特别是 纬度和经度数