Java 是否有可能将多个设备LatLng与一个设备LatLng进行比较?
在我的项目中,将有两种类型的用户(导游,游客),他们的所有信息将存储在Firebase中。每当有一名游客超出导游的范围(例如,1公里),该特定游客和导游将收到通知。 我如何比较所有的旅游车和导游车,并且在超出范围时两者都会收到通知 这是我目前的代码,用于比较1名导游和1名游客之间的距离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
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看起来相当复杂。