本文共 4230 字,大约阅读时间需要 14 分钟。
所谓的路径规划,其实就是给出起点终点,规划自驾,公交,步行3种方法的路线。下面以公交为例。
- 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));
/* * 获取公交线路 * @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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!