web-dev-qa-db-fra.com

API Google Maps - adresse aux coordonnées (latitude, longitude)

Cela me rend fou. J'ai supprimé cette clé 1 000 fois jusqu'à présent. Hier, cela fonctionnait à merveille, aujourd'hui, plus Voici le code 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

Il renvoie maintenant l'erreur ci-dessus sans raison évidente. Je ne pense pas avoir atteint la limite de demandes ni le débit maximal Pour rester du côté de la sécurité, j'ai même introduit des retards (1sec) ... toujours avoir la même erreur

Quelqu'un a-t-il une idée de la façon dont je peux résoudre ce problème? Il est correct de travailler avec un module python différent si vous pouvez indiquer une alternative à celle que j'utilise actuellement.

merci C

PS: la clé est valide, il s’agit d’une clé cliente et elle a été activée automatiquement lorsque j’ai activé GoogleMAP API3 dans la console de l’application. Aucune restriction pour les domaines ou les IP

EDIT: Voici donc ce que j'ai fini par utiliser

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 bibliothèque que Jason m'a indiquée est également intéressante, mais comme mon code était destiné à corriger quelque chose (utilisation ponctuelle), je n'ai pas essayé sa solution. Je vais certainement considérer que si je peux réécrire du code :-) 

15
MiniMe

Bien que Google déprécie les appels V2 avec googlemaps (c'est pourquoi vous voyez les appels interrompus), ils ont récemment annoncé qu'ils accordaient aux développeurs une extension de six mois (jusqu'au 8 septembre 2013) pour passer de l'API V2 à V3. . Voir Mise à jour de l'API de géocodage V2 pour plus de détails.

En attendant, vérifiez pygeocoder en tant que solution Python V3 possible.

11
jasonsee

Depuis septembre 2013, Google Maps API v2 ne fonctionne plus . Voici le code fonctionnant pour API v3 (basé sur cette réponse ):

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

Voir documentation officielle pour la liste complète des paramètres et des informations supplémentaires.

11
Dennis Golomazov

Est-ce que certains codes de golf et fini avec cette version. En fonction de vos besoins, vous voudrez peut-être distinguer quelques conditions d'erreur supplémentaires.

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