gpt4 book ai didi

mysql - 查找给定坐标的特定半径内的所有位置的查询

转载 作者:行者123 更新时间:2023-11-29 11:47:46 24 4
gpt4 key购买 nike

我的数据库有一个组织表,其中有两个十进制列latlon,表示组织的位置。我正在尝试查找坐标 53.6771, -1.62958 800 公里范围内的所有组织(这大致相当于英国的利兹)。

我正在使用的查询是

select * 
from organisation
where (3959 * acos(cos(radians(53.6771)) *
cos(radians(lat)) *
cos(radians(lon) - radians(-1.62958)) + sin(radians(53.6771)) *
sin(radians(lat)))) < 800

但是,这会返回法国里昂的位置,距离英国利兹约 970 公里。我意识到上面的公式做了一些简化的假设(例如,将地球的形状视为球体),所以我不期望结果绝对准确,但我应该能够做得更好?

最佳答案

我找到了一个公式here用于计算两点之间的公里距离,我尝试将其转换为mysql:

WHERE (6371 * 2 * 
ATAN2(
SQRT(
SIN(RADIANS((lat-53.6771)/2)) * SIN(RADIANS((lat-53.6771)/2)) + SIN(RADIANS((lon+1.62958)/2)) * SIN(RADIANS((lon+1.62958)/2)) * COS(RADIANS(lat)) * COS(RADIANS(53.6771))
),
SQRT(
1-(SIN(RADIANS((lat-53.6771)/2)) * SIN(RADIANS((lat-53.6771)/2)) + SIN(RADIANS((lon+1.62958)/2)) * SIN(RADIANS((lon+1.62958)/2)) * COS(RADIANS(lat)) * COS(RADIANS(53.6771)))
)
)) < 800

关于mysql - 查找给定坐标的特定半径内的所有位置的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34610889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com