跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

基于 Java 的百度地图驾车路线规划服务开发指南

百度地图驾车路线规划服务提供 RESTful API 支持多种路径计算策略。介绍如何在 Java 环境中集成该服务,包括请求参数配置、响应数据解析及 JavaBean 封装。通过 UniHttp 进行接口调用,利用 GSON 转换 JSON 数据。重点说明坐标顺序(纬度在前)及坐标格式(WGS84 输入 bd09ll 输出)等常见问题处理方案,为业务系统提供稳定的路线规划数据基础。

flc发布于 2026/3/21更新于 2026/6/221 浏览
基于 Java 的百度地图驾车路线规划服务开发指南

一、驾车路线服务简介

本节将对百度地图的驾车路线服务进行简单的介绍。这不仅是我们开发的重要文档,也是我们后续进行问题查找的重要资料。这里将详细的介绍百度地图提供哪些规划服务、驾车路线服务包括哪些以及驾车路线服务的请求参数和响应参数信息。

1、百度路线规划服务

路线规划服务(又名 Direction API)是一套 REST 风格的 Web 服务 API,以 HTTP/HTTPS 形式提供了路线规划服务。

文章配图

从上图可以看到,百度地图的路线规划服务视图是非常丰富的,不仅包含驾车的方式,还包含骑行、步行和公交。大家可以根据自己的业务需要来调用相应的服务即可。更多服务能力,大家可以访问百度开放平台的相关链接了解。

2、驾车路线服务

驾车服务作为路线服务中非常重要的一环。如今随着城市交通建设的大力发展,许多城市的道路建设几乎是日新月异,如果没有路线导航服务,出行一定会受到极大的限制。

百度驾车路线服务:

根据起终点坐标检索符合条件的驾车路线规划方案,支持以下功能:

  1. 支持一次请求返回多条路线(备用路线)
  2. 支持 18 个以内的途径点
  3. 支持传入车牌规避限行路段
  4. 支持传入起点车头方向,辅助判断起点所在正逆向车道,辅助更准确算路
  5. 支持未来出行规划,指定未来 7 天任意出发时刻,将依据智能预测路况和道路限行规划合理路线

驾车路线服务的访问地址如下:

https://api.map.baidu.com/direction/v2/driving?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的 AK

3、请求参数

字段名称含义字段类型必填备注
ak用户的访问权限,AK 申请string必填
origin起点经纬度,小数点后不超过 6 位,40.056878,116.30815string必填起点经纬度,格式为:纬度,经度;小数点后不超过 6 位
destination终点经纬度,小数点后不超过 6 位,40.056878,116.30815string必填终点经纬度,格式为:纬度,经度;小数点后不超过 6 位
origin_uidPOI 的 uid(在已知起点 POI 的 uid 情况下,请尽量填写 uid,将提升路线规划的准确性)string选填
destination_uidPOI 的 uid(在已知终点 POI 的 uid 情况下,请尽量填写 uid,将提升路线规划的准确性)string选填
waypoints途径点坐标串,支持 18 个以内的有序途径点。多个途径点坐标按顺序以英文竖线符号分隔string选填
coord_type坐标类型,可选参数,默认为 bd09ll。允许的值为:bd09ll(百度经纬度坐标)、bd09mc(百度墨卡托坐标)、gcj02(国测局加密坐标)、wgs84(gps 设备获取的坐标)string选填默认 bd09ll
ret_coordtype返回结果坐标类型,默认为 bd09ll,允许的值为:bd09ll(百度经纬度坐标)、gcj02(国测局加密坐标)string选填默认 bd09ll
tactics0:默认;2:距离最短;3:不走高速;4:高速优先;5:躲避拥堵;6:少收费;7: 躲避拥堵 & 高速优先等int选填默认 0:默认策略
alternatives是否返回备选路线。0:返回一条推荐路线;1:返回 1-3 条路线供选择int选填默认 0
cartype车辆类型。0:普通汽车;1:纯电动汽车int选填默认 0
plate_number车牌号,如 京 A00022。用于规避车牌号限行路段string选填不填则不做规避
departure_time设置出发时间(支持未来 7 天),UNIX 时间戳。该功能为高级付费服务string选填默认为当前时间
ext_departure_time更多出发时间,UNIX 时间戳。目前支持输入过去 7 天内一个或多个出发时间戳string选填不填则不返回 ext_duration 字段
expect_arrival_time预期的到达时间,UNIX 时间戳。该功能为高级付费服务string选填不填则不返回 suggest_departure_time 字段
gps_direction起点的车头方向。字段类型:int64 取值范围:0-359int选填
radius起点的定位精度,字段类型:float,取值范围 [0,2000]float选填配合 gps_direction 字段使用
speed起点车辆的行驶速度,字段类型:floatfloat选填单位:米/秒
output表示输出类型,可设置为 xml 或 jsonstring选填默认为 json
sn用户的权限签名,当 AK 设置为 SN 校验时,该参数必填string选填
timestamp时间戳,与 SN 配合使用int64SN 存在时必填
callback回调函数string选填仅在 output=json 时,该参数有效
intelligent_plan传入多个途经点,综合考虑路况、交规限行、途经点的相对位置以及路线整体的绕路成本等,支持智能调整途经点顺序int选填默认 0
walkinfo起终点步导路线。1 表示下发起终点步导路线int选填默认值为 0
steps_info是否下发 step 详情。1:下发 step 详情;0:不下发 step 详情int选填
origin_bind_stategy起点绑路策略。0-起点绑路不剔除封闭道路;1-起点绑路剔除封闭道路int选填默认值 0
dest_bind_stategy终点绑路策略。0-终点绑路不剔除封闭道路;1-终点绑路剔除封闭道路int选填默认值 0
origin_road_type起点道路类型。0 普通道路;1 高架上;2 高架下;3 主路;4 辅路int选填默认值 0

4、响应参数

字段名称字段含义字段类型备注
status状态码int0:成功;1:服务内部错误;2:参数无效;7:无返回结果
message状态码对应的信息string
type默认返回 2,开发者无需关注int
result返回的结果
restriction限行结果提示信息string
total返回方案的总数int
routes返回的方案集
restriction_info
status限行状态int取值范围【0,3】
desc限行提示语string
origin
lng起点经度double
lat起点纬度double
destination
lng终点经度double
lat终点纬度double
tag方案标签string
traffic_light红绿灯数量int
route_id如无特殊需要,开发者无需关注string
distance方案距离,单位:米int
duration未来驾车路线耗时,单位:秒int
ext_duration驾车路线历史耗时(扩展),单位:秒int
suggest_departure_time建议出发时间,单位:秒int64
taxi_fee出租车费用,单位:元int
toll此路线道路收费,单位:元int
toll_distance收费路段里程,单位:米int
steps路线分段array
leg_index途径点序号int
direction进入道路的角度int枚举值 0-11
distancestep 的距离信息int单位米
road_name分段的道路名称string
road_type分段的道路类型int枚举值 0-9
toll分段道路收费,单位:元int
toll_distance分段道路收费路程,单位:米int
toll_gate_name收费站名称string
toll_gate_location
lng收费站位置:经度double
lat收费站位置:纬度double
start_location
lng分段起点经度double
lat分段起点纬度double
end_location
lng分段终点经度double
lat分段终点纬度double
path分段坐标string
adcodes分段途经的城市编码string
traffic_condition分段路况详情array
status路况指数int0: 无路况 1: 畅通 2: 缓行 3: 拥堵 4: 非常拥堵
geo_cnt从当前坐标点开 始,path 中路况相 同的坐标点个数int
distance距离,从当前坐 标点开始 path 中 路况相同的距 离,单位:米float
end_walkinfo终点步导路线array
distance终点步导路线距离int单位米
path终点步导路线坐标点string
start_walkinfo起点步导路线array
distance起点步导路线距离int单位米
path起点步导路线坐标点string

