📜  在Python中使用谷歌距离矩阵 API 计算两地之间的距离和持续时间(1)

📅  最后修改于: 2023-12-03 15:23:26.508000             🧑  作者: Mango

在Python中使用谷歌距离矩阵 API 计算两地之间的距离和持续时间

谷歌距离矩阵 API 提供了计算两地之间距离和持续时间的服务,使用这个 API 可以快速、简便地获取这些信息。本文将介绍如何在 Python 中使用谷歌距离矩阵 API,计算两地之间的距离和持续时间。

1. 获取 API Key

在使用谷歌距离矩阵 API 之前,需要先获取一个 API Key,以便进行身份验证。获取方式如下:

  1. 进入 Google Cloud Platform 的控制台页面:https://console.cloud.google.com/
  2. 创建新项目,这个项目的名称可以随意
  3. 在左侧菜单栏中选择“API 和服务”,然后找到“凭据”(Credentials)页面
  4. 点击“创建凭据”(Create credentials)按钮,选择“API 密钥”(API key)
  5. 将生成的 API Key 保存下来,后续将在代码中使用。

注意:获取 API Key 可能需要进行付费,详细信息请参考谷歌官方文档。

2. 安装依赖库

要使用谷歌距离矩阵 API,需要先安装两个 Python 库:googlemaps 和 geopy。可以使用 pip 命令进行安装,命令如下:

pip install googlemaps geopy
3. 编写 Python 代码

在安装完依赖库之后,可以开始编写 Python 代码进行距离和时间的计算。

3.1 导入库和 API Key

在代码开头导入必要的库,并替换其中的 API Key 为自己的。

import googlemaps
from datetime import datetime
from geopy.distance import geodesic

gmaps = googlemaps.Client(key='YOUR_API_KEY')
3.2 获取两地之间的距离

使用 geopy 库可以方便地计算两地之间的距离。这个库提供了 Geodesic 类,可以根据经纬度直接计算距离。

origin = 'New York, NY'
destination = 'Boston, MA'

origin_latlng = gmaps.geocode(origin)[0]['geometry']['location']
destination_latlng = gmaps.geocode(destination)[0]['geometry']['location']

distance = geodesic((origin_latlng['lat'], origin_latlng['lng']), (destination_latlng['lat'], destination_latlng['lng'])).km

print(f"The distance between {origin} and {destination} is {distance:.1f} km.")
3.3 获取两地之间的持续时间

使用 googlemaps 库中的 directions 函数可以获取两地之间的持续时间。这个函数的返回值包含了很多关于路线和持续时间的信息。

now = datetime.now()
directions_result = gmaps.directions(origin, destination, mode="driving", departure_time=now)

duration_in_traffic = directions_result[0]['legs'][0]['duration_in_traffic']['text']

print(f"The duration in traffic from {origin} to {destination} is {duration_in_traffic}.")
4. 总结

本文介绍了如何在 Python 中使用谷歌距离矩阵 API 计算两地之间的距离和持续时间。首先需要获取 API Key,并安装相应的 Python 依赖库。然后使用 geopy 库计算距离,使用 googlemaps 库获取持续时间。完整的代码可以参考下面的代码片段。

import googlemaps
from datetime import datetime
from geopy.distance import geodesic

gmaps = googlemaps.Client(key='YOUR_API_KEY')

origin = 'New York, NY'
destination = 'Boston, MA'

origin_latlng = gmaps.geocode(origin)[0]['geometry']['location']
destination_latlng = gmaps.geocode(destination)[0]['geometry']['location']

distance = geodesic((origin_latlng['lat'], origin_latlng['lng']), (destination_latlng['lat'], destination_latlng['lng'])).km
now = datetime.now()
directions_result = gmaps.directions(origin, destination, mode="driving", departure_time=now)

duration_in_traffic = directions_result[0]['legs'][0]['duration_in_traffic']['text']

print(f"The distance between {origin} and {destination} is {distance:.1f} km.")
print(f"The duration in traffic from {origin} to {destination} is {duration_in_traffic}.")

输出:

The distance between New York, NY and Boston, MA is 306.9 km.
The duration in traffic from New York, NY to Boston, MA is 3 hours 59 mins.

注意:在实际使用中,需要替换代码中的 origin 和 destination,以计算其他两地之间的距离和持续时间。