GoogleMaps API - 地址到坐标(纬度,经度)

Min*_*iMe 15 python google-maps google-geocoding-api

这真让我抓狂.到目前为止,我已经删除了1000次此密钥.昨天它就像一个魅力,今天不再是这里是python代码:

from googlemaps import GoogleMaps
gmaps = GoogleMaps("AIzaSyBIdSyB_td3PE-ur-ISjwFUtBf2O0Uo0Jo")
exactaddress ="1 Toronto Street Toronto"
lat, lng = gmaps.address_to_latlng(exactaddress)
print lat, lng

GoogleMapsError: Error 610: G_GEO_BAD_KEY
Run Code Online (Sandbox Code Playgroud)

它现在返回上述错误没有明显的原因.我认为我没有达到请求限制或最大速率为了保持安全,我甚至引入了延迟(1秒)... stil得到相同的错误

有谁知道如何解决这个问题?如果你可以指出我目前正在使用的替代方案,那么必须使用不同的python模块.

谢谢C.

PS:密钥有效,它是客户端密钥,当我在App控制台中启用GoogleMAP API3时,密钥自动启用.对域名或IP没有限制

编辑:所以这是我最终使用的

def decodeAddressToCoordinates( address ):
        urlParams = {
                'address': address,
                'sensor': 'false',
        }  
        url = 'http://maps.google.com/maps/api/geocode/json?' + urllib.urlencode( urlParams )
        response = urllib2.urlopen( url )
        responseBody = response.read()

        body = StringIO.StringIO( responseBody )
        result = json.load( body )
        if 'status' not in result or result['status'] != 'OK':
                return None
        else:
                return {
                        'lat': result['results'][0]['geometry']['location']['lat'],
                        'lng': result['results'][0]['geometry']['location']['lng']
                }  
Run Code Online (Sandbox Code Playgroud)

Jason指出的库也很有趣,但由于我的代码是用来修复某些东西(一次性使用),所以我没有尝试过他的解决方案.如果我再次编写代码,我肯定会考虑:-)

小智 11

虽然Google不赞成使用googlemaps进行V2调用(这就是为什么你会看到破碎的通话),但他们最近宣布他们正在给开发人员提供为期六个月的延期(截至2013年9月8日),以便从V2迁移到V3 API .有关详细信息,请参阅地理编码API V2更新.

在此期间,请查看pygeocoder作为可能的Python V3解决方案.


Den*_*zov 11

自2013年9月起,Google Maps API v2 不再有效.以下是适用于API v3的代码(基于此答案):

import urllib
import simplejson

googleGeocodeUrl = 'http://maps.googleapis.com/maps/api/geocode/json?'

def get_coordinates(query, from_sensor=False):
    query = query.encode('utf-8')
    params = {
        'address': query,
        'sensor': "true" if from_sensor else "false"
    }
    url = googleGeocodeUrl + urllib.urlencode(params)
    json_response = urllib.urlopen(url)
    response = simplejson.loads(json_response.read())
    if response['results']:
        location = response['results'][0]['geometry']['location']
        latitude, longitude = location['lat'], location['lng']
        print query, latitude, longitude
    else:
        latitude, longitude = None, None
        print query, "<no results>"
    return latitude, longitude
Run Code Online (Sandbox Code Playgroud)

有关完整的参数列表和其他信息,请参阅官方文档.