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

来源:互联网 发布:组策略禁止网络连接 编辑:程序博客网 时间:2024/06/11 15:13
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 

原创粉丝点击