2015-04-07 29 views
1

使用Haversine的算法並使用鏈接here我發現我的一半解決方案。所以這裏是問題:卷積/修改的Haversine算法問題

用戶A站在「拿撒勒」,周圍有50公里的雷達,我可以使用上面鏈接的算法找到該範圍內的所有其他用戶。現在我的問題是,用戶站在B點(用戶在紐瓦克附近)誰也有一個50公里的雷達,與用戶A的雷達相交。

因此,隨着我能夠獲取的結果用戶A的50公里雷達,使用上述算法,我也想包括雷達相交的所有用戶(如用戶B)。

我不確定這是否使用正確的算法,或者我應該對這個查詢有完全不同的方法。

Google maps and Google places integration

以下是我寫的只是獲取所有誰下爲50km用戶A的雷達屬於用戶和我得到的最準確的結果,這是問題的第一部分查詢。

SELECT 
    * 
FROM 
    users  
WHERE 
    acos(sin(".$user_location_A['latitude'].") * sin(radians(latitude)) + 
cos(".$user_location_A['latitude'].") * cos(radians(latitude)) * cos(radians(longitude) - 
(".$user_location_A['longitude']."))) * 6371 <= 50 

以上查詢的解釋如下:

  1. 罪(弧度(latitude)),餘弦(弧度(latitude)) - 這裏的緯度是在列名緯度每個用戶的用戶表
  2. COS(弧度(longitude) - 這裏的經度是列名經度users表中的每個用戶
  3. 50在查詢到底是50公里半徑,我想創造一個雷達。
+0

不知道你想要什麼。所有的A&B(刪除重複)只有在A和B? –

+0

所有的雷達都有相同的半徑嗎? – geocodezip

+0

對評論-1的回答: 1.我需要所有在A雷達內的用戶(我已經得到) 2.我還需要雷達與A相似的用戶,如用戶B -2: 不,不一定,每個用戶的雷達可以不同,是一個問題嗎? –

回答

1

如果所有雷達的半徑爲50公里,那麼任何雷達的中心在100公里內的A將與它相交。如果他們有不同的半徑,那麼感興趣的距離是50公里(半徑A)+ R km(其中R是B的雷達半徑)。