之前我曾与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。
答案 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的固定结构。