二、UniHttp 接口访问集成

1、访问接口创建

package com.yelang.project.thridinterface;
import com.burukeyou.uniapi.http.annotation.param.QueryPar;
import com.burukeyou.uniapi.http.annotation.request.GetHttpInterface;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
import com.yelang.project.thirdinterface.apiprocessor.BaiduHttpApi;

/**
 * - 百度驾车路径规划服务 2.0 版本
 */
@BaiduHttpApi(snMode = false)
public interface BaiduDrivingV2Service {
    @GetHttpInterface(path = "/direction/v2/driving")
    /**
     * - 驾车路线规划
     * @param ak 用户的访问权限,AK 申请
     * @param origin 起点经纬度,小数点后不超过 6 位
     * @param destination 终点经纬度,小数点后不超过 6 位
     * @param coordType 坐标类型
     * @param retCoordtype 返回结果坐标类型
     * @param tactics 策略
     * @param alternatives 是否返回备选路线
     * @param cartype 车辆类型
     * @param speed 起点车辆的行驶速度
     * @param stepsInfo 是否下发 step 详情
     * @return
     */
    public HttpResponse<String> getSearch(@QueryPar("ak") String ak,
                                          @QueryPar("origin") String origin,
                                          @QueryPar("destination") String destination,
                                          @QueryPar("coord_type") String coordType,
                                          @QueryPar("ret_coordtype") String retCoordtype,
                                          @QueryPar("tactics") int tactics,
                                          @QueryPar("alternatives") int alternatives,
                                          @QueryPar("cartype") int cartype,
                                          @QueryPar("speed") float speed,
                                          @QueryPar("steps_info") int stepsInfo);
}

以上参数是根据业务的需求进行定义的,除必填的参数以外,很多选填的参数是可以不定义,直接使用默认值即可。

2、本地调用测试

下面我们以从广东省广州市为起点,驾车开往贵州省铜仁市为例,车速选择匀速 100 公里,车型为普通油车、需要返回备选路线、并且返回下发详情的实例进行接口请求。这里我们使用 Junit 的方式进行集成,核心代码如下:

package com.yelang.project.unihttp;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.burukeyou.uniapi.http.core.response.HttpResponse;
import com.yelang.common.utils.StringUtils;
import com.yelang.project.thirdinterface.BaiduDrivingV2Service;

/**
 * - 百度地图驾车服务测试类
 */
@SpringBootTest
@RunWith(SpringRunner.class)
public class BaiduDrivingV2ServiceCase {
    private static final String BAIDU_CLIENT_AK = "yourak";
    @Autowired
    private BaiduDrivingV2Service drivingService;

    @Test
    public void testDriving() {
        String origin = "23.115102,113.269043";//出发地:广东省广州市
        String destination = "27.728514,109.186249";//目的地:贵州省铜仁市
        String coordType = "wgs84";
        String retCoordtype = "bd09ll";//返回坐标类型,请跟入参的坐标类型有所区别,返回坐标不支持 WGS84
        int tactics = 0;//默认距离最短
        int alternatives = 1;//1 表示返回 1-3 条备选路线
        int cartype = 0;//普通油车
        float speed = 27.78F;//100 千米/小时 ≈ 27.78 米/秒
        int stepsInfo = 1;//下发详情
        HttpResponse<String> result = drivingService.getSearch(BAIDU_CLIENT_AK, origin, destination, coordType, retCoordtype, tactics, alternatives, cartype, speed, stepsInfo);
        System.out.println(result.getBodyResult());
    }
}

3、响应对象初探

在本地 IDE 中运行以上程序后,可以看到以下输出:

文章配图

在文本编辑器中对返回数据进行 json 格式化后,可以看到如下结构:

文章配图

这个结构很重要,这个结构是我们下一步进行 Java 对象封装的重要参考资料。

三、响应对象的 Java 封装

