Мое приложение сохраняет местоположение пользователя в базе данных Firebase. Мне нужно сравнить текущее местоположение с местоположением, сохраненным в Firebase, чтобы избежать сохранения того же местоположения в базе данных (если пользователь находится в том же месте).
Как мне этого добиться?
Вот мой код. Он не дает желаемого результата, так как он снова сохраняет то же местоположение и без сравнения.
@Override
public void onLocationChanged(final Location location) {
DatabaseReference dbReference = FirebaseDatabase.getInstance().getReference();
Query lastQuery = dbReference.child("User").child("Location").orderByKey().limitToLast(1);
lastQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
lat = ds.child("latitude").getValue(Double.class);
lng = ds.child("longitude").getValue(Double.class);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
double latc = location.getLatitude();
double lonc = location.getLongitude();
if (distance(lat, lng, latc, lonc) <2.0)
{
Log.d("msg","same location");
}else
{
FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
myRef = firebaseDatabase.getInstance().getReference().child("User").child("Location");
DatabaseReference newpost = myRef.push();
newpost.setValue(latLng);
}
}
private double distance(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75; // in miles, change to 6371 for kilometer output
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double sindLat = Math.sin(dLat / 2);
double sindLng = Math.sin(dLng / 2);
double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
* Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
return dist; // output distance, in MILES
}