我正在创建一个应用程序,它将来自用户的餐馆信息作为日志收集,并根据位置显示收集的餐馆,如果其他用户请求它们。 记录部分已完成。该应用可以收到用户在餐厅的输入(照片,评论,评级等),从谷歌地图接收位置数据,并将所有这些数据保存到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'也导致歧义错误。这是最简单的方法吗?我错过了任何关键的行吗?
答案 0 :(得分:2)
我必须看看你如何将它存储到Firebase(它在firebase上的数据库中看起来如何)...如果从firebase获取数据时遇到问题只需打印()整个快照或任何你想要调试的内容和迟早你会找到正确的答案......
我正在使用它来进行类似的数据检索...只是一个注释。 ChildAdded 内置For for循环
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
})
答案 1 :(得分:0)
您可以尝试使用.observeSingleEventOfType(FIRDataEventType.Value, ...
请注意,它没有内置循环,也没有注意数据库中的更改。您只需获取数据即可,