【问题标题】:GeocoderServiceError for geopy地理编码器服务错误
【发布时间】:2016-02-06 04:46:43
【问题描述】:

当我使用 geopy 根据它们的经度和纬度计算 2 个地址之间的距离时,它适用于单个数据对。但是当有更多数据时,它总是给我这个错误:

地理编码中的文件“/Library/Python/2.7/site-packages/geopy/geocoders/osm.py”,第 193 行 self._call_geocoder(url, timeout=timeout), exact_one _call_geocoder 中的文件“/Library/Python/2.7/site-packages/geopy/geocoders/base.py”,第 171 行 引发 GeocoderServiceError(消息) geopy.exc.GeocoderServiceError: urlopen 错误 [Errno 65] 没有到主机的路由

你知道我该如何避免这个问题吗?

我的代码很简单:(为此输入的数据有很多对数据)

from geopy.geocoders import Nominatim
from geopy.distance import vincenty

def calculate_distance(add1, add2):
    geolocator = Nominatim()

    location1 = geolocator.geocode(add1)
    al1 = (location1.latitude, location1.longitude)

    location2 = geolocator.geocode(add2)
    al2 = (location2.latitude, location2.longitude)

    distce = vincenty(al1, al2).miles
    return distce

【问题讨论】:

  • 看起来更像是网络错误,而不是 API 的问题。
  • 每次都会发生这种情况,我的网络工作正常......@user1157751
  • 这也发生在我身上。我倾向于认为我被列入黑名单是因为请求太多。
  • @CherryWu 我遇到了同样的错误:/ 你是怎么解决的?可能正如 Hazam 所说,因为请求太多,它发生了。
  • 嗨@waterkinq,我后来通过使用Google Geo API解决了这些问题。如果你只是想获得可视化的位置,你可以在这里使用我的 IPython Notebook 代码github.com/hanhanwu/Hanhan_Play_With_Social_Media/blob/master/… 如果你想获得详细的位置,请查看我在下面写的代码。有用。但是您可能需要更改if 子句,因为不同的位置有不同的标签。

标签: python geopy


【解决方案1】:
def get_level1_locations(lat_lng):
    elems = lat_lng.split(',')
    url = "http://maps.googleapis.com/maps/api/geocode/json?"
    url += "latlng=%s,%s&sensor=false" % (float(elems[0]), float(elems[1]))
    v = urlopen(url).read()
    j = json.loads(v)
    if len(j['results'])>0:
      components = j['results'][0]['address_components']
      location_list=[]
      for c in components:
          if "locality" in c['types']:
            location_list.append(c['long_name'])
          if "administrative_area_level_1" in c['types']:
            location_list.append(c['long_name'])
          if "country" in c['types']:
            location_list.append(c['long_name'])
      location = ', '.join(filter(None, location_list))
      return location
    return ''

【讨论】:

    【解决方案2】:

    上面的谷歌地图API在2016年工作,今天(2017-08-30)当我尝试使用它时,它不再能够通过坐标返回位置。但!我在这里找到了一个相当不错的,它现在运行良好,也需要更少的代码行。 https://chrisalbon.com/python/geocoding_and_reverse_geocoding.html

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 1970-01-01
      • 2011-07-20
      • 2017-11-12
      • 2013-08-17
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多