【问题标题】:Load existing Geofire location if one exists如果存在,则加载现有的 Geofire 位置
【发布时间】:2018-04-22 14:13:28
【问题描述】:

我希望 Geofire 做以下两件事之一; 1 - 在 Firebase 中查找场地位置,如果不存在,则 2 - 创建一个。

所以澄清一下:

  1. 用户根据当前地点创建帖子。
  2. Geofire 检查它是否已经记录了该地理位置的场地(经度和纬度坐标)。如果它确实将该位置存储在 Firebase 中,那么它会将用户的新帖子添加到同一地点。
  3. 如果 Geofire 在 Firebase 中检测到某个位置,它会创建一个新地点并将帖子附加到该地点。

我已将我的地点详细信息与我的 Geofire 坐标分开,但我不明白如何让 Geofire 区分此位置的条目是否存在于 Firebase 中。

当我运行我的应用程序时,它每次都会根据下面的屏幕抓取创建一个新条目,这显然不是我想要的。

代码如下:

首先我设置名称和目录的引用(我分别设置它们,因为我在少数情况下使用名称 ref)

override func viewDidLoad() {
    super.viewDidLoad()

    geoFireNameRef = Database.database().reference().childByAutoId()
    geoFireRef = Database.database().reference().child("PostLocations").child("Coordinates")
    geoFire = GeoFire (firebaseRef: geoFireRef)
}

然后在我的 post 方法中调用:

func savePost () {
     let location = CLLocation.init(latitude: lat!, longitude: long!) //Get Coordinates
     geoFire.setLocation(location, forKey: self.geoFireNameRef.key)// Save Coordinates 
postLocationDB.child(self.geoFireNameRef.key).setValue(locationDictionary) // Save Venue Details
}

【问题讨论】:

  • 能分享一下你写的代码吗?
  • @RenaudTarnec 我添加了代码
  • @Brewsky 在您的代码中,您实际上是在“检查它是否已经记录了该地理位置的地点(经纬度坐标)”?
  • @RenaudTarnec 我打算使用 var circleQuery = geoFire.queryAtLocation(center, withRadius: 0.6) 但我希望有更简单的东西。这是唯一的解决方案吗?
  • @Brewsky 我已经添加了答案。

标签: ios swift firebase firebase-realtime-database geofire


【解决方案1】:

所以我知道您想检查是否存在具有现有坐标的场地。我的建议是将这对夫妇存储在您的 Coordinates/{venueId} 节点下,作为由两个坐标组成的额外字段,如下所示:

- Coordinates
   - -LAWR2LH.....
     - l
        - 0: 22.345
        - 1: 22.345
     - compoundL: "22.345-22.345"

然后使用结合 queryOrderedByChild 和 queryEqualToValue 的查询直接查询实时数据库,以查找 CompoundL = 22.345-22.345 的 Coordinates/Venue 节点是否已经存在。

【讨论】:

  • 我是 Firebase 的新手,会不会是这样的: postRef.queryEqualToValue("22.345-22.345", childKey: "Coordinates").observeSingleEvent( ... )?
  • @Brewski 实际上我根本没有资格 swift ......所以我不想回答,因为存在我给出错误指示的风险......从文档中你应该能够找到解决方案。看看firebase.google.com/docs/database/ios/lists-of-data。您必须结合 queryOrderedByChild 和 queryEqualToValue。祝你好运!
  • @Brewski 完整地说:由于我提出的解决方案基于实时数据库的结构,因此即使我没有任何快速的能力,我也允许自己回答您的问题。请注意,我已经使用 JavaScript 测试了建议的解决方案。
猜你喜欢
  • 1970-01-01
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 2018-10-29
相关资源
最近更新 更多