我需要将一个地址编码成经纬度对,以在Google Maps上显示,但我需要在Django服务器端完成这个任务。我只能找到Javascript V3 API的参考资料。我该如何从Python中实现这个功能?
我需要将一个地址编码成经纬度对,以在Google Maps上显示,但我需要在Django服务器端完成这个任务。我只能找到Javascript V3 API的参考资料。我该如何从Python中实现这个功能?
我强烈建议使用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()
我建议使用Py-Googlemaps。使用它很容易:
from googlemaps import GoogleMaps
gmaps = GoogleMaps(API_KEY)
lat, lng = gmaps.address_to_latlng(address)
编辑:如果必要,可以通过以下方式安装Py-Googlemaps
:sudo easy_install googlemaps
。
这里是适用于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
Python的包googlemaps
似乎非常擅长地理编码和反向地理编码。
最新版本的googlemaps包可以在以下链接中找到:https://pypi.python.org/pypi/googlemaps