通过上一节,我们已经成功的获取到了百度地图开放平台返回的路径规划结果,数据格式是 json,在实际业务中,我们需要使用 Java 来进行数据的持久化或者数据挖掘,因此需要将 json 反序列化成 JavaBean。这里分别介绍响应类图、以及相应的实现,最后基于 GSON 来进行对象转换说明。

1、驾车路线服务响应类图

根据前面的响应参数介绍以及在上一小节的真实响应对象的研究,我们大致对返回对象有了一个初印象。整理成如下类图:

文章配图

根据业务的需要,为了完整的业务数据还原,这里设计 11 个类来对百度地图的路线规划服务接口返回数据进行接收。

2、响应对象实现

a、公共属性类

公共对象是所有百度公共接口的父类,用来定义响应数据的公共属性,定义如下:

package com.yelang.project.meteorology.domain;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

/**
 * - 百度接口公共 DTO 对象,用于封装通用信息
 */
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class BdCommonDTO implements Serializable {
    private static final long serialVersionUID = 4985268844473756688L;
    private int status;//状态码 本次 API 访问状态,如果成功返回 0,如果失败返回其他数字。
    private String message;//响应信息 对 status 的中文描述
}
b、驾车路线数据传输类

驾车路线数据传输类封装了规划的路线信息,核心代码如下:

package com.yelang.project.meteorology.domain.baidudto;
import java.io.Serializable;
import com.yelang.project.meteorology.domain.BdCommonDTO;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString(callSuper = true)//callSuper=true 表示输出父类属性
@EqualsAndHashCode(callSuper = true)
public class BdDrivingDTO extends BdCommonDTO implements Serializable {
    private static final long serialVersionUID = 5055488530865458258L;
    private Integer type;//默认返回 2,开发者无需关注
    private BdDrivingResultDTO result;
}
c、导航信息类

导航信息类包含了分段信息、方案总数、具体的方案路线信息,核心代码如下:

package com.yelang.project.meteorology.domain.baidudto;
import java.io.Serializable;
import java.util.List;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class BdDrivingResultDTO implements Serializable {
    private static final long serialVersionUID = 6407644142297216118L;
    private String restriction;//限行结果提示信息,若无限行路线,则返回空,若无法规避限行,则返回限行提示信息
    private int total;//返回方案的总数
    @SerializedName("navi_restype")
    private String naviRestype;
    @SerializedName("session_id")
    private String sessionId;
    private List<BdDrivingRouteDTO> routes;
    private String holiday;
    @SerializedName("ret_coordtype")
    private String retCoordtype;
    @SerializedName("api_restype")
    private String apiRestype;
}
d、具体路线分段信息类

具体路线分段信息类,封装了路线详情、距离、打车费用预估、预计时间和具体的转折路线列表,核心代码如下:

package com.yelang.project.meteorology.domain.baidudto;
import java.io.Serializable;
import java.util.List;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class BdDrivingRouteDTO implements Serializable {
    private static final long serialVersionUID = -2475019111446934340L;
    private BdLocationDTO origin;
    private BdLocationDTO destination;
    private String tag;//方案标签
    private String mrsl;
    @SerializedName("route_md5")
    private String routeMd5;
    @SerializedName("data_version")
    private String dataVersion;
    @SerializedName("traffic_light")
    private int trafficLight;
    private float distance;//距离,单位米
    private int duration;//未来驾车路线耗时,单位:秒
    @SerializedName("taxi_fee")
    private float taxiFee;
    @SerializedName("has_guidance")
    private boolean hasGuidance;
    private List<BdDrivingStepDTO> steps;//路线分段集合
    @SerializedName("restriction_info")
    private BdDrivingRestrictionInfoDTO restrictionInfo;
    @SerializedName("yellow_tip")
    private List<BdDrivingYelloTipDTO> yellowTipList;
    private int toll;//此路线道路收费,单位:元
    @SerializedName("toll_distance")
    private float tollDistance;
    private float score;
    @SerializedName("route_id")
    private String routeId;
}

篇幅有限,如果百度驾车路径规划完整响应类的代码,可以参考上述的结果先自己研究。

