sql - 为什么用纬度/经度计算地理距离而不是缓存笛卡尔点?

标签 sql math geolocation query-optimization gis

在研究如何解决经典的“在范围内获取 POI”问题时,我发现最常用的算法是 Haversine,如果您需要真正的准确性,则可以使用 Vincenty 公式。我去了第一个,因为高精度不是问题。然而,它让我想到了一些让我感到奇怪的事情,为什么我没有找到在数据库上缓存笛卡尔坐标的引用,而不是使用带有纬度/经度的半正弦公式?

当然,这里的问题是性能。半正弦公式需要大量的 cos/sin 函数调用,但是在数据库中存储经纬度点的投影 X、Y 和 Z 并直接应用点积不是更简单吗?除非我弄错了,否则需要一个 arccos 调用。

最佳答案

因为任何给定的笛卡尔投影只会对某些点给出正确的答案 - 给出球体周围一个特定圆上两点之间正确距离的投影会扭曲另一个特定圆的距离。

诸如Haversine之类的公式与球体上各个点的相对位置无关;无论如何,它们都会返回正确的距离。

关于sql - 为什么用纬度/经度计算地理距离而不是缓存笛卡尔点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3124810/

相关文章:

android - 两个已知 android 地理位置之间的角度

python - 使用 django 模型有效获取数据

sql - 引用 URL 中的对象 - 您使用主键还是最佳实践是什么?

sql - 获取给定时间戳和 TZ 名称的 TZ 缩写

c++ - 遍历 2.5D 网格

javascript - SVG路径: Curve tailing off of a straight line

php - 在 Woocommerce 中添加除特定国家/地区以外的内联 CSS

sql - Oracle:年份必须介于 -4713 和 +9999 之间,且不能为 0

javascript - 将 PX 的宽度转换为 % 但保持文本内容的比例

python - 如何使用python计算地球表面多边形的面积?