Обратное геокодирование с ограничениями Python Nominatim и улучшения geopy.geocoders - PullRequest
0 голосов
/ 01 марта 2019

Мне нужно получить адрес для 10000 на основе широты и долготы, и я использовал для этого geopy.geocoders.Тем не менее, первое ограничение заключается в том, что существует ограничение в отношении количества кординатов, которые вы можете изменить геокодом в день.

from geopy.geocoders import Nominatim
from geopy.extra.rate_limiter import RateLimiter
geolocator = Nominatim(user_agent="specify_your_app_name_here",timeout=None)

rectangles_df=df["LatLong"].head(2)

location=rectangles_df.apply(geolocator.reverse)

и во-вторых, это просто печатает адрес без координат при применении к кадру данных для нескольких координат, что затрудняет отображение на исходный набор данных.Кроме того, это не дает вывод на английском языке. Я также попробовал следующее:

test=rectangles_df.apply(geolocator.reverse(language='en'))

Но это, очевидно, не работает, потому что ожидает координаты в качестве обязательного параметра.

Что может бытьсделано.

1 Ответ

0 голосов
/ 10 марта 2019

Во-первых, согласно политике использования Nominatim, единственным ограничением является один запрос в секунду.Я не вижу дневного лимита сверх 86400 запросов в день (1 секунда * 60 * 60 * 24), полученных из лимита в один запрос https://operations.osmfoundation.org/policies/nominatim/

Самый простой способ гарантировать, что вы не сделаете больше, чемодин запрос в секунду - это

  time.sleep(1)

при взаимодействии через запросы перед выполнением запроса.

Во-вторых, объект местоположения сохраняет координаты и адрес как свойства:

print(location.latitude, location.longitude, location.adress)

В-третьих, с помощью geopy вы можете объявить язык.Это false по умолчанию

reverse(query, exactly_one=True, timeout=DEFAULT_SENTINEL, language=False,  addressdetails=True)

Проверьте документы о геопии, касающиеся Nominatim: https://geopy.readthedocs.io/en/stable/#nominatim

...