我正在建立一个具有搜索功能的约会网站来查找匹配项。其中一个标准是您与可能的匹配之间的距离。我该如何计算距离?我认为计算所有可能匹配的确切距离可能是太耗费资源。我想要一个不同的解决方案,以便显示附近的人而不需要资源。
我有这个想法:
当有人注册时,将他们的坐标保存为(对于纬度)四舍五入到数据库中最近的5分钟(= 9公里)?搜索匹配项时,搜索数据库以查找与用户相同的坐标。找到匹配后,仍然可以计算出确切的距离。
这对经度有什么用? 有没有更好的方法来做到这一点? 我不是在寻找计算距离的公式。如何在不计算每个可能匹配的距离(数千)的情况下找到附近的比赛?
答案 0 :(得分:0)
首先,您可以选择两个用户的纬度经度,并可以将它们转换为距离,如下所示:
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$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;
}
}
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "M") . " Miles<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " Kilometers<br>";
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "N") . " Nautical Miles<br>";
?>
希望它有所帮助。