2016-07-04 19 views
0

我想從數據庫中找到附近的註冊位置,我可以從GPS android獲取用戶的當前位置。如果附近的註冊地點是從數據庫中獲得的,則半徑爲3公里會很好。基於現有數據庫的附近位置

我可以將緯度和經度值存儲在數據庫中,但是,找到neaby位置的最佳方法是什麼? 回顧並檢查在android中或直接檢查它在PHP中,然後將其重新安裝到Android設備。

例如:一個用戶註冊他的位置,它將被存儲在數據庫中,以後當另一個用戶試圖找到附近的註冊用戶時,應該回顧最近的用戶。

+0

的可能的複製[在android中獲取數據庫中的lat long值](http://stackoverflow.com/questions/10307904/getting-lat-long-values-from-database-in-android) – karan

回答

1

好吧,你可以使用sql查詢來做到這一點。

SELECT id, ( 3959 * acos ( cos (radians(78.3232)) * cos(radians(lat)) * cos(radians(lng) - radians(65.3234)) + sin (radians(78.3232)) * sin(radians(lat)) ) ) AS distance FROM markers HAVING distance < 30 ORDER BY distance LIMIT 0 , 20;

它會找到最接近的20個地點是30英里(78.3232,65.3234)(緯度,經度)半徑範圍內的座標(以弧度度您的當前位置)。 緯度,經度緯度是和logitude,您存儲您的自定義位置(也度弧度)數據庫表的列名

要按公里而非英里搜尋,取代3959與6371.參考this question

+0

這些20個位置應該在服務器上過濾或在客戶端 - 取決於。在服務器上執行它需要更多處理能力,但在客戶端上執行此操作需要更多帶寬。 –

+0

節省帶寬會更好:D謝謝:) –