首页 > 编程语言 >Python调用百度地图api获取起点终点距离和预估时长

Python调用百度地图api获取起点终点距离和预估时长

时间:2022-11-29 18:24:47浏览次数:72  
标签:return Python res start json api endName data 百度

去百度地图开放平台申请API的AK

https://lbsyun.baidu.com/apiconsole/center#/home

import pandas as pd
import requests, json

AK = "xxxx"


# 获取位置
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 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

标签:return,Python,res,start,json,api,endName,data,百度
From: https://www.cnblogs.com/yehaixiao/p/16936188.html

相关文章

  • python爬取m3u8视频文件
    importrequestsimportosimportaiohttpimportasynciofirst_m3u8_url="https://cdn.zoubuting.com/20221129/waHIjBSS/index.m3u8"headers={'User-Agent......
  • python性能调优之key-query
    近期接触到一个性能调优的问题,需要在mongodb中比对大约100G的csv文件的key在mongodb中是否存在baseline首先做一个什么优化都没有的情况下的基准测试:bat......
  • python-比较两个列表中的相同元素和不同元素
    由于两个列表(List)中可能会存在重复的元素,所以我们可以将列表转化成集合(set)进行去重,然后计算交集和差集。A=['1','2','3']B=['2','4','5']##计算交集print(str(......
  • PYTHON 控制语句
    1.1if语句1.1.1if结构if条件: 代码块如果条件成立(True),则执行代码块。score=100ifscore>=90:print("优秀")1.1.2if-else结构if条件:代码......
  • JIRA API 集成经验总结
    JIRA集成总结由于工作需要,系统需要集成JIRAAPI去自动创建ticket,期间几乎没有遇到太多坑,可能和JIRAAPIdocument规范有关吧,不得不说,JIRAAPIdocument是我见过......
  • 力扣240(java&python)-搜索二维矩阵 II(中等)
    题目:编写一个高效的算法来搜索 m x n 矩阵matrix中的一个目标值target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例......
  • Spring Boot中使用Swagger3.0.0版本构建RESTful APIs
    文章目录​​一、项目描述​​​​二、简介​​​​三、Swagger2.X和Swagger3.0.0的对比​​​​1)SpringFox2.x发布​​​​2)SpringFox3.0.0发布​​​​3)swagger3.0......
  • 【python】locust模块_性能测试
    简介Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程......
  • pythonfloat优雅的四舍五入
    开发中经常会有float四舍五入转int的需求,先看看浮点数直接转int的情形:无论如何float直接转int都不会四舍五入,而是直接抹去小数点。这个需求很简单,实现也很简单,看过网友的......
  • 幂等——Java基础api设计
    幂等什么是幂等幂等性:****多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。使用幂等的场景1.前端重复提交在用户注册、用户创建商......