先把官方文檔貼上來:http://wiki.lbsyun.baidu.com/cms/androidsdk/doc/v5.1.0/index.html
寫這個隨筆一是記錄一下這個方法,第二也是想提醒自己在以后要多看官方文檔,不然看網上的某些教程,我只想說,真他媽的坑
這里有函數的一些說明,可惜的就是沒有demo,不過看這個可以避免很多錯誤了
定義變量
FloatingActionButton go; LatLng start;//起點坐標 LatLng end;//終點坐標 RoutePlanSearch routePlanSearch; BaiduMap baiduMap;//地圖實例
設置監聽
go.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startGo(); } });
//路線規划 routePlanSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() { @Override public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) { } @Override public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) { } @Override public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) { } @Override public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) { //駕車路線規划 if(drivingRouteResult.error== SearchResult.ERRORNO.NO_ERROR){ for(int i = 0;i < drivingRouteResult.getRouteLines().size();i++){ try{ drawRouteLine(drivingRouteResult,i); }catch (NullPointerException e){ Toast.makeText(Welcome.this,"異常",Toast.LENGTH_SHORT).show(); } } } }
startGo函數,將終點和起點代入,並開始搜索
public void startGo(){ PlanNode begin = PlanNode.withLocation(start); PlanNode destination = PlanNode.withLocation(end); routePlanSearch.drivingSearch(new DrivingRoutePlanOption().from(begin).to(destination)); }
drawRouteLine函數,畫出路線
public void drawRouteLine(DrivingRouteResult drivingRouteResult,int routeNum){ //第一個形參是搜索的結果,里面是路線的集合,第二個表示第幾條路線 int[] color = {Color.BLACK,Color.BLUE,Color.CYAN,Color.DKGRAY ,Color.GRAY,Color.GREEN,Color.LTGRAY,Color.YELLOW, Color.RED,Color.MAGENTA};//顏色的數組,用來隨機選一種顏色表示路線 List<LatLng> linePoints = new ArrayList<>();//路線上點的集合 //百度地圖的一條路線分為路段,getAllStep就是得到一條路線的所有路段, // 然后再一條路段上用getWayPoints路段的點,點一般為轉彎處或者交叉路口 for(int i = 0; i < drivingRouteResult.getRouteLines().get(routeNum).getAllStep().size();i++){ for (int j = 0 ;j < drivingRouteResult.getRouteLines().get(routeNum).getAllStep().get(i).getWayPoints().size();j++){ LatLng node = new LatLng(drivingRouteResult.getRouteLines().get(routeNum).getAllStep().get(i).getWayPoints().get(j).latitude ,drivingRouteResult.getRouteLines().get(routeNum).getAllStep().get(i).getWayPoints().get(j).longitude); linePoints.add(node);//將點添加到集合上 } OverlayOptions ooPolyLine = new PolylineOptions().width(10).color(color[(int)(Math.random()*10)]).points(linePoints);//設置折線的屬性,顏色等 Polyline polyline = (Polyline) baiduMap.addOverlay(ooPolyLine);//添加到地圖 } }
這里主要注意的就是路線分為路段,然后路段得到點,我之前不知道有路段這個東西,然后直接用
drivingRouteResult.getRouteLines().get(routeNum).getWayPoints().get(i).getLocation().latitude
來得到經緯度,結果報空指針錯誤,程序閃退
最后,附一張效果圖...