在研究如何解决经典的“在范围内获取 POI”问题时,我发现最常用的算法是 Haversine,如果您需要真正的准确性,则可以使用 Vincenty 公式。我去了第一个,因为高精度不是问题。然而,它让我想到了一些让我感到奇怪的事情,为什么我没有找到在数据库上缓存笛卡尔坐标的引用,而不是使用带有纬度/经度的半正弦公式?
当然,这里的问题是性能。半正弦公式需要大量的 cos/sin 函数调用,但是在数据库中存储经纬度点的投影 X、Y 和 Z 并直接应用点积不是更简单吗?除非我弄错了,否则需要一个 arccos 调用。
最佳答案
因为任何给定的笛卡尔投影只会对某些点给出正确的答案 - 给出球体周围一个特定圆上两点之间正确距离的投影会扭曲另一个特定圆的距离。
诸如Haversine之类的公式与球体上各个点的相对位置无关;无论如何,它们都会返回正确的距离。
关于sql - 为什么用纬度/经度计算地理距离而不是缓存笛卡尔点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124810/