2011-03-01 61 views
1

其實我有上百萬的人記錄在我的服務器數據庫中的所有位置,我想獲取這些人誰靠近我(我的意思是,用5方圓百里的圓圈)5-英里的數據。 ..查找就近我的GPS定位

我公司通過Web服務發送這個數據到iPhone ...

請告訴我如何做到這一點我的PHP服務器....在

+1

這是一個有點複雜,無需額外的信息來回答。你到現在爲止嘗試過什麼,你的問題在哪裏?數據庫中的數據是怎樣的?你想知道如何建立這個Web服務或只是如何編寫SQL查詢? – oezi 2011-03-01 09:46:30

+0

@oezi -----我的數據庫擁有者的姓名,地址,郵編,姓名...等等,我想獲得GPS的基礎上,充分詳細座標通過iPhone發送...... – 2011-03-01 09:57:16

+0

如果你不「T有經/緯你的個人表,那麼你就需要轉換成zip包LAT /很久以前就可以計算出任何距離 – 2011-03-01 10:07:22

回答

7

也許這可以幫助你

例如,您輸入緯度和經度37和-122度。而且您希望在當前給定的經緯度範圍內搜索25英里範圍內的用戶。

SELECT item1, item2, 
    (3959 * acos(cos(radians(37)) 
        * cos(radians(lat)) 
        * cos(radians(lng) 
         - radians(-122)) 
        + sin(radians(37)) 
        * sin(radians(lat)) 
       ) 
    ) AS distance 
FROM geocodeTable 
HAVING distance < 25 
ORDER BY distance LIMIT 0 , 20; 

如果您希望以kms爲單位的搜索距離。然後在上面的查詢中用6371代替3959。

Get nearest places on Google Maps, using MySQL spatial data

+0

太棒了。在第一次嘗試中就可以使用我的數據庫表。大+1!謝謝! – hellozimi 2011-03-01 10:36:19

+0

+1感謝這真的非常有幫助...... – 2011-03-01 13:40:57

2

數以百萬計的人記錄服務器數據庫(我希望你遵守數據保護法),那麼你就需要減少計算所有這些距離的工作量;否則你需要爲數百萬條記錄中的每一條記錄進行計算。

使用PHP來計算「邊界框」,它可以用來從您的數百萬人記錄的選擇可能的候選人的一個子集,則僅計算人的記錄子集的距離。見this article從活動類型的網站用於描述如何做到這一點例如PHP代碼,和方法如何實際工作的精彩描述。

+0

+1謝謝....... – 2011-03-01 13:40:28