【发布时间】:2019-08-29 21:03:09
【问题描述】:
我需要将地址地理编码为纬度、经度对以显示在 Google 地图上,但我需要在 Django 中执行此服务器端。我只能找到对 Javascript V3 API 的引用。我如何从 Python 中做到这一点?
【问题讨论】:
标签: python django google-maps
我需要将地址地理编码为纬度、经度对以显示在 Google 地图上,但我需要在 Django 中执行此服务器端。我只能找到对 Javascript V3 API 的引用。我如何从 Python 中做到这一点?
【问题讨论】:
标签: python django google-maps
我强烈建议使用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)
编辑:如有必要,通过sudo easy_install googlemaps 安装Py-Googlemaps。
【讨论】:
Google 数据有一个 API for Maps 有一个 REST-ful API - 他们也已经围绕它构建了一个 Python library。
【讨论】:
这是适用于 Google Maps 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 了解完整的参数列表和其他信息。
【讨论】:
Python 包googlemaps 似乎非常能够进行地理编码和反向地理编码。
最新版本的 googlemaps 包在:https://pypi.python.org/pypi/googlemaps
【讨论】: