加载现有的 Geofire 位置(如果存在)

Load existing Geofire location if one exists

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

所以澄清一下:

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

我已将场地详细信息与 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
}

据我所知,您想检查是否有具有现有坐标的场地。我的建议是将这对夫妇存储在您的 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 节点。