2013-03-08 22 views
15

Questo mi sta facendo impazzire. Ho cancellato questa chiave 1000 volte finora. Ieri ha funzionato come un fascino, oggi non più Ecco il codice python:API GoogleMaps -indirizzo per coordinate (latitudine, longitudine)

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 

Si torna ora l'errore sopra riportato per ragioni ovvie. Io non credo di aver raggiunto il limite di richiesta o il tasso massimo Per rimanere sul sicuro ho anche introdotto ritardi (1 secondo) ... stil ottenendo lo stesso errore

Qualcuno ha idea di come posso risolvi questo? Dovendo lavorare con un diverso modulo python va bene se si può indicare un'alternativa a quella che sto attualmente utilizzando.

grazie C

PS: la chiave è valida, si tratta di una chiave del client ed è stato attivato automaticamente quando ho attivato GoogleMap API3 nella console App. Nessuna restrizione per i domini o IP

EDIT: Così qui è quello che ho finito per usare

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'] 
       } 

La biblioteca che Jason indicò me è anche interessante, ma dal momento che il mio codice è stato destinato a risolvere qualcosa (uno utilizzo del tempo) Non ho provato la sua soluzione. Lo considererò sicuramente se riesco a scrivere di nuovo il codice :-)

+0

Non sono sicuro se l'implementazione Python è simile, ma le persone che utilizzano la geocodifica v2 hanno riscontrato problemi a causa della fine della vita di v2. Passare alla v3 sembrava risolvere alcuni problemi. C'è una differenza di versione per Python? – Rafe

+0

A partire dal 10 marzo 2013, il supporto per v2 è andato giù e, per quanto ne so, il pacchetto googlemaps sembra utilizzare v2, che ha indirizzi di query diversi, in teoria, la modifica dell'indirizzo della query dovrebbe essere sufficiente (nel pacchetto googlemaps). –

risposta

11

Sebbene Google abbia deprecato le chiamate V2 con googlemaps (motivo per cui visualizzi le chiamate interrotte), recentemente hanno annunciato che stanno dando agli sviluppatori un estensione di sei mesi (fino all'8 settembre 2013) per passare dall'API V2 a V3. Vedi Update on Geocoding API V2 per i dettagli.

Nel frattempo, controllare pygeocoder come possibile soluzione Python V3.

+0

Grazie mille per l'aggiornamento. Farò un tentativo. Quando ho visto che nessuno poteva aiutarti ho cercato su Google un po 'di più e ho trovato la funzione incollata nella domanda iniziale ora, che ha funzionato molto bene: – MiniMe

11

Da settembre 2013, API di Google Maps v2 no longer works. Ecco il codice di lavoro per v3 API (sulla base di this answer):

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 

Vedere official documentation per l'elenco completo dei parametri e informazioni aggiuntive.

1

Ha fatto un po 'di golfing del codice e ha finito con questa versione. A seconda delle esigenze, potresti voler distinguere alcune altre condizioni di errore.

import urllib, urllib2, json 

def decode_address_to_coordinates(address): 
     params = { 
       'address' : address, 
       'sensor' : 'false', 
     } 
     url = 'http://maps.google.com/maps/api/geocode/json?' + urllib.urlencode(params) 
     response = urllib2.urlopen(url) 
     result = json.load(response) 
     try: 
       return result['results'][0]['geometry']['location'] 
     except: 
       return None 
Problemi correlati