如何在Firebase Cloud Firestore中查询集合中最近的GeoPoints?

时间:2017-10-06 14:12:15

标签: firebase google-cloud-firestore

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

例如,如果我的每个集合文档都有location类型的geopoint字段。 如何将最近的10个文档放到任意坐标?

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

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

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

5 个答案:

答案 0 :(得分:31)

我们尚未公开地理查询,因此目前无法实现此目的。

历史上,Firebase实时数据库在名为geohashes的库中使用了GeoFire - 但考虑到我们计划在不久的将来公开实际的地理查询,我们还没有将该库更新到Firestore。要了解如何自己做类似的事情,请查看this video

答案 1 :(得分:7)

自@problemsofsumit首先提出此问题以来,已经引入了一个新项目。该项目称为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

答案 2 :(得分:3)

你可以让Algolia为你做半径的地理搜索。它只需要构建一个云函数,触发您想要的文档并将它们同步到Algolia。

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

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

答案 3 :(得分:0)

我不会使用像Algolia这样的第三方服务,而是使用针对iOS和Android发行的,复制GeoFire for Firestore的新库。名为GeoFirestore的新库已全面记录并经过了良好的测试。我已经在许多演示项目中使用过此库,并且它似乎运行良好。试一试!

答案 4 :(得分: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了解更多信息。