【问题标题】:Finding the nearest neighbor Algorithm using google map coordinates使用谷歌地图坐标查找最近邻算法
【发布时间】:2015-01-01 16:43:31
【问题描述】:

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

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

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

客户端会发送一个经纬度坐标到系统中,系统会判断它从客户端接收到的坐标是靠近节点1还是节点2

请原谅我的语法错误。希望得到您的善意回应。提前谢谢你

【问题讨论】:

    标签: php algorithm coordinates


    【解决方案1】:

    如果您只有有限数量的可能目标(正如我从您的问题中猜测的那样),您可以使用以下函数 (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,尽管它不适用于极点和基准边界。如果这种情况需要(我假设您不需要),我相信您会找到更好的解决方案。

    【讨论】:

    • 感谢您的回答,此功能将对我的实施有所帮助。无论如何,你能解释一下目标吗?我如何实现它的哪部分代码?
    • 我不明白你的评论。只需遍历所有节点,使用该函数计算到您的客户端的距离,距离最小的节点就是您最近的邻居
    • 我的意思是将我的特定目标放置在哪里,例如 node1 和 node2 他们给定的坐标以评估最近的邻居
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多