首页 > 解决方案 > Firestore:使用边界查询地理点(lessThan/moreThan)

问题描述

我想使用从地图中获取的边界框按地理点查询文档集合。我有界限:

北:50.730

东:-1.861

南部:50.700

西部:-1.893

这是我的实际文档结构(基于我希望它返回的值):

document: {
  d: {
    coordinates: GeoPoint [50.72, -1.87]
  }
}

这是我正在尝试的,但它不起作用:

db
  .collection('exploreMap')
  .where('d.coordinates.latitude', '<=', NORTH)
  .where('d.coordinates.latitude', '>=', SOUTH)
  // .where('d.coordinates.longitude', '<=', EAST)
  // .where('d.coordinates.longitude', '>=', WEST)
  .limit(80)
  .get()

它只返回一个空查询,没有错误。我已经尝试过 EAST/WEST 查询和 NORTH/SOUTH,结果都相同。

我知道我不能做一个完整的盒子查询,因为 Firestore 不支持多个字段的 .where(),所以做一个简单的纬度或经度查询就可以了。然后我可以在返回结果时手动过滤。

有人可以告诉我我做错了什么吗?

标签: javascriptfirebasegoogle-cloud-firestore

解决方案


我还没有找到一种方法来查询经度或纬度。但是,如果您GeoPoint使用正确的纬度进行创作,它对我有用。

这将返回我的集合中纬度在 35 到 40 之间的所有文档:

var NORTH = new firebase.firestore.GeoPoint(40, 0);
var SOUTH = new firebase.firestore.GeoPoint(35, 0);

db
  .collection('10k')
  .where('location', '<=', NORTH)
  .where('location', '>=', SOUTH)

工作示例:https ://jsbin.com/yatisun/edit?js,console

由于 Firestore 先按纬度排序地理点,然后再按经度排序,因此您不能仅按经度进行过滤。一旦知道要返回的纬度的确切值(所以不是范围),您只能过滤经度​​。


推荐阅读