Swift & Firebase:从 Firebase 检索位置数据以显示在 Google 地图标记上

Swift & Firebase: Retrieving location data from Firebase to show on Google map marker

我正在制作一个应用程序,该应用程序从用户那里收集有关餐馆的信息作为日志,并在其他用户请求时根据位置显示收集到的餐馆。 日志记录部分完成。该应用程序可以接收用户对餐厅的输入(照片、评论、评分等),从 Google 地图接收位置数据,并将所有这些数据保存到 Firebase。因此,每个餐厅数据都会将其经度/纬度保存在 Firebase 上。现在的问题是在其他用户请求时向他们显示附近的餐馆。我已经完成了 Google Maps SDK 部分,但是向 Firebase 发送查询以查找最近的餐馆并不是很好。

locationsRef.queryOrderedByChild("longitude").queryStartingAtValue(locationManager.location!.coordinate.longitude-1).queryEndingAtValue (locationManager.location!.coordinate.longitude+0.01).observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in

//This part searches for restaurants within 0.01 degrees in longitude

            locationsRef.queryOrderedbyChild("latitude").queryStartingAtValue(locationManager.location!.coordinate.latitude-1).queryEndingAtValue(locationManager.location!.coordinate.latitude+0.01).observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in

// This part does the same for latitude (0.01 degrees is around 1km)

            // Add name label UILabel here
            self.eateryNameLabel.text = name

            // Add address label UILabel here
            self.eateryAddressLabel.text = address

            var names = [String]()
            var addresses = [String]()
            var longs = [Double]()
            var lats = [Double]()

            for _ in snapshot.children {
                var name = snapshot.value!["eateryname"] as! String
                names.append(name)

                var address = snapshot.value!["address"] as! String
                addresses.append(address)

                var long = snapshot.value!["longitude"] as! Double
                longs.append(long)

                var lat = snapshort.value!["latutide"] as! Double
                lats.append(lat)
            }

所以这就是我尝试做的事情,但我无法做到 运行 因为我还没有很好地理解从 Firebase 检索数据。 'observeEventType(.ChildAdded' 也会导致歧义错误。这是执行此操作的最简单方法吗?我是否遗漏了任何关键行?

我必须看看你是如何将它存储到 Firebase 的(它在 firebase 的数据库中看起来如何)...如果你从 firebase 获取数据有困难,只需打印()整个快照或任何你想要的调试器,迟早你会找到正确的答案...

我正在使用它来进行类似的数据检索...只是一个注释。ChildAdded 已内置 For in Loop

         ref.child(user.uid).child("/markers").observeEventType(.ChildAdded, withBlock: { (snapshot) -> Void in
            let objName = snapshot.key
            print("key: \(objName)")
            let tit = snapshot.value!["title"] as! String
            let snip = snapshot.value!["snip"] as! String
            let lat = snapshot.value!["lat"] as! Double
            let long = snapshot.value!["long"] as! Double

            let marker = GMSMarker()
            marker.title = tit
            marker.snippet = snip
            marker.position = CLLocationCoordinate2DMake(lat, long)
            marker.map = self.mapView

        })

你可以试试 .observeSingleEventOfType(FIRDataEventType.Value, ...

请注意,它没有内置循环,也没有监视数据库中的变化。您只需获取所需的数据,仅此而已