Java Firestore-可能的地理查询解决方案

Java Firestore-可能的地理查询解决方案,java,firebase,kotlin,google-cloud-firestore,geofire,Java,Firebase,Kotlin,Google Cloud Firestore,Geofire,由于本地地理查询还不受支持,我想到了一个可能的解决方案,但想知道它的有效性和有效性 我想要什么:我收集了大约2000个文档,每个文档都包含一个地质点。 例如,我想查询距离用户当前位置最近的20个文档 可能的解决方案:我可以在集合中创建另一个文档并将其作为我的“索引”吗。每个字段名称将是每个文档ID的字符串。每个字段的值将是相应的地质点。 当应用程序打开时,我只需要1次读取操作。。。然后,我是否可以使用一个函数来处理2000个文档字段,以计算每个位置与用户之间的距离并进行排序?最后,我是否可以选取

由于本地地理查询还不受支持,我想到了一个可能的解决方案,但想知道它的有效性和有效性

我想要什么:我收集了大约2000个文档,每个文档都包含一个地质点。 例如,我想查询距离用户当前位置最近的20个文档

可能的解决方案:我可以在集合中创建另一个文档并将其作为我的“索引”吗。每个字段名称将是每个文档ID的字符串。每个字段的值将是相应的地质点。 当应用程序打开时,我只需要1次读取操作。。。然后,我是否可以使用一个函数来处理2000个文档字段,以计算每个位置与用户之间的距离并进行排序?最后,我是否可以选取最接近的20个结果,然后创建一个侦听器并仅提取这些结果

编辑:已尝试我的建议。在不断遇到问题后放弃了。
我让整个索引文档正常工作,并且能够下载它,安排它以找到最近的位置和相关的文档id。但是,我在使用文档id数组来设置侦听器时遇到了很多问题。我使用for循环遍历数组中的每个ID,并为每个ID设置一个侦听器,但它只执行第一个ID,随机崩溃不断发生。我还注意到要花更长的时间才能拿到医生。。。。因此,我决定放弃高精度的解决方案,只需查询地质点就可以在用户周围的一个正方形内找到位置。

我认为最简单的方法是使用Firestore地质点进行查询,您可以通过以下方式实现:

fun Query.getNearestLocation(latitude: Double, longitude: Double, distance: Double): Query {
    // ~1 mile of lat and lon in degrees
    val lat = 0.0144927536231884
    val lon = 0.0181818181818182

    val lowerLat = latitude - (lat * distance)
    val lowerLon = longitude - (lon * distance)

    val greaterLat = latitude + (lat * distance)
    val greaterLon = longitude + (lon * distance)

    val lesserGeopoint = GeoPoint(lowerLat, lowerLon)
    val greaterGeopoint = GeoPoint(greaterLat, greaterLon)

    val docRef = FirebaseFirestore.getInstance().collection("locations")
    return docRef
            .whereGreaterThan("location", lesserGeopoint)
            .whereLessThan("location", greaterGeopoint)
}

它也写在Kotlin上。这段代码是由Ryan Lee在上所做代码的Kotlin翻译。

谢谢,我已经看到了这一答案的几个示例(但不确定为什么要使用一英里)。感谢Kotlin的翻译,省得我这么做。唯一的一点是,我相信这会在用户位置周围的“正方形”内提供位置。我目前正试图根据我的问题/建议实施一个解决方案,但我一定会将其与您的解决方案进行比较,并测试完成时间和准确性方面的差异。感谢您接受我的正确答案。你找到了按照你想要的方式测量你的位置的方法了吗?没关系,你的解决方案更容易、更快速地实现了,现在精度的差异已经无关紧要了。我几乎完全使用了您的代码,但更改为支持公里而不是英里。查询现在运行得很好。谢谢