(六)高德地图之驾车路线规划

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013184970/article/details/84530905

在项目中用到地图的地方往往会有导航功能,那么这一节将介绍一下使用高德地图来实现驾车路线规划的功能。

首先来两张示例图供参考:

                                        

接下来还是直接上代码更直观

建立DriverRouteActivity.java主程序类

package com.junto.gdmaptest.routeactivity;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.amap.api.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.services.core.AMapException;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.route.BusRouteResult;
import com.amap.api.services.route.DrivePath;
import com.amap.api.services.route.DriveRouteResult;
import com.amap.api.services.route.RideRouteResult;
import com.amap.api.services.route.RouteSearch;
import com.amap.api.services.route.WalkRouteResult;
import com.junto.gdmaptest.R;
import com.junto.gdmaptest.overlay.DrivingRouteOverlay;
import com.junto.gdmaptest.util.AMapUtil;

/**
 * Created by WangJinyong on 2018/10/30.
 * 驾车路线规划
 */

public class DriveRouteActivity extends Activity implements RouteSearch.OnRouteSearchListener {

    private AMap aMap;
    private MapView mapView;
    private LatLonPoint mStartPoint = new LatLonPoint(39.942295,116.335891);//起点
    private LatLonPoint mEndPoint = new LatLonPoint(39.995576,116.481288);//终点
    private RouteSearch mRouteSearch;
    private DriveRouteResult mDriveRouteResult;
    private final int ROUTE_TYPE_DRIVE = 2;
    private ProgressDialog progDialog = null;// 搜索时进度条
    private RelativeLayout mBottomLayout;
    private TextView mRotueTimeDes, mRouteDetailDes;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_driveroute);
        //获取地图控件引用
        mapView = findViewById(R.id.route_map);
        //在activity执行onCreat时执行mapView.onCreate(savedInstanceState),创建地图,必需要写的
        mapView.onCreate(savedInstanceState);
        initView();
        setfromandtoMarker();
        searchRouteResult(ROUTE_TYPE_DRIVE, RouteSearch.DrivingDefault);
    }

    @Override
    protected void onResume() {
        super.onResume();
        mapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mapView.onDestroy();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        mapView.onSaveInstanceState(outState);
    }

    private void initView(){
        //初始化AMap对象
        if (aMap == null) {
            aMap = mapView.getMap();
        }
        mRouteSearch = new RouteSearch(this);
        mRouteSearch.setRouteSearchListener(this);
        mBottomLayout = findViewById(R.id.bottom_layout);
        mRotueTimeDes = findViewById(R.id.firstline);
        mRouteDetailDes = findViewById(R.id.secondline);
    }

    private void setfromandtoMarker() {
        aMap.addMarker(new MarkerOptions()
                .position(AMapUtil.convertToLatLng(mStartPoint))
                .icon(BitmapDescriptorFactory.fromResource(R.mipmap.start)));
        aMap.addMarker(new MarkerOptions()
                .position(AMapUtil.convertToLatLng(mEndPoint))
                .icon(BitmapDescriptorFactory.fromResource(R.mipmap.end)));
    }

    /**
     * 显示进度框
     */
    private void showProgressDialog() {
        if (progDialog == null)
            progDialog = new ProgressDialog(this);
        progDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progDialog.setIndeterminate(false);
        progDialog.setCancelable(true);
        progDialog.setMessage("正在搜索");
        progDialog.show();
    }

    /**
     * 隐藏进度框
     */
    private void dissmissProgressDialog() {
        if (progDialog != null) {
            progDialog.dismiss();
        }
    }

    /**
     * 开始搜索路径规划方案
     */
    public void searchRouteResult(int routeType, int mode) {
        if (mStartPoint == null) {
            Toast.makeText(this,"定位中,稍后再试...",Toast.LENGTH_SHORT).show();
            return;
        }
        if (mEndPoint == null) {
            Toast.makeText(this,"终点未设置",Toast.LENGTH_SHORT).show();
        }
        showProgressDialog();
        final RouteSearch.FromAndTo fromAndTo = new RouteSearch.FromAndTo(
                mStartPoint, mEndPoint);
        if (routeType == ROUTE_TYPE_DRIVE) {// 驾车路径规划
            RouteSearch.DriveRouteQuery query = new RouteSearch.DriveRouteQuery(fromAndTo, mode, null,
                    null, "");// 第一个参数表示路径规划的起点和终点,第二个参数表示驾车模式,第三个参数表示途经点,第四个参数表示避让区域,第五个参数表示避让道路
            mRouteSearch.calculateDriveRouteAsyn(query);// 异步路径规划驾车模式查询
        }
    }

    /**
     * 公交路线搜索结果方法回调
     */
    @Override
    public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {

    }

    /**
     * 驾车路线搜索结果方法回调
     */
    @Override
    public void onDriveRouteSearched(DriveRouteResult result, int errorCode) {
        dissmissProgressDialog();
        aMap.clear();// 清理地图上的所有覆盖物
        if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
            if (result != null && result.getPaths() != null) {
                if (result.getPaths().size() > 0) {
                    mDriveRouteResult = result;
                    final DrivePath drivePath = mDriveRouteResult.getPaths().get(0);
                    DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
                            this, aMap, drivePath,
                            mDriveRouteResult.getStartPos(),
                            mDriveRouteResult.getTargetPos(), null);
                    drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
                    drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
                    drivingRouteOverlay.removeFromMap();
                    drivingRouteOverlay.addToMap();
                    drivingRouteOverlay.zoomToSpan();
                    int dis = (int) drivePath.getDistance();
                    int dur = (int) drivePath.getDuration();
                    String des = AMapUtil.getFriendlyTime(dur)+"("+AMapUtil.getFriendlyLength(dis)+")";
                    mRotueTimeDes.setText(des);
                    mRouteDetailDes.setVisibility(View.VISIBLE);
                    int taxiCost = (int) mDriveRouteResult.getTaxiCost();
                    mRouteDetailDes.setText("打车约"+taxiCost+"元");
                    mBottomLayout.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent(DriveRouteActivity.this,DriveRouteDetailActivity.class);
                            intent.putExtra("drive_path", drivePath);
                            intent.putExtra("drive_result",mDriveRouteResult);
                            startActivity(intent);
                        }
                    });

                } else if (result != null && result.getPaths() == null) {
                    Toast.makeText(this,"对不起,没有搜索到相关数据!",Toast.LENGTH_SHORT).show();
                }

            } else {
                Toast.makeText(this,"对不起,没有搜索到相关数据!",Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(this,errorCode,Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * 步行路线搜索结果方法回调
     */
    @Override
    public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {

    }

    /**
     * 骑行路线搜索结果方法回调
     */
    @Override
    public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {

    }
}

布局文件activity_driveroute.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/bottom_layout"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_alignParentBottom="true"
        android:padding="5dp"
        android:background="@color/gray_lite"
        android:gravity="center_vertical"
        android:visibility="visible" >

        <TextView
            android:id="@+id/firstline"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:layout_marginLeft="12dp"
            android:singleLine="true"
            android:textColor="#333333"
            android:textSize="16sp" />

        <TextView
            android:id="@+id/secondline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/firstline"
            android:layout_marginLeft="12dp"
            android:gravity="right"
            android:singleLine="true"
            android:textColor="#999999"
            android:textSize="13sp"
            android:visibility="visible"/>

        <LinearLayout
            android:id="@+id/detail"
            android:layout_width="wrap_content"
            android:layout_height="35dp"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:orientation="horizontal"
            android:gravity="center_vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:text="详情"
                android:textColor="@color/blue"
                android:textSize="14sp" />

            <Button
                android:layout_width="7dp"
                android:layout_height="13dp"
                android:layout_marginLeft="4dp"
                android:background="@mipmap/arrow_right_blue"
                android:gravity="center_vertical" />
        </LinearLayout>
    </RelativeLayout>

    <com.amap.api.maps.MapView
        android:id="@+id/route_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/bottom_layout" >
    </com.amap.api.maps.MapView>

</RelativeLayout>

跳转到路线详情页的类DriveRouteDetailActivity.java

package com.junto.gdmaptest.routeactivity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;

import com.amap.api.services.route.DrivePath;
import com.amap.api.services.route.DriveRouteResult;
import com.amap.api.services.route.DriveStep;
import com.amap.api.services.route.TMC;
import com.junto.gdmaptest.R;
import com.junto.gdmaptest.util.AMapUtil;

import java.util.List;

/**
 * Created by WangJinyong on 2018/10/31.
 * 公交路线详情
 */

public class DriveRouteDetailActivity extends Activity {

    private DrivePath mDrivePath;
    private DriveRouteResult mDriveRouteResult;
    private TextView mTitle, mTitleDriveRoute, mDesDriveRoute;
    private ListView mDriveSegmentList;
    private DriveSegmentListAdapter mDriveSegmentListAdapter;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_driveroutedetail);
        getIntentData();
        init();
    }

    private void getIntentData() {
        Intent intent = getIntent();
        if (intent == null) {
            return;
        }
        mDrivePath = intent.getParcelableExtra("drive_path");
        mDriveRouteResult = intent.getParcelableExtra("drive_result");
    }

    private void init() {
        mTitle = findViewById(R.id.title_center);
        mTitleDriveRoute = findViewById(R.id.firstline);
        mDesDriveRoute = findViewById(R.id.secondline);
        mTitle.setText("驾车路线详情");
        String dur = AMapUtil.getFriendlyTime((int) mDrivePath.getDuration());
        String dis = AMapUtil.getFriendlyLength((int) mDrivePath.getDistance());
        mTitleDriveRoute.setText(dur + "(" + dis + ")");
        int taxiCost = (int) mDriveRouteResult.getTaxiCost();
        mDesDriveRoute.setText("打车约"+taxiCost+"元");
        mDesDriveRoute.setVisibility(View.VISIBLE);
        configureListView();
    }

    private void configureListView() {
        mDriveSegmentList = findViewById(R.id.bus_segment_list);
        mDriveSegmentListAdapter = new DriveSegmentListAdapter(
                this.getApplicationContext(), mDrivePath.getSteps());
        mDriveSegmentList.setAdapter(mDriveSegmentListAdapter);
    }

    public void onBackClick(View view) {
        this.finish();
    }
}

