android 地图 自定义 路线,android百度地图之公交线路详情搜索

本篇文章可以实现百度公交线路搜索,可以选择多条线路,具体实现代码如下:

一、公交线路详情检索

获取公交线路的详情主要分来两步,1.获取公交线路的Uid,2.通过Uid获取公交线路详情。

1.获取公交线路的Uid:

/*

* 获得公交线路图的Uid,并且根据系Uid发起公交线路详情的检索

*

* @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, "未找到结果", 1);

return;

}

// 定义一个公交线路描述类

MKPoiInfo mkPoiInfo = null;

// 获得本次就爱你所的公交线路的总站点

int totalPoiNum = arg0.getNumPois();

for (int i = 0; i < totalPoiNum; i++) {

mkPoiInfo = arg0.getPoi(i);

if (mkPoiInfo.ePoiType == 2) {

break;

}

}

mkSearch.busLineSearch("开封", 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, "未找到结果", 1);

return;

}

RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this,

mapView);

routeOverlay.setData(arg0.getBusRoute());// 获得公交线路

mapView.getOverlays().clear();// 清楚公交站点的标识

mapView.getOverlays().add(routeOverlay);

mapView.invalidate();

// 采用动画形式描述公交站点

mapView.getController().animateTo(arg0.getBusRoute().getStart());

}

查询时,只需提供城市名和线路

mkSearch.poiSearchInCity("开封", "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("开封", "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, "未找到结果", 1);

return;

}

RouteOverlay routeOverlay = new RouteOverlay(MainActivity.this,

mapView);

routeOverlay.setData(arg0.getBusRoute());// 获得公交线路

mapView.getOverlays().clear();// 清楚公交站点的标识

mapView.getOverlays().add(routeOverlay);

mapView.invalidate();

// 采用动画形式描述公交站点

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,并且根据系Uid发起公交线路详情的检索

*

* @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, "未找到结果", 1);

return;

}

// 定义一个公交线路描述类

MKPoiInfo mkPoiInfo = null;

// 获得本次就爱你所的公交线路的总站点

int totalPoiNum = arg0.getNumPois();

for (int i = 0; i < totalPoiNum; i++) {

mkPoiInfo = arg0.getPoi(i);

if (mkPoiInfo.ePoiType == 2) {

break;

}

}

mkSearch.busLineSearch("开封", 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;

}

}

二、多条线路显示

在同一个地图上显示多条导航线路,也只需要分两步完成,

1.定义起始点个终点

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.将所有的线路详情循环显示在地图上

@Override

public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {

// TODO Auto-generated method stub

if (arg0 == null) {

return;

}

int planNum = arg0.getNumPlan();// 获取所有的驾车路线

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);

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值