Android百度地图——路径规划(驾车、步行和公交线路搜索)

驾乘检索策略常量:时间优先


mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);

        mMKSearch.drivingSearch(null, start, null, end);

驾乘检索策略常量:较少费用


mMKSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);

        mMKSearch.drivingSearch(null, start, null, end);

驾乘检索策略常量:最短距离


mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);

        mMKSearch.drivingSearch(null, start, null, end);

获取结果并展示时,需要实现MKSearchListener接口中的onGetDrivingRouteResult方法 :


    @Override

            public void onGetDrivingRouteResult(MKDrivingRouteResult result, int arg1) {

                if (result == null)

                    return;

                

                RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);   

                

                routeOverlay.setData(result.getPlan(0).getRoute(0)); 

                mMapView.getOverlays().add(routeOverlay);

                mMapView.refresh();//刷新地图

                

            }

2、步行线路:


 // 步行线路搜索

        mMKSearch.walkingSearch(null, start, null, end);

获取结果并展示时,需要实现MKSearchListener接口中的onGetWalkingRouteResult方法


 @Override

            public void onGetWalkingRouteResult(MKWalkingRouteResult result, int arg1) {

                // TODO Auto-generated method stub

            	 RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);   

                 routeOverlay.setData(result.getPlan(0).getRoute(0)); 

                 mMapView.getOverlays().add(routeOverlay);

                 mMapView.refresh();//刷新地图

            }

3、公交线路:

公交线路搜索的方法为transitSearch(String city, MKPlanNode start, MKPlanNode end),city:为待查公交线路所在城市,start和end分别是起点和终点;获取结果的方法改为重写onGetTransitRouteResult方法。


      // 公交线路搜索

        mMKSearch.transitSearch("上海市", start, end);

获取结果:


  @Override

            public void onGetTransitRouteResult(MKTransitRouteResult result, int arg1) {

            	 RouteOverlay routeOverlay = new RouteOverlay(BaiduMapRouteOverlayActivity.this, mMapView);   

                 routeOverlay.setData(result.getPlan(0).getRoute(0)); 

                 mMapView.getOverlays().add(routeOverlay);

                 mMapView.refresh();//刷新地图

                 

            }

四、完整代码:


package com.android.baidu.map;



import android.app.Activity;

import android.content.Context;

import android.content.res.Configuration;

import android.os.Bundle;

import android.widget.Toast;



import com.baidu.mapapi.BMapManager;

import com.baidu.mapapi.MKGeneralListener;

import com.baidu.mapapi.map.MKEvent;

import com.baidu.mapapi.map.MapController;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.RouteOverlay;

import com.baidu.mapapi.search.MKAddrInfo;

import com.baidu.mapapi.search.MKBusLineResult;

import com.baidu.mapapi.search.MKDrivingRouteResult;

import com.baidu.mapapi.search.MKPlanNode;

import com.baidu.mapapi.search.MKPoiResult;

import com.baidu.mapapi.search.MKSearch;

import com.baidu.mapapi.search.MKSearchListener;

import com.baidu.mapapi.search.MKSuggestionResult;

import com.baidu.mapapi.search.MKTransitRouteResult;

import com.baidu.mapapi.search.MKWalkingRouteResult;

import com.baidu.platform.comapi.basestruct.GeoPoint;



public class BaiduMapRouteOverlayActivity extends Activity {



	public static final String BAIDU_MAP_KEY = "07418AEC69BAAB7104C6230A6120C580DFFAEEBB";



	private BMapManager mMapManager = null;



	private MapView mMapView = null;



	private MKSearch mMKSearch = null;



	private Context mContext;



