zoukankan      html  css  js  c++  java
  • 百度地图路线规划得到路线上的各个点的坐标

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

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

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

  • 相关阅读:
    HDU 1495 广度优先搜索
    oj 1792:迷宫 广搜和深搜
    oj 1756:八皇后 搜索
    OJ1700 八皇后问题 基本搜索算法
    PAT A1020
    PAT A1103
    PAT A1046 Shortest Distance
    PAT A1059
    PAT B1013
    二分查找
  • 原文地址:https://www.cnblogs.com/Yintianhao/p/9355960.html
Copyright © 2011-2022 走看看