如何在 Flutter 中查询 Firebase Firestore 中 Geopoint 类型的字段?

问题描述 投票:0回答:1

我正在查询 firestore 集合以查找纬度和经度范围内的文档。由于看来您无法使用给定两个不同字段(“lat”、“lon”)的参数进行查询,因此我已将 Geopoint 类型分配给具有经度和纬度的单个字段“coords”。如何将 .where() 与地理点一起使用?下面是我想要使用的一般查询,其中 _latMin、_latMax 等是链接到我的地图边界框的变量。

_getDocs() async {
  print('getdocs');
  final QuerySnapshot snapshot = await FirebaseFirestore.instance
      .collection('collectionName')
      .where(
        'coords',
        isGreaterThan: _latMin,
        isLessThan: _latMax,
      )
      .where(
        'coords',
        isGreaterThan: _lonMin,
        isLessThan: _lonMax,
      )
      .get();
  snapshot.docs.forEach((DocumentSnapshot doc) {
    print(doc.data());
  });
}

如何引用坐标内的纬度和经度?

firebase flutter google-cloud-firestore
1个回答
13
投票

更新(2024 年 4 月):Firestore 最近添加了在单个查询中的多个字段上具有不等式和范围条件的功能。有关完整详细信息,请参阅在多个字段上使用范围和不等式过滤器进行查询在多个字段上使用范围和不等式过滤器优化查询的文档。


下面是旧答案👇

Firestore 查询只能包含一个值的范围条件(

>
>=
等)。因此,您可以过滤coords的纬度或经度,但不能在单个查询中同时过滤两者。
如果您目前想在 Firestore 上执行地理查询,常见的方法是在文档中存储一个额外的所谓的 

geohash

值,这是一个(相当神奇的)字符串值,以某种方式组合了纬度和经度允许您查询它们以过滤地理块。

如果您想了解其工作原理,我建议您观看有关该主题的视频:

根据地理位置或距离查询 Firebase 和 Firestore

如果您想在 Firestore 上实现此方法,请查看有关

在 Firestore 上实现地理查询

的文档。 我还建议您查看之前有关该主题的问题:

    如何使用 firestore 运行地理“附近”查询?
  • 如何使用函数过滤Firestore收集数据(用于位置距离过滤)
  • 有没有办法将 GeoFire 与 Firestore 结合使用?
  • Firestore 多范围查询
© www.soinside.com 2019 - 2024. All rights reserved.