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,包括一个新列,该列是该行距您的起点的距离(以英里为单位)。它也将按该距离排序,从最近到最远。
我有一个包含纬度和经度位置的 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,包括一个新列,该列是该行距您的起点的距离(以英里为单位)。它也将按该距离排序,从最近到最远。