web-dev-qa-db-ja.com

Google Maps API-座標へのアドレス(緯度、経度)

これは私を夢中にさせています。これまでにこのキーを1000回削除しました。昨日は魅力のように機能しましたが、今日はもう機能していません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

明らかな理由もなく、上記のエラーが返されています。リクエストの制限や最大レートに達していないようです安全を確保するために、遅延(1秒)も導入しました...同じエラーが発生するまで

誰かが私がこれをどのように解決できるか考えていますか?私が現在使用しているモジュールの代替を示すことができれば、別のpythonモジュールで作業する必要があります。

ありがとうC

PS:キーは有効です。これはクライアントキーであり、アプリコンソールでGoogleMAPAPI3を有効にすると自動的に有効になりました。ドメインやIPの制限はありません

編集:これが私が最終的に使用したものです

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

Jasonが私に指摘したライブラリも興味深いものですが、私のコードは何かを修正することを目的としていたため(1回限りの使用)、彼の解決策を試していません。私が再びコードを書くようになれば、私は間違いなくそれを考慮します:-)

15
MiniMe

Googleはgooglemapsを使用したV2呼び出しを非推奨にしましたが(これが壊れた呼び出しが表示される理由です)、最近、開発者にV2からV3 APIに移行するための6か月の延長(2013年9月8日まで)を提供すると発表しました。 。詳細については、 Geocoding API V2の更新 を参照してください。

それまでの間、可能な限りPython V3ソリューションとして pygeocoder をチェックしてください。

11
jasonsee

2013年9月以降、Google Maps API v2 機能しなくなりました 。 API v3で機能するコードは次のとおりです( この回答 に基づく):

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

パラメータの完全なリストと追加情報については、 公式ドキュメント を参照してください。

11

いくつかのコードゴルフをして、このバージョンで終わった。必要に応じて、さらにいくつかのエラー状態を区別したい場合があります。

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