Py学习  »  DATABASE

如何使用MySQL使用经度和纬度列查找行之间的距离?

CompuGenuis Programs • 4 年前 • 523 次点击  

我有一个数据库,每行有lng和lat列。如何生成一个SQL查询,该查询将按距离顺序返回行?我将比较lat和液化天然气与外部价值。我将使用Python用PyMySQL发送SQL查询。如果这不可能,我用Python编写了haversine公式,我可以这样计算距离,但我不想浪费时间在数据库中的所有条目之间循环,因为数据库非常大。

示例表:

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52695
 
523 次点击  
文章 [ 2 ]  |  最新文章 4 年前
The Impaler
Reply   •   1 楼
The Impaler    5 年前

首先,我将Haversine函数实现为MySQL函数,如:

create function haversine_distance (
  float long1, 
  float lat1,
  float long2,
  float lat2)
returns float deterministic
return ... -- formula here

一旦有了它,查询就变得非常简单。例如经度 10.21 /纬度 -50.45 ,查询将如下所示:

select *
from my_table
order by haversine_distance(long, lat, 10.21, -50.45) asc
Hopper
Reply   •   2 楼
Hopper    5 年前

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