高德路径规划API必须带key且origin/destination为逗号分隔的GCJ-02经纬度;缺key返回10005,缺参数返回10003;需校验status=1、routes存在且非空;驾车多途经点用waypoints(最多16个,分号分隔),固定顺序需strategy=2;注意超时、频控及坐标系纠偏。

高德路径规划 API 的请求方式必须带 key 和 origin/destination
不加 key 直接发请求,返回的是 {"status":0,"info":"INVALID_USER_KEY","infocode":"10005"};漏掉 origin 或 destination,会报 {"status":0,"info":"INVALID_PARAMS","infocode":"10003"}。这两个参数必须是逗号分隔的经纬度(lng,lat),不是地址字符串——想用地址查路线,得先调一次地理编码 API 转成坐标。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 用
file_get_contents()或curl_init()发 GET 请求,别用 POST -
key放 URL 查询参数里,别塞在 header 里(高德不认) - 坐标顺序必须是
经度,纬度,反了会算出离谱路线(比如绕地球半圈) - 驾车路线用
https://restapi.amap.com/v3/direction/driving,步行用https://restapi.amap.com/v3/direction/walking
PHP 解析 JSON 返回值时要注意 status 字段和 routes 数组存在性
高德返回的 JSON 看似结构稳定,但 routes 数组可能为空(比如跨海、禁行路段),或者根本没这个 key(请求失败时只返回 status 和 info)。直接 $data['routes'][0]['distance'] 会触发 PHP Notice。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 先检查
$data['status'] !== '1',不是 1 就别往下读routes - 用
isset($data['routes']) && !empty($data['routes'])判空,别只用!empty($data['routes']) - 距离单位是米,时间单位是秒,前端展示前记得换算(比如除以 1000 得公里,除以 60 得分钟)
- 示例片段:
$json = file_get_contents($url);<br>$data = json_decode($json, true);<br>if ($data['status'] == '1' && isset($data['routes'][0])) {<br> $dist = $data['routes'][0]['distance'];<br> $time = $data['routes'][0]['duration'];<br>}
驾车路线要传 waypoints 才能支持多途经点,且数量不能超 16 个
默认接口只算起点到终点,加途经点必须用 waypoints 参数,格式是 lng1,lat1;lng2,lat2;lng3,lat3(分号分隔,每个点仍是 经度,纬度)。传错格式(比如用逗号或中文分号)会静默忽略,返回的仍是两段式路线。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
-
waypoints是可选参数,不传就当空字符串,别传null或''以外的 falsy 值 - 最多 16 个途经点(含起点终点?不,是额外的点),超了会返回
infocode:10003 - 注意:途经点不保证顺序执行,高德会自动优化顺序(如 TSP),真要固定顺序得用
strategy=2 - 策略参数
strategy常用值:0(速度优先)、1(费用优先)、2(不重排途经点)
生产环境必须处理 HTTP 超时和 API 频控
高德对免费 key 有调用量限制(如 1000 次/日),并发高时容易返回 {"status":0,"info":"DAILY_QUERY_OVER_LIMIT","infocode":"10024"};网络抖动或响应慢,file_get_contents() 默认不设超时,可能卡住整个 PHP 进程。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 用
curl替代file_get_contents(),设CURLOPT_TIMEOUT_MS为 3000(3 秒) - 对
10024错误码做降级:返回缓存旧数据 or 提示“路线暂不可用” - 避免在循环里高频调用,比如批量计算 100 个点对,应合并为路径规划批量接口(但注意:高德无原生批量驾车接口,需自己拆)
- key 别硬编码在 PHP 文件里,放环境变量或配置中心,防止泄露后被刷 quota
最常被跳过的其实是坐标系校验——高德用 GCJ-02 坐标系,如果你的经纬度来自 GPS 设备(WGS-84),得先纠偏,否则路线偏差几百米起步。



















