栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python通过百度地图API批量计算两地路线距离

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python通过百度地图API批量计算两地路线距离

与上篇高德地图API的有微小差别,主要是接口获取数据格式的差异,也放上来记录一下。

import pandas as pd
import requests
import json

AK = "*******"      # 注册百度地图开发者后获得的key

def getLocation(address):
    url = f"https://api.map.baidu.com/geocoding/v3/?address={address}&output=json&ak={AK}"     #百度地图
    res = requests.get(url)
    json_data = json.loads(res.text)

    if json_data["status"] == 0:
        lat = json_data["result"]["location"]["lat"]
        lng = json_data["result"]["location"]["lng"]
    else:
        return "no data", json_data["status"]
    return str(lat) + "," + str(lng), json_data["status"]

def getDistance(start, end):
    url = f"https://api.map.baidu.com/directionlite/v1/driving?origin={start}&destination={end}&ak={AK}"
    res = requests.get(url)
    json_data = json.loads(res.text)

    if json_data["status"] == 0:
        return json_data["result"]["routes"][0]["distance"]
    else:
        return -1

def calDistance(startAddr, endAddr):
    start, status1 = getLocation(startAddr)
    end, status2 = getLocation(endAddr)

    if status1 == 0 and status2 == 0:
        return getDistance(start, end)
    else:
        return -1

if __name__ == "__main__":
    data = pd.read_excel("bj.xlsx")
    result = []
    for i in range(0, len(data)):
        startAddr = data.iloc[i,0]
        endAddr = data.iloc[i,1]
        dist = calDistance(startAddr, endAddr)
        result.append([startAddr, endAddr, dist/1000])
    pd.DataFrame(result).to_excel(
        "result.xlsx",
        header=["出发地", "目的地", "距离"],
        encoding="utf-8"
    )
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009266.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号