public class busRoute extends MapActivity {private Button mBtnTransit = null; // 公交搜索private ListView busList;// 公交列表private MapView mMapView = null; // 地图Viewprivate MKSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用private MapController mapController;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.busroute);BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();if (app.mBMapMan == null) {app.mBMapMan = new BMapManager(getApplication());app.mBMapMan.init(app.mStrKey,new BMapApiDemoApp.MyGeneralListener());}app.mBMapMan.start();// 如果使用地图SDK,请初始化地图Activitysuper.initMapActivity(app.mBMapMan);mMapView = (MapView) findViewById(R.id.bmapView);mMapView.setBuiltInZoomControls(true);// 设置在缩放动画过程中也显示overlay,默认为不绘制mMapView.setDrawOverlayWhenZooming(true);GeoPoint geoPoint = new GeoPoint((int) (32.05000 * 1E6),(int) ( 118.78333* 1E6));// 取得地图控制器对象,用于控制MapViewmapController = mMapView.getController();// 设置地图的中心mapController.setCenter(geoPoint);// 设置地图默认的缩放级别mapController.setZoom(12);// 初始化搜索模块,注册事件监听mSearch = new MKSearch();mSearch.init(app.mBMapMan, new MKSearchListener() {@Overridepublic void onGetPoiDetailSearchResult(int type, int error) {}public void onGetDrivingRouteResult(MKDrivingRouteResult res,int error) {}public void onGetTransitRouteResult(MKTransitRouteResult res,int error) {if (error != 0 || res == null) {Toast.makeText(busRoute.this, "抱歉,未找到结果",Toast.LENGTH_SHORT).show();mMapView.setVisibility(View.VISIBLE);busList.setVisibility(View.GONE);return;}MyAdapter myAdapter = new MyAdapter(busRoute.this, res);busList.setAdapter(myAdapter);}public void onGetWalkingRouteResult(MKWalkingRouteResult res,int error) {}public void onGetAddrResult(MKAddrInfo res, int error) {}public void onGetPoiResult(MKPoiResult res, int arg1, int arg2) {}public void onGetBusDetailResult(MKBusLineResult result, int iError) {}@Overridepublic void onGetSuggestionResult(MKSuggestionResult res, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetRGCShareUrlResult(String arg0, int arg1) {// TODO Auto-generated method stub}});// 设定搜索按钮的响应busList = (ListView) findViewById(R.id.bus_list);busList.setCacheColorHint(0);mBtnTransit = (Button) findViewById(R.id.transit);OnClickListener clickListener = new OnClickListener() {public void onClick(View v) {mMapView.setVisibility(View.GONE);busList.setVisibility(View.VISIBLE);SearchButtonProcess(v);}};mBtnTransit.setOnClickListener(clickListener);}void SearchButtonProcess(View v) {// 处理搜索按钮响应EditText editSt = (EditText) findViewById(R.id.start);EditText editEn = (EditText) findViewById(R.id.end);// 对起点终点的name进行赋值,也可以直接对坐标赋值,赋值坐标则将根据坐标进行搜索MKPlanNode stNode = new MKPlanNode();stNode.name = editSt.getText().toString();MKPlanNode enNode = new MKPlanNode();enNode.name = editEn.getText().toString();// 实际使用中请对起点终点城市进行正确的设定if (mBtnTransit.equals(v)) {mSearch.transitSearch("南京", stNode, enNode);} }@Overrideprotected void onPause() {BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();app.mBMapMan.stop();super.onPause();}@Overrideprotected void onResume() {BMapApiDemoApp app = (BMapApiDemoApp) this.getApplication();app.mBMapMan.start();super.onResume();}@Overrideprotected boolean isRouteDisplayed() {// TODO Auto-generated method stubreturn false;}// 填充公交列表class MyAdapter extends BaseAdapter {private MKTransitRouteResult res;private LayoutInflater mInflater;public MyAdapter(Context context, MKTransitRouteResult res) {this.res = res;this.mInflater = LayoutInflater.from(context);}@Overridepublic int getCount() {return res.getNumPlan();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {HolderView holder = null;if (convertView == null) {holder = new HolderView();convertView = mInflater.inflate(R.layout.list_item, null);holder.txt = (TextView) convertView.findViewById(R.id.list_item_txt);convertView.setTag(holder);} else {holder = (HolderView) convertView.getTag();}String lineInfo = "";// 得到解决方案MKTransitRoutePlan routePlan = res.getPlan(position);// 公交线路MKLine mkLine = routePlan.getLine(0);lineInfo += "乘坐:" + mkLine.getTitle();MKPoiInfo mkOnPoiInfo = mkLine.getGetOnStop();MKPoiInfo mkOffPoiInfo = mkLine.getGetOffStop();lineInfo += "\n\t\t\t\t从" + mkOnPoiInfo.name + "上车,在"+ mkOffPoiInfo.name + "下车";if (routePlan.getNumLines() > 0) {// 循环当前方案公交路线for (int i = 1; i < routePlan.getNumLines(); i++) {// 公交线路mkLine = routePlan.getLine(i);lineInfo += "\n换成:" + mkLine.getTitle();mkOnPoiInfo = mkLine.getGetOnStop();mkOffPoiInfo = mkLine.getGetOffStop();lineInfo += "\n\t\t\t\t从" + mkOnPoiInfo.name + "上车,在"+ mkOffPoiInfo.name + "下车";}}holder.txt.setText(lineInfo);convertView.setOnClickListener(new MyListViewOnClick(position, res));return convertView;}}class HolderView {public TextView txt;}class MyListViewOnClick implements OnClickListener {private int index;private MKTransitRouteResult res;public MyListViewOnClick(int index, MKTransitRouteResult res) {this.index = index;this.res = res;}@Overridepublic void onClick(View arg0) {TransitOverlay routeOverlay = new TransitOverlay(busRoute.this,mMapView);routeOverlay.setData(res.getPlan(index));mMapView.getOverlays().clear();mMapView.getOverlays().add(routeOverlay);mMapView.invalidate();mMapView.getController().animateTo(res.getStart().pt);busList.setVisibility(View.GONE);mMapView.setVisibility(View.VISIBLE);}}}

下面是鄙人的代码,感谢发现错误和提出意见:

基于百度地图API的公交换乘导航

DEMO APK下载:

busMapDeno.apk

更多相关文章

  1. Android google地图开发的前期准备(MD5和密钥的获取)
  2. Android百度地图开发(三)范围搜索
  3. Android 坐标系及动画移动坐标相关集合
  4. Android的地图服务
  5. 百度地图SDK for Android【简介】
  6. Android下 使用百度地图sdk

随机推荐

  1. 各种款式的别致的 Android 体恤衫
  2. Android 360开源全面插件化框架RePlugin
  3. Android下常见的内存泄露
  4. Android(安卓)-- Options Menu,Context M
  5. Android Audio控制和MediaButton远程控制
  6. 细看Google Android的开源姿态
  7. NDK编译.so动态库
  8. Android 使用Vitamio打造自己的万能播放
  9. 关于Android中android:marginBottom不起
  10. Android(安卓)鐨勭郴缁熷睘鎬?SystemProp