34

新的 Firestore DB 允许我存储 GeoPoints。有没有办法根据它们进行查询?

例如,如果我的每个收藏文档都有一个location类型为geopoint. 如何获得最接近任意坐标的 10 个文档?

该文档似乎没有涵盖这一点。我试过这样的东西:

someRef.where('location', '>', geopoint).limit(10).get();

显然这没有多大意义,但我只是在这里尝试一些东西

4

5 回答 5

34

我们还没有公开地理查询,所以目前还没有办法做到这一点。

从历史上看,Firebase 实时数据库在一个名为GeoFire的库中使用geohashes ,但鉴于我们计划在不久的将来公开实际的地理查询,我们尚未将该库更新到 Firestore。不过,要了解如何自己做类似的事情,请观看此视频

于 2017-10-06T14:53:41.187 回答
8

自从@problemsofsmit 第一次提出这个问题以来,已经引入了一个新项目。该项目称为 GEOFirestore。

使用这个库,您可以在一个圆圈内执行查询,例如查询文档:

  const geoQuery = geoFirestore.query({
    center: new firebase.firestore.GeoPoint(10.38, 2.41),
    radius: 10.5
  });

您可以通过 npm 安装 GeoFirestore。您必须单独安装 Firebase(因为它是 GeoFirestore 的对等依赖项):

$ npm install geofirestore firebase --save

您可以通过 CDN 链接到它: https ://cdn.jsdelivr.net/npm/geofirestore@2.2.2/dist/geofirestore.min.js

于 2018-06-27T02:29:21.983 回答
3

您可以让 Algolia 为您进行带半径的地理搜索。它所需要的只是构建一个云功能,触发您想要的文档并将它们同步到 Algolia。

看看地理搜索https://www.algolia.com/doc/guides/searching/geo-search/

Firebase 文档还宣传 Algolia 作为复杂搜索的解决方案https://firebase.google.com/docs/firestore/solutions/search

于 2018-03-10T22:23:11.483 回答
1

我不会使用像 Algolia 这样的第三方服务,而是使用为 iOS 和 Android 推出的新库,它复制了 GeoFire for Firestore。这个名为GeoFirestore的新库有完整的文档记录和良好的测试。我已经在许多演示项目中使用过这个库,它似乎工作得很好。试一试!

于 2018-07-10T06:39:40.990 回答
0

在网上搜索后,我发现了 chintan369 的这个 GeoFirestore 库,您可以使用它来查询附近的地理点。这些查询基于 Firestore 原生查询。只需将以下行添加到您的build.gradle(项目级别)中:

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}

然后将库添加到您的build.gradle(应用程序级别):

dependencies {
  implementation 'com.github.chintan369:Geo-FireStore-Query:1.1.0'
}

...并同步您的项目。

访问https://medium.com/android-kotlin/geo-firestore-query-with-native-query-bfb0ac1adf0a了解更多信息。

于 2020-01-22T12:57:10.863 回答