【问题标题】:3 points distance calculation strategy3点距离计算策略
【发布时间】:2023-03-16 01:52:01
【问题描述】:

问题:我有很多点 a、b、c、d 的(经纬度)坐标。 . .在数据库中。 现在,当我选择点 a 时,我需要计算点 a 与其他每个点的距离,并获得最近的点,例如。此数学需要对点进行 cos 和 tan 计算。所以这在数据库方面似乎相当昂贵。

所以我想了一个策略来简化这个。下面是策略的解释。

我有 3 个已知点 (x, y, z) 一个点到另一个点之间的距离是已知的。对于此示例,假设为 10。即从 x 到 y = 10 的距离; y 到 z = 10; z 到 x = 10。(这形成一个等边三角形。但实际情况可能并非如此)

现在假设我们有两个点 a 和 b。我们计算点 a 到 x、y 和 z 的距离并分别存储和存储点 b。 (比如应用逻辑)

所以我们有:

  • 对于 a 点:Ax、Ay 和 Az
  • 对于点 b:Bx、By 和 Bz

至于策略,问题是我们如何计算点 a 到点 b 之间的距离。

至于问题本身,如果我将上述策略应用于我的问题,问题是我是在简化还是使情况复杂化?

提前感谢您的回答。

【问题讨论】:

  • 我会说你把情况复杂化了。如果您在 3d 坐标系中有点,只需使用 pythagoras 进行距离计算,然后在距离列表中搜索最近的点。
  • 计算 2 个二维点之间的距离非常简单,甚至不需要 cos/sin。 d = sqrt (Xd^2 + Yd^2)
  • @popovitsj 我应该更具体地了解纬度和经度的坐标。这就是为什么我担心使用三角函数。

标签: distance measure


【解决方案1】:

您可以使用勾股定理计算两点之间的距离,假设它们以笛卡尔坐标给出,不涉及昂贵的三角函数。

但是,如果您有数千或数百万积分,这可能仍然会很昂贵。根据您使用的数据库,它可能会提供空间数据类型并且可以有效地处理您的查询。参见例如spatial data in SQL Server

如果您的数据库不支持空间数据,问题就会变得相当复杂。您需要一个有效支持最近邻查询的空间索引。您可以从Wikipedia article on spatial databases 开始了解这个问题通常是如何解决的。

如果您的点集是稳定的,另一种选择是预先计算并存储每个点的最近邻,但是当添加、删除或更改点时这会变得很棘手。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 2015-01-16
    • 1970-01-01
    • 2017-03-07
    • 2014-11-29
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    相关资源
    最近更新 更多