我正在查询 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());
});
}
如何引用坐标内的纬度和经度?
更新(2024 年 4 月):Firestore 最近添加了在单个查询中的多个字段上具有不等式和范围条件的功能。有关完整详细信息,请参阅在多个字段上使用范围和不等式过滤器进行查询和在多个字段上使用范围和不等式过滤器优化查询的文档。
下面是旧答案👇
Firestore 查询只能包含一个值的范围条件(
>
、>=
等)。因此,您可以过滤coords
的纬度或经度,但不能在单个查询中同时过滤两者。如果您目前想在 Firestore 上执行地理查询,常见的方法是在文档中存储一个额外的所谓的 geohash值,这是一个(相当神奇的)字符串值,以某种方式组合了纬度和经度允许您查询它们以过滤地理块。
如果您想了解其工作原理,我建议您观看有关该主题的视频:
根据地理位置或距离查询 Firebase 和 Firestore。 如果您想在 Firestore 上实现此方法,请查看有关
在 Firestore 上实现地理查询