Лучший способ вычисления ближайшего расстояния с помощью 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 миллионов записей)

Вернуться на верх