如何使用Docker容器和Geopy避免Nominatim超时问题?

4
我正在尝试运行以下代码,使用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)

我想对9万个地址进行地理编码,但是我遇到了超时问题。虽然使用了此功能,但这是社区中用户的建议。
我的另一个想法是从nominatim创建docker容器。这样,我就可以完成所有需要的地理编码,而不会受到公共API的限制。
要创建docker,我使用了这个peterevans/nominatim镜像,可以在这里找到(https://hub.docker.com/r/peterevans/nominatim/)。然而,我没有找到在脚本中如何更改以从我的容器进行地理编码的方法。当我尝试更改提供程序参数时,它会出现错误,并说我只能使用包的参数。
有人能帮我吗?或者指向另一个可能的解决方案?
1个回答

2

我最终在另一个论坛上找到了答案。我将在这里分享代码:

Original Answer翻译成"最初的回答"

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)

我在我的服务器上创建了一个Docker/容器,打开了一个端口,并将其作为域名使用。现在我可以无限制地进行地理编码,限制是我的服务器的容量。"Original Answer"翻译成"最初的答案"。

我发现了https://github.com/mediagis/nominatim-docker/tree/master/4.0,但我不确定如何运行它。你能解释一下吗? - XiB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接