当前位置: 首页 > 知识库问答 >
问题:

如何使用FireStore运行地理“附近”查询?

佴英奕
2023-03-14

共有1个答案

南门鸿振
2023-03-14

更新:Firestore目前不支持实际的GeoPoint查询,所以当下面的查询成功执行时,它只按纬度过滤,而不按经度过滤,因此将返回许多不在附近的结果。最好的解决方案是使用GeoHash。要学习如何做类似的事情自己,看看这个视频。

这可以通过创建一个小于大于query的边界框来实现。至于效率,我没法跟它说话。

注意,应该检查~1英里的lat/long偏移量的精度,但这里有一个快速的方法:

func getDocumentNearBy(latitude: Double, longitude: Double, distance: Double) {

    // ~1 mile of lat and lon in degrees
    let lat = 0.0144927536231884
    let lon = 0.0181818181818182

    let lowerLat = latitude - (lat * distance)
    let lowerLon = longitude - (lon * distance)

    let greaterLat = latitude + (lat * distance)
    let greaterLon = longitude + (lon * distance)

    let lesserGeopoint = GeoPoint(latitude: lowerLat, longitude: lowerLon)
    let greaterGeopoint = GeoPoint(latitude: greaterLat, longitude: greaterLon)

    let docRef = Firestore.firestore().collection("locations")
    let query = docRef.whereField("location", isGreaterThan: lesserGeopoint).whereField("location", isLessThan: greaterGeopoint)

    query.getDocuments { snapshot, error in
        if let error = error {
            print("Error getting documents: \(error)")
        } else {
            for document in snapshot!.documents {
                print("\(document.documentID) => \(document.data())")
            }
        }
    }

}

func run() {
    // Get all locations within 10 miles of Google Headquarters
    getDocumentNearBy(latitude: 37.422000, longitude: -122.084057, distance: 10)
}
 类似资料:
  • 问题内容: 我正在使用Firebase函数和Firebase Firestore开发用于存储用户数据的API。 我想使用存储在其字段中的属性来查找文档。这是Firebase文档,其中说明了如何实现相同的功能。 我想处理两种情况 在没有文件的情况下 有两个以上具有当前条件的文件 如何处理以上两种情况? 问题答案: 按照上面的注释中的“讨论”,在Cloud Function中,您可以使用方法返回的方法

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

  • 问题内容: 有谁知道如何使用CI运行mysqli查询的线索。我确实在配置文件中更改了数据库驱动程序,但是我仍然无法使用多个查询,例如 任何人都知道如何仅使用CI而不使用其他库来执行此操作的任何线索,因为理论上CI支持mysqli。 谢谢 问题答案: 目前,即使CI支持mysqli,据我所知,也不支持多个查询。

  • 问题内容: 我正在编写一个脚本,其中将业务量以纬度和经度加载到mySQL数据库中。然后,我向该脚本提供一个(最终用户的)经度纬度,并且该脚本必须计算从提供的经度/经度到它从数据库中获得的条目的EACH的距离,并按从最远到最远的顺序对其进行排序。 实际上,我实际上只需要大约10或20个“最近”的结果,但是除了从数据库中获取所有结果并对每个结果运行函数然后进行数组排序之外,我什么也想不做。 这是我已经

  • 我一直在研究这三个网站,了解如何使用log4j2创建地图查找(或任何其他查找): http://logging.apache.org/log4j/2.x/manual/extending.html#Lookups http://logging.apache.org/log4j/2.x/manual/lookups.html http://logging.apache.org/log4j/2.x/m

  • 如何执行查询?示例: 给出字段为或的所有文档 提供所有文档,其中或字段