【发布时间】:2021-03-19 23:42:32
【问题描述】:
我想知道如何获取当前用户位置半径内的所有用户。到目前为止,我能够得到每个人的坐标。我无法做的是快速获取附近的用户,而无需搜索整个数据库(我使用的是 Firebase Realtime DB)。有没有一种算法可以帮助解决这个问题?
【问题讨论】:
标签: android search geolocation google-maps-android-api-2
我想知道如何获取当前用户位置半径内的所有用户。到目前为止,我能够得到每个人的坐标。我无法做的是快速获取附近的用户,而无需搜索整个数据库(我使用的是 Firebase Realtime DB)。有没有一种算法可以帮助解决这个问题?
【问题讨论】:
标签: android search geolocation google-maps-android-api-2
我发现最快最好的方法是使用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) {
}
});
【讨论】: