【问题标题】:How to use docker container and geopy to avoid timeout problem with nominatim?如何使用 docker 容器和 geopy 来避免 nominatim 的超时问题?
【发布时间】:2019-07-09 00:27:37
【问题描述】:

我正在尝试运行以下代码以使用 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 创建一个容器 docker。这样我就可以根据需要完成尽可能多的地理编码,而不会受到公共 API 的限制。

为了创建 docker,我使用了这个 peterevans/nominatim 图像,可在此处获得 (https://hub.docker.com/r/peterevans/nominatim/)。但是,我还没有找到应该如何更改脚本以从容器中进行地理编码的任何地方。当我尝试更改提供程序参数时,它会出错并说我只能使用包的参数。

有人可以帮我解决这个问题吗?或者指出另一个可能的解决方案?

【问题讨论】:

    标签: python docker gis geocode nominatim


    【解决方案1】:

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

    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 / container,打开了一个端口并将其作为域。

    现在我可以进行无限制的地理编码,并且限制是我的服务器的容量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 2017-05-01
      • 2020-08-10
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多