我想使用从地图中获取的边界框按地理点查询文档集合。我有界限:
北方: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(),因此可以进行简单的纬度或经度查询。然后,我可以手动过滤返回结果的时间。
有人可以告诉我我在做什么错吗?
答案 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会先按纬度和经度排序地理点,所以您不能仅按经度进行过滤。一旦知道了要返回的确切纬度值(因此就没有范围),就只能过滤经度。