Android Baidu map cycling route color and width change

  RoutePlanSearch mRoutePlanSearch.bikingSearch((new BikingRoutePlanOption())
                        .from(stNode)
                        .to(enNode)
                        // ridingType  0 普通骑行,1 电动车骑行
                        // 默认普通骑行
                        .ridingType(1));
mRoutePlanSearch = RoutePlanSearch.newInstance();
mRoutePlanSearch.setOnGetRoutePlanResultListener(new OnGetRoutePlanResultListener() {
    
    
                    @Override
                    public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) {
    
    
                        Log.d("onGetWalkingRouteResult", "onGetWalkingRouteResult");
                    }

                    @Override
                    public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {
    
    
                        Log.d("onGetTransitRouteResult", "onGetTransitRouteResult");
                    }

                    @Override
                    public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {
    
    
                        Log.d("onGetMassTransitRoute", "onGetMassTransitRouteResult");
                    }

                    @Override
                    public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
    
    
                        Log.d("onGetDrivingRouteResult", "onGetDrivingRouteResult");
                    }

                    @Override
                    public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {
    
    
                        Log.d("onGetIndoorRouteResult", "onGetIndoorRouteResult");
                    }

                    @Override
                    public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {
    
    
                        if (bikingRouteResult == null || bikingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
    
    
                            Toast.makeText(context, "路线规划失败", Toast.LENGTH_SHORT).show();
                        }
                        if (bikingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
    
    
                            //起终点或途经点地址有岐义,通过以下接口获取建议查询信息
                            //result.getSuggestAddrInfo()
                            Toast.makeText(context, "路线规划失败", Toast.LENGTH_SHORT).show();
                            return;
                        }
                        if (bikingRouteResult.error == SearchResult.ERRORNO.ST_EN_TOO_NEAR) {
    
    
                            Toast.makeText(context, "距离太近,无需规划骑行路线", Toast.LENGTH_SHORT).show();
                            return;
                        }
                        //创建BikingRouteOverlay实例
                        mBikingRouteOverlay = new BikingRouteOverlay(mBaiduMap);
                        if (bikingRouteResult.getRouteLines() != null && bikingRouteResult.getRouteLines().size() > 0) {
    
    
                            //获取路径规划数据,(以返回的第一条路线为例)
                            BikingRouteLine mBikingRouteLine = bikingRouteResult.getRouteLines().get(0);
                            displayDistanceAndDuration(mBikingRouteLine);
                            //为BikingRouteOverlay实例设置数据
                            mBikingRouteOverlay.setData(mBikingRouteLine);
                            //在地图上绘制BikingRouteOverlay
                            mBikingRouteOverlay.addToMap();
                        }
                    }
                });
              

bikingSearch obtains the planned cycling route, listens and draws the route through setOnGetRoutePlanResultListener, and draws it on the map through mBikingRouteOverlay.addToMap();.
By clicking addToMap() (ctrl+mouse click)

	源码:
	/**
	 * 添加骑行路线到地图中。
	 */
	public void addToMap() {
    
    
		
		initPolylineOptions();
		try {
    
    
			List<RideStep> ridePaths = ridePath.getSteps();
			for (int i = 0; i < ridePaths.size(); i++) {
    
    
				RideStep rideStep = ridePaths.get(i);
				LatLng latLng = AMapUtil.convertToLatLng(rideStep
						.getPolyline().get(0));
				
				addRideStationMarkers(rideStep, latLng);
				addRidePolyLines(rideStep);
			}
			addStartAndEndMarker();
			
			showPolyline();
		} catch (Throwable e) {
    
    
			e.printStackTrace();
		}
	}
	/**
     * 初始化线段属性
     */
    private void initPolylineOptions() {
    
    
    	
    	if(walkStationDescriptor == null) {
    
    
    		walkStationDescriptor = BitmapDescriptorFactory.fromResource(R.drawable.amap_ride);
    	}
        mPolylineOptions = null;
        mPolylineOptions = new PolylineOptions();
//        mPolylineOptions.color(getDriveColor()).width(getRouteWidth());
		//        mPolylineOptions.color(getWalkColor()).width(getRouteWidth());
		mPolylineOptions
				.color(getDriveColor())
				.setCustomTexture(BitmapDescriptorFactory.fromResource(R.drawable.map_alr))
				.width(getRouteWidth());
    }

You can see mPolylineOptions.color, setCustomTexture and width to control the color, shape and width of the route

