Как в инлайн режиме получить список ближайших достопримечательностей с учетем их координат
Есть метод inline_query.location, который возвращает локацию пользователя, если он пользуется ботом со смартфона. Существует ли метод, который выберет из списка достопримечательностей одну самую ближайшую и покажет ее в инлайн списке (ну или несколько, отсортированных по увеличению расстояния до достопримечательности)? Или наполнение инлайн списка нужно делать самостоятельно каким-нибудь методом Sort() по минимальному значению переменной принимающей значение расстояния рассчитываемого по разнице координат inline_query.location и координат достопримечательностей? Подскажите как лучше реализовать такую фичу?
Ответы (1 шт):
Посоветую 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