2014-11-05 76 views
0

請幫我找到它的座標(緯度/經度)尋找最近的鄰居,我會使用PHP尋找近鄰算法使用谷歌地圖座標

實施,例如它的算法。我們有1個客戶端和2個節點 節點1 = 32.9697,-96.8032和節點2 = 42.9697,-97.80322

每個節點都有自己的給定座標(地圖上的地方)。

客戶端將發送一個緯度和經度座標到系統中,系統會發現,如果它從客戶端接收的座標是接近節點1或節點2

請原諒我的語法。希望你的迴應。預先感謝您

回答

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,雖然它不適用於極點和基準邊界。我相信你會找到更好的解決方案,如果這種情況下需要(我認爲你不需要)。

+0

謝謝你的回答這個函數對我的實現會有幫助。無論如何,你能向我解釋一下目標嗎?我如何實現它的哪部分代碼? – user3077550 2014-11-05 14:09:40

+0

我不明白你的評論。簡單地運行所有節點,使用該函數計算到客戶端的距離,距離最近的節點是最近的鄰居 – Bowdzone 2014-11-05 14:16:23

+0

我的意思是在哪裏放置我的特定目標,例如node1和node2它們給定的座標以評估最近的鄰居 – user3077550 2014-11-05 14:34:51