2013-03-08 5 views
15

Das macht mich verrückt. Ich habe diesen Schlüssel bisher 1000 Mal gelöscht. Gestern hat es wie ein Zauber gearbeitet, heute nicht mehr Hier ist der Python-Code:GoogleMaps API -Adresse zu Koordinaten (Breite, Länge)

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 

Es wird nun die oben genannten Fehler und ohne ersichtlichen Grund zurück. Ich glaube nicht, ich habe die Anfrage Grenze oder die maximale Rate erreicht auf der sicheren Seite zu bleiben, habe ich sogar Verzögerungen eingeführt (1 s) ... stil die gleichen Fehler

jemand eine Idee hat, funktioniert wie kann ich löse das? Die Arbeit mit einem anderen Python-Modul ist in Ordnung, wenn Sie eine Alternative zu der, die ich gerade verwende, angeben können.

dank C

PS: der Schlüssel gültig ist, es ist ein Client-Schlüssel und es wurde automatisch aktiviert, wenn ich Googlemap API3 in der Konsole App aktiviert. Keine Einschränkungen für Domains oder IP-Adressen

EDIT: Also hier ist, was ich

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

Die Bibliothek endete, die Jason wies mich auch interessant, aber da mein Code etwas reparieren sollte (ein Zeitverwendung) Ich habe seine Lösung nicht versucht. Ich werde definitiv darüber nachdenken, wenn ich Code wieder schreiben werde :-)

+0

Nicht sicher, ob die Python-Implementierung ähnlich ist, aber Leute, die die v2-Geocodierung verwenden, hatten Probleme wegen des Endes der Lebensdauer von v2. Der Wechsel zu v3 schien einige Probleme zu beheben. Gibt es einen Versionsunterschied für Python? – Rafe

+0

Ab dem 10. März 2013 ist die Unterstützung für v2 gesunken, und soweit ich weiß, scheint das googlemaps-Paket v2 zu verwenden, das unterschiedliche Abfrageadressen hat. Theoretisch müsste die Abfrageadresse ausreichen (im googlemaps-Paket)). –

Antwort

11

Obwohl Google die V2-Anrufe mit googlemaps verwarf (weshalb Sie die gebrochenen Anrufe sehen), haben sie vor kurzem angekündigt, dass sie den Entwicklern einen geben Verlängerung um sechs Monate (bis zum 8. September 2013), um von der V2 auf die V3-API umzusteigen. Einzelheiten finden Sie unter Update on Geocoding API V2.

In der Zwischenzeit überprüfen Sie pygeocoder als eine mögliche Python V3-Lösung.

+0

Vielen Dank für das Update. Ich werde es versuchen. Als ich sah, dass niemand helfen konnte, googelte ich ein bisschen mehr und ich fand die Funktion in der ersten Frage eingefügt, was ziemlich gut funktionierte: – MiniMe

11

Seit September 2013 Google Maps API v2 no longer works. Hier ist der Code für API v3 arbeiten (basierend auf 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 

Siehe official documentation für die vollständige Liste der Parameter und weitere Informationen.

1

Hat etwas Code Golf und endete mit dieser Version. Je nach Bedarf möchten Sie möglicherweise weitere Fehlerbedingungen unterscheiden.

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