python_高德地图驾车时长查询

python_高德地图驾车时长查询

bash 复制代码
# 使用此指令前,请确保安装必要的Python库,例如使用以下命令安装:
# pip install requests

import requests

from typing import *
try:
    from xbot.app.logging import trace as print
except:
    from xbot import print


def gaode_driving_duration(origin_name, destination_name, api_key):
    """
    title: 高德地图驾车时长查询V2.0
    description: 根据起点地址 %origin_name% 和终点地址 %destination_name%,调用高德地图API %api_key% 获取预计驾车时长(分钟)。
    inputs:
        - origin_name (str): 起点地址名称,eg: "北京天安门"
        - destination_name (str): 终点地址名称,eg: "北京朝阳站"
        - api_key (str): 高德地图Web服务API Key,eg: "XXX"
    outputs:
        - duration_info (dict): 包含预计时长的字典,eg: {"时长(分钟)": 25.5}
    """

    def _geocode(address, key):
        """将地址解析为经纬度坐标"""
        url = "https://restapi.amap.com/v3/geocode/geo"
        params = {
            "key": key,
            "address": address,
            "output": "json"
        }
        try:
            response = requests.get(url, params=params, timeout=10)
            response.raise_for_status()
            res_data = response.json()
            if res_data.get("status") == "1" and res_data.get("geocodes"):
                return res_data["geocodes"][0]["location"]
            else:
                raise ValueError(f"地址解析失败: {address}, 错误信息: {res_data.get('info')}")
        except Exception as e:
            raise RuntimeError(f"请求高德地理编码接口出错: {str(e)}")

    # 1. 获取起点和终点的经纬度
    origin_coords = _geocode(origin_name, api_key)
    destination_coords = _geocode(destination_name, api_key)

    # 2. 调用驾车路线规划 2.0 接口
    url = "https://restapi.amap.com/v5/direction/driving"
    params = {
        "key": api_key,
        "origin": origin_coords,
        "destination": destination_coords,
        "show_fields": "cost",
        "output": "json"
    }

    try:
        resp = requests.get(url, params=params, timeout=10)
        resp.raise_for_status()
        data = resp.json()
        
        if data.get("status") != "1":
            raise ValueError(f"路线规划失败: {data.get('info')}")

        paths = data.get("route", {}).get("paths", [])
        if not paths:
            raise ValueError("未找到合适的驾车路线")

        # 3. 计算时长(取所有路径中cost对应duration的平均值)
        total_duration = sum(int(path["cost"]["duration"]) for path in paths)
        average_duration_seconds = total_duration / len(paths)

        # 4. 转换为分钟并保留一位小数
        duration_minutes = round(average_duration_seconds / 60, 1)

        return {
            "时长(分钟)": duration_minutes
        }

    except Exception as e:
        raise RuntimeError(f"请求高德路径规划接口出错: {str(e)}")
相关推荐
曲径海盗6 分钟前
【Python 学习第 58 天】列表方法
python·学习笔记·编程入门
乌暮8 分钟前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
DeepVisionary9 分钟前
Runway开源机器人大模型Praxis-1,推演延迟压到62毫秒
python·自动化
小此方1 小时前
Re:Mysql数据库基础篇(十二):什么是事务、事务解决了什么问题、事务的四大属性、事务的操作方式
数据库·mysql
csdn_aspnet1 小时前
macOS 10 、Docker 玩轉 MySQL
运维·mysql·macos·docker·容器·mac
Cooper252 小时前
DDC 命令成功但屏幕不动:用 gamma 表重做亮度映射
python·mac
师夷长技以自愈2 小时前
手搓 AI Agent 第 7 篇:菜做砸了别硬炒——错误分类 + 双账本熔断
人工智能·python
flash俊杰2 小时前
v0.5-01 让桌面 AI 助手记得住:预算组装、递归摘要、长期记忆与评估基线
数据库·安全·架构
用户956256254292 小时前
15 分钟社媒简报 Agent:我只用了搜索和模型两步
python·api
Dumbness2 小时前
关键词回复里写了 {订单号},群机器人整条消息都炸了
python·微信