使用Geofire,您如何在非传统节点结构上进行查询?

时间:2016-10-25 21:09:19

标签: swift firebase firebase-realtime-database geofire

之前我曾与GeoFire合作,而且从我记忆中来看,当你在GeoFire中使用setLocation存储位置时,Firebase结构有点像这样:

{
  "3f7892b2-f304-4129-8416-0dc7216c2188" : {
    "g" : "9qc9p66045",
    "l" : {
        0 : 37,
        1 : -120
    }
  }
}

问题是,我已经启动并运行了实时数据库,它具有以下结构:

{
  "3f7892b2-f304-4129-8416-0dc7216c2188" : {
    "username" : "bobby123",
    "name" : "john",
    "bio" : " I like dogs",
    "location" : {
        "lon" : 37,
        "lat" : -120
    }
  }
}

因此除了位置(我目前使用CLLocation存储,只是更新子值)之外,还有其他数据。

所以我的问题是,运行GeoFire查询最实用的方法是什么?我意识到我可以使用setLocation,并且idid由userid获取,并在我将用户加载到tableview时引用它,但我很好奇是否可以按照我们目前设置的方式对我的数据运行GFQuery。

1 个答案:

答案 0 :(得分:0)

据我所知,你必须使用你提到的第一个结构,然后当你想要一个用户的位置时:

var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(xyz);
var cognitoUser = AWSCognito.authenticate(userpool);

或者你称之为ref的任何东西。 然后你打电话给那个位置做一个查询(例如半径100公里):

geoFireRef!.getLocationForKey(userID, withCallback: { (location, error) in
}

通过它,您可以获得密钥,因此您可以使用usersRef.child(密钥).observeSingleEvent(of:。value,with:{snapshot in

据我所知,这是GeoFire的固定结构。