三分钟学会调用百度地图API

本文详细介绍如何使用百度地图API创建地图应用。首先,需在百度地图官网注册为开发者并获取AK。接着,在本地编写HTML文件,引入百度地图API,并通过JavaScript实现地图的显示和功能定制,如设置中心点、缩放级别、添加导航控件等。最后,演示了如何在地图上添加多个行政区划和搜索特定地点。

学习调用百度地图API

1.首先你要在百度地图的官网注册成为开发者
并创建自己的应用,获取ak,这里如果在web网页中,我选择用js
在这里插入图片描述

2.然后在本地编写调用的html文件

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
    </style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=P39PpXRcSvYIugAGG4HKCiB3GVNncaKA"></script> 

    <title>添加多个行政区划</title>
</head>
<body>
    <div id="allmap"></div>
</body>

<script type="text/javascript">
    // 百度地图API功能
    var map = new BMap.Map("allmap");
    map.centerAndZoom(new BMap.Point(114.522081844,38.0489583146), 15);
    // 初始化地图,设置中心点坐标和地图级别,缩放
    map.addControl(new BMap.NavigationControl({type: BMAP_NAVIGATION_CONTROL_SMALL}));
    map.enableScrollWheelZoom();
    madeBoundary();
    

//区域图
    function madeBoundary() {       
    var datas = new Array("新华区-#665599","石家庄市长安区-#1199cc","裕华区-#559955","桥西区-#666ddd");
        var bdary = new BMap.Boundary();
        for(var i=0;i<datas.length;i++){
        getBoundary(datas[i],bdary);    
        } 
        
    } 
//设置区域图

    function getBoundary(data,bdary){    
      data = data.split("-");
        bdary.get(data[0], function(rs){       //获取行政区域    
            var count = rs.boundaries.length; //行政区域的点有多少个

              var pointArray = [];
            for (var i = 0; i < count; i++) {
                var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"
            }
                ); //建立多边形覆盖物      
                map.addOverlay(ply);  //添加覆盖物
                map.setViewport(points);    //调整视野
            }                             
        });     
    }
        var local = new BMap.LocalSearch(map, {
        renderOptions:{map: map}
    });
    local.search("充电桩");

</script>

</html>

3.在浏览器浏览,ok!

在这里插入图片描述

