如果您的可能目標數量有限(正如我從您的問題中猜到的那樣),您可以使用以下函數(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,雖然它不適用於極點和基準邊界。我相信你會找到更好的解決方案,如果這種情況下需要(我認爲你不需要)。
謝謝你的回答這個函數對我的實現會有幫助。無論如何,你能向我解釋一下目標嗎?我如何實現它的哪部分代碼? – user3077550 2014-11-05 14:09:40
我不明白你的評論。簡單地運行所有節點,使用該函數計算到客戶端的距離,距離最近的節點是最近的鄰居 – Bowdzone 2014-11-05 14:16:23
我的意思是在哪裏放置我的特定目標,例如node1和node2它們給定的座標以評估最近的鄰居 – user3077550 2014-11-05 14:34:51