这个问题在这里已有答案:
我有一个数据库,每行有lng和lat列。如何进行SQL查询以按距离的顺序返回行?我将lat和lng与外部值进行比较。我将使用Python向PyMySQL发送SQL查询。如果这是不可能的,我有用Python编写的hasrsine公式,我可以计算这样的距离,但我不想浪费时间循环遍历数据库中的所有条目,这是非常大的。
样本表:
long ============ lat
============================
1. -74 ============= 84
2. -87 ============= 75
我期待发生什么。我给出一个长的lat坐标,它将它与数据库中的所有行进行比较,并按最接近我提供的坐标的顺序返回行。
您的查询需要包含距离的计算字段列。您的ORDER BY将使用计算字段。
首先,我将Haversine函数实现为MySQL函数,如:
create function haversine_distance (
float long1,
float lat1,
float long2,
float lat2)
returns float deterministic
return ... -- formula here
一旦你有了,那么查询变得非常简单。例如,对于经度10.21
/ latitude -50.45
,查询将如下所示:
select *
from my_table
order by haversine_distance(long, lat, 10.21, -50.45) asc