Android百度地图学习笔记(二)----路径规划
发布日期:2021-10-10 04:26:00 浏览次数:2 分类:技术文章

本文共 4230 字,大约阅读时间需要 14 分钟。

所谓的路径规划,其实就是给出起点终点,规划自驾,公交,步行3种方法的路线。下面以公交为例。

  1. activity要调用OnGetRoutePlanResultListener,OnMapClickListener2个接口
    声明变量`
RouteLine route=null;//路线规划中的基类,表示一条路线OverlayManager routeOverlay=null;//管理和显示多个overlayprivate TextView popupText=null; //泡泡view//搜索相关 路径规划搜索接口RoutePlanSearch mSearch=null;

2.设置路线的起点终点,发起线路规划route=null;

mBtnPre.setVisibility(View.INVISIBLE);
mBtnNext.setVisibility(View.INVISIBLE);
mBaiduMap.clear();
//设置起点 终点信息,对于tranist searcch 来说,城市名无意义
PlanNode stNode=PlanNode.withCityNameAndPlaceName("太原",plaseName_qidian);
PlanNode enNode=PlanNode.withCityNameAndPlaceName("太原",plassNaem_zhongdian);
//transitSearch发起换成路线规划 from 起点 city 城市 to终点
mSearch.transitSearch((new TransitRoutePlanOption())
.from(stNode)
.city("太原")
.to(enNode));
3.重写onGetTransitRouteResult方法/*
* 获取公交线路
* @see com.baidu.mapapi.search.route.OnGetRoutePlanResultListener#onGetTransitRouteResult(com.baidu.mapapi.search.route.TransitRouteResult)
*/
@Override
public void onGetTransitRouteResult(TransitRouteResult result) {
// TODO Auto-generated method stub
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MainActivity.this,"抱歉,未找到结果", 500).show();
}
//AMBIGUOUS_ROURE_ADDR 检索地址有歧义
if (result.error== SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起终点或途经点地址有岐义,通过以下接口获取建议查询信息
result.getSuggestAddrInfo();
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
nodeIndex = -1;
mBtnPre.setVisibility(View.VISIBLE);
mBtnNext.setVisibility(View.VISIBLE);
//获取线路规划结果中的第1条数据
route =result.getRouteLines().get(0);
//TransitRouteOverlay换乘路线覆盖
TransitRouteOverlay overlay = new MyTransitRouteOverlay(mBaiduMap);
//设置 Marker拖拽事件监听者 Marker为标记
mBaiduMap.setOnMarkerClickListener(overlay);
routeOverlay=overlay;
overlay.setData(result.getRouteLines().get(0));
overlay.addToMap(); //将所有的overlay添加到地图上
overlay.zoomToSpan();//缩放地图,使得所有overlay都可以先是在地图上
}
}
这是公交路线的方法,onGetWalkingRouteResult是步行的,onGetDrivingRouteResult是行车的
4.上面有用到MyTransitRouteOverlay这个类,这个类是自定义起点和终点的图标的,不想自定义的话直接用TransitRouteOverlay就行,`private class MyTransitRouteOverlay extends TransitRouteOverlay{

public MyTransitRouteOverlay(BaiduMap baidumap) {        super(baidumap);        // TODO Auto-generated constructor stub    }    /* (non-Javadoc)     * @see com.baidu.mapapi.overlayutil.TransitRouteOverlay#getStartMarker()     */    @Override    public BitmapDescriptor getStartMarker() {        // TODO Auto-generated method stub        if (useDefaultIcon) {            return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);        }        return super.getStartMarker();    }    /* (non-Javadoc)     * @see com.baidu.mapapi.overlayutil.TransitRouteOverlay#getTerminalMarker()     */    @Override    public BitmapDescriptor getTerminalMarker() {        // TODO Auto-generated method stub        if (useDefaultIcon) {            return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);        }        return super.getTerminalMarker();    }   }`

5.节点浏览 这里的节点是换成路线上的节点/*

* 节点浏览
*/
public void nodeClick(View v){
Log.i("text","这是节点信息"+route.getAllStep().size());
if (route==null || route.getAllStep()==null) {
return;
}
if (nodeIndex==-1 && v.getId()==R.id.pre) {
return;
}
//设置节点索引
if (v.getId()==R.id.next) {
if (nodeIndex<route.getAllStep().size()-1) {
nodeIndex++;
}else {
return;
}
}else if (v.getId()==R.id.pre) {
if (nodeIndex>0) {
nodeIndex--;
}else {
return;
}
}
//获取节点结果信息
LatLng nodeLocation = null;
String nodeTitle = null;
Object step = route.getAllStep().get(nodeIndex);
//通过instanceof 哦按段step 是否为TransitRouteLine.TransitStep的一个对象
if (step instanceof TransitRouteLine.TransitStep) {
nodeLocation= ((TransitRouteLine.TransitStep) step).getEntrace().getLocation();
Log.i("text","这是节点坐标"+nodeLocation);
nodeTitle=((TransitRouteLine.TransitStep) step).getInstructions();
Log.i("text","这是节点信息"+nodeTitle);
}
if (nodeLocation==null || nodeTitle==null) {
return;
}
//移动节点至中心
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(nodeLocation));
//show popup
popupText=new TextView(MainActivity.this);
popupText.setBackgroundResource(R.drawable.popup);
popupText.setTextColor(0xFF000000);
popupText.setText(nodeTitle);
//infowindow 在地图上显示一个窗体
mBaiduMap.showInfoWindow(new InfoWindow(popupText, nodeLocation, 0));
}
到这里就完了,上图。。填写地址这里写图片描述

转载地址:https://blog.csdn.net/qq_21430549/article/details/45289181 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android百度地图学习笔记(三)---地理编码
下一篇:Android百度地图学习笔记(一)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月19日 18时16分59秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章