1

我正在使用 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公式。但我不知道要做到这一点。

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

4

2 回答 2

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

于 2016-06-29T00:37:54.520 回答
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;
}

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

于 2016-06-29T00:34:40.923 回答