Используйте геопространственный поиск

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

Требования к изданию

Для работы функции геопространственного поиска требуется база данных Firestore Enterprise Edition.

Прежде чем начать

Для выполнения геопространственного поиска необходимо сначала создать геопространственные индексы для полей, по которым необходимо выполнить поиск.

Для выполнения геопространственного поиска используйте выражение geoDistance в качестве параметра query на этапе search(...) .

Поддерживается только оператор "меньше или равно" ( <= ). Расстояние измеряется в метрах.

Например, следующий запрос находит все рестораны в радиусе 1000 метров от указанной геоточки.

Web

firestore.pipeline().collection('restaurants')
  .search({
    query: field('location')
      .geoDistance(new GeoPoint(38.989177, -107.065076))
      .lessThan(1000 /* m */)
  });
iOS
firestore.pipeline().collection("restaurants")
    .search(
        query: Field("location")
            .geoDistance(GeoPoint(latitude: 38.989177, longitude: -107.065076))
            .lessThan(1000)
    )
Android
firestore.pipeline()
        .collection("restaurants")
        .search(new SearchOptions()
                .withQuery(field("location")
                        .geoDistance(new GeoPoint(38.989177, -107.065076))
                        .lessThan(1000 /* meters */)));
Node.js
firestore.pipeline().collection('restaurants')
  .search({
    query: field('location')
      .geoDistance(new GeoPoint(38.989177, -107.065076))
      .lessThan(1000 /* m */)
  });