Flutter - 如何从按地理距离排序的 Cloud Firestore 获取文档?
Flutter - How get documents from Cloud Firestore ordering by geo distance?
我有一个类似于 Tinder 的约会应用程序,但对于特定的利基市场,该应用程序将用户的纬度和经度存储在 Cloud Firestore 数据库中的文档中,我有一种方法 returns 与以米为单位的用户,我为此使用了 GeoLocator,因此我知道当前用户和另一个用户之间的距离。
static String getDistanceBetween({
double sourceLat,
double sourceLong,
double currentLat,
double currentLong
}) {
double _distanceInMeters = Geolocator.distanceBetween(
sourceLat,
sourceLong,
currentLat,
currentLong,
);
print(_distanceInMeters);
if(_distanceInMeters == null){
return "?";
} else if(_distanceInMeters == 0.0){
return "0";
} else {
return _distanceInMeters.toString().substring(0, 5);
}
}
当用户登录时,我想先检索最近的用户,从当前登录用户检索最近用户的文档最简单的方法是什么?
如果我能做这样的事情,我认为它可以解决问题,但我认为使用 Firestore 是不可能的:
FirebaseFirestore.instance.collection("users").orderBy(getDistanceBetween(), descending: true).get().then((querySnapshot){
...
/// Get documents from users that are nearest to the current user
})
无法按距离排序,因为这需要数据库对每个文档进行计算,这将无法满足其性能保证。
你可以做的是从第二个用户那里获取一定范围内的文档。 geoqueries, but you can also read some of these previous questions on the topic 上的 Firestore 文档对此进行了描述,其中许多使用附加库来完成相同的任务。
检索到范围内的文档后,您需要在应用程序代码中按距离对它们进行排序。
我有一个类似于 Tinder 的约会应用程序,但对于特定的利基市场,该应用程序将用户的纬度和经度存储在 Cloud Firestore 数据库中的文档中,我有一种方法 returns 与以米为单位的用户,我为此使用了 GeoLocator,因此我知道当前用户和另一个用户之间的距离。
static String getDistanceBetween({
double sourceLat,
double sourceLong,
double currentLat,
double currentLong
}) {
double _distanceInMeters = Geolocator.distanceBetween(
sourceLat,
sourceLong,
currentLat,
currentLong,
);
print(_distanceInMeters);
if(_distanceInMeters == null){
return "?";
} else if(_distanceInMeters == 0.0){
return "0";
} else {
return _distanceInMeters.toString().substring(0, 5);
}
}
当用户登录时,我想先检索最近的用户,从当前登录用户检索最近用户的文档最简单的方法是什么?
如果我能做这样的事情,我认为它可以解决问题,但我认为使用 Firestore 是不可能的:
FirebaseFirestore.instance.collection("users").orderBy(getDistanceBetween(), descending: true).get().then((querySnapshot){
...
/// Get documents from users that are nearest to the current user
})
无法按距离排序,因为这需要数据库对每个文档进行计算,这将无法满足其性能保证。
你可以做的是从第二个用户那里获取一定范围内的文档。 geoqueries, but you can also read some of these previous questions on the topic 上的 Firestore 文档对此进行了描述,其中许多使用附加库来完成相同的任务。
检索到范围内的文档后,您需要在应用程序代码中按距离对它们进行排序。