gpt4 book ai didi

mysql - 按邮政编码公式计算的距离

转载 作者:可可西里 更新时间:2023-11-01 08:46:13 25 4
gpt4 key购买 nike

我找到了这个公式并且它有效,但是我想做的是提供根据与他的邮政编码的距离进行过滤的能力。

我找到了计算两个纬度和经度坐标之间距离的公式。

(3956 * ACOS(COS(RADIANS(start_lat)) * COS(RADIANS(end_lat)) * COS(RADIANS(end_lon) - RADIANS(start_lon)) + SIN(RADIANS(start_lat)) * SIN(RADIANS(end_lat))))

我在发送以下信息的页面上有过滤器

$_POST["start_latitude"] = 34.023179;
$_POST["start_longitude"] = -118.303965;
$_POST["max_distance"] = 50;

如果我这样做

SELECT (3956 * ACOS(COS(RADIANS({$_POST["start_latitude"]})) * COS(RADIANS(34.018626)) 
* COS(RADIANS(-118.249978) - RADIANS({$_POST["start_longitude"]}))
+ SIN(RADIANS({$_POST["start_latitude"]})) * SIN(RADIANS(34.018626))))

在这种情况下,距离将输出为英里数 4 英里。

如何将此公式转换为我的目标,以查找距输入坐标不超过 50 英里的地点?我知道所有需要做的就是改变公式中的位置,但我的学校数学不好。

SELECT place_name FROM places 
WHERE place_latitude = ? AND place_longitude = ?

编辑:

我有 places 表,其中有 1000 条格式的记录

id place_name latitude longitude
1 xxx 432423 -43432
2 yyy 523452 -54353
3 zzz 553453 -53422
etc.

所以公式必须做类似的事情

SELECT place_name FROM places 
(CALCULATE each place distance from
$_POST["start_latitude"] and $_POST["start_longitude"]
and select only ones that) < 50

最佳答案

将距离公式放入WHERE子句:

SELECT place_name
FROM places
WHERE (3956 * ACOS(COS(RADIANS(:start_latitude)) * COS(RADIANS(latitude)) * COS(RADIANS(-longitude) - RADIANS(:start_longitude)) + SIN(RADIANS(:start_latitude)) * SIN(RADIANS(latitude))))
< :max_distance

关于mysql - 按邮政编码公式计算的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27651248/

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