2016-02-13 99 views
1

我已經開始開發一個Android應用程序,我需要基於距離的搜索。用戶應該能夠選擇最大距離,比如3公里。我已經寫了一些代碼,讓我獲取每個用戶的當前位置(Lat,Lng)並將其存儲在mysql數據庫中。然後,該應用程序檢索每個用戶的位置,並找出用戶與其他用戶之間的距離。使用if循環,應用程序會檢查用戶輸入的值是否小於或等於每個用戶的距離。如何在Android中實現基於距離的類似tinder的搜索?

我已經測試過它,它運行良好,但問題是我不知道這是否仍然可以與數以千計的用戶一起工作?

如果您有任何意見或回答,請告訴我!

+0

可以查找[haversine公式(https://en.wikipedia.org/wiki/Haversine_formula)來計算兩點之間的實際距離。然後檢查是否添加了「result = KarelG

+0

hii @David你有沒有找到任何好的解決方案,我喜歡你的問題,我想要這樣的東西..你能詳細解釋你的問題,還有一些代碼!? –

回答

0

讓當前用戶位置分配給currentLocation

 Location databaseLocation = new Location("databaseLocation"); 
     databaseLocation.setLatitude(database_latitude); 
     databaseLocation.setLongitude(database_longitude); 
     //< 3000 meters = 3km 
     if (currentLocation.distanceTo(databaseLocation) < 3000) { 
     //**This entry is within limits** 
     } 
+0

謝謝,但我已經做了那樣的事情。我想知道這是否仍然會與很多用戶一起工作,例如50 000.因爲如果應用必須計算5萬個距離,那麼需要多長時間。 –

+0

爲此,您可以讓我們說一次5個異步調用。直到你列出所有的結果,你可以顯示一個加載器。但最好的方法是將您的座標發送到後端,這將快速提供結果。這不會花費太多時間。 –

+0

哦......我只是重新讀你的問題,並意識到你所有的位置都在數據庫中。對於這樣的情況,這不會花費太多時間。繼續執行它(y) –

0

這裏是找到兩個位置之間的距離的完整方法,只需要兩個lats longs作爲參數,它將返回字符串中的距離。

public static String distFrom(double current_lat, double current_long, double latst, double longst) { 
    double earthRadius = 3958.75; 
    double dLat = Math.toRadians(latst-current_lat); 
    double dLng = Math.toRadians(longst-current_long); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat)) * Math.cos(Math.toRadians(latst)) * Math.sin(dLng/2) * Math.sin(dLng/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    double dist = earthRadius * c; 
    double meterConversion = 1.609344;  //Kilometer 
    //for two digits float value: 
    String s = String.format("%.2f", (dist * meterConversion)); 

    return s; 

    } 

返回距離是千米可以將其進一步隱蔽到英里