在 Firebase Realtime DB 中查找附近的用户
Find nearby users in Firebase Realtime DB
我想知道如何获取当前用户位置半径范围内的所有用户。到目前为止,我能够得到每个人的坐标。我无法做的是快速获取附近的用户而不必搜索整个数据库(我正在使用 Firebase 实时数据库)。有算法可以解决这个问题吗?
我发现最快最好的方法是使用 GeoFIre。 在您的 onCreate() 方法中添加以下行
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("path/to/geofire");
GeoFire geoFire = new GeoFire(ref);
如果我们有我们的位置,那么我们可以简单地在方法中使用 GeoQueries 以获得我们想要的结果。
// creates a new query around [latitude, longitude] with a radius of 10.00 kilometers
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(Double.parseDouble(latitude), Double.parseDouble(longitude)), 10.00);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
Log.d("KEY", "KEY IS: " + key);
if (!key.equals(currentUserID) && !nearbyList.contains(key)) {
Log.d("KEY FOUND", "Key " + key + " entered the search area at" + location.latitude + "," + location.longitude);
usersRef.child(key).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
/* Get your data from Firebase here */
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
}
@Override
public void onKeyExited(String key) {
/* When someone exits the radius */
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});