Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Python. Такая задачка есть, нужно собрать список адресов домов в радиусе 1 км вокруг заданной координаты

RanobeDevourer Профи (760), на голосовании 1 месяц назад
Использовал https://nominatim.openstreetmap.org/ , код на питоне. Библиотеки geopy, requests, pandas.
Сам код:

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("Не удалось получить координаты для указанного адреса.")

По итогу, кроме нахождения координаты заданной точки выхожу на «Адреса в указанном радиусе не найдены» :(
Голосование за лучший ответ
Alex M Знаток (497) 2 месяца назад
"Использовал", только это не ты использовал, а нейросеть. Если хочешь сделать что-то, лучше делай сам и вдумчиво читай техническую документацию
Похожие вопросы