如何从Python获取地址的坐标

16

我需要将一个地址编码成经纬度对,以在Google Maps上显示,但我需要在Django服务器端完成这个任务。我只能找到Javascript V3 API的参考资料。我该如何从Python中实现这个功能?

5个回答

27

我强烈建议使用geopy。它可以返回纬度和经度,然后您可以在Google JS客户端中使用它。

>>> from geopy.geocoders import Nominatim
>>> geolocator = Nominatim()
>>> location = geolocator.geocode("175 5th Avenue NYC")
>>> print(location.address)
Flatiron Building, 175, 5th Avenue, Flatiron, New York, NYC, New York, ...
>>> print((location.latitude, location.longitude))
(40.7410861, -73.9896297241625)

此外,您可以通过使用GoogleV3类作为地理定位器来明确定义您要使用Google服务。

>>> from geopy.geocoders import GoogleV3
>>> geolocator = GoogleV3()

19

我建议使用Py-Googlemaps。使用它很容易:

from googlemaps import GoogleMaps
gmaps = GoogleMaps(API_KEY)
lat, lng = gmaps.address_to_latlng(address)

编辑:如果必要,可以通过以下方式安装Py-Googlemapssudo easy_install googlemaps


1
还能获取与该库兼容的API密钥吗?我生成了一个Javascript v3 API密钥,但似乎无法正常工作。 - powerj1984
@powerj1984 当我尝试访问您的链接时,我收到了一个恶意软件警告,这正常吗,还是我应该担心? - Dennis Jaheruddin
当我发布链接时,没有恶意软件警告。现在不确定发生了什么。 - powerj1984

6

0

这里是适用于Google Maps 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

请参阅官方文档以获取完整的参数列表和其他信息。

这个不再起作用,因为谷歌需要个人API密钥才能工作:http://g.co/dev/maps-no-account - skjerns
@skjerns 谢谢你的更新!如果修复起来很容易,请随意更新答案。 - Dennis Golomazov

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接