Как в инлайн режиме получить список ближайших достопримечательностей с учетем их координат

Рейтинг: 0Ответов: 1Опубликовано: 21.01.2023

Есть метод inline_query.location, который возвращает локацию пользователя, если он пользуется ботом со смартфона. Существует ли метод, который выберет из списка достопримечательностей одну самую ближайшую и покажет ее в инлайн списке (ну или несколько, отсортированных по увеличению расстояния до достопримечательности)? Или наполнение инлайн списка нужно делать самостоятельно каким-нибудь методом Sort() по минимальному значению переменной принимающей значение расстояния рассчитываемого по разнице координат inline_query.location и координат достопримечательностей? Подскажите как лучше реализовать такую фичу?

Ответы

▲ 0

Посоветую Haversine formula - формула хаверсина. Она поможет создать список достопримечательностей с их координатами и для расчета расстояния между каждой достопримечательностью и местоположением пользователя. Потом можно взять метод sort() для сортировки списка достопримечательностей по миним.расстоянию. И только потом примени метод inline_query, чтобы отобразить список достопримеч. в инлайн списке.

пример:

import math

def haversine_distance(lat1, lon1, lat2, lon2):
    R = 6371 # radius of Earth in kilometers
    phi1 = math.radians(lat1)
    phi2 = math.radians(lat2)
    delta_phi = math.radians(lat2 - lat1)
    delta_lambda = math.radians(lon2 - lon1)
    a = math.sin(delta_phi / 2)**2 + math.cos(phi1) * math.cos(phi2) * math.sin(delta_lambda / 2)**2
    c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a))
    distance = R * c
    return distance

land