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

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

Требования к версиям

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

Подготовка

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

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

Чтобы выполнить геопространственный запрос, используйте выражение 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 */)
  });