首页 > 解决方案 > 如何在 Flutter 中仅显示一英里内的帖子

问题描述

我正在尝试制作一个可以显示用户附近帖子的功能。

从我的代码中,首先我从火力库(timelineLocalRef)读取数据,这样

getTimelineLocal() async {
QuerySnapshot snapshotLocal = await timelineLocalRef
    .doc('test')
    .collection('userPosts')
    .orderBy('timestamp', descending: true)
    .get();

List<PostL> postsLocal =
    snapshotLocal.docs.map((doc) => PostL.fromDocument(doc)).toList();
setState(() {
  this.postsLocal = postsLocal;
});

在timelineRef中,帖子的信息被保存,这样,

在此处输入图像描述

获得发布信息后,我还将使用 Geolocator 获取用户位置。

  getUserLocation() async {
    Position position = await Geolocator()
        .getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
    posXuser = position.latitude;
    posYuser = position.longitude;
  }

有了用户位置(posXuser,posYuser)和发布位置(posX,posY),我应该能够使用下面的函数计算两者之间的距离。

  double calculateDistance(lat1, lon1, lat2, lon2) {
    var p = 0.017453292519943295;
    var c = cos;
    var a = 0.5 -
        c((lat2 - lat1) * p) / 2 +
        c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p)) / 2;
    return 0.621371 * 12742 * asin(sqrt(a));
    //return mile distance
  }

所以我想要的是从第一个代码开始,当我在本地发布帖子时,我只想导入 1 英里外的帖子。你能帮我制作一个条件映射快照吗?

标签: flutterdartlocation

解决方案


您需要执行查询服务器端。Firebase 对这种查询的支持有限:

Cloud Firestore 仅允许每个复合查询使用单个范围子句,这意味着我们无法通过简单地将纬度和经度存储为单独的字段并查询边界框来执行地理查询。

https://firebase.google.com/docs/firestore/solutions/geoqueries


推荐阅读