В 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 */) });