地理编码服务错误:针对 geopy 的问题。

4
当我使用geopy根据经纬度计算两个地址之间的距离时,对于单个数据对,它可以正常运行。但是对于更多的数据,总是会给我这个错误信息:
``` File "/Library/Python/2.7/site-packages/geopy/geocoders/osm.py", line 193, in geocode self._call_geocoder(url, timeout=timeout), exactly_one File "/Library/Python/2.7/site-packages/geopy/geocoders/base.py", line 171, in _call_geocoder raise GeocoderServiceError(message) geopy.exc.GeocoderServiceError: urlopen error [Errno 65] No route to host ```
你知道该如何避免这个问题吗?
我的代码很简单:(输入的数据中有许多数据对)
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
每次都会发生这种情况,我的网络也正常... @user1157751 - Cherry Wu
3
我也遇到过这种情况。我倾向于认为是因为请求太多而被列入黑名单。 - Hazam
@CherryWu 我也遇到了同样的错误 :/ 你是怎么解决的?可能像Hazam说的那样,是因为请求太多导致的。 - Mehmet Kagan Kayaalp
嗨@waterkinq,我后来通过使用Google Geo API解决了这些问题。如果您只想获取可视化位置,则可以在此处使用我的IPython笔记本代码https://github.com/hanhanwu/Hanhan_Play_With_Social_Media/blob/master/Geo_Visualization.png。如果您想获取详细位置,请查看我下面编写的代码。它有效,但您可能需要更改`if`子句,因为不同的位置具有不同的标签。 - Cherry Wu
2个回答

2
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 ''

0

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