如何使用 geofirestore 查询设定半径内的所有地理查询?
How to query all geoqueries in a set radius with geofirestore?
我正在尝试查询云火存储,它应该 return 半径范围内的所有地理点,比如说,给定地理点的 10.5 公里。我正在尝试使用 geofirestore 来实现这一目标。我试过使用地理查询,但我找不到方法或 属性 return 是这个。我的问题似乎有一个相当简单的答案,但我对 firebase 和 geofirestore 都是新手。谢谢。
到目前为止我的代码:
document.addEventListener('DOMContentLoaded', () => {
const app = firebase.app();
});
var db = firebase.firestore();
db.settings({
timestampsInSnapshots: true
});
const collectionRef = firebase.firestore().collection('geofirestore');
// Create a GeoFirestore index
const geoFirestore = new GeoFirestore(collectionRef);
const post1 = db.collection('posts').doc('firstpost');
const test = {lat: 39.369048, long: -76.68229}
const geoQuery = geoFirestore.query({
center: new firebase.firestore.GeoPoint(10.38, 2.41),
radius: 10.5,
query: (ref) => ref.where('d.count', '==', '1')
});
console.log(geoQuery.query());
我认为文档可能不清楚,但这是正在发生的事情。
下面的代码创建一个 GeoFirestoreQuery:
const geoQuery = geoFirestore.query({
center: new firebase.firestore.GeoPoint(10.38, 2.41),
radius: 10.5,
query: (ref) => ref.where('d.count', '==', '1')
});
如果您想进行地理查询,您可以使用 on
事件的 key_entered
侦听器,该事件将 return 记录在您的查询中,see here。
但是您正在调用 query
函数,它 return 是 Firestore 查询或 CollectionReference(取决于您在创建或更新查询条件时是否传入了查询函数)。
在此 query
上调用 get
绕过 GeoFirestore 的所有神奇优点,并且不会为您提供您想要或期望的东西......相反,您想要做这样的事情.
// Store all results from geoqueries here
let results = [];
// Create geoquery
const geoQuery = geoFirestore.query({
center: new firebase.firestore.GeoPoint(10.38, 2.41),
radius: 10.5,
query: (ref) => ref.where('d.count', '==', '1')
});
// Remove documents when they fall out of the query
geoQuery.on('key_exited', ($key) => {
const index = results.findIndex((place) => place.$key === $key);
if (index >= 0) results.splice(index, 1);
});
// As documents come in, add the $key/id to them and push them into our results
geoQuery.on('key_entered', ($key, result) => {
result.$key = $key;
results.push(result);
});
我正在尝试查询云火存储,它应该 return 半径范围内的所有地理点,比如说,给定地理点的 10.5 公里。我正在尝试使用 geofirestore 来实现这一目标。我试过使用地理查询,但我找不到方法或 属性 return 是这个。我的问题似乎有一个相当简单的答案,但我对 firebase 和 geofirestore 都是新手。谢谢。
到目前为止我的代码:
document.addEventListener('DOMContentLoaded', () => {
const app = firebase.app();
});
var db = firebase.firestore();
db.settings({
timestampsInSnapshots: true
});
const collectionRef = firebase.firestore().collection('geofirestore');
// Create a GeoFirestore index
const geoFirestore = new GeoFirestore(collectionRef);
const post1 = db.collection('posts').doc('firstpost');
const test = {lat: 39.369048, long: -76.68229}
const geoQuery = geoFirestore.query({
center: new firebase.firestore.GeoPoint(10.38, 2.41),
radius: 10.5,
query: (ref) => ref.where('d.count', '==', '1')
});
console.log(geoQuery.query());
我认为文档可能不清楚,但这是正在发生的事情。
下面的代码创建一个 GeoFirestoreQuery:
const geoQuery = geoFirestore.query({
center: new firebase.firestore.GeoPoint(10.38, 2.41),
radius: 10.5,
query: (ref) => ref.where('d.count', '==', '1')
});
如果您想进行地理查询,您可以使用 on
事件的 key_entered
侦听器,该事件将 return 记录在您的查询中,see here。
但是您正在调用 query
函数,它 return 是 Firestore 查询或 CollectionReference(取决于您在创建或更新查询条件时是否传入了查询函数)。
在此 query
上调用 get
绕过 GeoFirestore 的所有神奇优点,并且不会为您提供您想要或期望的东西......相反,您想要做这样的事情.
// Store all results from geoqueries here
let results = [];
// Create geoquery
const geoQuery = geoFirestore.query({
center: new firebase.firestore.GeoPoint(10.38, 2.41),
radius: 10.5,
query: (ref) => ref.where('d.count', '==', '1')
});
// Remove documents when they fall out of the query
geoQuery.on('key_exited', ($key) => {
const index = results.findIndex((place) => place.$key === $key);
if (index >= 0) results.splice(index, 1);
});
// As documents come in, add the $key/id to them and push them into our results
geoQuery.on('key_entered', ($key, result) => {
result.$key = $key;
results.push(result);
});