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

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

综述由AI生成基于 Java 语言集成百度地图开放平台的驾车路线规划服务。文章详细解析了 API 的请求与响应参数结构,演示了使用 UniHttp 进行接口调用的方法,并提供了将 JSON 响应转换为 JavaBean 的代码示例。同时总结了坐标顺序及格式处理等常见问题的解决方案,帮助开发者构建稳定的路径规划功能模块。

Eee_123发布于 2026/3/15更新于 2026/6/1326 浏览
基于 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用户的访问权限string必填
origin起点经纬度,小数点后不超过 6 位string必填起点经纬度,格式为:纬度,经度;小数点后不超过 6 位
destination终点经纬度,小数点后不超过 6 位string必填终点经纬度,格式为:纬度,经度;小数点后不超过 6 位
origin_uidPOI 的 uidstring选填
destination_uidPOI 的 uidstring选填
waypoints途径点坐标串,支持 18 个以内的有序途径点string选填
coord_type坐标类型,可选参数,默认为 bd09llstring选填默认 bd09ll
ret_coordtype返回结果坐标类型,默认为 bd09llstring选填默认 bd09ll
tactics策略选择int选填默认 0:默认策略
alternatives是否返回备选路线int选填默认 0
cartype车辆类型int选填默认 0
plate_number车牌号string选填不填则不做规避
departure_time设置出发时间(支持未来 7 天),UNIX 时间戳string选填默认为当前时间
ext_departure_time更多出发时间,UNIX 时间戳string选填不填则不返回 ext_duration 字段
expect_arrival_time预期的到达时间,UNIX 时间戳string选填不填则不返回 suggest_departure_time 字段
gps_direction起点的车头方向int选填
radius起点的定位精度float选填
speed起点车辆的行驶速度float选填
output表示输出类型,可设置为 xml 或 jsonstring选填默认为 json
sn用户的权限签名string选填
timestamp时间戳,与 SN 配合使用int64SN 存在时必填
callback回调函数string选填
intelligent_plan智能调整途经点顺序int选填默认 0
walkinfo起终点步导路线int选填
steps_info是否下发 step 详情int选填
origin_bind_stategy起点绑路策略int选填默认值 0
dest_bind_stategy终点绑路策略int选填默认值 0
origin_road_type起点道路类型int选填默认值 0

4、响应参数

字段名称字段含义字段类型备注
status状态码int0:成功
message状态码对应的信息string
type默认返回 2int
result返回的结果
restriction限行结果提示信息string
total返回方案的总数int
routes返回的方案集
restriction_info限行状态
origin起点位置
destination终点位置
tag方案标签string
traffic_light红绿灯数量int
route_id路线 IDstring
distance方案距离,单位:米int
duration未来驾车路线耗时,单位:秒int
ext_duration驾车路线历史耗时(扩展),单位:秒int
suggest_departure_time建议出发时间,单位:秒int64
taxi_fee出租车费用,单位:元int
toll此路线道路收费,单位:元int
toll_distance收费路段里程,单位:米int
steps路线分段array
end_walkinfo终点步导路线array
start_walkinfo起点步导路线array

二、UniHttp 接口访问集成

这里我们使用 UniHttp 来简化 Http 服务调用。这里仅详细说明如何进行访问接口的创建和本地接口的创建和集成。本节是实际的进行接口调用,并且返回相应的结果实战。

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.thridinterface.apiprocessor.BaiduHttpApi;

/**
 * - 百度驾车路径规划服务 2.0 版本
 */
@BaiduHttpApi(snMode = false)
public interface BaiduDrivingV2Service {
    @GetHttpInterface(path = "/direction/v2/driving")
    /**
     * - 驾车路线规划
     * @param ak 用户的访问权限
     * @param origin 起点经纬度
     * @param destination 终点经纬度
     * @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.thridinterface.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";//返回坐标类型
        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 中运行以上程序后,可以看到以下输出:

API 响应输出

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

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、坐标格式问题
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • 网文作者用什么AI工具?2026年AI写作工具实用榜单
  • Spring IoC 容器与依赖注入核心机制详解
  • C++ 基于正倒排索引的 Boost 搜索引擎日志与 Server 实现
  • 30 道高频 JavaScript 手写实现汇总
  • 大模型应用开发入门:GPT-4 与 ChatGPT 实战指南
  • 基于 Web 的宠物领养管理系统设计与实现
  • 前端部署:别让你的应用在上线后掉链子
  • Python 驱动浏览器自动化:Playwright + AI 最佳实践
  • 微信小程序案例 - 自定义 tabBar
  • Python 列表基础:创建、操作与切片详解
  • FPGA 基础与架构面试题详解(一)
  • Python 量化实战:使用 AKShare 获取 A 股实时行情数据
  • 数据结构:双向链表原理与 C 语言实现
  • 在线图书借阅平台设计与实现:AI 辅助开发实战
  • 飞牛 NAS 配置 IPv6 动态解析至阿里云域名教程
  • SpringBoot 手动开启数据库事务的几种实现方式
  • 语义化 AI 驱动器:提示词工程的技术演进与未来
  • 大语言模型(LLM)全面学习指南
  • 社招 FPGA 面试核心考点:基础概念与架构解析
  • LeetCode 原地复写零:双指针与逆向填充的 O(n) 解法

相关免费在线工具

  • 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