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, ...
请注意,它没有内置循环,也没有监视数据库中的变化。您只需获取所需的数据,仅此而已
我正在制作一个应用程序,该应用程序从用户那里收集有关餐馆的信息作为日志,并在其他用户请求时根据位置显示收集到的餐馆。 日志记录部分完成。该应用程序可以接收用户对餐厅的输入(照片、评论、评分等),从 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, ...
请注意,它没有内置循环,也没有监视数据库中的变化。您只需获取所需的数据,仅此而已