Алгоритм для нахождения расстояния между несколькими координатами (широта/долгота) динамическими и статическими

#algorithm #flutter #logic #distance #tinder

#алгоритм #flutter #Логические #расстояние #tinder

Вопрос:

Я создаю приложение на Flutter, которое будет иметь некоторые смешанные функции, такие как классифицированное приложение / Tinder. Мне нужна логика или какое-то предложение о том, как этого можно достичь. Пожалуйста, будьте терпеливы с моим объяснением.

Пример использования: Пользователь A: публикует объявление о продаже своего телевизора и добавляет свой адрес в объявление — (широта и долгота) Пользователь B: В том же приложении он ищет телевизионную рекламу, но устанавливает радиус поиска равным 5 км. (У нас есть местоположение пользователя B с его устройства. Широта / долгота)

  • Теперь в моей таблице items_db информация о телевизионной рекламе сохраняется вместе с местоположением
  • Чтобы показать пользователю B телевизор рядом с ним; Я могу рассчитать расстояние между элементом и пользователем (используя Google API)
  • Но чтобы показать ему весь телевизор рядом с ним, мне нужно будет сначала рассчитать расстояние между пользователем и ВСЕМИ элементами, доступными в Classified / items_db, чтобы выяснить, сколько из них на самом деле находятся под 5-километровым фильтром, который он применил.
  • Прямо сейчас мы говорим о 1 пользователе: Но тогда, если у меня 1000 пользователей, мне нужно будет вычислить расстояние между ВСЕМИ элементами относительно положения всех пользователей, а затем показать ему только те, которые находятся в указанном диапазоне (т. Е. 5 км или 10 км)

Это кажется слишком большим или просто плохим, чтобы быть реализованным таким образом. Итак, мой вопрос в том, как мы это делаем?


Если это было недостаточно ясно, используйте Tinder в качестве примера здесь:

Когда я выбираю в Tinder, что «покажите мне людей только в радиусе 2 км». Тогда откуда Tinder это знает? Я имею в виду, чтобы выяснить, кто находится на расстоянии 2 км; сначала им нужно будет рассчитать расстояние для ВСЕХ ДОСТУПНЫХ ПОЛЬЗОВАТЕЛЕЙ, чтобы увидеть, какие из них могут быть показаны конечному пользователю, которые соответствуют критериям 2 km!! Как это там делается?

Ответ №1:

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

В общем, вам нужно найти ближайших соседей каждой точки. То есть вам нужно только найти другие точки, которые находятся на некотором заданном расстоянии. Обычно это называется поиском ближайшего соседа. Для этого не существует единого наилучшего метода, и действительно, производительность может сильно различаться в зависимости от ваших точных данных, но два метода, которые могут заслуживать рассмотрения, — это хеширование с учетом местоположения, которое использует хеш-функцию, которая пытается поместить похожие точки в одни и те же сегменты (или даже в сегменты, которые близки) так что вам нужно только проверить эти сегменты, чтобы найти соседей, и k-d деревья, структура данных, разработанная с учетом поиска ближайших соседей.

Комментарии:

1. Я понимаю это, но, честно говоря, не уверен, как это можно внедрить в мое приложение. Просто для простоты, мне интересно, как это делает Tinder!