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:爲待查公交線路所在城市,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<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());
}
公交詳細信息展示結果如下圖所示:
更多詳細信息請登錄百度地圖API官方網站:http://developer.baidu.com/map/
百度地圖API論壇:http://bbs.lbsyun.baidu.com/