百度地图提供的路线规划搜索有3种:驾车、公交、步行。

3中方式的使用方法类似,步骤如下:

1、初始化地图

/**初始化百度地图

*

*/

private void initBaiduMap(){

//初始化地图

mMapView.showZoomControls(false);

mBaidumap = mMapView.getMap();

//地图点击事件处理

mBaidumap.setOnMapClickListener(new OnMapClickListener() {

@Override

public boolean onMapPoiClick(MapPoi arg0) {

// TODO Auto-generated method stub

return false;

}

@Override

public void onMapClick(LatLng arg0) {

// TODO Auto-generated method stub

mBaidumap.hideInfoWindow();

}

});

// 初始化搜索模块,注册事件监听

mSearch = RoutePlanSearch.newInstance();

//mSearch.setOnGetRoutePlanResultListener(this);

mBaidumap.setOnMapLoadedCallback(new OnMapLoadedCallback() {

@Override

public void onMapLoaded() {

// TODO Auto-generated method stub

//地图加载完成

SearchButtonProcess();//调用路径规划

}

});

}

2、规划路线,包括设置起始点、终点、途经点,并选择一种搜索方式。

/**

* 发起路线规划搜索示例

*

* @param v

*/

private void SearchButtonProcess() {

//重置浏览节点的路线数据

//route = null;

mBaidumap.clear();

ArrayList arg0 =new ArrayList();

//设置起终点、途经点信息,对于tranist search 来说,城市名无意义

PlanNode stNode = PlanNode.withLocation(new LatLng(StationsList.getStationsList().get(0).getLatitude(), StationsList.getStationsList().get(0).getLongitude()));

PlanNode enNode = PlanNode.withLocation(new LatLng(StationsList.getStationsList().get(StationsList.getStationsList().size()-1).getLatitude(), StationsList.getStationsList().get(StationsList.getStationsList().size()-1).getLongitude()));

for (int i = 1; i < StationsList.getStationsList().size()-1; i++) {

PlanNode node = PlanNode.withLocation(new LatLng(StationsList.getStationsList().get(i).getLatitude(), StationsList.getStationsList().get(i).getLongitude()));

arg0.add(node);

}

// 实际使用中请对起点终点城市进行正确的设定

mSearch.drivingSearch((new DrivingRoutePlanOption())

.from(stNode)//起点

.passBy(arg0)//途经点

.to(enNode));//终点

}

3、接收并处理结果。通常需要集合覆盖物来显示路线。

@Override

public void onGetDrivingRouteResult(DrivingRouteResult result) {

if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {

Toast.makeText(activity, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();

}

if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {

//起终点或途经点地址有岐义,通过以下接口获取建议查询信息

//result.getSuggestAddrInfo()

Toast.makeText(activity, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();

return;

}

if (result.error == SearchResult.ERRORNO.NO_ERROR) {

// route = result.getRouteLines().get(0);

DrivingRouteOverlay overlay = new MyDrivingRouteOverlay(mBaidumap);//路线覆盖物,MyDrivingRouteOverlay代码下面给出

routeOverlay = overlay;

// mBaidumap.setOnMarkerClickListener(overlay);

overlay.setData(result.getRouteLines().get(0));

overlay.addToMap();

overlay.zoomToSpan();

}

}

@Override

public void onGetWalkingRouteResult(WalkingRouteResult result) {

}

@Override

public void onGetTransitRouteResult(TransitRouteResult result) {

}

路线覆盖物类MyDrivingRouteOverlay:

//定制RouteOverly

private class MyDrivingRouteOverlay extends DrivingRouteOverlay {

public MyDrivingRouteOverlay(BaiduMap baiduMap) {

super(baiduMap,StationsList.getStationsList().size());

}

@Override

public BitmapDescriptor getStartMarker() {

//覆写此方法以改变默认起点图标

return BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);

//这里可以使用BitmapDescriptorFactory.fromView(view)实现自定义view覆盖物,自定义覆盖物请关注以后的文章。

}

@Override

public int getLineColor() {

// TODO Auto-generated method stub

//覆写此方法以改变默认绘制颜色

//Returns:

//线颜色

return super.getLineColor();

}

@Override

public BitmapDescriptor getTerminalMarker() {

//覆写此方法以改变默认终点图标

return BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);

}

@Override

public boolean onRouteNodeClick(int i) {

// TODO Auto-generated method stub

//覆写此方法以改变默认点击处理

return true;

}

}

