Как заманить реверс лат / лонг на OSM - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть список широт / длинных координат, и мне нужно получить состояние для каждого. Это можно сделать с помощью кода:

df = pd.read_csv('SOL_A.dsv', delimiter = '|', low_memory=False)
for index, row in df.iterrows(): 
    lat = row['LAT']
    lon = row['LONG']
    g = geocoder.osm([lat,lon], method='reverse')
    st = '_UN'
    if g.state != None:
        st = g.state
    geom_states.append(st)
df['STATE'] = geom_states

Но для моих ~ 5k записей это в итоге начинает давать Status code 429 from https://nominatim.openstreetmap.org/search: ERROR - 429 Client Error: Too Many Requests for URL: tps://nominatim.openstreetmap.org/search?q=0.0%2C+0.0&format=jsonv2&addressdetails=1&limit=1, что ожидается.

Мне нужно обработать это только один раз и не не против, если это займет целый день. Я прочитал OSM Политика допустимого использования , и он звучит так:

  • Нет интенсивного использования (абсолютный максимум 1 запрос в секунду).
  • Укажите действительное HTTP Referer или User-Agent, идентифицирующий приложение (стандартные пользовательские агенты, установленные HTTP-библиотеками, не подойдут).
  • Четко отображать атрибуцию как подходящую для вашего носителя.
  • Данные предоставлены под Лицензия ODbL, которая требует совместного использования (хотя небольшие извлечения, вероятно, будут покрыты добросовестным использованием / добросовестным обращением).

Итак. Это должно быть возможно (?)

I попытался добавить мой ключ API (geocoder.osm([lat,lon], method='reverse', key=API_KEY)), а также добавил time.sleep(1.1) перед каждым вызовом, но это не помогло.

Идеи?

1 Ответ

0 голосов
/ 02 апреля 2020

Политика использования Nominatim четко гласит:

  • Нет интенсивного использования (абсолютное значение максимум 1 запрос в секунду ).
  • Укажите действительный HTTP Referer или Пользователь-агент , идентифицирующий приложение (стандартные пользовательские агенты, заданные библиотеками http, не подойдут).
  • Четкое отображение атрибуция как подходящая для вашего носителя.
  • Данные предоставляются по лицензии ODbL , которая требует одинакового обмена (хотя небольшие извлечения, вероятно, будут покрыты добросовестным использованием / добросовестным обращением).

Похоже, вы не ограничиваете свои запросы максимум 1 в секунду. Также я не уверен, если вы передадите действительный HTTP-реферер (он же user-agent).

Обратите внимание, что эта политика использования применяется только к экземпляру OSM publi c Nominatim. Вы всегда можете установить собственную службу Nominatim или перейти на альтернативный / коммерческий экземпляр Nominatim .

...