Как запросить все гео-запросы в заданном радиусе с помощью гео-хранилища? - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь сделать запрос к облачному пожарному хранилищу, которое должно вернуть все геопоинты в радиусе, скажем, 10,5 км от данного геопункта. Я пытаюсь использовать geofirestore для достижения этой цели. Я пытался использовать геоквартиры, но я не могу найти метод или свойство, которое возвращает это. Мой вопрос выглядит так, как будто у него довольно простой ответ, но я новичок в 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());

1 Ответ

0 голосов
/ 06 ноября 2018

Я думаю, что документация может быть неясной, но вот что происходит.

Приведенный ниже код создает 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, которое будет возвращать документы в вашем запросе, см. Здесь .

Однако вы вызываете функцию query, которая возвращает запрос Firestore или CollectionReference (в зависимости от того, передали ли вы функцию запроса при создании или обновлении критериев запроса).

Вызов get на этом query ОБОЖАЕТ все магическое добро 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);
});
...