python计算两地之间的开车时间,保存到Excel中
python计算两地之间的开车时间,保存到Excel中
·
文章目录
一、去百度地图开发平台申请API的AK
注意:API调用次数限制默认为2000次/天
注册账号成功后选择控制台
应用管理→我的应用→创建应用
应用名称随便填
创建成功
二、代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests,json,os,time,xlwt,sys
flush_time = 60 # 刷新间隔,单位秒
file_name = "两地之间的开车时间.xls"
# 预置地点列表
address_list = [
"长沙市五一广场","长沙市望城区月亮岛","长沙市保利麓谷林语",
]
workdir = os.path.dirname(os.path.realpath(sys.argv[0]))
file_path = os.path.join(workdir,file_name)
AK = "GS6nkcuish66FLR" # 百度地图API认证码
# 获取地址的经纬度
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 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
def calcDistance(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 set_title_style(blod=False, underline=False):
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = "Calibri" # 字体类型
font.height = 20 * 11 # 20为衡量单位,11为字号
font.bold = blod # 是否加粗
font.underline = underline # 是否添加下划线
style.font = font
return style
# 生成Excel文件
def createExcel(data,file_path):
# 创建workbook和sheet对象
workboot = xlwt.Workbook(encoding='utf-8')
worksheet = workboot.add_sheet('计算两点间开车时间') # 设置工作表的名字
for i in range(len(address_list)+1):
worksheet.col(i).width = 256 * 30 # 设置每列宽, 256为衡量单位,30表示30个字符宽度
# 写入Excel标题
row0 = ["两点间开车时间(单位分钟)"]+address_list
for i in range(len(row0)):
worksheet.write(0, i, row0[i], set_title_style(True))
for i,line in enumerate(data):
for j,drive_time in enumerate(line):
worksheet.write(i+1, j, str(drive_time), set_title_style())
workboot.save(file_path)
print("[INFO] 成功创建%s" % file_path)
# 生成开车时间矩阵信息
def generateTimeMatrix(flush_time,file_path):
while True:
matrix_list = [] # 以矩阵的方式来存放两地之间的开车时间
alist = [] # 存放横坐标的值
print("[INFO] 开始计算两地之间的开车时间,每隔%s秒刷新一次..." % flush_time)
for start in address_list: # 起始位置作为纵坐标
alist.append(start)
for end in address_list: # 终点位置作为横坐标
dt = calcDistance(start, end)
alist.append(dt)
matrix_list.append(alist)
alist = []
createExcel(matrix_list,file_path)
time.sleep(flush_time)
if __name__ == "__main__":
try:
generateTimeMatrix(flush_time,file_path)
except Exception as e:
print('ERROR:%s' % e)
三、效果
四、生成可执行的exe文件
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/ #下载插件
pyinstaller -F 两地之间的开车时间.py #成功后会在当前路径的dist目录下生成exe文件
参考文章
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献13条内容
所有评论(0)