Flutter Firestore Geo查询

时间:2019-06-19 19:17:14

标签: firebase flutter geolocation google-cloud-firestore geo

我该怎么做:

我正在构建一个应用程序,该应用程序要在firebase中进行查询并接收X公里范围内的用户。 但是我想限制接收到的文档,并且要具有在滚动条上获取更多文档的功能。我使用StreamBuilder->ListView.build来建立清单。当我要接收可滚动列表的末尾时,我想从Firestore获取更多文档(如果有的话)。


我已经完成的事情:

到目前为止,我只找到了2个解决问题的方法:

  1. Firestore Helpers
  2. GeoFlutterFire

问题:

这两个库都很好,但只存在一个 BIG 问题,在这两种情况下,我都无法限制要接收的文档数量(我可以将原始查询限制为Firestore.instance.collection("MyColection")),但不会对我有太大帮助,因为我会遇到这种情况

  

从Firestore给我10个文档->给我5公里范围的用户->   假设我只会收到4个。

我想要的是从Firestore接收X范围内的10个文档。

这个问题有解决方案吗?还是我需要为此实现自己的库?还是不可能?

2 个答案:

答案 0 :(得分:0)

GeoPoint userGeoPoint = user.geoPoint [“ geopoint”];

//距离(以英里为单位) 两倍距离= 30;

double lat = 0.0144927536231884;
double lon = 0.0181818181818182;
double lowerLat = userGeoPoint.latitude - (lat * distance);
double lowerLon = userGeoPoint.longitude - (lon * distance);

double greaterLat = userGeoPint.latitude + (lat * distance);
double greaterLon = userGeoPint.longitude + (lon * distance);

GeoPoint lesserGeopoint = GeoPoint(lowerLat, lowerLon);
GeoPoint greaterGeopoint = GeoPoint(greaterLat, greaterLon);
Query query = Firestore.instance
    .collection(path)
    .where("geoPoint.geopoint", isGreaterThan: lesserGeopoint)
    .where("geoPoint.geopoint", isLessThan: greaterGeopoint)
    .limit(limit);

这对我有用。希望对您有所帮助。

答案 1 :(得分:0)

有点晚了,但我遇到了同样的问题,我决定构建一个具有远程订购和限制功能的外部服务器。服务器存储包含地理点和 Firestore 文档 ID 的对象。

  1. 客户端向服务器发送带有中心点和半径的请求。
  2. 服务器返回文档 ID 列表。
  3. 根据提供的 ID 从 Firestore 中获取文档。

我想出的最好的。