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

2024-01-23

Firebase 中的新 Firestore 数据库本身支持基于位置的地理查询吗?即查找 10 英里内的帖子,或查找 50 个最近的帖子?

我看到有一些现有的实时 firebase 数据库项目,例如 geofire - 这些项目也可以适用于 firestore 吗?


更新:Firestore 目前不支持实际的 GeoPoint 查询,因此虽然以下查询成功执行,但它仅按纬度过滤,而不是按经度过滤,因此将返回许多不附近的结果。最好的解决方案是使用地理哈希 https://en.wikipedia.org/wiki/Geohash。要了解如何自己做类似的事情,请查看此video https://www.youtube.com/watch?v=mx1mMdHBi5Q.

这可以通过创建小于大于查询的边界框来完成。至于效率,我就不好说了。

请注意,应检查约 1 英里的纬度/经度偏移的准确性,但这是执行此操作的快速方法:

SWIFT 3.0版本

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)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 firestore 运行地理“附近”查询? 的相关文章

随机推荐

  • Netbeans 热键关闭突出显示的搜索文本?

    我用谷歌搜索过这个问题 但没有找到 如果您知道如何操作 请分享 对于 7 0 工具 gt 选项 gt 键盘映射 gt 切换突出显示搜索 我的是 Alt Shift H
  • 如何在WCF中设置cookie并在调用Ajax的成功函数(或其他地方)中读取它

    我有一些 jQuery JavaScript 调用一个简单的 WCF Web 服务 对我来说 在 JavaScript 中设置 cookie 并在服务器端读取它相当容易 这是该代码 客户端 JavaScript document cooki
  • 如何在 TypeScript 中从界面中排除某个键

    在 TypeScript 中 您可以像这样组合两种接口类型 interface Foo var1 string interface Bar var2 string type Combined Foo Bar 我不想组合键 而是想将键从一个接
  • Mercurial qfold 所有补丁?

    结果发现没有hg qfold a I tried hg qfold hg qunapp and hg qunapp xargs hg qfold但无法让它发挥作用 有任何想法吗 通过您的 xargs 方法 您是否还记得 qfold 只能折叠
  • 计算多维数组中的重复值

    我需要计算多维数组中的相同值并删除重复项 我的阵列 r a b a b c d c d c d e f 需要输出 0 gt Array 0 gt a 1 gt b 1 gt 2 Result 1 gt Array 0 gt c 1 gt d
  • 为什么允许访问另一个对象的私有字段?

    最近 我观察到在 Java 中访问 priavte 字段的意外行为 考虑以下示例 该示例说明了该行为 public class A private int i lt private field public A int i this i i
  • 如何创建指向同一文件的 Doxygen 链接

    我想编写一条 Doxygen 注释来命名出现注释的文件 我希望 Doxygen 为我提供文件名 而不是显式地编写文件名 因此 如果我更改文件的名称 或将某些内容移动到不同的文件中 我不需要更改名称的硬编码实例 举一个具体的例子 假设我要向
  • 网页模板,其中内容占据视口的整个高度(如果有 1 行减去页脚)

    我正在寻找一个基于 CSS 的网页模板 其中主要内容div当其内容只有几行时 占据视口的整个高度 减去页眉和页脚高度 页脚应该位于视口的底部 而不是内容的正下方 它更多地位于视口的中间 内容区域需要垂直扩展才能与页脚顶部连接 如果内容需要比
  • Python:看不到抛出的异常

    我正在运行单元测试 我意识到抛出了异常 然而 我只是不确定到底抛出了什么 from pt hil utilities PT HIL Interface Utils widgets import PathPicker import unitt
  • 检测Webview滚动是否到达末尾

    我想弄清楚最大滚动的立场是WebView可以达到 我已经尝试过了webView pageDown true 但结果被延迟了 我无法向下滚动 然后在用户面前向上滚动 并且此方法并非每次都有效 我也尝试过webView getContentHe
  • Python3,通过点击按钮从url下载文件

    我需要从这样的链接下载文件https freemidi org getter 13560 https freemidi org getter 13560 但我不能使用urllib request or requests库 因为它下载 htm
  • 无法使用 Xcode 10 在 Mojave 上安装brew

    我无法在我的 Mac 上安装任何 BREW 软件包 并出现以下错误信息 安装在我的 Mac 上 macOS 10 14 测试版 18A293u Xcode 9 3 9E145 Xcode 10 0 测试版 10L176w Type in b
  • 扩展WPF工具包RichTextBox垂直显示文本

    我正在尝试通过其 Text 属性将丰富内容 RTF 格式 绑定到富文本框 扩展 WPF Toolkit 如下所示
  • NodeJS 需要('..')?

    我一直在查看一些 NodeJS 示例 遇到以下情况 var module require var module require 我明白 require 的作用 但不明白这样写时它的作用是什么 有人可以向我解释一下吗 这是定义在https n
  • Javascript:如何获取函数内的父键?

    我有一些函数 存储在集合 数组中 并且希望获取密钥 函数名称 而不重新输入它 有没有什么捷径可以访问它 var functions collection function x function var name function x nam
  • IO Monad 在什么意义上是纯粹的?

    我已经将 IO monad 描述为 State monad 其中状态是 现实世界 这种 IO 方法的支持者认为 这使得 IO 操作变得纯粹 就像引用透明一样 这是为什么 从我的角度来看 IO monad 内部的代码似乎有很多可观察到的副作用
  • 更改嵌套转发器内下拉列表的选定值

    我尝试从 C 代码更改下拉列表选定的值
  • HTML 5中是不是不需要像HTML那样关闭标签呢?

    HTML 5中是不是不需要像HTML那样关闭标签呢 或者是 W3C 验证器中的错误 为什么此代码在 W3C 验证器中有效 p Some Text 如果它在 HTML5 中真的有效 我会感到惊讶 但是在 HTML5 中保持这种行为有效有什么好
  • 如何共享 Maven 原型?

    我创建了一个 Maven 原型 我想在我的公司内分享它 为此 我将其部署到我们的 Nexus 服务器上 并且可以从那里使用它 但这有点不方便 因为它似乎不在其他计算机上已知原型的目录中 解决方法是像这样使用它 mvn archetype g
  • 如何使用 firestore 运行地理“附近”查询?

    Firebase 中的新 Firestore 数据库本身支持基于位置的地理查询吗 即查找 10 英里内的帖子 或查找 50 个最近的帖子 我看到有一些现有的实时 firebase 数据库项目 例如 geofire 这些项目也可以适用于 fi