【发布时间】:2020-02-07 20:16:47
【问题描述】:
我正在尝试根据经度和纬度选择附近的所有记录。
问题是它不准确,例如此查询表示用户在 42 公里之外,而实际距离为 65 公里。
我已将 lon 和 lat 值放入一个 php 脚本中,该脚本计算距离属性,这意味着查询不正确。
你有什么想法为什么这么受欢迎吗?
SELECT
id,
first_name,
(6371 * acos (
cos ( radians(latitude) )
* cos( radians( LAT ) )
* cos( radians( LON ) - radians(longitude) )
+ sin ( radians(latitude) )
* sin( radians( LAT ) )
)
) AS distance
FROM
users
有效的 PHP 代码
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($lon1 - $lon2));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
【问题讨论】:
-
PHP 脚本如何计算距离?是haversine还是道路距离?
-
@ArunNalla 这只是在互联网上找到的一个基本脚本,它工作正常,我在 MySQL 中重新制作了公式并没有工作,仍然没有。
-
为 MySQL 代码计算中使用的所有 4 个参数指定数据类型。并在 PHP 代码中进行比较。
-
所有参数都相同,我重新创建了查询,当查询作为存储过程运行时它无法正常工作:/
-
我会观察到 65/42 = 1.54,它非常接近 1.6 - 这个数字出现在一个公式中,而不是另一个公式中。