详情页的布局文件:activity_driveroutedetail.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/act_background"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/route_title"
        android:layout_width="match_parent"
        android:layout_height="44dp">

        <LinearLayout
            android:id="@+id/title_back"
            android:layout_width="70dp"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:descendantFocusability="beforeDescendants"
            android:gravity="center_vertical"
            android:onClick="onBackClick"
            android:orientation="vertical"
            android:paddingLeft="5dp"
            android:paddingStart="5dp">

            <ImageView
                android:layout_width="30dp"
                android:layout_height="match_parent"
                android:clickable="false"
                android:scaleType="center"
                android:src="@mipmap/back" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:orientation="vertical">

            <TextView
                android:id="@+id/title_center"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text=""
                android:textColor="@color/black"
                android:textSize="15sp"
                android:textStyle="bold" />
        </LinearLayout>

    </RelativeLayout>

    <LinearLayout
        android:id="@+id/bus_path"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="70dp"
            android:background="@color/phone_bg"
            android:gravity="center_vertical"
            android:orientation="vertical"
            android:padding="5dp">

            <TextView
                android:id="@+id/firstline"
                android:layout_width="wrap_content"
                android:layout_height="35dp"
                android:layout_marginLeft="12dp"
                android:singleLine="true"
                android:textColor="#333333"
                android:textSize="16sp" />

            <TextView
                android:id="@+id/secondline"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/firstline"
                android:layout_marginLeft="12dp"
                android:gravity="right"
                android:singleLine="true"
                android:textColor="#999999"
                android:textSize="13sp"
                android:visibility="gone" />
        </LinearLayout>

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#e0e0e0" />

        <ListView
            android:id="@+id/bus_segment_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:cacheColorHint="@color/transparent"
            android:divider="@color/transparent"
            android:fadingEdge="none"
            android:fadingEdgeLength="0dp"
            android:footerDividersEnabled="false"
            android:headerDividersEnabled="false"
            android:listSelector="@color/transparent"></ListView>
    </LinearLayout>

