sql 查询以按 table 中作为字段提供的纬度和经度获取最接近的位置

sql query to get first closest locations by latitude and longitude provided as feilds in table

我有一个包含纬度和经度位置的 table 我想将其排序为最接近我的位置或我提供的位置:

id 经度 纬度
1 20.2 7.1
2 10.0 20.0
3 20.1 5.2
4 10.1 70.5

假设我有这个 table 我想要的查询 SQL 到 return 最接近的前 3 个让我们说 经度:12.1,纬度:8.3

这就是我期望的 returned

id 经度 纬度
2 10.0 20.0
1 20.2 7.1
3 20.1 5.2

我想,不确定最接近的是什么,但你明白了

这就是我尝试过的我从未使用过 SQL :)

(
  (SELECT id, number FROM destination WHERE longitude >= 15 ORDER BY longitude LIMIT 1)
  UNION ALL
  (SELECT id, number FROM destination WHERE latitude < 15 ORDER BY latitude DESC LIMIT 1)
) 
ORDER BY abs(15-number) LIMIT 5;```

你问题中的代码没有做任何事情,比如计算两点之间的距离。对如何计算两点之间的距离进行一些研究是个好主意 - 这是您需要开始的地方。您应该能够根据您的情况调整我的答案,但如果您要使用坐标,最好了解所涉及的数学。

Stack Overflow 上有很多关于计算两点之间距离的信息,甚至专门针对 PostgreSQL。这是改编自另一篇 Stack Overflow 文章 () 的示例:

SELECT
    id,
    longitude,
    latitude,
    (select SQRT(POW(69.1 * (latitude::float -  10::float), 2) + 
        POW(69.1 * (longitude::float - 15::float) * COS(latitude::float / 57.3), 2)
    )) AS Distance
FROM destination
ORDER BY Distance

原点的纬度硬编码值为 10,经度硬编码值为 15。这些将需要替换为您要比较的点的 lat/long。

这将 return 您目的地中的所有行 table,包括一个新列,该列是该行距您的起点的距离(以英里为单位)。它也将按该距离排序,从最近到最远。