1、驾车线路:
驾乘检索策略常量:时间优先
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);