3、使用 GSON 转换实例

最后我们将百度开放平台返回的 JSON 数据转换成 Java 对象,转换框架这里以 Gson 为例,其它的 json 框架也是可以的。转换代码如下:

Gson gson = new Gson();
if (StringUtils.isNotEmpty(result.getBodyResult())) {
    BdDrivingDTO drivingDTO = gson.fromJson(result.getBodyResult(), BdDrivingDTO.class);
    System.out.println(drivingDTO);
    System.out.println("---------------------------");
    System.out.println(gson.toJson(drivingDTO));
}

运行程序后,可以看到正常的数据输出。后续我们可以基于此和其他应用的结合。

四、常见问题

在百度驾车路线规划服务集成过程中,可能会遇到一些问题。比如我在集成过程中就遇到了关于坐标精度和坐标和格式的问题。导致这个问题的原因主要还是对官网文档不是很熟悉,实践出真知,只有经过实战才知道可能会遇到什么问题。

1、坐标顺序问题

众所周知,在地理位置中,经纬度是描述一个点的具体格式。因此我们特别习惯在描述一个点时,使用(经度,纬度)的方式,如:113.269043,23.115102。但是这种方式在实际查询过程中会报以下错误:

文章配图

解决的办法也比较简单,在百度的位置描述中,将纬度描述在前,即(纬度,经度)即可。

2、坐标格式问题

坐标类型永远是 GIS 应用中绕不开的话题,大家可能都以为通用的 WGS84,在接口的参数定义中,我们可以看到,查询参数的坐标是支持 WGS84 的,但是在返回的坐标中,却没有了这个参数支持。如果在返回参数中设置了 WGS84,大概率是会报错的,如下图所示:

文章配图

解决办法就是按照文档调整参数设置即可。

目录

  1. 一、驾车路线服务简介
  2. 1、百度路线规划服务
  3. 2、驾车路线服务
  4. 3、请求参数
  5. 4、响应参数
  6. 二、UniHttp 接口访问集成
  7. 1、访问接口创建
  8. 2、本地调用测试
  9. 3、响应对象初探
  10. 三、响应对象的 Java 封装
  11. 1、驾车路线服务响应类图
  12. 2、响应对象实现
  13. a、公共属性类
  14. b、驾车路线数据传输类
  15. c、导航信息类
  16. d、具体路线分段信息类
  17. 3、使用 GSON 转换实例
  18. 四、常见问题
  19. 1、坐标顺序问题
  20. 2、坐标格式问题
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 前端表单验证策略与最佳实践
  • 手写一个通用的 Java 重试机制
  • HTTP 应用层协议详解与简易服务器实现
  • Ubuntu 预配置环境下的无人机仿真与 AI 开发实践
  • DeepSeek 技术对数据标注行业的影响及未来展望
  • Seedream 4.0 模型核心能力与企业级应用场景解析
  • 基于 GLM-4.7-Flash 构建本地 Copilot 工具
  • 第二届人工智能、虚拟现实与交互设计国际学术会议(AIVRID 2026)
  • Java Map 与 Set 数据结构深度解析与实战对比
  • 2019 年信奥赛 CSP-S 提高组初赛真题解析(选择题 6-10)
  • LIBERO 数据集详解:终身机器人学习与知识迁移基准
  • OpenClaw 实战:利用 AI Agent 自动生成测试用例并导出 Excel
  • Z-Image-Turbo Python API 调用示例详解
  • VSCode Github Copilot 使用 OpenAI 兼容自定义模型方法
  • MySQL 基本查询实战:增删改查与聚合分组详解
  • 网络安全行业发展趋势与人工智能技术应用分析
  • 人形机器人站立与行走:控制算法设计与实现
  • 若依框架二次开发:实现前端动态域名解析与主题换肤
  • 基于昇腾 NPU 部署 Mistral-7B-Instruct-v0.2 模型实战
  • GitHub Copilot 配置核心认知与典型错误规避

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online