路径规划实际上是一种特殊的检索服务,因此,在使用路径规划服务之前首先要对检索相关的方法进行初始化,具体介绍请参考检索服务部分中的第一章节。
注意:在使用检索服务时,请明确唯一的起点和终点,否则将不能搜到您所需结果;当起点或终点信息不唯一时,SDK会为您返回一个起点/终点列表,您可通过选择列表中的信息来完成起点/终点的唯一选择,然后再进行路径搜索。
例如:检索从到百度大厦的驾车路线(核心代码如下):
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();
}
运行结果如下所示:
步行线路搜索与驾车路线搜索类似,只需将mMKSearch.drivingSearch(null, start, null, end)修改为mMKSearch.walkingSearch(null, start, null, end),获取结果的方法改为重写onGetWalkingRouteResult即可,此处不再赘述。
公交线路搜索的方法为transitSearch(String city, MKPlanNode start, MKPlanNode end),city:为待查公交线路所在城市,start和end分别是起点和终点;获取结果的方法改为重写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
第三步:获取公交线路的详细信息,并展示;
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());
}
公交详细信息展示结果如下图所示: