源代码:
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.MKPlanNode;
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.MapController;
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;//用于检索的类
//定义一个起始点和终点。
private MKPlanNode statrd;
private MKPlanNode end;
// 在百度地图上添加一些控件,比如是放大或者缩小的控件
private MapController mapController;
@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();
mkSearch.init(bMapManager, new MySearchListener());
//给其实点构建一个坐标
statrd=new MKPlanNode();
//pt为节点坐标;name为节点名称
statrd.pt= new GeoPoint((int) (39.244 * 1E6),
(int) (117.052 * 1E6));
/*mapView.getController().setCenter(new GeoPoint((int) (39.244 * 1E6),
(int) (117.052 * 1E6)));*/
end=new MKPlanNode();
end.pt=new GeoPoint((int) (41.244 * 1E6),
(int) (118.052 * 1E6));
//驾车路线图考虑的优先策略
mkSearch.setDrivingPolicy(MKSearch.EBUS_TIME_FIRST);//采用时间优先策略
/*drivingSearch四个参数说明;
* 参数:startCity - 起点所在城市,起点为坐标时可不填
* start - 搜索的起点,可以为坐标,名称任一种
* endCity - 终点所在城市,终点为坐标时可不填
* end - 搜索的终点,可以为坐标,名称任一种
* 返回:成功返回0,否则返回-1
*/
mkSearch.drivingSearch(null,statrd, null, end);
}
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) {
// TODO Auto-generated method stub
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {
// 驾驶路线的方法
if(arg0==null){
return;
}
/*RouteOverlay说明:
* 使用SDK内置图标及展现方式展示路线信息
通过setdata接口设置路线数据
*/
RouteOverlay routeOverlay=new RouteOverlay(Main.this, mapView);
routeOverlay.setData(arg0.getPlan(0).getRoute(0));//MKRoute此类表示一条驾乘或步行路线
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();
}
@Override
public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {
// 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
protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
return false;
}
}
主要知识:
(1)定义一个起始点和终点:
private MKPlanNode statrd;
private MKPlanNode end;
(2)用于检索的类:
private MKSearch mkSearch;
(3)实例化用于检索的类,并初始化MKSearchListener,并且给其实点构建一个坐标
mkSearch=new MKSearch();
mkSearch.init(bMapManager, new MKSearchListener{。。。});
statrd=new MKPlanNode();
(4)MKPlanNode中pt为确定节点坐标,name为节点名称:
statrd.pt= new GeoPoint((int) (39.244 * 1E6), (int) (117.052 * 1E6));
(5)确定驾车路线图考虑的优先策略,下面是采用时间优先策略:
mkSearch.setDrivingPolicy(MKSearch.EBUS_TIME_FIRST);
(6)drivingSearch驾乘路线搜索.,异步函数,返回结果在MKSearchListener里的onGetDrivingRouteResult方法通知;有四个参数:
startCity - 起点所在城市,起点为坐标时可不填
start - 搜索的起点,可以为坐标,名称任一种
endCity - 终点所在城市,终点为坐标时可不填
end - 搜索的终点,可以为坐标,名称任一种
返回值:成功返回0,否则返回-1
mkSearch.drivingSearch(null,statrd, null, end);
(7)驾驶路线的方法:public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1)
if(arg0==null){
return;
}
RouteOverlay说明:使用SDK内置图标及展现方式展示路线信息 通过setdata接口设置路线数据:
RouteOverlay routeOverlay=new RouteOverlay(Main.this, mapView);
MKRoute此类表示一条驾乘或步行路线:
routeOverlay.setData(arg0.getPlan(0).getRoute(0));//
mapView.getOverlays().add(routeOverlay);
mapView.invalidate();