2016-02-13 96 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; 

    } 

返回距离是千米可以将其进一步隐蔽到英里