百度地图路线规划得到路线上的各个点的坐标
先把官方文档贴上来: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
来得到经纬度,结果报空指针错误,程序闪退
最后,附一张效果图...