</LinearLayout>

详情页用到了列表,列表的Adapter

package com.junto.gdmaptest.routeactivity;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.amap.api.services.route.DriveStep;
import com.junto.gdmaptest.R;
import com.junto.gdmaptest.util.AMapUtil;

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

/**
 * 驾车路线详情页adapter
 * @author ligen
 */
public class DriveSegmentListAdapter extends BaseAdapter {
	private Context mContext;
	private List<DriveStep> mItemList = new ArrayList<DriveStep>();

	public DriveSegmentListAdapter(Context context, List<DriveStep> list) {
		this.mContext = context;
		mItemList.add(new DriveStep());
		for (DriveStep driveStep : list) {
			mItemList.add(driveStep);
		}
		mItemList.add(new DriveStep());
	}

	@Override
	public int getCount() {
		return mItemList.size();
	}

	@Override
	public Object getItem(int position) {
		return mItemList.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = View.inflate(mContext, R.layout.item_bus_segment, null);
			holder.driveDirIcon = convertView.findViewById(R.id.bus_dir_icon);
			holder.driveLineName = convertView.findViewById(R.id.bus_line_name);
			holder.driveDirUp = convertView.findViewById(R.id.bus_dir_icon_up);
			holder.driveDirDown = convertView.findViewById(R.id.bus_dir_icon_down);
			holder.splitLine = convertView.findViewById(R.id.bus_seg_split_line);
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}
		final DriveStep item = mItemList.get(position);
		if (position == 0) {
			holder.driveDirIcon.setImageResource(R.mipmap.dir_start);
			holder.driveLineName.setText("出发");
			holder.driveDirUp.setVisibility(View.GONE);
			holder.driveDirDown.setVisibility(View.VISIBLE);
			holder.splitLine.setVisibility(View.GONE);
			return convertView;
		} else if (position == mItemList.size() - 1) {
			holder.driveDirIcon.setImageResource(R.mipmap.dir_end);
			holder.driveLineName.setText("到达终点");
			holder.driveDirUp.setVisibility(View.VISIBLE);
			holder.driveDirDown.setVisibility(View.GONE);
			holder.splitLine.setVisibility(View.VISIBLE);
			return convertView;
		} else {
			String actionName = item.getAction();
			int resID = AMapUtil.getDriveActionID(actionName);
			holder.driveDirIcon.setImageResource(resID);
			holder.driveLineName.setText(item.getInstruction());
			holder.driveDirUp.setVisibility(View.VISIBLE);
			holder.driveDirDown.setVisibility(View.VISIBLE);
			holder.splitLine.setVisibility(View.VISIBLE);
			return convertView;
		}
	}

	private class ViewHolder {
		TextView driveLineName;
		ImageView driveDirIcon;
		ImageView driveDirUp;
		ImageView driveDirDown;
		ImageView splitLine;
	}
}

