百度地圖開發(五)之公交資訊檢索 + 路線規劃
轉載請註明出處:http://blog.csdn.net/crazy1235/article/details/44069267
在上一篇blog中介紹過POI檢索的使用,本篇blog主要介紹公交資訊檢索和線路規劃的內容。
公交資訊檢索
實際上,公交資訊檢索與POI檢索、線上建議檢索非常相似,也是把你需要檢索的資訊傳送給百度地圖伺服器,然後解析得到的結果。
一般步驟:
1. 設定檢索引數
2. 新增檢索結果監聽器
3. 發起檢索
4. 解析返回結果
開啟程式包com.baidu.mapapi.search.busline
在BusLineSearchOption這個類中,我們看到一個引數是城市,另一個是公家路線uid。
一開始,我以為第二個引數是公交線號,程式碼編寫完畢去查詢的時候,總是出錯。後來仔細檢視了api之後,發現不是公交線號,而是uid。uid我們在之前poi檢索的時候,曾經見到過,它實際上即是一個id,是i一個唯一標識。
所以注意:公交資訊檢索設定查詢引數時,第二個引數是uid。
所以進行公交資訊檢索之前,需要先進行POI檢索。使用searchInCity()方法在每一個城市內查詢公交路線號:
city = cityEt.getText().toString();
busline = buslineEt.getText().toString();
poiSearch.searchInCity((new PoiCitySearchOption()).city(city)
.keyword(busline));
得到poi檢索的結果時,在PoiResult類中有通過getAllPoi()獲取poi檢索結果。@Override
public void onGetPoiResult(PoiResult poiResult) {
if (poiResult == null
|| poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) {// 沒有找到檢索結果
Toast.makeText(BusLineSearchActivity.this, "未找到結果",
Toast.LENGTH_LONG).show();
return;
}
if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) {// 檢索結果正常返回
// 得到檢索結果
}
}
此時如果直接取出PoiInfo中的uid的話,你會發現很多個。但是,我們都知道,一個公交線號最多有兩個線路(正向和反向)。所以我們需要篩選出是公交路線的uid。
在PoiInfo類中有個type欄位:0:普通點、1:、公交站 2:、 公交路線 3:、地鐵站 4:地鐵線路
if (poi.type == PoiInfo.POITYPE.BUS_LINE
|| poi.type == PoiInfo.POITYPE.SUBWAY_LINE) {
buslineIdList.add(poi.uid);
}
通過判斷type,將正確的uid新增到一個list中。得到了uid,就可以結合城市引數,進行公交線路檢索了。
private void searchBusline() {
if (buslineIndex >= buslineIdList.size()) {
buslineIndex = 0;
}
if (buslineIndex >= 0 && buslineIndex < buslineIdList.size()
&& buslineIdList.size() > 0) {
boolean flag = busLineSearch
.searchBusLine((new BusLineSearchOption().city(city)
.uid(buslineIdList.get(buslineIndex))));
if (flag) {
Toast.makeText(BusLineSearchActivity.this, "檢索成功~", 1000)
.show();
} else {
Toast.makeText(BusLineSearchActivity.this, "檢索失敗~", 1000)
.show();
}
buslineIndex++;
}
}
/**
* 公交資訊查詢結果監聽器
*/
OnGetBusLineSearchResultListener busLineSearchResultListener = new OnGetBusLineSearchResultListener() {
@Override
public void onGetBusLineResult(BusLineResult busLineResult) {
if (busLineResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(BusLineSearchActivity.this, "抱歉,未找到結果",
Toast.LENGTH_SHORT).show();
} else {
bdMap.clear();
BusLineOverlay overlay = new MyBuslineOverlay(bdMap);// 用於顯示一條公交詳情結果的Overlay
overlay.setData(busLineResult);
overlay.addToMap();// 將overlay新增到地圖上
overlay.zoomToSpan();// 縮放地圖,使所有overlay都在合適的視野範圍內
bdMap.setOnMarkerClickListener(overlay);
// 公交線路名稱
Toast.makeText(BusLineSearchActivity.this,
busLineResult.getBusLineName(), Toast.LENGTH_SHORT)
.show();
}
}
};
BusLineResult用來儲存查詢得到的結果,它又兩個內部類和幾個普通函式:
我們可以通過這兩個內部類,得到自己想要的資訊,這裡就不在程式碼裡寫了。
我們依舊通過使用overlayutil包下的相關類(BusLineOverlay)新增覆蓋物到地圖上。
class MyBuslineOverlay extends BusLineOverlay {
public MyBuslineOverlay(BaiduMap arg0) {
super(arg0);
}
/**
* 站點點選事件
*/
@Override
public boolean onBusStationClick(int arg0) {
MarkerOptions options = (MarkerOptions) getOverlayOptions().get(arg0);
bdMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(options.getPosition()));
return true;
}
}
路線規劃
路線規劃分為三種:駕車、換成(公交)、步行。而路線規劃又與之前的各種檢索相似。 路線規劃先關類都在此包結構下。
我將這個包下面的類做了一下標註,這樣就很清楚了,三種路線規劃方式就相當於一個poi檢索,只有引數設定的時候需要注意下。
路線規劃裡有策略這一概念。那駕車路線規劃說,就包括四種策略:躲避擁堵、最短距離、較少費用、時間優先,這四種策略組成了一個列舉型別:DrivingRoutePlanOption.DrivingPolicy。
設定點的時候,傳入的引數是PlanNode型別的。該類有兩個靜態的方法,一個通過設定城市名和地名,一個通過設定經緯度,都可以返回一個PlanNode物件。
OK,到此為止,路線規劃已經沒有任何難處了,下面只貼出駕車路線規劃的程式碼,其餘的可以下載demo檢視。
DrivingRoutePlanOption drivingOption = new DrivingRoutePlanOption();
drivingOption.policy(DrivingPolicy.values()[drivingSpinner
.getSelectedItemPosition()]);// 設定駕車路線策略
drivingOption.from(PlanNode.withCityNameAndPlaceName("北京", startPlace));// 設定起點
drivingOption.to(PlanNode.withCityNameAndPlaceName("北京", endPlace));// 設定終點
routePlanSearch.drivingSearch(drivingOption);// 發起駕車路線規劃
/**
* 駕車路線結果回撥 查詢的結果可能包括多條駕車路線方案
*/
@Override
public void onGetDrivingRouteResult(
DrivingRouteResult drivingRouteResult) {
bdMap.clear();
if (drivingRouteResult == null
|| drivingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(RoutePlanningActivity.this, "抱歉,未找到結果",
Toast.LENGTH_SHORT).show();
}
if (drivingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起終點或途經點地址有岐義,通過以下介面獲取建議查詢資訊
// drivingRouteResult.getSuggestAddrInfo()
return;
}
if (drivingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay(
bdMap);
drivingRouteOverlay.setData(drivingRouteResult.getRouteLines()
.get(drivintResultIndex));// 設定一條駕車路線方案
bdMap.setOnMarkerClickListener(drivingRouteOverlay);
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();
totalLine = drivingRouteResult.getRouteLines().size();
Toast.makeText(RoutePlanningActivity.this,
"共查詢出" + totalLine + "條符合條件的線路", 1000).show();
if (totalLine > 1) {
nextLineBtn.setEnabled(true);
}
// 通過getTaxiInfo()可以得到很多關於叫車的資訊
Toast.makeText(
RoutePlanningActivity.this,
"該路線叫車總路程"
+ drivingRouteResult.getTaxiInfo()
.getDistance(), 1000).show();
}
}
};
下載
相關文章
- 【高德地圖API】從零開始學高德JS API(五)路線規劃——駕車|公交|步行地圖APIJS
- iOS 使用百度地圖進行定位和路線規劃iOS地圖
- 百度地圖開發-在地圖上實現路線導航 09地圖
- 國內三大地圖(騰訊、高德、百度)路線規劃功能的整合地圖
- 百度地圖api 自定義駕車線路規劃 車輛實時定位地圖API
- 百度地圖開發-在地圖上檢索資料 08地圖
- 百度地圖開發-實現離線地圖功能 05地圖
- 微信小程式 + 騰訊地圖SDK 實現路線規劃微信小程式地圖
- 百度地圖總結第四篇之路線規劃功能地圖
- Paper Time|開放式時空大資料助力智慧公交路線規劃大資料
- 【精華】安卓開發學習路線規劃安卓
- 百度地圖總結第二篇 POI檢索功能地圖
- React 高德地圖 進京證 路線規劃 問題小記React地圖
- 高德地圖導航和路徑規劃地圖
- 百度地圖開發-顯示實時位置資訊 04地圖
- 資訊檢索
- 百度地圖開發步驟地圖
- 百度地圖之基礎地圖地圖
- 百度地圖開發-引入地圖SDK並配置 02地圖
- 如何高效地儲存與檢索大規模的圖譜資料?
- 百度地圖開發-繪製點線提示框 07地圖
- vue3和百度地圖關鍵字檢索 定位 點選定位Vue地圖
- Android百度地圖開發實現點選地圖新增Marker並獲取地址資訊Android地圖
- 百度地圖開發-與地圖的互動功能 06地圖
- 百度地圖開發-顯示地圖預設介面 03地圖
- 園區地圖路線規劃圖怎麼做的?廠區三維圖怎麼畫好看?地圖
- 百度地圖API開發demo地址地圖API
- 百度地圖 JavaScript 開發入門地圖JavaScript
- 運籌優化(五)--線性規劃之內點法優化
- 影象檢索:資訊檢索評價指標mAP指標
- 資訊檢索與排序模型之布林模型排序模型
- 百度離線地圖瓦片圖製作地圖
- 前端開發路線圖前端
- 地圖開發筆記(一):百度地圖介紹、使用和Qt內嵌地圖Demo地圖筆記QT
- 資訊檢索&FAQ硬核技術!飛槳開源百度自研SimNet模型模型
- 通過百度地圖獲取公交站點的程式碼例項地圖
- 高德地圖系列web篇——目的地公交導航地圖Web
- vue中使用高德地圖搭建實時公交應用(地圖 + 附近站點+線路詳情 + 輸入提示+換乘詳情)Vue地圖