The final solution is to rewrite BikingRouteOverlay. The specific code is as follows:

/*
 * Copyright (C) 2016 Baidu, Inc. All Rights Reserved.
 */
package com.chinatower.fghd.customer.home;

import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.Overlay;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.Polyline;
import com.baidu.mapapi.map.PolylineOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.route.BikingRouteLine;

import java.util.ArrayList;
import java.util.List;

/**
 * 用于显示骑行路线的Overlay
 */
public class BikingRouteOverlay extends OverlayManager {
    
    

    private BikingRouteLine mRouteLine = null;

    public BikingRouteOverlay(BaiduMap baiduMap) {
    
    
        super(baiduMap);
    }

    /**
     * 设置路线数据。
     *
     * @param line 路线数据
     */
    public void setData(BikingRouteLine line) {
    
    
        mRouteLine = line;
    }

    @Override
    public final List<OverlayOptions> getOverlayOptions() {
    
    
        if (mRouteLine == null) {
    
    
            return null;
        }

        List<OverlayOptions> overlayList = new ArrayList<OverlayOptions>();

        if (mRouteLine.getStarting() != null) {
    
    
            overlayList.add((new MarkerOptions())
                    .position(mRouteLine.getStarting().getLocation())
                    .icon(getStartMarker() != null ? getStartMarker() :
                            BitmapDescriptorFactory
                                    .fromAssetWithDpi("Icon_start.png")).zIndex(0).yOffset(-50));
        }
        // terminal
        if (mRouteLine.getTerminal() != null) {
    
    
            overlayList
                    .add((new MarkerOptions())
                            .position(mRouteLine.getTerminal().getLocation())
                            .icon(getTerminalMarker() != null ? getTerminalMarker() :
                                    BitmapDescriptorFactory
                                            .fromAssetWithDpi("Icon_end.png"))
                            .zIndex(0).yOffset(-50));
        }

        // poly line list
        if (mRouteLine.getAllStep() != null
                && mRouteLine.getAllStep().size() > 0) {
    
    
            LatLng lastStepLastPoint = null;
            for (BikingRouteLine.BikingStep step : mRouteLine.getAllStep()) {
    
    
                List<LatLng> watPoints = step.getWayPoints();
                if (watPoints != null) {
    
    
                    List<LatLng> points = new ArrayList<LatLng>();
                    if (lastStepLastPoint != null) {
    
    
                        points.add(lastStepLastPoint);
                    }
                    points.addAll(watPoints);
                    **//关键代码**
                    overlayList.add(new PolylineOptions().points(points).width(12)
                            .color(getLineColor() != 0 ? getLineColor() : Color.argb(100, 50, 69, 90)).zIndex(0));
                    lastStepLastPoint = watPoints.get(watPoints.size() - 1);
                }
            }

        }

        return overlayList;
    }

    /**
     * 覆写此方法以改变默认起点图标
     *
     * @return 起点图标
     */
    public BitmapDescriptor getStartMarker() {
    
    
        return null;
    }

    public int getLineColor() {
    
    
        return 0;
    }

    /**
     * 覆写此方法以改变默认终点图标
     *
     * @return 终点图标
     */
    public BitmapDescriptor getTerminalMarker() {
    
    
        return null;
    }

    /**
     * 处理点击事件
     *
     * @param i 被点击的step在
     *          {
    
    @link BikingRouteLine#getAllStep()}
     *          中的索引
     * @return 是否处理了该点击事件
     */
    public boolean onRouteNodeClick(int i) {
    
    
        if (mRouteLine.getAllStep() != null
                && mRouteLine.getAllStep().get(i) != null) {
    
    
            Log.i("baidumapsdk", "BikingRouteOverlay onRouteNodeClick");
        }
        return false;
    }

    @Override
    public final boolean onMarkerClick(Marker marker) {
    
    
        for (Overlay mMarker : mOverlayList) {
    
    
            if (mMarker instanceof Marker && mMarker.equals(marker)) {
    
    
                if (marker.getExtraInfo() != null) {
    
    
                    onRouteNodeClick(marker.getExtraInfo().getInt("index"));
                }
            }
        }
        return true;
    }

    @Override
    public boolean onPolylineClick(Polyline polyline) {
    
    
        // TODO Auto-generated method stub
        return false;
    }
}

Guess you like

Origin blog.csdn.net/qq_38847655/article/details/125150366