Firebase:按最近的位置查询

时间:2018-05-21 10:18:49

标签: javascript firebase google-cloud-firestore

Firebase可以使用Geopoint对象存储文档。 https://firebase.google.com/docs/reference/android/com/google/firebase/firestore/GeoPoint

但是我们不能在不同的字段上使用范围过滤器,这对于位置查询是必要的。

据我所知,一年前有使用Geofire进行此类查询的功能 Query for nearby locations

但现在它已经过时而且无法正常工作。

目前的解决方案是什么?

1 个答案:

答案 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翻译