Сравнение двух чисел с разной точностью машинописной базы - PullRequest
0 голосов
/ 08 января 2020

Я использую Firebase, и я хочу получить пользователей, которые имеют определенные c адресные координаты.

Для этого я использую этот метод

 showPopUpInfo(longitude:any, latitude:any){
    return this.afs.collection('Utilizador',ref=>ref.where('morada.Coordenadas.latitude', '==', latitude).where('morada.Coordenadas.longitude', '==' , longitude)).get()
}

значения переменных широта и долгота:

долгота: -8.364

широта: 41.237

Моя база данных "Utilizador" документ:

enter image description here

результат запроса:

enter image description here

По моему мнению, пользователь не найден, потому что, несмотря на значения широта и долгота одинаковы, разность широты и долготы различна, но я не знаю, как решить эту проблему

Ответы [ 2 ]

1 голос
/ 08 января 2020

Более типичным подходом для поиска объектов в определенном месте является использование гео-запросов на основе диапазонов. С достаточно небольшим диапазоном вы можете получить именно тот результат, который вам нужен. К сожалению, такие гео-запросы на данный момент не встроены в Firestore.

И поскольку запросы Firestore могут содержать фильтр диапазона только для одного поля, вы не можете напрямую использовать долготу и широту. Вместо этого большинство разработчиков используют решение, основанное на этом, основанное на Geohashes . Геохешы объединяют широту и долготу в одно (буквенно-цифровое) значение, которое можно отфильтровать по диапазонам.

Чтобы узнать больше о запуске гео-запросов в Firestore, я бы порекомендовал посмотреть видео моего выступления в топи. c. Но, безусловно, также ознакомьтесь с этими другими вопросами, в которых рассматриваются топовые вопросы c геоквартирования в Firestore:

1 голос
/ 08 января 2020

На самом деле значения документа для широты и долготы хранятся в виде строк, как показано на этом снимке экрана. Вы можете сказать, потому что у них есть цитаты вокруг них. Если навести указатель мыши на это поле, вы также увидите «(строку)» справа.

Если вы используете числовые значения в запросе, запрос будет никогда соответствовать этот документ, потому что Firebase не считает любое число равным какой-либо строке.

Если ваш запрос фактически использует те же самые строки, вы найдете совпадение. Но хранить числа в виде строк, как правило, не рекомендуется, поскольку вы потеряете возможность корректно выполнять диапазонные запросы для этих числовых значений, поскольку строки сортируются иначе, чем числа.

Один совет - не используйте TypeScript введите any в вашей функции. Укажите c и примите только string или number, как того требует запрос. Это поможет вызвать ошибки в вашем коде, если вы передаете что-то неправильного типа.

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