百度地圖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());
}

        公交詳細信息展示結果如下圖所示:


更多詳細信息請登錄百度地圖API官方網站:http://developer.baidu.com/map/
百度地圖API論壇:http://bbs.lbsyun.baidu.com/

發佈了36 篇原創文章 · 獲贊 55 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章