【问题标题】:Python Google Maps Driving TimePython 谷歌地图 行车时间
【发布时间】:2020-11-18 13:07:26
【问题描述】:

我需要使用 Python 获取两组坐标之间的行驶时间。我能找到的唯一的 Google Maps API 包装器要么使用 Google Maps API V2(已弃用),要么没有提供驾驶时间的功能。我在本地应用程序中使用它,不想被绑定到使用 Google Maps API V3 可用的 JavaScript。

【问题讨论】:

  • 这不是违反谷歌地图服务条款吗?我认为除非您还向用户显示 Google 地图,否则您无法获得驾驶时间。 (developers.google.com/maps/terms,第 10.1 g 节,“没有 Google 地图,不得使用内容”)
  • 我从来没有说过我不会展示地图,尽管这不是我需要的。如果我不是什么可用的替代方案?既然我这样做没有问题,我该如何解决寻找可以使用 python 的东西的问题?虽然我目前正在寻求谷歌距离矩阵作为解决方案。
  • 因为 API v3 是 JS-only,任何功能都必须通过网络浏览器运行。但是,有像 pygmaps (code.google.com/p/pygmaps) 和 py-googlemaps (py-googlemaps.sourceforge.net) 这样的项目起作用作为 API 操作的 Python 包装器,同时在后台运行 JS。
  • 谢谢。但据我所知,pygmaps 提供了映射功能,而实际上它本身也没有返回数据。而且我相信我尝试过的 py-googlemaps 是 V2 的包装器,他们不再提供 api 密钥。我的解决方案最终是通过 HTTP 请求和 JSON 解释器使用 Google 距离矩阵。

标签: python google-maps google-maps-api-3


【解决方案1】:

使用对 Google Distance Matrix API 的 URL 请求和一个 json 解释器,您可以做到这一点:

import simplejson, urllib
orig_coord = orig_lat, orig_lng
dest_coord = dest_lat, dest_lng
url = "http://maps.googleapis.com/maps/api/distancematrix/json?origins={0}&destinations={1}&mode=driving&language=en-EN&sensor=false".format(str(orig_coord),str(dest_coord))
result= simplejson.load(urllib.urlopen(url))
driving_time = result['rows'][0]['elements'][0]['duration']['value']

【讨论】:

  • 谢谢,太好了。例如,我想知道如何将出行方式从驾驶时间更改为循环时间?
  • @RegUser 只需将 url 中的 mode=driving 更改为 mode=bicycling
  • 非常感谢.. 它节省了我的时间!!
  • @tsspires。您能否包括如何在您的请求中包含 API 密钥?您提供的代码将无法正常工作。
【解决方案2】:
import googlemaps
from datetime import datetime

gmaps = googlemaps.Client(key='YOUR KEY')


now = datetime.now()
directions_result = gmaps.directions("18.997739, 72.841280",
                                     "18.880253, 72.945137",
                                     mode="driving",
                                     avoid="ferries",
                                     departure_time=now
                                    )

print(directions_result[0]['legs'][0]['distance']['text'])
print(directions_result[0]['legs'][0]['duration']['text'])

这是取自here 或者,您可以相应地更改参数。

【讨论】:

    【解决方案3】:

    更新了接受的答案以包含 API 密钥并使用字符串作为地址。

    import simplejson, urllib
    KEY = "xxxxxxxxxxxxxx"
    
    orig = "Street Address 1"
    dest = "Street Address 2"
    url = "https://maps.googleapis.com/maps/api/distancematrix/json?key={0}&origins={1}&destinations={2}&mode=driving&language=en-EN&sensor=false".format(KEY,str(orig),str(dest))
    result= simplejson.load(urllib.urlopen(url))
    #print(result)
    driving_time = result['rows'][0]['elements'][0]['duration']['text']
    print(driving_time)
    
    

    【讨论】:

    • 嗨,有什么想法,如何通过具有 100 条记录的数据框进行迭代?
    【解决方案4】:

    查看此链接: https://developers.google.com/maps/documentation/distancematrix/#unit_systems

    阅读有关“可选参数”的部分。本质上,您将参数添加到您的 url 中的请求中。所以如果你想骑自行车,那就是“mode=bicycling”。查看链接底部的示例并使用一些参数。祝你好运!

    【讨论】:

      猜你喜欢
      • 2012-05-17
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2016-04-07
      • 2019-03-08
      • 1970-01-01
      相关资源
      最近更新 更多