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

Вы можете выполнять геопространственные запросы в 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 */)
  });