`
yidongkaifa
  • 浏览: 4064039 次
文章分类
社区版块
存档分类
最新评论

百度地图SDK for Android【路径规划】

 
阅读更多

1路径服务简介

路径规划实际上是一种特殊的检索服务,因此,在使用路径规划服务之前首先要对检索相关的方法进行初始化,具体介绍请参考检索服务部分中的第一章节。

注意:在使用检索服务时,请明确唯一的起点和终点,否则将不能搜到您所需结果;当起点或终点信息不唯一时,SDK会为您返回一个起点/终点列表,您可通过选择列表中的信息来完成起点/终点的唯一选择,然后再进行路径搜索。

2路径分析

2.1驾车线路搜索

例如:检索从到百度大厦的驾车路线(核心代码如下):

MKPlanNode start = new MKPlanNode();
start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));
MKPlanNode end = new MKPlanNode();
end.pt = new GeoPoint(40057031, 116307852);// 设置驾车路线搜索策略,时间优先、费用最少或距离最短
mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);
mMKSearch.drivingSearch(null, start, null, end);
  

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

@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
	if (result == null) {
		return;
	}
	RouteOverlay routeOverlay = new RouteOverlay(MyMapActivity.this, mMapView);  // 此处仅展示一个方案作为示例
	routeOverlay.setData(result.getPlan(0).getRoute(0));
	mMapView.getOverlays().add(routeOverlay);
	mMapView.refresh();
}

运行结果如下所示:

2.2步行线路搜索

步行线路搜索与驾车路线搜索类似,只需将mMKSearch.drivingSearch(null, start, null, end)修改为mMKSearch.walkingSearch(null, start, null, end),获取结果的方法改为重写onGetWalkingRouteResult即可,此处不再赘述。

2.3公交线路搜索

公交线路搜索的方法为transitSearch(String city, MKPlanNode start, MKPlanNode end)city:为待查公交线路所在城市,startend分别是起点和终点;获取结果的方法改为重写onGetTransitRouteResult方法(具体使用方法与驾车及步行路线搜索类似,此处不再给出核心代码)。

此外,公交方面还可根据公交线路的id对公交的详细信息进行搜索,具体步骤如下:

第一步:利用兴趣点搜索的方法获取待查公交线路的信息;

mMKSearch.poiSearchInCity("北京", "717");

第二步:获取公交线路的id,并以此作为公交详细信息搜索的关键字;

@Override
public void onGetPoiResult(MKPoiResult res, int type, int error) {
	// 错误号可参考MKEvent中的定义
	if (error != 0 || res == null) {
		Toast.makeText(MyMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show();
		return;
	}
	// 找到公交路线poi node 
	MKPoiInfocurPoi = null;
	int totalPoiNum  = res.getNumPois();
	for(intidx = 0; idx<totalPoiNum; idx++ ) {
		curPoi = res.getPoi(idx); 
		if ( 2 == curPoi.ePoiType ) {
			break; 
		}
	}
	mMKSearch.busLineSearch(mCityName, curPoi.uid);
}

第三步:获取公交线路的详细信息,并展示;

public void onGetBusDetailResult(MKBusLineResult result, int iError) {
	if (iError != 0 || result == null) {
		Toast.makeText(MyMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_LONG).show();
		return;
	}
	RouteOverlay routeOverlay = new RouteOverlay(MyMapActivity.this, mMapView);    // 此处仅展示一个方案作为示例
	routeOverlay.setData(result.getBusRoute());
	mMapView.getOverlays().clear();
	mMapView.getOverlays().add(routeOverlay);
	mMapView.refresh();
	mMapView.getController().animateTo(result.getBusRoute().getStart());
}

公交详细信息展示结果如下图所示:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics