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

标签 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 公式。但我不知道要做到这一点。

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

最佳答案

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;
}

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

关于java - 根据我的位置找到其他用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088362/

相关文章:

java - 如何在 Scala 中扩展通用 Java 类?

java - Android:突出显示 SpannableString 中的 <em> 标签

java - ClassNotFoundException: org.springframework.cglib.transform.impl.MemorySafeUndeclaredThrowableStrategy 重建后

android - Cordova 不断将应用程序名称更改为 'Hello Cordova'

android - Easy Tracker 中的 Google Analytics 自定义屏幕名称

c# - 标签在 iOS 中显示,但在 Android 中不显示

java - 为 REST API 客户端证明 GPS 坐标的原点

android - 如何在锁屏上方/通过锁屏显示 Google 位置服务权限请求对话框?

android - 没有互联网连接时如何将gps位置存储到android中的服务器

Java 通过套接字发送数据 - 为什么我需要在字符串末尾放置一个换行符?