Python调用百度地图api获取起点终点距离和预估时长
去百度地图开放平台申请API的AK
import pandas as pd
import requests, json
AK = "xxxx"
# 获取位置
def getPosition(address):
url = r"http://api.map.baidu.com/place/v2/search?query={}®ion=全国&output=json&ak={}".format(
address,
AK
)
res = requests.get(url)
json_data = json.loads(res.text)
if json_data["status"] == 0:
lat = json_data["results"][0]["location"]["lat"] # 纬度
lng = json_data["results"][0]["location"]["lng"] # 经度
else:
print(json_data["message"])
return "0,0", json_data["status"]
return str(lat) + "," + str(lng), json_data["status"]
# 获取距离
def getDistance(start, end):
url = "https://api.map.baidu.com/directionlite/v1/driving?origin={}&destination={}&ak={}".format(
start,
end,
AK
)
res = requests.get(url)
json_data = json.loads(res.text)
if json_data["status"] == 0:
return json_data["result"]["routes"][0]["distance"]
else:
print(json_data["message"])
return -1
# 计算距离
def calcDistance(startName, endName):
start, status1 = getPosition(startName)
end, status2 = getPosition(endName)
if status1 == 0 and status2 == 0:
return getDistance(start, end)
else:
return -1
# 计算时长
def calcDuration(startName, endName):
start, status1 = getPosition(startName)
end, status2 = getPosition(endName)
if status1 == 0 and status2 == 0:
return round(getTime(start, end) / 60, 1) # 将时间转换为分钟
else:
return -1
# 获取两地开车的时间
def getTime(start, end):
url = "https://api.map.baidu.com/directionlite/v1/driving?origin={}&destination={}&ak={}".format(
start, end, AK
)
res = requests.get(url)
json_data = json.loads(res.text)
if json_data["status"] == 0:
# return json_data["result"]["routes"][0]["distance"] # 获取距离
return int(json_data['result']['routes'][0]['duration']) # 获取时间,单位s
else:
print(json_data["message"])
return -1
if __name__ == "__main__":
data = pd.read_excel("data.xlsx")
res = []
for i in range(len(data)):
startName = data.iloc[i, 0]
endName = data.iloc[i, 1]
kilometre = calcDistance(startName, endName)
duration = calcDuration(startName, endName)
# 以千米为单位
res.append([startName, endName, kilometre / 1000, duration])
pd.DataFrame(res).to_excel(
"result.xlsx",
header=["起点", "终点", "公里", "驾驶时长"],
index=None,
encoding="utf-8"
)
data.xlsx内容
起点 | 终占 |
---|---|
北京市xxx | 北京市朝阳区xxx |
输出结果: result.xlsx
起点 | 终点 | 公里 | 驾驶时长 |
---|---|---|---|
北京市xxx | 北京市朝阳区xxx | 2.888 | 12.3 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)