我有一个可以从Firebase (Cloud Firestore)查询的办公室集合,然后我只需要显示距离用户一定距离(比如20英里)内的办公室。我不能使用db.collection('offices').where(...)对于此查询。
我必须查询所有办公室,然后计算每个办公室与当前用户的距离,如果距离小于20英里,我将列出该用户的办公室。但问题是,我的收藏中可能有数百万个办公室,这意味着对于每个用户,我读取数百万个数据来显示,可能只有不到100个办公室将在他/她的20英里范围内。
这里的2个问题- 1)我如何在不阅读集合中的所有文档的情况下执行此查询。2)如何对结果进行分页,以便即使有100个办公室落在所需距离内,我仍然希望以10个为一批显示(获取前10个过滤的文档,一旦用户滚动到末尾,则获取下一个10个文档,依此类推)。
发布于 2020-08-30 13:57:33
您可以使用geolocator包来存储办公室的纬度和经度,然后使用where子句来过滤位置。这篇文章包含如何实现地理定位器包:Obtain coordinates from an address flutter
获取并保存每个办公室的地理定位器后,可以使用两个where子句进行查询,如下所示:
// Get user's latitude and longitude from current location and then
var lat = userLatitude;
var long = userLongitude;
Firestore.instance
.collection('addresses')
.where('latitude', isLessThanOrEqualTo: lat)
.where('longitude', isLessThanOrEqualTo: long)
.getDocuments()
.then(snapshots => {
// Do Stuff here
});
https://stackoverflow.com/questions/63653640
复制相似问题