在球体上找到最接近的点对

时间:2011-08-20 03:39:16

标签: algorithm latitude-longitude points closest

我知道如何为2D情况(x和y)实现n log n最近点对算法(Shamos和Hoey)。然而,对于给出纬度和经度的问题,不能使用这种方法。两点之间的距离使用半正弦公式计算。

我想知道是否有某种方法可以将这些纬度和经度转换为各自的x和y坐标并找到最近的一对点,或者是否有其他技术可以用来做它。

1 个答案:

答案 0 :(得分:12)

我会将它们翻译成三维坐标,然后使用平面而不是线来使用divide and conquer approach。这肯定会正常工作。我们可以确定这一点,因为当仅检查球体上的点时,两个最接近点的弧距(在表面上行走的距离)也将是最接近三维笛卡尔距离的两个点。这将有运行时间O(nlogn)。

要转换为三维坐标,最简单的方法是使(0,0,0)成为地球的中心,然后你的坐标为(cos(lat)* cos(lon),cos(lat)*罪(LAN),罪(LAT))。出于这些目的,我使用的是地球半径为1的比例,以简化计算。如果你想要一些其他单位的距离,只需将所有数量乘以在该单位中测量的地球半径。

我应该注意到这一切都假设地球是一个球体。它不完全是一个,点也可能实际上具有高度,因此这些答案实际上并不完全准确,但几乎在每种情况下它们都非常接近正确。