Firebase可以使用Geopoint对象存储文档。 https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/GeoPoint
但是我们不能在不同的字段上使用范围过滤器,这对于位置查询是必要的。
据我所知,一年前有使用Geofire进行此类查询的功能 Query for nearby locations
但现在它已经过时而且无法正常工作。
目前的解决方案是什么?
答案 0 :(得分:2)
您可以使用GeoPoint
Firestore对象和GreatherThan
子句以及LessThan
进行查询。您应该添加自己的准确度,而不是仅使用一英里的距离。
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)
}
此代码是Ryan Lee在this post
上编写的代码中的Kotlin翻译