Как использовать Docker-контейнер и Geopy, чтобы избежать проблемы тайм-аута с nominatim? - PullRequest
2 голосов
/ 09 июля 2019

Я пытаюсь запустить следующий код для выполнения геокодирования с использованием пакета geopy.

    import geopandas as gpd
    import pandas as pd
    import os
    from time import sleep
    from geopy.geocoders import Nominatim

    end = pd.read_csv ('/home/hammer/transfer/coord.csv', sep=';')
from geopy.exc import GeocoderTimedOut

    def do_geocode(coor):
    try:
        return geopy.geocode(coor)
    except GeocoderTimedOut:
        return do_geocode(coor)

    coor = gpd.tools.geocode(end["address"], 
    provider = "nominatim", user_agent="gis", country_bias="Brazil", timeout=5)

Я бы хотел сделать геокод 90 000 адресов, хотя у меня проблема тайм-аут . Даже после использования этой функции выше это было предложение пользователя от сообщества.

Альтернативой, которую я думал, было создание докера контейнера из nominatim. Таким образом, я мог бы выполнять столько геокодов, сколько мне нужно, не страдая от ограничений публичного API.

Для создания докера я использовал это peterevans / nominatim изображение, доступное здесь (https://hub.docker.com/r/peterevans/nominatim/). Однако я нигде не нашел, как мне следует изменить в своем скрипте, чтобы сделать геокод из моего контейнера . Когда я пытаюсь изменить параметры провайдера, он выдает ошибку и говорит, что я могу использовать только параметры пакета.

Может ли кто-нибудь помочь мне с этим? Или указать мне другое возможное решение?

1 Ответ

0 голосов
/ 09 июля 2019

В итоге я нашел ответ на другом форуме. Я поделюсь кодом здесь:

from geopy.geocoders import Nominatim

nom = Nominatim(domain='xxx.xxx.xx.xx:xxxx', scheme='http', timeout=3) #tried with different timeouts

end["coor"]=end["address"].apply(nom.geocode)

Я создал докер / контейнер на своем сервере, открыл порт и поместил его как домен.

Теперь я могу использовать неограниченное количество геокодов, а ограничение - это емкость моего сервера.

...