根据我的位置找到其他用户

时间:2016-06-29 00:24:15

标签: java android android-gps geofire

我使用firebase(android)存储数据,我保存用户如下:

users{
    abcdefghi{
      name:"abc",
      lat:"12.988",
      long:-0.123,
      desc:"all other desc"
    },KLMNGHT{
        name:"def",
        lat:"11.988",
        long:-1.123,
        desc:" other desc"
    }
}

我想显示进入我的半径区域(邻近区域)的所有用户,这些用户是根据我的位置定义的。我没有想法。我看着Haversine公式。但我不知道如何实现这一目标。

找到用户的最佳算法是什么?

2 个答案:

答案 0 :(得分:1)

private const double EARTH_RADIUS = 6378.137;
private static double rad(double d)
{
   return d * Math.PI / 180.0;
}

public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
   double radLat1 = rad(lat1);
   double radLat2 = rad(lat2);
   double a = radLat1 - radLat2;
   double b = rad(lng1) - rad(lng2);

   double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +
    Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));
   s = s * EARTH_RADIUS;
   s = Math.Round(s * 10000) / 10000;
   return s;
}

也许这段代码可以帮到你。

答案 1 :(得分:1)

问题严格如此:给定地球上的两个点A(lan1,lon1)B(lan2,lon2)找到A和B之间的距离?当你说“最好的算法”时,你的开发时间,时间,记忆意味着什么?!

无论如何,假设“最好”'在开发时间方面你可以使用: 1.Google的API在此解释:https://developers.google.com/maps/documentation/distance-matrix/intro#DistanceMatrixRequests

2.这是一个简单的实施 - 但我还没有自己测试 - https://www.geodatasource.com/developers/java