百度地圖路線規划得到路線上的各個點的坐標


先把官方文檔貼上來: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

來得到經緯度,結果報空指針錯誤,程序閃退

最后,附一張效果圖...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM