一、去百度地图开发平台申请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={}&region=全国&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文件

在这里插入图片描述

参考文章

Python利用百度地图获取两地距离 最详细过程和源代码
python文件打包成可执行文件exe的两种方法

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