2013-03-08 11 views
15

To doprowadza mnie do szału. Usunąłem ten klucz do tej pory 1000 razy. Wczoraj to działało jak czar, nie dzisiaj już Oto kod Python:GoogleMaps API -adres do współrzędnych (szerokość i długość geograficzna)

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 

Obecnie powrocie powyższy błąd na nie z oczywistych powodów. Nie sądzę, że osiągnąłem limit żądania lub maksymalną stawkę. Aby pozostać na bezpiecznej stronie, wprowadziłem nawet opóźnienia (1sek) ... wystąpił ten sam błąd

Czy ktoś ma pojęcie, jak mogę rozwiązać to? Praca z innym modułem python jest w porządku, jeśli możesz wskazać alternatywę dla tego, którego aktualnie używam.

dzięki C

PS: klucz jest ważny, jest to kluczowy klient i została ona włączona automatycznie, gdy włączona GoogleMap API3 w konsoli App. Brak ograniczeń dla domen lub adresów IP

EDIT: Więc tutaj jest to, co skończyło się używając

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

Bibliotece że Jason wskazał mi się to również interesująca, ale ponieważ mój kod miał coś naprawić (jeden czas użycia) Nie próbowałem jego rozwiązania. Zdecydowanie uważam, że jeśli znowu będę pisać kod :-)

+0

Nie jestem pewien, czy implementacja Pythona jest podobna, ale ludzie używający geokodowania v2 cierpieli z powodu problemów z końcem życia v2. Przejście na v3 zdawało się leczyć pewne problemy. Czy istnieje różnica wersji dla Pythona? – Rafe

+0

Począwszy od 10 marca 2013, obsługa v2 uległa zmniejszeniu, a o ile mi wiadomo, pakiet googlemaps wydaje się używać v2, który ma różne adresy zapytania, teoretycznie zmiana adresu zapytania powinna wystarczyć (w pakiecie googlemaps). –

Odpowiedz

11

Chociaż Google wycofuje połączenia V2 za pomocą googlemaps (dlatego pojawiają się niedziałające połączenia), niedawno ogłosili, że dają programistom sześciomiesięczne rozszerzenie (do 8 września 2013 r.), aby przejść z interfejsu API V2 do V3. Aby uzyskać szczegółowe informacje, patrz Update on Geocoding API V2.

W międzyczasie sprawdź pygeocoder jako możliwe rozwiązanie Python V3.

+0

Wielkie dzięki za aktualizację. Spróbuję. Kiedy zobaczyłem, że nikt nie może mi pomóc, mogę trochę googotować i znalazłem funkcję wklejoną w początkowym pytaniu, które działało całkiem dobrze: – MiniMe

11

Od września 2013 r. Google Maps API v2 no longer works. Oto kod działa dla API v3 (w oparciu o 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 

Zobacz official documentation do pełnej listy parametrów i dodatkowe informacje.

1

Czy niektóre kod golfa i skończyło się na tej wersji. W zależności od potrzeby możesz chcieć rozróżnić więcej błędów.

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 
Powiązane problemy