加载现有的Geofire位置

时间:2018-04-22 14:13:29

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

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

所以澄清一下:

  1. 用户根据当前场地创建帖子。
  2. Geofire会检查该地理位置是否已经有记录(Long和Lat cocoordinates)。如果 DOES 将该位置存储在Firebase中,则会将用户的新帖子和 ADDS 带到同一地点。
  3. 如果Geofire 检测到Firebase中的某个位置,则会创建一个新的场地并将帖子附加到该场所。
  4. 我已将我的场地细节与我的Geofire坐标分开,但我不明白如何让Geofire区分Firebase中是否存在此位置的条目。

    在我运行我的应用程序的那一刻,每次按照下面的屏幕抓取创建一个新条目,这显然不是我想要的。

    multiple entries with identical locations

    以下是代码:

    首先我设置名称和目录的引用(我单独设置它们,因为我在几个实例中使用名称ref)

    override func viewDidLoad() {
        super.viewDidLoad()
    
        geoFireNameRef = Database.database().reference().childByAutoId()
        geoFireRef = Database.database().reference().child("PostLocations").child("Coordinates")
        geoFire = GeoFire (firebaseRef: geoFireRef)
    }
    

    然后在我的帖子方法中我打电话:

    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
    }
    

1 个答案:

答案 0 :(得分: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节点。