新的Firestore DB允许我存储GeoPoints。有没有办法根据它们进行查询?
例如,如果我的每个集合文档都有location
类型的geopoint
字段。
如何将最近的10个文档放到任意坐标?
文档似乎没有涵盖这一点。我试过这样的东西:
someRef.where('location', '>', geopoint).limit(10).get();
显然这并没有多大意义,但我只是在尝试一些东西
答案 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了解更多信息。