Python 谷歌地图地理编码 API

标签 python google-maps geocoding google-geocoding-api geopy

我正在使用使用 Python 库的 Google 地理编码 API(已试用 GeoPy 1.11.0)。 对于诸如“Utica”之类的查询,我只得到一个响应:

{u'geometry': {u'location_type': u'APPROXIMATE', u'bounds': {u'northeast': 
{u'lat': 43.132269, u'lng': -75.1609059}, u'southwest': {u'lat': 
43.0644689, u'lng': -75.295296}}, u'viewport': {u'northeast': {u'lat': 
43.132269, u'lng': -75.1609059}, u'southwest': {u'lat': 43.0644689, u'lng': 
-75.295296}}, u'location': {u'lat': 43.100903, u'lng': -75.232664}}, 
u'address_components': [{u'long_name': u'Utica', u'types': [u'locality', 
u'political'], u'short_name': u'Utica'}, {u'long_name': u'Oneida County', 
u'types': [u'administrative_area_level_2', u'political'], u'short_name': 
u'Oneida County'}, {u'long_name': u'New York', u'types': 
[u'administrative_area_level_1', u'political'], u'short_name': u'NY'}, 
{u'long_name': u'United States', u'types': [u'country', u'political'], 
u'short_name': u'US'}], u'place_id': u'ChIJKXZqNVE32YkRhvztGCY2GhE', 
u'formatted_address': u'Utica, NY, USA', u'types': [u'locality', 
u'political']}

问题是美国有多个尤蒂卡,例如纽约州尤蒂卡和威斯康星州尤蒂卡。我期待 Google 返回名称中包含 Utica 的所有可能地点,有没有办法做到这一点?

这是使用 GeoPy 和 Google 的代码:

locations = ["Utica"]
from geopy.geocoders import GoogleV3
geolocator = GoogleV3(api_key=GoogleAPIKey)
for location in locations:
    print location
    results = geolocator.geocode(query=location, language='en', exactly_one=False, timeout=5)
        for result in results:
            print result.raw

最佳答案

恐怕无法从执行网络服务请求的 Google 数据库中获取具有特定名称的所有可能的地理特征。

请注意,地理编码 API 的目的是将地址字符串解析为其坐标。通常,地理编码 API Web 服务将仅提供一个根据 Google 标准(显着性、内部评分等)与地址字符串最匹配的结果。如果您的搜索字符串不明确,例如“尤蒂卡”,地理编码 Web 服务将选择显然是“美国纽约州尤蒂卡”的最显着结果。

作为解决问题的方法,您可以尝试使用 Places API autocomplete要求。自动完成请求将为您的搜索地址字符串返回最多 5 个建议。遗憾的是,它不能保证所有可能的地理特征,但您至少会拥有其中的 5 个。

查看以下搜索美国境内名称为“Utica”的地区的请求:

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=Utica&types=(cities)&components=country%3AUS&key=YOUR_API_KEY

此请求返回以下预测:

  • 美国纽约州尤蒂卡(地点 ID ChIJKXZqNVE32YkRhvztGCY2GhE)
  • 美国密歇根州尤蒂卡(地点 ID ChIJz8RnUrndJIgRNUbzGmaEdTk)
  • 美国俄亥俄州尤蒂卡(地点 ID ChIJ1ajvLWQwOIgR6Axda9Ip9XA)
  • 美国伊利诺伊州尤蒂卡(地点 ID ChIJdeJyBUlZCYgRpPiIgT2O7gE)
  • 美国肯塔基州尤蒂卡(地点 ID ChIJzbKUniCWb4gRj_IDgwlk-N0)

最后,由于您使用的是 Python,我建议您使用 Google Maps API Web 服务的 Python 客户端库 来执行地点自动完成请求:

https://github.com/googlemaps/google-maps-services-python

此客户端库的文档位于:

https://googlemaps.github.io/google-maps-services-python/docs/

希望对您有所帮助!

关于Python 谷歌地图地理编码 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48694822/

相关文章:

python - 如果字典中的键重复,如何引发错误

python - Pip freeze 显示了一个奇怪的包版本

python - 尝试在其自己的类变量部分中使用类的名称时出现问题

android - 通过短信获取 GPS 坐标并显示在谷歌地图上

java - 单击折线并在android中显示结果

python - matplotlib - 在 y 轴上为每组创建 x 轴上的条形图

html - 隐藏菜单中的谷歌地图

openstreetmap - 使用 OpenStreetMap 获取一组给定 GPS 坐标的国家名称

javascript - 检索全局变量

javascript - 用于用户提供坐标的通用 JavaScript 解析器