列表的行布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white" >

    <ImageView
        android:id="@+id/bus_seg_split_line"
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginLeft="50dp"
        android:layout_marginStart="50dp"
        android:background="#e0e0e0"/>

    <RelativeLayout
        android:id="@+id/bus_route_direction"
        android:layout_width="wrap_content"
        android:layout_height="44dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="11dp"
        android:layout_marginStart="11dp" >

        <ImageView
            android:id="@+id/bus_dir_icon"
            android:layout_width="22dp"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:src="@mipmap/dir_start" />

        <ImageView
            android:id="@+id/bus_dir_icon_up"
            android:layout_width="2dp"
            android:layout_height="match_parent"
            android:layout_above="@id/bus_dir_icon"
            android:layout_centerHorizontal="true"
            android:background="#b6b6b6"
            android:visibility="gone"/>

        <ImageView
            android:id="@+id/bus_dir_icon_down"
            android:layout_width="2dp"
            android:layout_height="match_parent"
            android:layout_below="@id/bus_dir_icon"
            android:layout_centerHorizontal="true"
            android:background="#b6b6b6" 
            android:visibility="gone"/>
    </RelativeLayout>
    
    <RelativeLayout
        android:id="@+id/bus_item"
        android:layout_width="match_parent"
        android:layout_height="44dp" >

        <RelativeLayout
            android:id="@+id/stationinfo"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerVertical="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true">

            <ImageView
                android:id="@+id/bus_expand_image"
                android:layout_width="25dp"
                android:layout_height="match_parent"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginEnd="6dp"
                android:layout_marginRight="6dp"
                android:clickable="true"
                android:scaleType="centerInside"
                android:src="@mipmap/down"
                android:visibility="gone" />

            <TextView
                android:id="@+id/bus_station_num"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:layout_toLeftOf="@id/bus_expand_image"
                android:layout_toStartOf="@id/bus_expand_image"
                android:gravity="center_vertical"
                android:textColor="@color/blue"
                android:textSize="12sp"
                android:visibility="gone" >
            </TextView>
        </RelativeLayout>
        <TextView
            android:id="@+id/bus_line_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="50dp"
            android:layout_marginStart="50dp"
            android:layout_marginRight="70dp"
             android:layout_marginEnd="70dp"
            android:textColor="#333333"
            android:text="出发"
            android:textSize="14sp" />
    </RelativeLayout>
    <LinearLayout
        android:id="@+id/expand_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/bus_item"
        android:orientation="vertical">
    </LinearLayout>
</RelativeLayout>

以上内容即为两点间的驾车路线规划以及路线详情。

扫描二维码关注公众号,回复: 4245719 查看本文章

