Google Maps API - 坐标地址(纬度,经度)

Posted

技术标签:

【中文标题】Google Maps API - 坐标地址(纬度,经度)【英文标题】:GoogleMaps API -address to coordinates (latitude,longitude) 【发布时间】:2013-02-23 12:10:32 【问题描述】:

这快把我逼疯了。 到目前为止,我已经删除了这个密钥 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:密钥是有效的,它是一个客户端密钥,当我在应用程序控制台中启用 GoogleMAP API3 时自动启用它。对域或 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 向我指出的库也很有趣,但由于我的代码旨在修复某些问题(一次性使用),因此我没有尝试过他的解决方案。如果我再次编写代码,我肯定会考虑 :-)

【问题讨论】:

不确定 python 实现是否相似,但使用 v2 地理编码的人由于 v2 生命周期的结束而遇到问题。切换到 v3 似乎可以解决一些问题。 python有版本差异吗? 从 2013 年 3 月 10 日开始,对 v2 的支持下降了,据我所知,googlemaps 包似乎使用的是 v2,它具有不同的查询地址,理论上,更改查询地址应该足够了(在 googlemaps 包中)。 【参考方案1】:

尽管 Google 弃用了带有 googlemaps 的 V2 调用(这就是您看到调用中断的原因),但他们最近才宣布他们将给予开发者六个月的延期(至 2013 年 9 月 8 日),以便从 V2 迁移到 V3 API。详情请见Update on Geocoding API V2。

同时,请查看pygeocoder 作为可能的 Python V3 解决方案。

【讨论】:

非常感谢您的更新。我会试一试。当我看到没有人能帮上忙时,我在 google 上搜索了一下,发现这个函数现在粘贴在最初的问题中,效果很好:【参考方案2】:

自 2013 年 9 月起,Google Maps API v2 no longer works。以下是适用于 API v3 的代码(基于 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

请参阅official documentation 了解完整的参数列表和其他信息。

【讨论】:

【参考方案3】:

做了一些代码打高尔夫球,最终得到了这个版本。根据您的需要,您可能希望区分更多错误情况。

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

【讨论】:

以上是关于Google Maps API - 坐标地址(纬度,经度)的主要内容,如果未能解决你的问题,请参考以下文章

markdown 使用Google Maps API按地址查找经度和纬度

在 Google Maps API 中使用地址而不是经度和纬度

如何通过经纬度获取地址信息

使用google API访问地址,经纬度状态

使用这个 google maps API 自动完成示例。这个函数可以修改得到经度和纬度吗?

根据经纬度根据谷歌地图接口获取到当前地址