DrivingRouteOverlay是百度提供的源码,可以去官网下载,源码如下:

package com.baidu.mapapi.overlayutil;

import android.R.integer;

import android.graphics.Color;

import android.os.Bundle;

import android.util.Log;

import com.baidu.mapapi.map.BaiduMap;

import com.baidu.mapapi.map.BitmapDescriptor;

import com.baidu.mapapi.map.BitmapDescriptorFactory;

import com.baidu.mapapi.map.Marker;

import com.baidu.mapapi.map.MarkerOptions;

import com.baidu.mapapi.map.Overlay;

import com.baidu.mapapi.map.OverlayOptions;

import com.baidu.mapapi.map.Polyline;

import com.baidu.mapapi.map.PolylineOptions;

import com.baidu.mapapi.model.LatLng;

import com.baidu.mapapi.search.route.DrivingRouteLine;

import com.baidu.mapapi.search.route.DrivingRouteLine.DrivingStep;

import java.util.ArrayList;

import java.util.List;

/**

* 用于显示一条驾车路线的overlay,自3.4.0版本起可实例化多个添加在地图中显示,当数据中包含路况数据时,则默认使用路况纹理分段绘制

*/

public class DrivingRouteOverlay extends OverlayManager {

private int stationsize=0;

private DrivingRouteLine mRouteLine = null;

boolean focus = false;

/**

* 构造函数

*

* @param baiduMap

* 该DrivingRouteOvelray引用的 BaiduMap

*/

public DrivingRouteOverlay(BaiduMap baiduMap) {

super(baiduMap);

}

public DrivingRouteOverlay(BaiduMap baiduMap,int size) {

super(baiduMap);

stationsize=size;

}

@Override

public final List getOverlayOptions() {

if (mRouteLine == null) {

return null;

}

List overlayOptionses = new ArrayList();

// step node

// if (mRouteLine.getAllStep() != null

// && mRouteLine.getAllStep().size() > 0) {

//

// for (DrivingRouteLine.DrivingStep step : mRouteLine.getAllStep()) {

// Bundle b = new Bundle();

// b.putInt("index", mRouteLine.getAllStep().indexOf(step));

// if (step.getEntrance() != null) {

// overlayOptionses.add((new MarkerOptions())

// .position(step.getEntrance().getLocation())

// .anchor(0.5f, 0.5f)

// .zIndex(10)

// .rotate((360 - step.getDirection()))

// .extraInfo(b)

// .icon(BitmapDescriptorFactory

// .fromAssetWithDpi("Icon_line_node.png")));

// }

// // 最后路段绘制出口点

// if (mRouteLine.getAllStep().indexOf(step) == (mRouteLine

// .getAllStep().size() - 1) && step.getExit() != null) {

// overlayOptionses.add((new MarkerOptions())

// .position(step.getExit().getLocation())

// .anchor(0.5f, 0.5f)

// .zIndex(10)

// .icon(BitmapDescriptorFactory

// .fromAssetWithDpi("Icon_line_node.png")));

//

// }

// }

// }

if (mRouteLine.getStarting() != null) {

overlayOptionses.add((new MarkerOptions())

.position(mRouteLine.getStarting().getLocation())

.icon(getStartMarker() != null ? getStartMarker() :

BitmapDescriptorFactory

.fromAssetWithDpi("Icon_start.png")).zIndex(0));

}

if (mRouteLine.getTerminal() != null) {

overlayOptionses

.add((new MarkerOptions())

.position(mRouteLine.getTerminal().getLocation())

.icon(getTerminalMarker() != null ? getTerminalMarker() :

BitmapDescriptorFactory

.fromAssetWithDpi("Icon_end.png"))

.zIndex(stationsize-1));

}

// poly line

if (mRouteLine.getAllStep() != null

&& mRouteLine.getAllStep().size() > 0) {

List steps = mRouteLine.getAllStep();

int stepNum = steps.size();

List points = new ArrayList();

ArrayList traffics = new ArrayList();

int totalTraffic = 0;

for (int i = 0; i < stepNum ; i++) {

if (i == stepNum - 1) {

points.addAll(steps.get(i).getWayPoints());

} else {

points.addAll(steps.get(i).getWayPoints().subList(0, steps.get(i).getWayPoints().size() - 1));

}

totalTraffic += steps.get(i).getWayPoints().size() - 1;

if (steps.get(i).getTrafficList() != null && steps.get(i).getTrafficList().length > 0) {

for (int j = 0;j < steps.get(i).getTrafficList().length;j++) {

traffics.add(steps.get(i).getTrafficList()[j]);

}

}

}

// Bundle indexList = new Bundle();

// if (traffics.size() > 0) {

// int raffic[] = new int[traffics.size()];

// int index = 0;

// for (Integer tempTraff : traffics) {

// raffic[index] = tempTraff.intValue();

// index++;

// }

// indexList.putIntArray("indexs", raffic);

// }

boolean isDotLine = false;

if (traffics != null && traffics.size() > 0) {

isDotLine = true;

}

PolylineOptions option = new PolylineOptions().points(points).textureIndex(traffics)

.width(10).dottedLine(isDotLine).focus(true)

.color(getLineColor() != 0 ? getLineColor() : Color.argb(178, 0, 78, 255)).zIndex(0);

if (isDotLine) {

option.customTextureList(getCustomTextureList());

}

overlayOptionses.add(option);

}

return overlayOptionses;

}

/**

* 设置路线数据

*

* @param routeLine

* 路线数据

*/

public void setData(DrivingRouteLine routeLine) {

this.mRouteLine = routeLine;

}

/**

* 覆写此方法以改变默认起点图标

*

* @return 起点图标

*/

public BitmapDescriptor getStartMarker() {

return null;

}

/**

* 覆写此方法以改变默认绘制颜色

* @return 线颜色

*/

public int getLineColor() {

return 0;

}

public List getCustomTextureList() {

ArrayList list = new ArrayList();

list.add(BitmapDescriptorFactory.fromAsset("Icon_road_blue_arrow.png"));

list.add(BitmapDescriptorFactory.fromAsset("Icon_road_green_arrow.png"));

list.add(BitmapDescriptorFactory.fromAsset("Icon_road_yellow_arrow.png"));

list.add(BitmapDescriptorFactory.fromAsset("Icon_road_red_arrow.png"));

list.add(BitmapDescriptorFactory.fromAsset("Icon_road_nofocus.png"));

return list;

}

/**

* 覆写此方法以改变默认终点图标

*

* @return 终点图标

*/

public BitmapDescriptor getTerminalMarker() {

return null;

}

/**

* 覆写此方法以改变默认点击处理

*

* @param i

* 线路节点的 index

* @return 是否处理了该点击事件

*/

public boolean onRouteNodeClick(int i) {

if (mRouteLine.getAllStep() != null

&& mRouteLine.getAllStep().get(i) != null) {

Log.i("baidumapsdk", "DrivingRouteOverlay onRouteNodeClick");

}

return false;

}

@Override

public final boolean onMarkerClick(Marker marker) {

for (Overlay mMarker : mOverlayList) {

if (mMarker instanceof Marker && mMarker.equals(marker)) {

if (marker.getExtraInfo() != null) {

onRouteNodeClick(marker.getExtraInfo().getInt("index"));

}

}

}

return true;

}

@Override

public boolean onPolylineClick(Polyline polyline) {

boolean flag = false;

for (Overlay mPolyline : mOverlayList) {

if (mPolyline instanceof Polyline && mPolyline.equals(polyline)) {

// 选中

flag = true;

break;

}

}

setFocus(flag);

return true;

}

public void setFocus(boolean flag) {

focus = flag;

for (Overlay mPolyline : mOverlayList) {

if (mPolyline instanceof Polyline) {

// 选中

((Polyline) mPolyline).setFocus(flag);

break;

}

}

}

}

