Я использую следующий код:
Код: Выделить всё
import numpy as np
import geopy
import time
def get_city_with_retry(df, geolocator, lat_field, lon_field, retries=3, delay=1):
for _ in range(retries):
try:
location = geolocator.reverse((df[lat_field], df[lon_field]), exactly_one=True)
return location.raw['address'].get('city', location.raw['address'].get('town', 'Unknown'))
except Exception as e:
print(f"Error occurred for coordinates ({df[lat_field]}, {df[lon_field]}): {e}")
time.sleep(delay)
return 'Unknown'
# Initialize geolocator
geolocator = geopy.Nominatim(user_agent='my-geocoding-app/1.0')
# Apply the function with retry logic
transactions_data['City'] = transactions_data.apply(lambda row: get_city_with_retry(row, geolocator, 'Latitude', 'Longitude'), axis=1)
# Display the result
print(transactions_data)
ВНИМАНИЕ: urllib3.connectionpool:Повторная попытка (Retry(total=1) , connect=None, read=None, redirect=None, status=None)) после разрыва соединения из-за 'NewConnectionError(': не удалось установить новое соединение: [Errno 111] Соединение отклонено ')': /reverse?lat=-7.964164&lon=112.623673&format=json&addressdetails=1
ПРЕДУПРЕЖДЕНИЕ:urllib3.connectionpool:Повторная попытка (Повторить (total=0, connect=None, read=None, redirect=None, status =Нет)) после разрыва соединения из-за «NewConnectionError(»: не удалось установить новое соединение: [Errno 111] Соединение отклонено»)': /reverse?lat=-7.964164&lon=112.623673 &format=json&addressdetails=1
Произошла ошибка для координат (-7.964164, 112.623673): HTTPSConnectionPool(host='nominatim.openstreetmap.org', port=443): превышено максимальное количество попыток с URL-адресом: /reverse?lat=-7.964164 &lon=112.623673&format=json&addressdetails=1 (Вызвано ConnectTimeoutError(, 'Время ожидания соединения с nominatim.openstreetmap.org истекло. (connect timeout=1)'))
какое еще решение для кода?
Подробнее здесь: https://stackoverflow.com/questions/791 ... n-large-da