出行路线规划还有公交路线规划、步行路线规划、骑行路线规划,实现这些功能都是要实现RouteSearch.OnRouteSearchListener接口,在对应的回调方法里实现功能就行了

    /**
     * 公交路线搜索结果方法回调
     */
    @Override
    public void onBusRouteSearched(BusRouteResult busRouteResult, int i) {
        dissmissProgressDialog();
		aMap.clear();// 清理地图上的所有覆盖物
		if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
			if (result != null && result.getPaths() != null) {
				if (result.getPaths().size() > 0) {
					mBusRouteResult = result;
					BusResultListAdapter mBusResultListAdapter = new BusResultListAdapter(mContext, mBusRouteResult);
					mBusResultList.setAdapter(mBusResultListAdapter);		
				} else if (result != null && result.getPaths() == null) {
					ToastUtil.show(mContext, R.string.no_result);
				}
			} else {
				ToastUtil.show(mContext, R.string.no_result);
			}
		} else {
			ToastUtil.showerror(this.getApplicationContext(), errorCode);
		}
    }
    /**
     * 步行路线搜索结果方法回调
     */
    @Override
    public void onWalkRouteSearched(WalkRouteResult walkRouteResult, int i) {
        dissmissProgressDialog();
		aMap.clear();// 清理地图上的所有覆盖物
		if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
			if (result != null && result.getPaths() != null) {
				if (result.getPaths().size() > 0) {
					mWalkRouteResult = result;
					final WalkPath walkPath = mWalkRouteResult.getPaths()
							.get(0);
					WalkRouteOverlay walkRouteOverlay = new WalkRouteOverlay(
							this, aMap, walkPath,
							mWalkRouteResult.getStartPos(),
							mWalkRouteResult.getTargetPos());
					walkRouteOverlay.removeFromMap();
					walkRouteOverlay.addToMap();
					walkRouteOverlay.zoomToSpan();
					mBottomLayout.setVisibility(View.VISIBLE);
					int dis = (int) walkPath.getDistance();
					int dur = (int) walkPath.getDuration();
					String des = AMapUtil.getFriendlyTime(dur)+"("+AMapUtil.getFriendlyLength(dis)+")";
					mRotueTimeDes.setText(des);
					mRouteDetailDes.setVisibility(View.GONE);
					mBottomLayout.setOnClickListener(new OnClickListener() {
						@Override
						public void onClick(View v) {
							Intent intent = new Intent(mContext,
									WalkRouteDetailActivity.class);
							intent.putExtra("walk_path", walkPath);
							intent.putExtra("walk_result",
									mWalkRouteResult);
							startActivity(intent);
						}
					});
				} else if (result != null && result.getPaths() == null) {
					ToastUtil.show(mContext, R.string.no_result);
				}
			} else {
				ToastUtil.show(mContext, R.string.no_result);
			}
		} else {
			ToastUtil.showerror(this.getApplicationContext(), errorCode);
		}
    }

    /**
     * 骑行路线搜索结果方法回调
     */
    @Override
    public void onRideRouteSearched(RideRouteResult rideRouteResult, int i) {
        dissmissProgressDialog();
		aMap.clear();// 清理地图上的所有覆盖物
		if (errorCode == AMapException.CODE_AMAP_SUCCESS) {
			if (result != null && result.getPaths() != null) {
				if (result.getPaths().size() > 0) {
					mRideRouteResult = result;
					final RidePath ridePath = mRideRouteResult.getPaths()
							.get(0);
					RideRouteOverlay rideRouteOverlay = new RideRouteOverlay(
							this, aMap, ridePath,
							mRideRouteResult.getStartPos(),
							mRideRouteResult.getTargetPos());
					rideRouteOverlay.removeFromMap();
					rideRouteOverlay.addToMap();
					rideRouteOverlay.zoomToSpan();
					mBottomLayout.setVisibility(View.VISIBLE);
					int dis = (int) ridePath.getDistance();
					int dur = (int) ridePath.getDuration();
					String des = AMapUtil.getFriendlyTime(dur)+"("+AMapUtil.getFriendlyLength(dis)+")";
					mRotueTimeDes.setText(des);
					mRouteDetailDes.setVisibility(View.GONE);
					mBottomLayout.setOnClickListener(new OnClickListener() {
						@Override
						public void onClick(View v) {
							Intent intent = new Intent(mContext,
									RideRouteDetailActivity.class);
							intent.putExtra("ride_path", ridePath);
							intent.putExtra("ride_result",
									mRideRouteResult);
							startActivity(intent);
						}
					});
				} else if (result != null && result.getPaths() == null) {
					ToastUtil.show(mContext, R.string.no_result);
				}
			} else {
				ToastUtil.show(mContext, R.string.no_result);
			}
		} else {
			ToastUtil.showerror(this.getApplicationContext(), errorCode);
		}
    }

本节实现了路线规划功能,下一节我们再来实现路线导航功能。

猜你喜欢

转载自blog.csdn.net/u013184970/article/details/84530905
今日推荐