百度地图开发第三天(起始点和终点的路线查询)

源代码:

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

                       

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值