	@Override

	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);



		mContext = BaiduMapRouteOverlayActivity.this.getApplicationContext();



		mMapManager = new BMapManager(getApplicationContext());

		mMapManager.init(BAIDU_MAP_KEY, new MKGeneralListener() {



			@Override

			public void onGetNetworkState(int errorCode) {

				if (errorCode == MKEvent.ERROR_NETWORK_CONNECT) {

					Toast.makeText(mContext, "您的网络出错啦!", Toast.LENGTH_LONG)

							.show();

				}

			}



			@Override

			public void onGetPermissionState(int errorCode) {

				if (errorCode == MKEvent.ERROR_PERMISSION_DENIED) {

					// 授权Key错误:

					Toast.makeText(mContext,

							"请在 DemoApplication.java文件输入正确的授权Key!",

							Toast.LENGTH_LONG).show();

				}

			}

		});



		setContentView(R.layout.main);



		mMapView = (MapView) this.findViewById(R.id.bmapsView);

		mMapView.setBuiltInZoomControls(true);



		MapController mMapController = mMapView.getController();

		// 上海市的GPS纬度经度值:31.243319,121.509075

		GeoPoint geoPoint = new GeoPoint((int) (31.243319 * 1E6),

				(int) (121.509075 * 1E6));

		mMapController.setCenter(geoPoint);

		mMapController.setZoom(12);



		// 检索从上海市盛夏路益江路到陆家嘴的驾车路线



		// 上海市盛夏路益江路的GPS纬度经度值:121.637942,31.205889

		MKPlanNode start = new MKPlanNode();

		start.pt = new GeoPoint((int) (31.205889 * 1E6),

				(int) (121.637942 * 1E6));



		// 上海市陆家嘴的GPS纬度经度值: 121.509075,31.243319

		MKPlanNode end = new MKPlanNode();

		end.pt = new GeoPoint((int) (31.243319 * 1E6), (int) (121.509075 * 1E6));



		mMKSearch = new MKSearch();

		mMKSearch.init(mMapManager, new MKSearchListener() {



			@Override

			public void onGetAddrResult(MKAddrInfo arg0, int arg1) {

				// TODO Auto-generated method stub



			}



			@Override

			public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {

				// TODO Auto-generated method stub



			}



			@Override

			public void onGetDrivingRouteResult(MKDrivingRouteResult result,

					int arg1) {

				if (result == null)

					return;



				RouteOverlay routeOverlay = new RouteOverlay(

						BaiduMapRouteOverlayActivity.this, mMapView);

				routeOverlay.setData(result.getPlan(0).getRoute(0));

				mMapView.getOverlays().add(routeOverlay);

				mMapView.refresh();// 刷新地图



			}



			@Override

			public void onGetPoiDetailSearchResult(int arg0, int arg1) {

				// TODO Auto-generated method stub



			}



			@Override

			public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {

				// TODO Auto-generated method stub



			}



			@Override

			public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {

				// TODO Auto-generated method stub



			}



			@Override

			public void onGetTransitRouteResult(MKTransitRouteResult result,

					int arg1) {

				RouteOverlay routeOverlay = new RouteOverlay(

						BaiduMapRouteOverlayActivity.this, mMapView);

				routeOverlay.setData(result.getPlan(0).getRoute(0));

				mMapView.getOverlays().add(routeOverlay);

				mMapView.refresh();// 刷新地图



			}



			@Override

			public void onGetWalkingRouteResult(MKWalkingRouteResult result,

					int arg1) {

				// TODO Auto-generated method stub

				RouteOverlay routeOverlay = new RouteOverlay(

						BaiduMapRouteOverlayActivity.this, mMapView);

				routeOverlay.setData(result.getPlan(0).getRoute(0));

				mMapView.getOverlays().add(routeOverlay);

				mMapView.refresh();// 刷新地图

			}



		});



		// 设置驾车路线搜索策略,时间优先、费用最少或距离最短



		/*

		 * // 驾乘检索策略常量:时间优先

		 * mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);

		 * mMKSearch.drivingSearch(null, start, null, end);

		 * 

		 * // 驾乘检索策略常量:较少费用 mMKSearch.setDrivingPolicy(MKSearch.ECAR_FEE_FIRST);

		 * mMKSearch.drivingSearch(null, start, null, end);

		 * 

		 * // 驾乘检索策略常量:最短距离 mMKSearch.setDrivingPolicy(MKSearch.ECAR_DIS_FIRST);

		 * mMKSearch.drivingSearch(null, start, null, end);

		 */



		// 步行线路搜索

		mMKSearch.walkingSearch(null, start, null, end);



		// 公交线路搜索

		// mMKSearch.transitSearch("上海市", start, end);



	}



	@Override

	public void onConfigurationChanged(Configuration newConfig) {

		super.onConfigurationChanged(newConfig);

	}



	@Override

	protected void onSaveInstanceState(Bundle outState) {

		super.onSaveInstanceState(outState);

		mMapView.onSaveInstanceState(outState);

	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值