android百度地圖之公交線路詳情搜索
本篇文章可以實(shí)現(xiàn)百度公交線路搜索,可以選擇多條線路,具體實(shí)現(xiàn)代碼如下:
一、公交線路詳情檢索
獲取公交線路的詳情主要分來(lái)兩步,1.獲取公交線路的Uid,2.通過(guò)Uid獲取公交線路詳情。
1.獲取公交線路的Uid:
/*
* 獲得公交線路圖的Uid,并且根據(jù)系Uid發(fā)起公交線路詳情的檢索
*
* @see
* com.baidu.mapapi.MKSearchListener#onGetPoiResult(com.baidu.mapapi
* .MKPoiResult, int, int)
*/
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg0 == null || arg2 != 0) {
Toast.makeText(MainActivity.this, "未找到結(jié)果", 1);
return;
}
// 定義一個(gè)公交線路描述類(lèi)
MKPoiInfo mkPoiInfo = null;
// 獲得本次就愛(ài)你所的公交線路的總站點(diǎn)
int totalPoiNum = arg0.getNumPois();
for (int i = 0; i < totalPoiNum; i++) {
mkPoiInfo = arg0.getPoi(i);
if (mkPoiInfo.ePoiType == 2) {
break;
}
}
mkSearch.busLineSearch("開(kāi)封", mkPoiInfo.uid);
}
2.獲取公交線路詳情:
/*
* 得到公交線路圖的詳情
*
* @see
* com.baidu.mapapi.MKSearchListener#onGetBusDetailResult(com.baidu.
* mapapi.MKBusLineResult, int)
*/
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0 == null || arg1 != 0) {
Toast.makeText(MainActivity.this, "未找到結(jié)果", 1);
return;
}
RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this,
mapView);
routeOverlay.setData(arg0.getBusRoute());// 獲得公交線路
mapView.getOverlays().clear();// 清楚公交站點(diǎn)的標(biāo)識(shí)
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();
// 采用動(dòng)畫(huà)形式描述公交站點(diǎn)
mapView.getController().animateTo(arg0.getBusRoute().getStart());
}
查詢(xún)時(shí),只需提供城市名和線路
mkSearch.poiSearchInCity("開(kāi)封", "3");
完整代碼:
package com.arlen.android.baidumap08;
import android.os.Bundle;
import android.view.Menu;
import android.widget.Toast;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKBusLineResult;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKSuggestionResult;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.RouteOverlay;
public class MainActivity extends MapActivity {
private BMapManager bMapManager;
private MapView mapView;
private String key = "43D220AAB0DEC976D2EABC83CFC9EEE52BCCCA7A";
private MKSearch mkSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bMapManager = new BMapManager(MainActivity.this);
bMapManager.init(key, new MKGeneralListener() {
@Override
public void onGetPermissionState(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGetNetworkState(int arg0) {
// TODO Auto-generated method stub
}
});
initMapActivity(bMapManager);
mapView = (MapView) findViewById(R.id.bmapView);
mkSearch = new MKSearch();
mkSearch.init(bMapManager, new MySearchListener());
mkSearch.poiSearchInCity("開(kāi)封", "3");
}
private class MySearchListener implements MKSearchListener {
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub
}
/*
* 得到公交線路圖的詳情
*
* @see
* com.baidu.mapapi.MKSearchListener#onGetBusDetailResult(com.baidu.
* mapapi.MKBusLineResult, int)
*/
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0 == null || arg1 != 0) {
Toast.makeText(MainActivity.this, "未找到結(jié)果", 1);
return;
}
RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this,
mapView);
routeOverlay.setData(arg0.getBusRoute());// 獲得公交線路
mapView.getOverlays().clear();// 清楚公交站點(diǎn)的標(biāo)識(shí)
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();
// 采用動(dòng)畫(huà)形式描述公交站點(diǎn)
mapView.getController().animateTo(arg0.getBusRoute().getStart());
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {
// TODO Auto-generated method stub
}
/*
* 獲得公交線路圖的Uid,并且根據(jù)系Uid發(fā)起公交線路詳情的檢索
*
* @see
* com.baidu.mapapi.MKSearchListener#onGetPoiResult(com.baidu.mapapi
* .MKPoiResult, int, int)
*/
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
if (arg0 == null || arg2 != 0) {
Toast.makeText(MainActivity.this, "未找到結(jié)果", 1);
return;
}
// 定義一個(gè)公交線路描述類(lèi)
MKPoiInfo mkPoiInfo = null;
// 獲得本次就愛(ài)你所的公交線路的總站點(diǎn)
int totalPoiNum = arg0.getNumPois();
for (int i = 0; i < totalPoiNum; i++) {
mkPoiInfo = arg0.getPoi(i);
if (mkPoiInfo.ePoiType == 2) {
break;
}
}
mkSearch.busLineSearch("開(kāi)封", mkPoiInfo.uid);
}
@Override
public void onGetRGCShareUrlResult(String arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (bMapManager != null) {
bMapManager.destroy();
bMapManager = null;
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
if (bMapManager != null) {
bMapManager.start();
}
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
if (bMapManager != null) {
bMapManager.stop();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
二、多條線路顯示
在同一個(gè)地圖上顯示多條導(dǎo)航線路,也只需要分兩步完成,
1.定義起始點(diǎn)個(gè)終點(diǎn)
start = new MKPlanNode();
start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));
end = new MKPlanNode();
end.pt = new GeoPoint(40057031, 116307852);
mkSearch.transitSearch("北京", start, end);
2.將所有的線路詳情循環(huán)顯示在地圖上
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
if (arg0 == null) {
return;
}
int planNum = arg0.getNumPlan();// 獲取所有的駕車(chē)路線
for (int i = 0; i < planNum; i++) {
TransitOverlay overlay = new TransitOverlay(MainActivity.this,
mapView);
overlay.setData(arg0.getPlan(i));
mapView.getOverlays().add(overlay);
}
mapView.invalidate();
mapView.getController().animateTo(arg0.getStart().pt);
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android開(kāi)發(fā)常見(jiàn)問(wèn)題總結(jié)
這篇文章主要介紹了Android開(kāi)發(fā)常見(jiàn)問(wèn)題,總結(jié)分析了諸如界面設(shè)計(jì)、多媒體調(diào)用、圖片、動(dòng)畫(huà)操作等開(kāi)發(fā)中常見(jiàn)的問(wèn)題解決方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-08-08
正確在Flutter中添加webview實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了正確在Flutter中添加webview實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
Android實(shí)現(xiàn)動(dòng)態(tài)定值范圍效果的控件
這篇文中給大家分享一個(gè)Android的控件,這個(gè)控件實(shí)現(xiàn)是一個(gè)可以動(dòng)態(tài)選擇定值范圍的效果,實(shí)現(xiàn)后的效果很不錯(cuò),對(duì)大家日常開(kāi)發(fā)或許有所幫助,感興趣的朋友們可以一起來(lái)看看。2016-09-09
Android開(kāi)發(fā)控制ScrollView滑動(dòng)速度的方法
這篇文章主要介紹了Android開(kāi)發(fā)控制ScrollView滑動(dòng)速度的方法,結(jié)合實(shí)例形式分析了Android編程中ScrollView滑動(dòng)事件相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
Flutter?Widget?之StatefulBuilder構(gòu)建方法詳解
這篇文章主要為大家介紹了Flutter?Widget?之StatefulBuilder構(gòu)建方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android利用listview控件操作SQLite數(shù)據(jù)庫(kù)實(shí)例
我們利用SQLiteOpenHelper類(lèi)建立一個(gè)數(shù)據(jù)庫(kù),并寫(xiě)好增、刪、查等方法,通過(guò)SimpleCursorAdapter連接listview實(shí)現(xiàn)數(shù)據(jù)庫(kù)的增加、查詢(xún)以及長(zhǎng)按刪除的功能。2017-04-04
Android?廣播接收器BroadcastReceiver詳解
Android開(kāi)發(fā)的四大組件分別是:活動(dòng)(activity),用于表現(xiàn)功能;服務(wù)(service),后臺(tái)運(yùn)行服務(wù),不提供界面呈現(xiàn);廣播接受者(Broadcast Receive),勇于接收廣播;內(nèi)容提供者(Content Provider),支持多個(gè)應(yīng)用中存儲(chǔ)和讀取數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫(kù),本篇著重介紹廣播組件2022-07-07
Android利用ViewDragHelper輕松實(shí)現(xiàn)拼圖游戲的示例
本篇文章主要介紹了Android利用ViewDragHelper輕松實(shí)現(xiàn)拼圖游戲的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-11-11
詳解如何實(shí)現(xiàn)一個(gè)Kotlin函數(shù)類(lèi)型
這篇文章主要為大家詳細(xì)介紹了如何實(shí)現(xiàn)一個(gè)Kotlin函數(shù)類(lèi)型,文中的實(shí)現(xiàn)方法講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-10-10

