Firestore:使用范围(lessThan / moreThan)查询地理位置

时间:2019-06-06 10:45:31

标签: javascript firebase google-cloud-firestore

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

北方:50.730

东部:-1.861

SOUTH:50.700

WEST:-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(),因此可以进行简单的纬度或经度查询。然后,我可以手动过滤返回结果的时间。

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

1 个答案:

答案 0 :(得分:1)

我还没有找到只查询经度或纬度的方法。但是,如果您以正确的纬度创建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会先按纬度和经度排序地理点,所以您不能仅按经度进行过滤。一旦知道了要返回的确切纬度值(因此就没有范围),就只能过滤经度​​。