如何使用MySQL使用经度和纬度列找到行之间的距离? [重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我有一个数据库,每行有lng和lat列。如何进行SQL查询以按距离的顺序返回行?我将lat和lng与外部值进行比较。我将使用Python向PyMySQL发送SQL查询。如果这是不可能的,我有用Python编写的hasrsine公式,我可以计算这样的距离,但我不想浪费时间循环遍历数据库中的所有条目,这是非常大的。

样本表:

   long ============ lat
============================
1. -74 ============= 84
2. -87 ============= 75

我期待发生什么。我给出一个长的lat坐标,它将它与数据库中的所有行进行比较,并按最接近我提供的坐标的顺序返回行。

python mysql sql latitude-longitude haversine
2个回答
0
投票

您的查询需要包含距离的计算字段列。您的ORDER BY将使用计算字段。


0
投票

首先,我将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
© www.soinside.com 2019 - 2024. All rights reserved.