ios - swift 和火力地堡 : Retrieving location data from Firebase to show on Google map marker

标签 ios swift firebase firebase-realtime-database gmsmapview

我正在制作一个应用程序,它从用户那里收集有关餐馆的信息作为日志,并在其他用户请求时根据位置显示收集到的餐馆。 日志记录部分完成。该应用程序可以接收用户对餐厅的输入(照片、评论、评分等),从谷歌地图接收位置数据,并将所有这些数据保存到 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

        })

关于ios - swift 和火力地堡 : Retrieving location data from Firebase to show on Google map marker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38497078/

相关文章:

ios - RxAlamofire: retryWhen 掉进订阅 block

iphone - 如何在不剪裁的情况下缩小 UIScrollView 中的图像?

iphone - 在 iOS 6 中状态栏色调颜色更改为黑色

php - iOS App 通过位置限制注册

ios - 在 Swift 中登录 Facebook。 "Unknown scheme received: authorize"

android - 致命异常 : java. lang.SecurityException : ! @Firebase 中注册的警报 (500) 过多

javascript - 使用 SendGrid 和 Firebase 的跨国电子邮件没有错误但没有电子邮件(使用 NodeMailer 作为答案)

ios - 如何在 AVQueuePlayer 播放完 Que 中的所有内容后将其设置为开头

ios - ID3 通过音频流?

ios - 如何基于父 View 组件重新定位tableView