如何让用户在我在 geofire、Firebase 的位置附近

Posted

技术标签:

【中文标题】如何让用户在我在 geofire、Firebase 的位置附近【英文标题】:How can i get user nearby my location in geofire,Firebase 【发布时间】:2019-01-05 16:21:27 【问题描述】:

使用这段代码,我只能从 Geolocs 获得一个值,只是键和位置,而不是附近的位置。它有什么问题

var geoFireRef: DatabaseReference?
    var geoFire: GeoFire?
    var myQuery: GFQuery?


func Geofire() 

        geoFireRef = Database.database().reference().child("Geolocs")
    geoFire = GeoFire(firebaseRef: geoFireRef!)
        self.geoFire?.setLocation(currentLocation!, forKey:Auth.auth().currentUser!.uid)

    myQuery = geoFire?.query(at: currentLocation!, withRadius: 100)

    myQuery?.observe(.keyEntered, with:  (key, location) in


        if key != Auth.auth().currentUser?.uid
        
            let ref = Database.database().reference().child("Users").child(key)

            ref.observeSingleEvent(of: .value, with:  (snapshot) in
                let id = snapshot.key
            )

        

    )


【问题讨论】:

这个问题有点不清楚,没有足够的数据来真正理解这个问题;始终如一地引用您的类变量(self.geoFire 和 geoFire),我不确定它们不只是 let geoFireRef = ... 中的 let 语句的原因,currentLocation 没有定义所以我们没有不知道那是什么,不要在用户节点中存储坐标,因为这就是 geolocs 节点的用途。另外,请查看this question 的两个答案 哦,根据您的屏幕截图,您只有一个用户位置,那就是这个(管理员)用户。如果有更多数据,您可能应该将其包含为文本,请不要截图。请不要在您的问题中包含图片。包括代码和结构作为文本。要获取您的 Firebase 结构,请使用 Firebase 控制台->导出 JSON 并复制粘贴您的结构的 sn-p。见images and links are evil 您的第一条评论链接对我了解我面临的实际问题有很大帮助,谢谢 【参考方案1】:

使用密钥将您的 GeoFire 位置与所有内容分开,以引用其他附加数据,例如用户信息或发布信息。因为混合静态和动态数据并不是存储数据的最有效方式。

在这里查看我的数据结构和查询:

Retrieving Keys From GeoFire within Radius in Swift

【讨论】:

我没明白你的意思。你的意思是我有一个单独的位置,并在其他函数/类中进行查询??? 是的。使用您正在执行的 .uid 键添加您的位置。但将有关用户的所有其他信息分开。那么当您运行查询时,您将得到的只是一堆键,然后您可以全部引用它们并获取附加信息。 我做了,但我没有得到,我只得到一个密钥,即我当前的用户 ID,我在 Geolocs 中设置了它

以上是关于如何让用户在我在 geofire、Firebase 的位置附近的主要内容,如果未能解决你的问题,请参考以下文章

如何使用geofire查询检查10公里半径内是不是存在firebase用户

如果没有创建Geofire,我如何检查Geofire是否将用户注销?

GeoFire Circle 查询 NSException

用户位置的 GeoFire 查询

如何使用geofire从firebase获取位置

写入 Firebase 时 Geofire 崩溃