Firestore двойной запрос запроса поля (и с GeoPoint) - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть коллекция документов с двумя полями: местоположение (Geopoint) и расстояние (Number). Пользовательский ввод - это другое местоположение (Geopoint).

Я должен вернуть все документы, где расстояние между местоположением документа и местоположением ввода меньше расстояния документа.

В этом учебном пособии показано, как выполнять запросы о расположении поблизости, но как я могу вставить в уравнение расстояние, если оно не указано пользователем, но отличается для каждого документа?

Ответы [ 2 ]

3 голосов
/ 10 апреля 2020

Я нашел решение.

Вместо сохранения геопункта и радиуса (представляющего круг) я могу сохранить ограниченный квадрат, поэтому я буду хранить две долготы (долгота геопункта + и радиус) ) и две широты (географическая широта + и - радиус). Затем я могу сделать сложный запрос из 4 частей, чтобы увидеть, находится ли пользовательский геопоинт в квадрате.

В любом случае, это несовершенное решение, поскольку в приближении окружности / квадрата недостаточно точности, но в мой конкретный случай, это не имеет значения. Поэтому, если в вашем случае точность имеет значение, вы можете сохранить радиус (или рассчитать по ширине квадрата), а затем создать фильтр для запрашиваемых объектов.

Обобщение , этот метод можно легко применить для любого многоугольника:

  1. Сохраните в документе пожарного депо координаты многоугольника и описанный прямоугольник.
  2. Запросите документы в Firestore, используя четыре прямоугольных координаты
  3. Фильтруйте результаты используя оригинальные полигоны.
1 голос
/ 10 апреля 2020

Вам нужно будет рассчитать ограничивающую рамку для вашего запроса на основе позиции, введенной пользователем, и максимального расстояния, для которого вы хотите вернуть результаты. При использовании геохешей (как и в учебнике) вам действительно нужно рассчитать четыре ограничивающие рамки: по одному в каждом квадранте от центра результатов, введенных пользователем.

Если вы никогда этого не делали, это может быть немного трудно сделать это самостоятельно, поэтому, вероятно, автор учебника не рассматривает это. Но есть несколько Geo-библиотек для Firestore , которые делают это для вас, и я настоятельно рекомендую проверить их.

Если вы хотите узнать больше о том, как весь поиск процесс работает, я рекомендую проверить видео моего выступления некоторое время go: Запрос Firebase и Firestore на основе географического положения c местоположение или расстояние .

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