使用谷歌地图坐标查找最近邻居算法

时间:2014-11-05 13:11:02

标签: php algorithm coordinates

请帮我找一个通过坐标(纬度/经度)找到最近邻居的算法我会用PHP实现它

例如,

。我们有1个客户端和2个节点 节点1 = 32.9697,-96.8032,节点2 = 42.9697,-97.80322

每个节点都有自己的给定坐标(放在地图上)。

客户端会将纬度和经度坐标发送到系统中,系统会查明它从客户端接收的坐标是否靠近节点1或节点2

请原谅我的语法。希望你的回应。提前谢谢

1 个答案:

答案 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虽然它不适用于极点和基准边界。如果需要这种情况,我相信你会找到更好的解决方案(我认为你不需要)。