请帮我找一个通过坐标(纬度/经度)找到最近邻居的算法我会用PHP实现它
例如,。我们有1个客户端和2个节点 节点1 = 32.9697,-96.8032,节点2 = 42.9697,-97.80322
每个节点都有自己的给定坐标(放在地图上)。
客户端会将纬度和经度坐标发送到系统中,系统会查明它从客户端接收的坐标是否靠近节点1或节点2
请原谅我的语法。希望你的回应。提前谢谢
答案 0 :(得分:2)
如果您只有有限数量的可能目标(我可以从您的问题中猜出),您可以使用以下函数(copied from here)并迭代所有目标以找到最接近的目标。
function distance($lat1, $lng1, $lat2, $lng2, $miles = false)
{
$pi80 = M_PI / 180;
$lat1 *= $pi80;
$lng1 *= $pi80;
$lat2 *= $pi80;
$lng2 *= $pi80;
$r = 6372.797; // mean radius of Earth in km
$dlat = $lat2 - $lat1;
$dlng = $lng2 - $lng1;
$a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
$km = $r * $c;
return ($miles ? ($km * 0.621371192) : $km);
}
如果您有许多可能的位置(> = 10 ^ 4),您应该在某些结构中组织这些数据点,只需要评估它们中的一小部分。我建议使用Quadtree虽然它不适用于极点和基准边界。如果需要这种情况,我相信你会找到更好的解决方案(我认为你不需要)。