当前位置: 首页 > 面试题库 >

如何使用Swift在Firebase中查询最近的用户?

慕凌
2023-03-14
问题内容

我想找到离我最近的用户。(例如,最长5公里)我的节点在Firebase数据库中,如下所示,

+ users
  + user_id0
    - latitude: _
    - longitude: _

有什么办法可以让这个半径范围内的确切用户。否则,我应该使用CLLocation distance方法检查每个用户的最近位置或不向我显示。


问题答案:

我强烈建议您使用Geofire这样的工具。

要进行设置,您的数据结构将略有变化。您仍然可以将lat /
lng存储在用户上,但是您还将创建一个名为以下内​​容的新Firebase表users_locations

您的users_locations表格将通过Geofire填充,看起来像这样

users_locations
  user_id0:
    g: 5pf666y
    l:
      0: 40.00000
      1: -74.00000

通常,这是在Geofire中存储位置的方式,但是您可以将其设置为在创建/更新用户对象时保存。

let geofireRef = FIRDatabase.database().reference().child("users_locations")
let geoFire = GeoFire(firebaseRef: geofireRef)
geoFire.setLocation(CLLocation(latitude: lat, longitude: lng), forKey: "user_id0")

在中保存位置后users_locations,您可以使用GFQuery来查询特定范围内的所有用户。

let center = CLLocation(latitude: yourLat, longitude: yourLong)
var circleQuery = geoFire.queryAtLocation(center, withRadius: 5)

var queryHandle = circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in
   println("Key '\(key)' entered the search area and is at location '\(location)'")
})


 类似资料:
  • 问题内容: 我正在寻找一种借助Elasticsearch查找最近价格/数量的可能性。问题是我没有范围。我要实现的是,结果按最近距离排序。根据示例搜索查询,我的索引包含3个具有以下价格(数字)的文档:45、27、32 给定数字与我的搜索值29的“距离”为45-29 = 16 | 27-29 = -2 | 32-29 = 3,所以我希望搜索结果是按“距离”评分的,该数字距离给定价格不远。 搜索查询示例

  • 问题内容: 我正在尝试获取等于的所有条目,但是它什么也不返回。 我在这里做错了什么?而且,以我尝试的方式查询数据的正确方法是什么? JSON: 迅速: 问题答案: 您需要使用to,而不是使用equalTo

  • 问题内容: 我正在使用Firebase函数和Firebase Firestore开发用于存储用户数据的API。 我想使用存储在其字段中的属性来查找文档。这是Firebase文档,其中说明了如何实现相同的功能。 我想处理两种情况 在没有文件的情况下 有两个以上具有当前条件的文件 如何处理以上两种情况? 问题答案: 按照上面的注释中的“讨论”,在Cloud Function中,您可以使用方法返回的方法

  • 我正在使用Firebase函数和Firebase FiRecovery开发一个存储用户数据的API。 我想使用存储在字段中的属性来定位文档。这是Firebase文档,其中说明了如何实现相同的目标。 我想处理两种情况 > 如果没有符合当前条件的文件 如果有两份以上的现有条件文件 上述两种情况如何处理?

  • 问题内容: 我正在尝试开发出租车预订等应用程序并将数据存储在Firebase上。 但是,从Firebase查询RideDetail(History)数据时遇到问题。 我想以分页形式获取ride_detail以获得特定的“ customer_id”。 我的Firebase DataStructure: 这里的“ payment_time”是付款完成后的时间戳。 我想要的响应是: 我希望我在order

  • 问题内容: 当我将Flashlight与Firebase结合使用并通过直接查询进行Elastic搜索时,它确实起作用: 询问 码 但是,当我希望不仅限于10条提示时,此操作将失败(无结果) 询问 码 我使用Flashlight示例中提供的选项,并为option添加零件: 为什么可以在https://github.com/firebase/flashlight/issues/29#issuecomm