from geopy.geocoders import Nominatim import requests import pandas as pd
# Функция для получения координат по адресу def get_coordinates(address): geolocator = Nominatim(user_agent="name") try: location = geolocator.geocode(address, timeout=10) if location: return location.latitude, location.longitude else: print("Не удалось найти координаты для адреса.") return None, None except Exception as e: print(f"Ошибка при геокодировании: {e}") return None, None
# Функция для поиска адресов в радиусе def get_addresses_in_radius(lat, lon, radius=1000): url = " https://nominatim.openstreetmap.org/search " params = { 'format': 'json', 'addressdetails': 1, 'extratags': 1, 'limit': 50, # Ограничение на количество результатов 'q': '', 'lat': lat, 'lon': lon, 'radius': radius, } headers = { 'User-Agent': 'your_unique_application_name' } response = requests.get(url, params=params, headers=headers) if response.status_code == 200: return response.json() else: print(f"Ошибка запроса: {response.status_code}") return []
# Указанный адрес address = "Москва, Ленинские горы, 1"
if latitude and longitude: print(f"Координаты для {address}: {latitude}, {longitude}")
# Получение адресов в радиусе results = get_addresses_in_radius(latitude, longitude, radius=1000)
if results: # Формируем список для таблицы data = [] for idx, result in enumerate(results, 1): address_info = result.get('display_name', 'Неизвестный адрес') data.append({"#": idx, "Адрес": address_info})
# Сохраняем таблицу в файл df.to _csv("addresses.csv", index=False, encoding='utf-8-sig') print("\nТаблица сохранена в файл 'addresses.csv'.") else: print("Адреса в указанном радиусе не найдены.") else: print("Не удалось получить координаты для указанного адреса.")
По итогу, кроме нахождения координаты заданной точки выхожу на «Адреса в указанном радиусе не найдены» :(
Сам код:
from geopy.geocoders import Nominatim
import requests
import pandas as pd
# Функция для получения координат по адресу
def get_coordinates(address):
geolocator = Nominatim(user_agent="name")
try:
location = geolocator.geocode(address, timeout=10)
if location:
return location.latitude, location.longitude
else:
print("Не удалось найти координаты для адреса.")
return None, None
except Exception as e:
print(f"Ошибка при геокодировании: {e}")
return None, None
# Функция для поиска адресов в радиусе
def get_addresses_in_radius(lat, lon, radius=1000):
url = " https://nominatim.openstreetmap.org/search "
params = {
'format': 'json',
'addressdetails': 1,
'extratags': 1,
'limit': 50, # Ограничение на количество результатов
'q': '',
'lat': lat,
'lon': lon,
'radius': radius,
}
headers = {
'User-Agent': 'your_unique_application_name'
}
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
return response.json()
else:
print(f"Ошибка запроса: {response.status_code}")
return []
# Указанный адрес
address = "Москва, Ленинские горы, 1"
# Получение координат адреса
latitude, longitude = get_coordinates(address)
if latitude and longitude:
print(f"Координаты для {address}: {latitude}, {longitude}")
# Получение адресов в радиусе
results = get_addresses_in_radius(latitude, longitude, radius=1000)
if results:
# Формируем список для таблицы
data = []
for idx, result in enumerate(results, 1):
address_info = result.get('display_name', 'Неизвестный адрес')
data.append({"#": idx, "Адрес": address_info})
# Создаём DataFrame
df = pd.DataFrame(data)
# Выводим таблицу
print("\nТаблица адресов:")
print(df)
# Сохраняем таблицу в файл
df.to _csv("addresses.csv", index=False, encoding='utf-8-sig')
print("\nТаблица сохранена в файл 'addresses.csv'.")
else:
print("Адреса в указанном радиусе не найдены.")
else:
print("Не удалось получить координаты для указанного адреса.")
По итогу, кроме нахождения координаты заданной точки выхожу на «Адреса в указанном радиусе не найдены» :(