代码:
package com.android.mybaidu;
import android.os.Bundle;
import android.widget.Toast;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
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 Main extends MapActivity {
/** Called when the activity is first created. */
// 添加百度地图的相关控件
private MapView mapView;
private BMapManager bMapManager;// 加载地图的引擎
// 百度地图的key
private String keyString = "A270F85CD72A01E8519A9677A75FB4016ED9A5A3" ;
private MKSearch mkSearch;//用于检索的类
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mapView = (MapView) this.findViewById(R.id.bmapView);
bMapManager = new BMapManager(Main.this);
// 必须要加载key
bMapManager.init(keyString, new MKGeneralListener() {
@Override
public void onGetPermissionState(int arg0) {
// TODO Auto-generated method stub
if (arg0 == 300) {
Toast.makeText(Main.this, "输入的Key有错!请核实!!", 1).show();
}
}
@Override
public void onGetNetworkState(int arg0) {
// TODO Auto-generated method stub
}
});
/*initMapActivity(arg0)是MapActivity的一个方法,
* MapActivity管理显示MapView中Activity 处理逻辑的基础类,
* initMapActivity初始化这个类
*/
this.initMapActivity(bMapManager);
mkSearch=new MKSearch();
mapView.getController().setCenter(new GeoPoint((int) (39.244 * 1E6),
(int) (117.052 * 1E6)));
mkSearch.init(bMapManager, new MySearchListener());
mkSearch.poiSearchInCity("天津","649");//查询的城市的名称和公交线路
}
public class MySearchListener implements MKSearchListener{
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
// 得到公交线路图的详情
if(arg0==null ||arg1 !=0){
Toast.makeText(Main.this, "对不起未找到结果", 1).show();
return;
}
RouteOverlay routeOverlay=new RouteOverlay(Main.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) {
}
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// 获得公交线路图的uid,也就是这条公交线路图的唯一的标示,并且根据此uid来发起公交线路详情的检索。
if(arg0==null ||arg2 !=0){
Toast.makeText(Main.this, "对不起未找到结果", 1).show();
return;
}
//定义一个公交线路图的描述累
MKPoiInfo mkPoiInfo = null;//MKPoiInfo可以当前点的地址信息等
int tota=arg0.getNumPois();//获得本地公交线路的棕垫
for(int i=0;i<tota;i++){
mkPoiInfo=arg0.getPoi(i);
/*
*
ePoiType:
poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路,
*/
if(mkPoiInfo.ePoiType==2){
break;
}
}
mkSearch.busLineSearch("天津", mkPoiInfo.uid);//得到uid
}
@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) {
}
}
@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
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
主要知识点:
(1)查询的城市的名称和公交线路:
mkSearch.poiSearchInCity("天津","649");
(2)方法:public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) 得到公交线路图的详情
没有找到结果:
if(arg0==null ||arg1 !=0){
Toast.makeText(Main.this, "对不起未找到结果", 1).show();
return;
}
RouteOverlay routeOverlay=new RouteOverlay(Main.this, mapView);
获得公交路线:
routeOverlay.setData(arg0.getBusRoute());
清除公交标志:
mapView.getOverlays().clear();
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();
采用动画形式描述公交站点:
mapView.getController().animateTo(arg0.getBusRoute().getStart());
(3)方法public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) 获得公交线路图的uid,也就是这条公交线路图的唯一的标示,并且根据此uid来发起公交线路详情的检索。
没有找到结果:
if(arg0==null ||arg2 !=0){
Toast.makeText(Main.this, "对不起未找到结果", 1).show();
return;
}
MKPoiInfo表示当前点的地址信息等:
MKPoiInfo mkPoiInfo = null;
获得本地公交线路的综述:
int tota=arg0.getNumPois();
找到公家线路:
for(int i=0;i<tota;i++){
mkPoiInfo=arg0.getPoi(i);
ePoiType: poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路,
if(mkPoiInfo.ePoiType==2){
break;
}
mkPoilnfo.uid得到天津的uid:
mkSearch.busLineSearch("天津", mkPoiInfo.uid);