百度地图SDK for Android【路径规划】

来源:互联网 发布:软件开发团队建设 编辑:程序博客网 时间:2024/04/20 02:28

http://blog.csdn.net/baidulbs/article/details/8560431

1路径服务简介

        路径规划实际上是一种特殊的检索服务,因此,在使用路径规划服务之前首先要对检索相关的方法进行初始化,具体介绍请参考检索服务部分中的第一章节。

        注意:在使用检索服务时,请明确唯一的起点和终点,否则将不能搜到您所需结果;当起点或终点信息不唯一时,SDK会为您返回一个起点/终点列表,您可通过选择列表中的信息来完成起点/终点的唯一选择,然后再进行路径搜索。

2路径分析

2.1驾车线路搜索

        例如:检索从天安门到百度大厦的驾车路线(核心代码如下):

[java] view plaincopy
  1. MKPlanNode start = new MKPlanNode();  
  2. start.pt = new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6));  
  3. MKPlanNode end = new MKPlanNode();  
  4. end.pt = new GeoPoint(40057031116307852);// 设置驾车路线搜索策略,时间优先、费用最少或距离最短  
  5. mMKSearch.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);  
  6. mMKSearch.drivingSearch(null, start, null, end);  
  7.     

        获取结果并展示时,需要开发者实现MKSearchListener接口中的onGetDrivingRouteResult方法,例如:

[java] view plaincopy
  1. @Override  
  2. public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {  
  3.     if (result == null) {  
  4.         return;  
  5.     }  
  6.     RouteOverlay routeOverlay = new RouteOverlay(MyMapActivity.this, mMapView);  // 此处仅展示一个方案作为示例  
  7.     routeOverlay.setData(result.getPlan(0).getRoute(0));  
  8.     mMapView.getOverlays().add(routeOverlay);  
  9.     mMapView.refresh();  
  10. }  

        运行结果如下所示:

2.2步行线路搜索

        步行线路搜索与驾车路线搜索类似,只需将mMKSearch.drivingSearch(null, start, null, end)修改为mMKSearch.walkingSearch(null, start, null, end),获取结果的方法改为重写onGetWalkingRouteResult即可,此处不再赘述。

2.3公交线路搜索

        公交线路搜索的方法为transitSearch(String city, MKPlanNode start, MKPlanNode end)city:为待查公交线路所在城市,startend分别是起点和终点;获取结果的方法改为重写onGetTransitRouteResult方法(具体使用方法与驾车及步行路线搜索类似,此处不再给出核心代码)。

        此外,公交方面还可根据公交线路的id对公交的详细信息进行搜索,具体步骤如下:

        第一步:利用兴趣点搜索的方法获取待查公交线路的信息;

[java] view plaincopy
  1. mMKSearch.poiSearchInCity("北京""717");  

        第二步:获取公交线路的id,并以此作为公交详细信息搜索的关键字;

[java] view plaincopy
  1. @Override  
  2. public void onGetPoiResult(MKPoiResult res, int type, int error) {  
  3.     // 错误号可参考MKEvent中的定义  
  4.     if (error != 0 || res == null) {  
  5.         Toast.makeText(MyMapActivity.this"抱歉,未找到结果", Toast.LENGTH_LONG).show();  
  6.         return;  
  7.     }  
  8.     // 找到公交路线poi node   
  9.     MKPoiInfocurPoi = null;  
  10.     int totalPoiNum  = res.getNumPois();  
  11.     for(intidx = 0; idx<totalPoiNum; idx++ ) {  
  12.         curPoi = res.getPoi(idx);   
  13.         if ( 2 == curPoi.ePoiType ) {  
  14.             break;   
  15.         }  
  16.     }  
  17.     mMKSearch.busLineSearch(mCityName, curPoi.uid);  
  18. }  

        第三步:获取公交线路的详细信息,并展示;

[java] view plaincopy
  1. public void onGetBusDetailResult(MKBusLineResult result, int iError) {  
  2.     if (iError != 0 || result == null) {  
  3.         Toast.makeText(MyMapActivity.this"抱歉,未找到结果", Toast.LENGTH_LONG).show();  
  4.         return;  
  5.     }  
  6.     RouteOverlay routeOverlay = new RouteOverlay(MyMapActivity.this, mMapView);    // 此处仅展示一个方案作为示例  
  7.     routeOverlay.setData(result.getBusRoute());  
  8.     mMapView.getOverlays().clear();  
  9.     mMapView.getOverlays().add(routeOverlay);  
  10.     mMapView.refresh();  
  11.     mMapView.getController().animateTo(result.getBusRoute().getStart());  
  12. }  

        公交详细信息展示结果如下图所示:


更多详细信息请登录百度地图API官方网站:http://developer.baidu.com/map/
百度地图API论坛:http://bbs.lbsyun.baidu.com/


原创粉丝点击