Лучший способ вычисления ближайшего расстояния с помощью Google API и Django
У меня есть страница со списком людей, и я хотел бы, чтобы пользователь нажал кнопку для сортировки этого списка по ближайшему расстоянию. Список состоит из объектов с переменными LON и LAT для долготы и широты.
Я сделал функцию, которая вычисляет расстояние на основе Google Distance Matrix API. Вот функция:
def calculateDistance(lat1, lon1, lat2, lon2):
gmaps = googlemaps.Client(key=config('MATRIX_API'))
matrix = gmaps.distance_matrix((lat1,lon1), (lat2,lon2), mode="driving")
print(matrix['rows'][0]['elements'][0]['distance']['text'])
Я хотел бы знать, какой лучший способ вычислить расстояние для всех людей в списке и упорядочить его внутри представления, которое рендерит страницу, не создавая очень большую нагрузку на сервер.
Мне пришла в голову идея, сделать это в фоновом режиме (используя Django Celery) и хранить расстояния в базе данных, чтобы сортировка происходила путем получения расстояний из БД, а не делать вызовы API каждый раз, когда человек обновляет страницу, например:
class Distances(models.Model):
visitor = models.ForeignKey(Visitor..... # Visitor looking for people
person = models.ForeignKey(Person.... # Person on the list
dist = models.CharField(.......
А функция выше, выполняется в фоновом режиме каждый раз, когда в базу данных добавляется новый человек, или человек меняет свои данные lon/lat.
Что вы думаете? И есть ли у вас лучший способ? Спасибо.
PS: Имейте в виду, что в этом случае таблица будет довольно огромной, если у нас было 1000 посетителей и 5000 человек в списке, то в таблице будет 5 миллионов записей)