Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有可能将多个设备LatLng与一个设备LatLng进行比较?_Java_Android_Google Maps_Notifications - Fatal编程技术网

Java 是否有可能将多个设备LatLng与一个设备LatLng进行比较?

Java 是否有可能将多个设备LatLng与一个设备LatLng进行比较?,java,android,google-maps,notifications,Java,Android,Google Maps,Notifications,在我的项目中,将有两种类型的用户(导游,游客),他们的所有信息将存储在Firebase中。每当有一名游客超出导游的范围(例如,1公里),该特定游客和导游将收到通知。 我如何比较所有的旅游车和导游车,并且在超出范围时两者都会收到通知 这是我目前的代码,用于比较1名导游和1名游客之间的距离 public double CalculationByDistance(LatLng tourist, LatLng tourguide) { int Radius = 6371;// radius o

在我的项目中,将有两种类型的用户(导游,游客),他们的所有信息将存储在Firebase中。每当有一名游客超出导游的范围(例如,1公里),该特定游客和导游将收到通知。 我如何比较所有的旅游车和导游车,并且在超出范围时两者都会收到通知

这是我目前的代码,用于比较1名导游和1名游客之间的距离

public double CalculationByDistance(LatLng tourist, LatLng tourguide) {

    int Radius = 6371;// radius of earth in Km
    double lat1 = tourist.latitude;
    double lat2 = tourguide.latitude;
    double lon1 = tourist.longitude;
    double lon2 = tourguide.longitude;
    double dLat = Math.toRadians(lat2 - lat1);
    double dLon = Math.toRadians(lon2 - lon1);
    double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
            + Math.cos(Math.toRadians(lat1))
            * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon / 2)
            * Math.sin(dLon / 2);
    double c = 2 * Math.asin(Math.sqrt(a));
    double valueResult = Radius * c;
    double km = valueResult / 1;
    DecimalFormat newFormat = new DecimalFormat("####");
    int kmInDec = Integer.valueOf(newFormat.format(km));
    double meter = valueResult % 1000;
    int meterInDec = Integer.valueOf(newFormat.format(meter));
    Log.i("Radius Value", "" + valueResult + "   KM  " + kmInDec
            + " Meter   " + meterInDec);


    return Radius * c;
}

“…他们的所有信息都将存储在Firebase中。”你对Firebase做了什么吗?看起来使用Firebase是主要问题,因为您已经知道如何比较位置,但现在问题似乎太广泛了。Firebase还有什么更具体的问题吗?@MarkusKauppinen目前我没有发现Firebase有任何问题,但我想知道是否有方法可以将多个LatLng与一个LatLng进行比较?我听说GeoFence可以做类似的事情,但据我所知,GenFence是固定位置的,不以用户位置为中心。我没有确切的答案。GeoFence确实适用于特定的用例,但也许您可以使用它。这意味着每个游客的手机都会设置一个到导游的距离作为地理围栏,并在离开导游时收到通知。随着导游的移动,你需要随时更新这道土工栅栏。否则,您可以使用现有的方法来计算距离,例如
Location
类具有
distanceTo()
distanceBetween()
方法。也许某个库(比如)有一些有用的方法(?)我不知道。@MarkusKauppinen我会尝试一下,但GeoFence看起来相当复杂。