@Limonardo

Как получить город по геоданным телеграм бота?

Добрый день! Начал изучать Python и решил написать первого телеграм бота.
Возникла проблема, не получается написать скрипт который бы определял город пользователя по координатам.
Ниже код:

import telebot
from telebot import types
import keyboard #
from geopy.geocoders import Nominatim

bot = telebot.TeleBot("1354013020:AAHfxxYu6JV32xcGKb7wh5xx5Lf8u_q12xs")

@bot.message_handler(commands=["start"])
def start (message):
#Клавиатура с кнопкой запроса локации
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
button_geo = types.KeyboardButton(text="Отправить местоположение", request_location=True)
keyboard.add(button_geo)
bot.send_message(message.chat.id, "Поделись местоположением", reply_markup=keyboard)

geolocator = Nominatim(user_agent = "name_of_your_app")

#Получаю локацию
@bot.message_handler(content_types=['location'])
def location (message):
print(message.location.latitude, message.location.longitude)

#Определяю город
location = geolocator.reverse(message.location.latitude, message.location.longitude )
print(location.address)

В результате ошибка: reverse() takes 2 positional arguments but 3 were given
Из ошибки видно что message лишнее значение для reverse() и нужно передавать только latitude и longitude но, только
я не знаю как из message.location.latitude, message.location.longitude выделить их .
  • Вопрос задан
  • 646 просмотров
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
Посмотрите пример использования - https://geopy.readthedocs.io/en/stable/

Координаты должны передаваться первым параметром в виде строки, где координаты разделены пробелом

Можно, например, так
location = geolocator.reverse('{} {}'.format(message.location.latitude, message.location.longitude))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы