【问题标题】:Find nearby users in Firebase Realtime DB在 Firebase 实时数据库中查找附近的用户
【发布时间】:2021-03-19 23:42:32
【问题描述】:

我想知道如何获取当前用户位置半径内的所有用户。到目前为止,我能够得到每个人的坐标。我无法做的是快速获取附近的用户,而无需搜索整个数据库(我使用的是 Firebase Realtime DB)。有没有一种算法可以帮助解决这个问题?

【问题讨论】:

    标签: android search geolocation google-maps-android-api-2


    【解决方案1】:

    我发现最快最好的方法是使用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) {
    
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-19
      相关资源
      最近更新 更多