Java Firestore-可能的地理查询解决方案
由于本地地理查询还不受支持,我想到了一个可能的解决方案,但想知道它的有效性和有效性 我想要什么:我收集了大约2000个文档,每个文档都包含一个地质点。 例如,我想查询距离用户当前位置最近的20个文档 可能的解决方案:我可以在集合中创建另一个文档并将其作为我的“索引”吗。每个字段名称将是每个文档ID的字符串。每个字段的值将是相应的地质点。 当应用程序打开时,我只需要1次读取操作。。。然后,我是否可以使用一个函数来处理2000个文档字段,以计算每个位置与用户之间的距离并进行排序?最后,我是否可以选取最接近的20个结果,然后创建一个侦听器并仅提取这些结果 编辑:已尝试我的建议。在不断遇到问题后放弃了。Java Firestore-可能的地理查询解决方案,java,firebase,kotlin,google-cloud-firestore,geofire,Java,Firebase,Kotlin,Google Cloud Firestore,Geofire,由于本地地理查询还不受支持,我想到了一个可能的解决方案,但想知道它的有效性和有效性 我想要什么:我收集了大约2000个文档,每个文档都包含一个地质点。 例如,我想查询距离用户当前位置最近的20个文档 可能的解决方案:我可以在集合中创建另一个文档并将其作为我的“索引”吗。每个字段名称将是每个文档ID的字符串。每个字段的值将是相应的地质点。 当应用程序打开时,我只需要1次读取操作。。。然后,我是否可以使用一个函数来处理2000个文档字段,以计算每个位置与用户之间的距离并进行排序?最后,我是否可以选取
我让整个索引文档正常工作,并且能够下载它,安排它以找到最近的位置和相关的文档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的翻译,省得我这么做。唯一的一点是,我相信这会在用户位置周围的“正方形”内提供位置。我目前正试图根据我的问题/建议实施一个解决方案,但我一定会将其与您的解决方案进行比较,并测试完成时间和准确性方面的差异。感谢您接受我的正确答案。你找到了按照你想要的方式测量你的位置的方法了吗?没关系,你的解决方案更容易、更快速地实现了,现在精度的差异已经无关紧要了。我几乎完全使用了您的代码,但更改为支持公里而不是英里。查询现在运行得很好。谢谢