android百度地图路线查询,Android百度地图——路线规划搜索相关推荐

  1. 根据两个经纬度点调用百度地图应用查询路线 适用android或者ios中及网页浏览(手机网页同样适用)

    Intent intent = null;try {// 如果有安装百度地图 就启动百度地图StringBuffer sbs = new StringBuffer();sbs.append(" ...

  2. Android百度地图(六)自定义导航路线规划

    Android百度地图(六)自定义导航路线规划 兴奋加激动... 本文代码在http://blog.csdn.net/xyzz609/article/details/51959767的基础上进一步修改 ...

  3. android 通过scheme唤起百度、高德、腾讯地图路线规划功能,唤起滴滴出行打车功能

    import android.content.Context; import android.content.Intent; import android.net.Uri;import java.ut ...

  4. Android百度地图雷达效果,地图导航实测:百度地图路线雷达圈粉“老司机”

    原标题:地图导航实测:百度地图路线雷达圈粉"老司机" 前段时间,百度和高德就谁是第一的问题引发了一场争论,而作为驾龄近10年的老司机,我并不关心两家输赢,只想说说哪个导航更好用.更 ...

  5. Android如何实现地图定位?Android studio+百度地图API+Android6.0系统实现地图显示、地址设置、点击地图定位功能(详细)

    文章说明:本文初衷是为了记录毕设学习过程,避免忘记操作流程.该功能是毕业设计的Android软件端的功能之一,本文将从获取百度地图密钥(AK)开始,详细地对地图定位配置和相关代码进行说明,文末将附上实 ...

  6. Android中应用百度地图API开发地图APP实例-显示百度地图

    场景 效果 在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY http://lbsyun.baidu.com/index.php 申请API_KEY 登录百度开放平台后找到控制台下 ...

  7. Android 起调第三方导航,百度地图,高德地图,腾讯地图。起调高德地图导航

    主要工具类 /*** Created by meixi on 2018/6/29.* 使用第三方导航:高德.百度..........*/ public class AmapUtil {public s ...

  8. android 与地图互动,高德、百度和腾讯三家比拼,哪个 Android 车机地图 App 更好用?...

    写在前面 不管是自己开车.还是平时打车,相信你一定留意过驾驶座旁边位于车辆中间的那块大屏幕,不管是平时开车导航.放音乐,还是通过倒车影像辅助倒车,都离不开这块屏幕,这就是中控车机. 中控车机往往搭载的 ...

  9. 开源基于百度地图SDK的Android交通助手App

    BaiduMap-TrafficAssistant    该项目是基于百度地图SDK开发的一款交通助手App,目前已经上线豌豆荚.魅族应用市场.搜狗手机助手等多个安卓应用市场.目前我决定开源该项目,为 ...

最新文章

  1. Exchange服务器系列课程之七--维护邮件服务器(二)
  2. 百胜软件2016年双十一项目正式启动
  3. Java设计模式之适配器模式在jdk中的应用
  4. 十、给小白看的第三篇Python基础教程
  5. c++趣味小程序_工具类小程序10天增长103万全复盘
  6. matlab中数据变为nan,字符转化为数值型中出现NAN
  7. 《转载》struts旅程《2》
  8. 2013年5月16日星期四初始sqlserver附加数据库权限及maven和selenium
  9. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.16
  10. 拒绝病毒威胁 为U盘请个“保护神”
  11. github中的各种操作
  12. IP协议号与传输层端口
  13. C++OpenCV矩形的角点检测与坐标提取,基于fast特征点
  14. 2021年度济南职工医保门统定点医疗机构名单
  15. curl ip.sb查询公网ip
  16. 解决安装在虚拟机VMware的Ubuntu-18-04系统与主机之间的复制粘贴问题
  17. vue 悬停显示另一个div_CSS或者JS实现鼠标悬停显示另一元素
  18. 全景拍摄不推荐使用全景相机的背后原因
  19. 5分钟学会Linux上传文件和下载文件命令
  20. 常用的http状态码 状态码大全 常见的状态码

热门文章

  1. 用echarts做如图,x轴左右都是正数的倒立柱形图展示
  2. Hadoop 3.x|第二天|配置完全分布式运行模式(重点)
  3. Adv-Makeup:一种新颖不易察觉且可迁移的人脸识别攻击方法
  4. [Shader]NGUI与灰化
  5. SyntaxError: Non-UTF-8 code starting with ‘\xc6‘ in file xxxbut no encoding declared
  6. 《数据结构与算法分析》回溯算法之博弈——三连棋(tic tac toe)人机对战AI设计(αβ枝减)
  7. java pdf转图片原理_pdf转图片程序(java实现)
  8. Android Framework 记录之一
  9. iOS APP转让条件
  10. Java Grammar(二):运算符