Подтвердить что ты не робот

Есть ли способ использовать GeoFire с Firestore?

GeoFire тесно связан с базой данных Realtime, а гео-запросы - это общая функциональная зависимость многих приложений, которые хотят перейти на Firestore. Есть ли способ воспроизвести хеширование/поиск местоположений в среде Firestore?

4b9b3361

Ответ 1

ОТЛИЧНЫЕ НОВОСТИ. Теперь есть библиотека для iOS и Android, которая копирует GeoFire для Firestore. Библиотека называется GeoFirestore. Он имеет полную документацию и хорошо проверен. В настоящее время я использую его в своем приложении, и он работает блестяще. Код очень похож на код GeoFire, поэтому изучение займет всего несколько минут.

Ответ 2

Редактировать (1 июля 2019 г.): Когда я первоначально написал ответ ниже, я с оптимизмом ожидал, что нативные гео-запросы скоро поступят в Cloud Firestore, что явно не произошло. Это все еще в долгосрочных планах, но на данный момент лучший вариант - это использовать созданную сообществом библиотеку или создать свою собственную, используя либо GeoHashes, либо библиотеку S2 Geometry.

Библиотеки GeoFire для базы данных Realtime были построены с использованием GeoHashes, и перенос логики этих библиотек в Cloud Firestore должен быть относительно простым.


Сэм из команды Cloud Firestore здесь. Как сказал SUPERCILEX, Cloud Firestore уже поддерживает тип данных GeoPoint. Мы прилагаем все усилия, чтобы привнести в продукт собственные гео-запросы.

Поскольку исходные гео-запросы поступают, мы не будем переносить GeoFire в Cloud Firestore. Вместо этого мы перенаправим эти инженерные усилия на скорейшее получение собственных запросов.

Если вам нужны гео-запросы сегодня и вы не хотите создавать свою собственную библиотеку, используйте базу данных реального времени!

Ответ 3

Решение, которое приходит на ум, состоит в том, чтобы добавить базу данных реального времени только для гео-запросов и синхронизировать две базы данных с облачными функциями, во многом как Google предлагает с присутствием.

В моем случае даже не нужно много синхронизировать; Я просто веду список идентификаторов пользователей с их местоположением в базе данных реального времени и выполняю там все гео-запросы.

Ответ 4

Новый проект был введен, так как оригинальный постер сначала задает этот вопрос. Проект называется GEOFirestore.

С помощью этой библиотеки вы можете выполнять запросы, такие как документы документов внутри круга:

  const geoQuery = geoFirestore.query({
    center: new firebase.firestore.GeoPoint(10.38, 2.41),
    radius: 10.5
  });

Вы можете установить GeoFirestore через npm. Вам придется установить Firebase отдельно (потому что это одноранговая зависимость от GeoFirestore):

$ npm install geofirestore firebase --save

Ответ 5

Cloud Firestore изначально поддерживает гео-точки. Смотрите поддерживаемые типы данных. И вы найдете класс GeoPoint который вы можете использовать для задания данных, а также для запроса к ним:

query.whereEqualTo("location", GeoPoint(lat, long))

Ответ 6

Решением Javascript для GeoQuery с Firestore является использование GeoFirestore, как сказал Никхил Шридхар. Но это довольно сложно использовать (или это было для меня).

Прежде всего вы должны инициализировать ссылку GeoFirestore.

var firebase = require('firebase-admin'); 
var GeoFirestore = require('geofirestore');
// Create a Firestore reference
const firestore = firebase.firestore();
// Create a GeoFirestore reference
const geofirestore = new GeoFirestore.GeoFirestore(firestore);
// Create a collection reference but using geofirestore collections
// this is where you save the geofirestore documents with its structure
const geocollection = geofirestore.collection('userPositions');

После инициализации вашей коллекции первым шагом является сохранение документа с указанной структурой.

{
   g: string;
   l: GeoPoint;
   d: DocumentData;
}

geofirestore.collection('userPositions').doc(id).set({ coordinates: new firebase.firestore.GeoPoint(0, 0)}).then(res => {
    return res;
  }).catch(err => {
    console.log(err);
  });

Только когда у вас есть коллекция с документами геоинформационного хранилища, вы можете запросить их, как показано в примере.

// Create a GeoQuery based on a location
  const query = geocollection.near({ center: new firebase.firestore.GeoPoint(0, 0), radius: 1000 });

  // Get query (as Promise)
  query.get().then((value) => {
    console.log(value.docs); // All docs returned by GeoQuery
  });

Надеюсь, что эти шаги помогут вам!