使用 SQL 查找彼此最接近的一对坐标

Finding the pair of coordinates closest to each other using SQL

给定一个坐标列表,如何仅使用一个 SQL 语句找到最接近的一对坐标?我已经在这个问题上停留了一段时间了,还没有想出任何想法。因为我只被允许使用一个 sql 语句,所以我假设变量也是不允许的。

可视化:

id lat long
1  -12 35 
2  -1  100
3  -9  3

您可以使用自连接:

select t1.*, t2.*
from t t1 join
     t t2
     on t1.id < t2.id
order by power(t1.lat - t2.lat, 2) + power(t1.long - t2.long, 2)
limit 1

经度和纬度是与球体(我们的地球)表面相关的量度,最短距离是大圆,而不是直线。这就是从纽约飞往罗马的飞机飞越纽芬兰的原因之一。如果世界看起来像这样,你的欧几里德度量只会是最短的:

这是球形地球在平面地图上的等矩形投影。注意两极的失真。大圆的计算要复杂得多,我怀疑您是否可以在 SQL 语句中计算它。我怀疑,虽然我没有试图找到任何情况,但有些点计算得更远但实际上更近,因为你在地球表面旅行。