新的 Firestore DB 允许我存储 GeoPoints。有没有办法根据它们进行查询?
例如,如果我的每个收藏文档都有一个location
类型为geopoint
. 如何获得最接近任意坐标的 10 个文档?
该文档似乎没有涵盖这一点。我试过这样的东西:
someRef.where('location', '>', geopoint).limit(10).get();
显然这没有多大意义,但我只是在这里尝试一些东西
新的 Firestore DB 允许我存储 GeoPoints。有没有办法根据它们进行查询?
例如,如果我的每个收藏文档都有一个location
类型为geopoint
. 如何获得最接近任意坐标的 10 个文档?
该文档似乎没有涵盖这一点。我试过这样的东西:
someRef.where('location', '>', geopoint).limit(10).get();
显然这没有多大意义,但我只是在这里尝试一些东西
我们还没有公开地理查询,所以目前还没有办法做到这一点。
从历史上看,Firebase 实时数据库在一个名为GeoFire的库中使用geohashes ,但鉴于我们计划在不久的将来公开实际的地理查询,我们尚未将该库更新到 Firestore。不过,要了解如何自己做类似的事情,请观看此视频。
自从@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
您可以让 Algolia 为您进行带半径的地理搜索。它所需要的只是构建一个云功能,触发您想要的文档并将它们同步到 Algolia。
看看地理搜索https://www.algolia.com/doc/guides/searching/geo-search/
Firebase 文档还宣传 Algolia 作为复杂搜索的解决方案https://firebase.google.com/docs/firestore/solutions/search
我不会使用像 Algolia 这样的第三方服务,而是使用为 iOS 和 Android 推出的新库,它复制了 GeoFire for Firestore。这个名为GeoFirestore的新库有完整的文档记录和良好的测试。我已经在许多演示项目中使用过这个库,它似乎工作得很好。试一试!
在网上搜索后,我发现了 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了解更多信息。