webentwicklung-frage-antwort-db.com.de

Google Maps API -Adresse für Koordinaten (Breitengrad, Längengrad)

Das macht mich verrückt. Ich habe diesen Schlüssel 1000 Mal gelöscht. Gestern funktionierte es wie ein Zauber, heute nicht mehr Hier ist der Python-Code:

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

Der obige Fehler wird jetzt ohne offensichtliche Gründe zurückgegeben. Ich glaube nicht, dass ich das Anforderungslimit oder die Höchstrate Erreicht habe. Um auf der sicheren Seite zu bleiben, habe ich sogar Verzögerungen (1s) eingeführt. ... immer den gleichen Fehler bekommen

Hat jemand eine Idee, wie ich das lösen kann? Wenn Sie mit einem anderen Python-Modul arbeiten müssen, ist es in Ordnung, wenn Sie eine Alternative zu dem angeben können, das ich gerade verwende.

danke c

PS: Der Schlüssel ist gültig, es handelt sich um einen Client-Schlüssel. Er wurde automatisch aktiviert, als ich GoogleMAP API3 in der App-Konsole aktiviert habe. Keine Einschränkungen für Domains oder IPs

EDIT: Also hier habe ich am Ende mit

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, auf die Jason mich verwies, ist auch interessant, aber da mein Code etwas korrigieren sollte (einmalige Verwendung), habe ich seine Lösung nicht ausprobiert. Ich werde das definitiv in Betracht ziehen, wenn ich wieder Code schreiben kann :-) 

15
MiniMe

Obwohl Google die V2-Aufrufe mit Googlemaps (daher werden die fehlerhaften Anrufe angezeigt) nicht mehr empfohlen, haben sie kürzlich angekündigt, dass sie den Entwicklern eine Verlängerung für sechs Monate (bis zum 8. September 2013) geben, um von der V2 zur V3-API zu wechseln . Weitere Informationen finden Sie unter Update auf Geocoding API V2 .

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

11
jasonsee

Seit September 2013 funktioniert Google Maps API v2 nicht mehr . Hier ist der Code für API v3 (basierend auf diese Antwort ):

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 offizielle Dokumentation für die vollständige Liste der Parameter und zusätzlicher Informationen.

11

Ich habe Code golfen und diese Version erhalten. Je nach Bedarf möchten Sie möglicherweise weitere Fehlerzustände 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
1
Bemmu