<think>我们正在使用Java调用百度地图API来获取路线规划的预计到达时间(ETA)。根据引用内容,百度地图的DrivingRoute(驾车路线规划)可以返回路径信息,其中包括行驶时间和距离等。我们需要做以下几步: 1. 引入百度地图Java SDK的相关依赖。 2. 创建DrivingRoute实例,并设置回调函数。 3. 在回调函数中处理结果,获取时间信息。 注意:百度地图API调用需要申请ak(API Key),并在代码中进行配置。 步骤: 1. 在项目中添加百度地图SDK依赖(如果使用Maven,需在pom.xml中添加相应依赖,或者下载jar包)。 2. 初始化地图服务,设置起点和终点。 3. 发起驾车路线规划请求。 4. 在回调中解析结果,获取预计时间。 示例代码: ```java import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.search.core.RouteLine; import com.baidu.mapapi.search.core.SearchResult; import com.baidu.mapapi.search.route.DrivingRouteLine; import com.baidu.mapapi.search.route.DrivingRoutePlanOption; import com.baidu.mapapi.search.route.DrivingRouteResult; import com.baidu.mapapi.search.route.OnGetRoutePlanResultListener; import com.baidu.mapapi.search.route.PlanNode; import com.baidu.mapapi.search.route.RoutePlanSearch; import com.baidu.mapapi.search.route.DrivingRouteLine.DrivingStep; public class BaiduMapETAExample { private RoutePlanSearch mSearch; public void init() { // 初始化SDK,注意要在setContentView之前调用 SDKInitializer.initialize(context); // 需要传入Context,例如在Activity中传入this mSearch = RoutePlanSearch.newInstance(); mSearch.setOnGetRoutePlanResultListener(listener); } // 创建监听器 OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() { @Override public void onGetDrivingRouteResult(DrivingRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { // 处理错误情况 return; } if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { // 起终点或途经点有歧义,通过建议列表获取 return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { // 获取第一条路线 if (result.getRouteLines().size() > 0) { DrivingRouteLine routeLine = (DrivingRouteLine) result.getRouteLines().get(0); // 获取总时间,单位:秒 int totalTime = routeLine.getDuration(); // 转换为分钟 int minutes = totalTime / 60; System.out.println("预计到达时间(分钟): " + minutes); // 还可以获取每一步的信息 for (DrivingStep step : routeLine.getAllStep()) { // 每一步的持续时间(秒) int stepTime = step.getDuration(); // ... 其他信息 } } } } // 其他交通方式的回调,这里我们只关心驾车,其他可以留空 @Override public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {} @Override public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {} @Override public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {} @Override public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {} @Override public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {} }; // 发起路线规划 public void requestDrivingRoute(LatLng start, LatLng end) { PlanNode stNode = PlanNode.withLocation(start); PlanNode enNode = PlanNode.withLocation(end); mSearch.drivingSearch(new DrivingRoutePlanOption().from(stNode).to(enNode)); } // 在合适的地方释放资源 public void onDestroy() { if (mSearch != null) { mSearch.destroy(); } } } ``` 注意: - 需要替换`context`为你的应用上下文。 - 确保在AndroidManifest.xml中配置了网络权限和百度地图的AK(API Key)。 - 实际使用中,起点和终点的坐标可以通过定位或地址解析获取。 通过以上代码,我们可以获取驾车路线的预计时间(以秒为单位),然后可以转换为分钟或其他单位。 相关问题: 1. 如何获取百度地图API的AK(授权Key)? 2. 除了驾车路线,如何获取其他交通方式(如公交、步行)的预计到达时间? 3. 如何处理路线规划返回的多条路线并选择最优路线?</think>### 在Java中调用百度地图API获取预计到达时间(ETA) 以下是使用Java调用百度地图API获取路线预计到达时间的完整步骤和代码示例: --- #### 1. **准备工作** - 申请百度地图API密钥(AK) 1. 登录[百度地图开放平台](https://lbsyun.baidu.com/) 2. 创建应用,选择「服务端」类型 3. 获取Server端AK(API Key) - 添加Maven依赖(以3.7.3版本为例): ```xml <dependency> <groupId>com.baidu</groupId> <artifactId>baidu-map-api</artifactId> <version>3.7.3</version> </dependency> ``` --- #### 2. **核心代码实现** ```java import com.baidu.mapapi.model.LatLng; import com.baidu.mapapi.search.route.*; public class RouteETAExample { // 初始化路线规划服务 private static final RoutePlanSearch mSearch = RoutePlanSearch.newInstance(); public static void main(String[] args) { // 设置起点终点坐标(示例:北京西站 → 北京南站) LatLng startPoint = new LatLng(39.89491, 116.322056); LatLng endPoint = new LatLng(39.865285, 116.382143); // 发起驾车路线规划请求 getDrivingETA(startPoint, endPoint); } // 获取驾车ETA private static void getDrivingETA(LatLng start, LatLng end) { // 创建起终点节点 PlanNode stNode = PlanNode.withLocation(start); PlanNode enNode = PlanNode.withLocation(end); // [^3] // 设置路线规划监听器 mSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() { @Override public void onGetDrivingRouteResult(DrivingRouteResult result) { if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { System.err.println("路线规划失败"); return; } // 获取第一条路线 DrivingRouteLine routeLine = result.getRouteLines().get(0); // 提取关键信息 int totalTime = routeLine.getDuration(); // 总时间(秒) int distance = routeLine.getDistance(); // 总距离(米) System.out.println("预计到达时间: " + (totalTime/60) + "分钟"); System.out.println("行驶距离: " + (distance/1000) + "公里"); } // 其他交通方式回调(需实现但留空) @Override public void onGetWalkingRouteResult(WalkingRouteResult result) {} @Override public void onGetTransitRouteResult(TransitRouteResult result) {} @Override public void onGetMassTransitRouteResult(MassTransitRouteResult result) {} @Override public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {} }); // 执行驾车路线搜索 mSearch.drivingSearch(new DrivingRoutePlanOption() .from(stNode) .to(enNode) .trafficPolicy(DrivingRoutePlanOption.DrivingPolicy.ECAR_TIME_FIRST)); // [^1] } } ``` --- #### 3. **关键参数说明** 1. **交通策略**(通过`.trafficPolicy()`设置): - `ECAR_TIME_FIRST`:最短时间(默认) - `ECAR_DIS_FIRST`:最短距离 - `ECAR_FEE_FIRST`:最少费用 2. **返回数据解析**: - `getDuration()`:总耗时(秒) - `getDistance()`:总距离(米) - `getAllStep()`:获取详细路段信息 - `getCongestionDistance()`:拥堵路段长度 --- #### 4. **处理实时交通** 在初始化时添加`trafficPolicy`参数: ```java mSearch.drivingSearch(new DrivingRoutePlanOption() .from(stNode) .to(enNode) .trafficPolicy(DrivingRoutePlanOption.DrivingTrafficPolicy.ROUTE_PATH) // 启用实时路况 ); ``` 在结果回调中可通过: ```java routeLine.getLightNum(); // 红绿灯数量 routeLine.getCongestionDistance(); // 拥堵距离 ``` --- #### 5. **注意事项** 1. **坐标格式**:必须使用百度坐标系(BD09) 2. **配额限制**:免费版每日限额2万次请求 3. **错误处理**: - `error = 1`:服务器内部错误 - `error = 2`:起点/终点参数错误 - `error = 4`:路线计算失败 > 完整文档参考:[百度地图Web服务API文档](https://lbsyun.baidu.com/index.php?title=webapi/direction-api-v2) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值