百度地图路线规划得到路线上的各个点的坐标

先把官方文档贴上来: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

来得到经纬度,结果报空指针错误,程序闪退

最后,附一张效果图...

原文地址:https://www.cnblogs.com/Yintianhao/p/9355960.html